c语言题目及答案 .

有以下程序: void f(int a[],int i,int j) { int t; if(i<j) { t=a[i];a[i]=a[j];a[j]=t; f(a,i+1,j-1); } } main() { int i,aa[5]={1,2,3,4,5}; f(aa,0,4); for(i=0;i<5;i++) printf("%d,",aa[i]); printf("\n"); } 执行后输出结果是( )。

A.5,4,3,2,1,

B.5,2,3,4,1,

C.1,2,3,4,5,

D.1,5,4,3,2,


正确答案:A
解析:在C语言中所谓函数的递归是指在调用一个函数的过程中,又出现了直接或间接调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。由程序可以看出函数f(a,i,j)为一递归函数,其功能是当ij时,将数组中的元素a[i]和a[j]交换,然后再调用函数f(a,i+1,j-1),将数组中a[i+1]和a[j--]交换,这样一直递归到数组下标i=j,可见该递归函数的作用是使数组中首尾元素依次互换。主函数中定义了一个长度为5的数组aa并初始化,然后调用f(a,0,4),将数组a中的元素依次互换,故最后for循环输出的数组aa中各元素的值为5、4、3、2、1,所以,4个选项中选项A符合题意。


已知i、j、k为血型变量,若要从键盘输入2、3、4,使i、j、k的值分别为2、3、4,下列正确的输入语句是()。

已知i、j、k为血型变量,若要从键盘输入2、3、4<CR>,使i、j、k的值分别为2、3、4,下列正确的输入语句是( )。

A.scanf( “%3d,%3d,%3d”,&i,&j,&k);

B.scanf(“%d,%d,%d”,&i,&J,&k);

C.scanf(“%d%d%d”,&i,&j,&k);

D.scanf(“i=%d,%d,k=%d”,&i,&j,&k);


正确答案:B
解析:函数scanf()的调用形式是:scanf(格式字符串,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。
  若在格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。


设有以下程序片段, int i=010,j=10,k=0xl0;printf("%d,%d,%d",k,j,i);请问执行后的输出结果是( )

A.16,10,8

B.81016

C.10,10,10

D.8,10,16


正确答案:A 


已知i、j、k为整型变量,若从键盘输入1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的

已知i、j、k为整型变量,若从键盘输入1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是( )。

A.scanf("%2d%2d%2d",&i,&j,&k);

B.scanf("%d %d %d",&i,&j,&k);

C.scanf("%d,%d,%d",&i,&j,&k);

D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);


正确答案:C
解析:使用scanf()函数时,要求除格式控制符以外的字符都要原样输入,“,”为非格式符,要原样输入。选项A,输入格式描述为“%2d%2d%2d”,意思是输入一个长度为6的数字串,scanf()将每两个为一组读入3个变量中,不满足键盘输入1,2,3的条件,故A错误;选项B中,输入格式描述符为“%d%d%d”,输入要用空格隔开,故错误;选项D中,输入格式描述符为“i=%d,j=%d,k=%d”,应该从键盘输入i=1,j=2,k=3,才能使得i,j,k的值为1,2,3,故选项D错误。4个选项中C正确。


有以下程序:include void f(int a[],int i, int j){int t; if(i

有以下程序: #include <stdio.h> void f(int a[],int i, int j) { int t; if(i<j) { t=a[i];a[i]=a[j];a[j]=t; f(a,i+1,j-1); } } main() { int i,aa[5]={1,2,3,4,5}; f(aa,0,4); for(i=0;i<5;i++) printf("%d,",aa[i]);printf("\n"); } 执行后的输出结果是( )。

A.5,4,3,2,1,

B.5,2,3,4,1,

C.1,2,3,4,5,

D.1,5,4,3,2,


正确答案:A
解析:f函数的功能是通过递归调用实现数组中左右部分相应位置数据的交换,即数组中第一个元素与最后一个元素调换位置,第二个元素与倒数第二个元素调换位置,以此类推。


考试题型考试题型 一、单项选择题(30 分) 二、填空题 (20 分) 三、阅读程序写结果(20 分) 四、编程序题(30) 复习题一复习题一 一、一、 选择题选择题 1下列说法中正确的是 。 AC 语言程序由主函数和 0 个或多个函数组成 BC 语言程序由主程序和子程序组成 CC 语言程序由子程序组成 DC 语言程序由过程组成 2执行语句“x=(a=3,b=a-)”后,x,a,b 的值依次为 。 A3,3,2 B3,2,2 C3,2,3 D2,3,2 3设有 int i=010,j=10;则 printf(%d,%dn,+i,j-); 的输出的是 。 A11,10 B9,10 C010,9 D10,9 4设 a、b 为字符型变量,执行 scanf(a=%c,b=%c, 后使 a 为A, b 为B,从键盘上的正确输 入是 。 AA B BA,B CA=A,B=B Da=A,b=B 5已知 int x=12, y=3;执行下述程序后,变量 x 的值是_。 do x/=y-;while(xy); A1 B2 C3 D程序运行有错误 6C 语言中 while 和 do-while 循环的主要区别是 。 Ado-while 的循环体至少无条件执行一次 Bwhile 的循环控制条件比 do-while 的循环控制条件严格 Cdo-while 允许从外部转到循环体内 Ddo-while 的循环体不能是复合语句 7设 x 和 y 均为 int 型变量,则执行下面的循环后,y 的值为 。 for (y=1,x=1;y=10 ) break; if (x%2=1) x+=5;continue; x - =3; A2 B4 C6 D8 8以下正确的说法是_。 A用户若需调用标准函数,调用前必须重新定义 B用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C系统根本不允许用户重新定义标准函数 D用户若需要调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系 统自动去调 9若调用一个函数,且此函数中没有 return 语句,则关于该函数正确的说法是_ _。 A 没有返回值 B 能返回若干个系统默认值 C 能返回一个用户所希望的函数值 D 返回一个不确定的值 10已知函数定义如下: float fun1(int x,int y) float z; z=(float)x/y; return(z); 主调函数中有 int a=1,b=0;可以正确调用此函数的语句是_。 Aprintf(%f,fun1(a,b); Bprintf(%f,fun1( A1,12 B0,11C1,11 D0,12 13以下合法的数组定义是 。 Aint a3 =0,1,2,3,4,5; Bint a 3 =0,1,2,3,4; Cint a23=0,1,2,3,4,5,6; Dint a23=0,1,2,3,4,5,; 14函数调用:strcat(strcpy (str1,str2),str3); 的功能是 。 A将字符串 str1 复制到字符串 str2 中后再连接到字符串 str3 之后。 B将字符串 str1 连接到字符串 str2 之后再复制到字符串 str3 之后。 C将字符串 str2 复制到字符串 str1 中后再将字符串 str3 连接到字符串 str1 之后。 D将字符串 str2 连接到字符串 str1 之后再将字符串 str1 复制到字符串 str3 中。 15设有二维数组定义如下,则不正确的数组元素引用是 。 int a34 =1,2,3,4,5,6,7,8,9,10,11,12; Aa23 Baa001 Ca7 Da2c-a 16若用数组名作为函数调用时的实参,则实际上传递给形参的是 。 A数组首地址 B数组的第一个元素值 C数组中全部元素的值 D数组元素的个数 17以下对指针变量进行操作的语句,正确的选项是 。 Aint *p,*q; q=p; Bint a,*p,*q; q= p=*q; Cint a=b=0,*p; p= b=*p; Dint a=20,*p,*q= p=q; 18若有以下定义和语句: int s45,(*ps)5;ps=s; 则对 s 数组元素的正确引用形式是 。 Aps+1 B*(ps+3) Cps02 D*(ps+1)+3 19当说明一个共用体变量时系统分配给它的存储容量是 。 A共用体中最后一个成员所需的存储容量 B共用体中第一个成员所需的存储容量 C成员中占存储量最大者所需的存储容量 D各成员所需存储容量的总和 20有定义如下: struct student int age; char num8; stu3=20,200401,21,200402,10,200403; struct student *p=stu; 以下选项中引用结构体变量成员的表达式错误的是 。 A(p+)-num Bp-num C(*p).num Dstu3.age 二、填空题二、填空题 1设 a=3,b=2,c=1,则 ab 的值为 ,abc 的值为 。 2若 w, x, y, z, m 均为 int 型变量,则执行下面程序段后的 m 值是 。 w= 1; x = 2; y= 3; z=4; m=(wy)?w:x; m= (my)? m:y; m=(mz)?m:Z; 3下面程序的输出结果是_。 #include main() int a=1,b=0; do switch(a) case 1: b=1;break; case 2: b=2;break; default : b=0; b=a+b; while(!b); printf(a=%d,b=%d,a,b); 4下面程序的输出结果是_。 #include main() int x,i; for(i=1;i=100;i+) x=i; if(+x%2=0) if(+x%3=0) if(+x%7=0) printf(%d ,x); 5下面程序的输出结果是_。 #include int func(int a,int b) int c; c=a+b; return(c); void main() int x=6,y=7,z=8,r; r=func(x-,y+,x+y),z-); printf(%dn,r); 6下面程序的输出结果是_。 #include void main() int x=1; void f1(),f2(); f1( ); f2(x); printf(%dn,x); void f1(void) int x=3; printf(%d ,x); void f2(x) int x; printf(%d ,+x); 7程序中有定义: #define S(r) r/r int a=4,b=3,area; 则表达式 area=S(a+b)的值为_。 三、程序完善题三、程序完善题 1以下程序的功能是计算分段函数 y 的值。请完善程序。 #include void main() int x,c,m; float y; scanf(“%d”, if( (1) ) c=-1; 4020205 . 0 201010 100 00 xx x xx x y else c= (2) ; switch( c) case 1: y=0; break; case 0: y=x; break; case 1: y=10; break; case 2: case 3: y=-0.5*x+20; break; default : y=-2; if( (3) ) printf(“y=%f”, y); else printf(“errorn”); 2有以下程序段: s=1.0; for(k=1;k=n;k+) s=s+1.0/(k*(k+1); printf(%fn,s); 填空完成下述程序,使之与上述程序的功能完全相同。 s=0.0; (1) ; k=0; do s=s+d; (2) ; d=1.0/(k*(k+1); while( (3) ); printf(%fn,s); 3根据以下嵌套的 if 语句说给条件,填写 switch 语句,使它完成相同的功能。 (假设 score 的取值在 1100 之间。 ) if 语句: if(score60) k=1; else if(score70) k=2; else if(score80) k=3; else if(score90) k=4; else if(score=100) k=5; switch 语句: switch( (1) ) (2) : k=1; break; case 6:k=2; break; case 7:k=3; break; case 8:k=4; break; (3) :k=5; 4输入 2 个整数,输出它们的最小公倍数和最大公约数。请完善程序。 #include void main( ) int m,n,gbs,gys; scanf((1)); for(gbs=m; (2) ; gbs=gbs+m); gys= (3) ; printf(“gbs=%dtgys=%dn”, gbs,gys); 5下面函数的功能是判断一个数是否为素数。请完善程序。 void f(int m) int m,i,k; k=_(1)_; for(i=2;i=_(2)_;i+) if(_(3)_)break; if(_(4)_)printf(“是素数”); else printf(“非素数”); 6一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。请完善 程序。 void fun(long x) long ge,shi,qian,wan; wan= (1) ; qian=_(2)_; shi=_(3)_; ge=x%10; if (_(4)_) printf(this number is a huiwenn); else printf(this number is not a huiwenn); 四、程序设计题四、程序设计题 1编写程序计算分段函数 y 值。 2编写程序,输入一个字符串,求该字符串的有效长度。要求不能使用系统函数。 3编写程序实现,将键盘输入的一个十进制整数转换为 2 进制数并输出。 参考答案:参考答案: 一、选择题一、选择题 12345678910 0 01 0 xe x xe y x x ACBDDACBAD 11121314151617181920 DBBCCACCCD 二、填空题二、填空题 1、 1 0 2、 1 3、 a=1,b=2 4、 25 67 5、 21 6、 3 2 1 7、 7 三、程序完

已知i、j、k为iht型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确

已知i、j、k为iht型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是 ______。

A.scanf("%d %d %d",&i,&j,&k);

B.scanf("%d,%d,&d",&i,&i,&k);

C.scanf("%2d %2d %2d",&i,&j,&k);

D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);


正确答案:A
解析:scanf函数中格式控制后面应为变量地址列表,因此选项C和选项D都错误,选项B中“&d”是指针变量d的地址,与题目不符。由题目可知指针变量d中存放的是变量c的地址,所以正确答案为选项A。


已知i、j、k为int型变量,若要从键盘输入2、3、4,使I、j、k的值分别为2、3、4,下列正确的输入语句是()

已知i、j、k为int型变量,若要从键盘输入2、3、4<CR>,使I、j、k的值分别为2、3、4,下列正确的输入语句是( )。

A.scanf("%3d,%3d,%3d",&i,&j,&k);

B.scanf("%d,%d,%d",&i,&j,&k);

C.scanf("%d%d%d",&i,&j,&k);

D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);


正确答案:B
解析: scanf函数的调用形式是:scanf(格式字符串,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。
若在格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。


有以下程序: void sort(int a[],int n) { int i,j,t; for(i=0;i<n;i++) for(j=i+1;<n;j++) if(a[i]<a[j]){ t=a[i]; a[i]=a[j]; a[j]=t; } } main() {int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa+2,5); for(i=0;i<10;i++)printf("%d,",aa [i]); printf("\n"); } 程序运行后的输出结果是 ______ 。

A.1,2,3,4,5,6,7,8,9,10,

B.1,2,7,6,3,4,5,8,9,10,

C.1,2,7,6,5,4,3,8,9,10,

D.1,2,9,8,7,6,5,4,3,10,


正确答案:C
解析:本题sort函数的作用是将指定的数由大到小排序。主调函数“sort(aa+2,5);”中的实参aa+2是指aa[2]的地址,将其传给了形参a[],使得形参中a[0]的值为主函数中aa[2]的值,即3;实参中的5传绐形参中的n,在sort函数中起着限制循环次数的作用,即使得参加排序的只有5个数,从aa[2]到aa[6],所以本题输出的结果是1,2,7,6,5,4,3,8,9,10,。


已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确

已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是

A.scanf(“%2d%2d%2d”,&i,&j,&k);

B.scanf(“%d%d%d”,&i,&j,&k);

C.scant(“%d,%d,%d”,&i,&j,&k);

D.scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);


正确答案:C
解析:输入函数scanf使用该语句时,要求除格式控制符以外的字符都要原样输入,“,”为非格式符,要原样输入。选项A,输入格式描述为“%2d%2d%2d”,输入要用空格隔开,不满足键盘输入1,2,3的条件;选项B中,输入格式描述符为“%d %。 d %d”,输入也要用空格隔开;选项D中,输入格式描述符为“i=%d,j=%d,k=%d”,应该从键盘输入i=1,j=2,k=3,才能使得i,j,k的值为1,2,3。


有以下程序 vold soru(int a[], int n) { int i,i,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) { t=a[i]; a[i]=a[i]; a[j]=t; } } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10),i; sore(aa+2, 5); for(i=0;i<10;i++) printf("%d,",aa[i]); printf("\n"); } 程序运行后的输出结果是

A.1,2,3,4,5,6,7,8,9,10,

B.1,2,7,6,3,4,5,8,9,10,

C.1,2,7,6,5,4,3,8,9,10,

D.1,2,9,8,7,6,5,4,3,10,


正确答案:C
解析:先看sort()函数,它没有返回值,有两个参数,一个int型数组和一个int型变量。在函数中是一个;重循环,外循环变量i从0递增到n-2,内循环变量j从i+l递增到n-1。内循环体是一条if语句“如果a[i]

更多 “c语言题目及答案 .” 相关考题
考题 设有inti=010,j=10;则printf(“%d,%d/n”,++i,j--);的输出的是()。A、11,10B、9,10C、010,9D、10,9正确答案:B

考题 设有int i=010,j=10;则执行“printf("%d,%d\n",++i,j--);”的输出是( )A.ll, 10B.9,10C.010,9D.10, 9正确答案:B变量i和j的初值分别为八进制数010和十进制数10,函数调用Printf(“%d,%d\n”,++i,j--)中,++i的值是变量i增1后的值,原来值是八进制数010,等于十进制数8,输出9。j--的值是变量j减1之前的值,输出10。格式字符申中的逗号是普通字符照原样输出。所以问题给出的格式输出函数调用将输出9,10。正确的解答是B。

考题 有以下程序: void sort(int a[], int n) {int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa+2,5); for(i=0;i<10;i++)printf("%d,",aa[i]); printf("\n"); } 程序运行后的输出结果是( )。A.1,2,3,4,5,6,7,8,9,10,B.1,2,7,6,3,4,5,8,9,10,C.1,2,7,6,5,4,3,8,9,10,D.1,2,9,8,7,6,5,4,3,10,正确答案:C解析:先看sort()函数,它没有返回值,有两个参数,一个int型数组和一个int型变量。在函数中是一个二重循环,外循环变量i从0递增到n-2,内循环变量j从i+1递增到n-1。内循环体是一条if语句“如果a[i]a[j]就把两个值交换”。这是一个典型的从大到小选择排序算法,排序的范围是a[0]~a[n-1],一共n个数排序,主函数中定义了一个数组aa[10],然后调用sort(aa+2,5);的意思是将aa[2]~aa[6]范围的5个数据从大到小排序。所以排序以后数组aa[10]的内容是1,2,7,6,5,4,3,8,9,10。故应该选择C。

考题 单选题设i、j为int型变量名,a为int型数组名,以下选项中,正确的赋值语句是()。A i = i + 2B a [0]= 7;C i++- --j;D a(0)= 66;正确答案:D解析:暂无解析

考题 下面程序的输出结果是includemain(){int i=010,j=10;Printf(“%d,%d”,++i,j--);}A.11,1下面程序的输出结果是 #include<stdio.h> main() {int i=010,j=10; Printf(“%d,%d”,++i,j--); }A.11,10B.9,10C.010,9D.10,9正确答案:B解析:程序中i的值用八进制表示(十进制为8),++i是在变量使用前自身先加1,而j--是在变量使用后自身减1。

考题 执行语句“x=(a=3,b=a--)”后,x,a,b的值依次为()。A、3,3,2B、3,2,2C、3,2,3D、2,3,2正确答案:C

考题 已知i、j、k为int型变量,若要从键盘输入2、3、4,使I、j、k的值分别为2、3、4,A.scanf("%3d,%3d,%3d",已知i、j、k为int型变量,若要从键盘输入2、3、4<CR>,使I、j、k的值分别为2、3、4,A.scanf("%3d,%3d,%3d",&i,&j,&k);B.scanf("%d,%d,%d",&i,&j,&k);C.scanf("%d%d%d",&i,&j,&k);D.seanf("i=%dj=%d,k=%d",&i,&j,&k);正确答案:B解析:scanf函数的调用形式是:scanf(格式字符串;输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。若在格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。

考题 下列程序的输出结果是______。 int i=010,J=10; printf("%d,%d\n",++i,j--);A.11,10B.9,10C.010,9D.10,9正确答案:B

考题 单选题有以下程序:#includemain(){ int x=010,y=10; printf(%d,%d,++x,y--);}程序运行后的输出结果是(  )。A 10,9B 11,10C 010,9D 9,10正确答案:D解析:整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法,八进制整常量以0作为前缀。自增和自减运算符的两种用法:前置运算,运算符放在变量之前,规则是先使变量的值增(或减)1,然后以变化后表达式的值参与其他运算;后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)1。x=010,即十进制的8,y=10,++x先自加后取值,输出9,y--先取值输出10,再自减y=9,答案选择D选项。

考题 有以下程序 void f(int a[],int i,int j) { int t; if(i<j) { t=a[i];a[i]=a[j];a[j]=t; f(a,i+1,j-1); } } main() { int i,aa[5]={1,2,3,4,5}; f(aa,0,4); for(i=0;i<5;i++)printf("%d,",aa[i];printf("\n"); } 执行后输出结果是A.5,4,3,2,1B.5,2,3,4,1,C.1,2,3,4,5D.1,5,4,3,2,正确答案:A解析:在C语言中所谓函数的递归是指在调用一个函数的过程中,又出现了直接或间接地调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。由程序可以看出函数f(a,i,j)为一递归函数,其功能是当ij时,将数组中的元素a[i]和a[j]交换,然后再调用函数f(a,i+1,j-1),将数组中 a[i+1]和a[j--]交换,这样一直递归到数组下标i=j,可见该递归函数的作用是使数组中首尾元素依次互换。主函数中定义了—个长度为5的数组aa并初始化,然后调用f(a,0, 4),将数组a中的元素依次互换,故最后for循环输出的数组aa中各元素的值为5、4、3、2、1。