1、C语言习题1一、选择题(1) 用C语言编写的代码程序( ) /考点:程序A) 可立即执行 B) 是一个源程序C) 经过编译即可执行 D) 经过编译解释才能执行 (2) 结构化程序由三种基本结构组成,三种基本结构组成的算法( ) /考点:三种结构A) 可以完成任何复杂的任务 B) 只能完成部分复杂的任务C) 只能完成符合结构化的任务 D) 只能完成一些简单的任务 (3) 以下定义语句中正确的是( ) /赋值、指针A) char a=A b=B; B) float a=b=10.0;C) int a=10,*b=&a; D) float *a,b=&a; (4) 下列选项中,不能用作标识符的是(
2、) /标识符A) _1234_ B) _1_2 C) int_2_ D) 2_int_(5) 有以下定义语句 double a,b; int w; long c;若各变量已正确赋值,则下列选项中不正确的表达式是( )A) a=a+b=b+ B) w%(int)(a+b)C) (c+w)%(int)a D) w=a=b; (6) 有以下程序 /运算符的优先级、结合性main() int m=3,n=4,x;x=-m+;x=x+8/+n;printf(“%dn”,x);程序运行后的输出结果是( )A) 3 B) 5 C) -1 D) -2 (7) 有以下程序 /+运算main() char a=a
3、,b;printf(“%c,”,+a);printf(“%cn”,b=a+);程序运行后的输出结果是( )A) b,b B) b,c C)a,b D) a,c (8) 有以下程序 /各数整数的表示与输出main() int m=0256,n=256;printf(“%o %on”,m,n);程序运行后的输出结果是( )A) 0256 0400 B) 0256 256 C) 256 400 D) 400 400 (9) 有以下程序 /输出控制符少的情况main() int a=666,b=888;printf(“%dn”,a,b);程序运行后的输出结果是( )A) 错误信息 B) 666 C)
4、888 D) 666,888 (10) 有以下程序 /循环、switchmain() int i;for(i=0;i3;i+)switch(i)case 0:printf(“%d”,i);case 2:printf(“%d”,i);default:printf(“%d”,i);程序运行后的输出结果是( )A) 022111 B) 021021 C) 000122 D) 012 (11) 若x和y为整型数,以下表达式中不能正确表示数学关系|x-y|10的是( )/表达式A) abs(x-y)-10& x-y10C) (x-y)10 D) (x-y)*(x-y)b) if(bc)printf(“%
5、d”,d+ +1);elseprintf(“%d”,+d +1);printf(“%dn”,d);程序运行后的输出结果是( )A) 2 B) 3 C) 43 D) 44 (13) 下列条件语句中,功能与其他语句不同的是( ) /if语句的条件A) if(a) printf(“%dn”,x); else printf(“%dn”,y);B) if(a=0) printf(“%dn”,y); else printf(“%dn”,x);C) if (a!=0) printf(“%dn”,x); else printf(“%dn”,y);D) if(a=0) printf(“%dn”,x); else
6、 printf(“%dn”,y); (14) 有以下程序 /循环、continue、breakmain() int i=0,s=0;for (;)if(i=3|i=5) continue;if (i=6) break;i+;s+=i;printf(“%dn”,s);程序运行后的输出结果是( )A) 10 B) 13 C) 21 D) 程序进入死循环 (15) 若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是( )/循环赋初位置问题A) for(i=1,p=1;i=5;i+) p*=i;B) for(i=1;i=5;i+) p=1; p*=i;C) i=1;p=1;whil
7、e(i=5)p*=i; i+;D) i=1;p=1;dop*=i; i+; while(i=5); (16) 有以下程序 /输入与输出main() char a,b,c,d;scanf(“%c,%c,%d,%d”,&a,&b,&c,&d);printf(“%c,%c,%c,%cn”,a,b,c,d); 若运行时从键盘上输入:6,5,65,66。则输出结果是( )A) 6,5,A,B B) 6,5,65,66 C) 6,5,6,5 D) 6,5,6,6 (17) 以下能正确定义二维数组的是( ) /二维数组的定义A) int a3; B) int a3= 2*3;C) int a3=; D) i
8、nt a23=1,2,3,4; (18) 有以下程序 /循环的结束条件、函数的调用int f(int a) return a%2; main() int s8=1,3,5,2,4,6,i,d=0;for (i=0;f(si);i+) d+=si;printf(“%dn”,d);程序运行后的输出结果是( )A) 9 B) 11 C) 19 D) 21 (19) 若有以下说明和语句,int c45,(*p)5;p=c;能正确引用c数组元素的是( ) /二维数组的指针表示法/指向一维数组的指针A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p0+2) (20) 有以下程序 /指针
9、的赋值操作main() int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=p; p=q;q=r;printf(“%d,%d,%d,%dn”,*p,*q,a,b);程序运行后的输出结果是( )A) 8,7,8,7 B) 7,8,7,8 C) 8,7,7,8 D) 7,8,8,7 (21) s1和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是 ( ) /字符串大小的比较函数A) if(s1s2)S; B) if(strcmp(s1,s2)S;C) if(strcmp(s2,s1)0) S; D) if(strcmp(s1,
10、s2)0)S; (22) 设有定义语句 /一维数组的指针表示法、指针运算int x6=2,4,6,8,5,7,*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是( )A) for(i=0;i6;i+) printf(“%2d”,*(p+);B) for(i=0;i6;i+) printf(“%2d”,*(p+i);C) for(i=0;i6;i+) printf(“%2d”,*p+);D) for(i=0;i6;i+) printf(“%2d”,(*p)+); (23) 有以下程序 /指针的赋值#include main()int a=1,2,3,4,5,6,7,8,9,1
11、0,11,12,*p=a+5,*q=NULL;*q=*(p+5); printf(“%d %dn”,*p,*q);程序运行后的输出结果是( )A) 运行后报错 B) 6 6 C) 6 11 D) 5 10 (24) 有以下定义和语句 /一维数组的指针表示法、指针数组int a32=1,2,3,4,5,6,*p3;p0=a1;则*(p0+1)所代表的数组元素是( )A) a01 B) a10 C) a11 D) a12(25) 有以下程序 /二维字符串数组main() char str10=“China”,”Beijing”,*p=str0; printf(“%sn”,p+10); 程序运行后的
12、输出结果是( )A) China B) Bejing C) ng D) ing (26) 有以下程序 /字符指针、字符串的输出 main()char s=“ABCD”,*p;for(p=s+1;ps+4;p+)printf(“%sn”,p);程序运行后的输出结果是( )A) ABCD B) A C) B D) BCDBCD B C CDCD C D DD D(27) 在函数调用过程中,如果函数funA调用了函数 funB,函数funB又调用了函数funA,则( ) /间接递归概念A) 称为函数的直接递归调用 B) 称为函数的间接递归调用C) 称为函数的循环调用 D) C语言中不允许这样的递归调
13、用(28) 已有定义:int i,a10,*p;,则合法的赋值语句是( ) /数组与指针A) p=100; B) p=a5; C) p=a2+2; D) p=a+2;(29) 以下叙述中正确的是( ) /局部变量、全局变量、生命期A) 局部变量说明为static存储类,其生存期将得到延长B) 全局变量说明为static存储类,其作用域将被扩大C) 任何存储类的变量在未赋初值时,其值都是不确定的D) 形参可以使用的存储类说明符与局部变量完全相同/形参不能用static (30) 设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( ) /位运算A) c1c2 B) c1&
14、c2 C) c2 D) c1|c2(31) 程序中对fun函数有如下说明 /各类指针、指向函数的指针等void *fun(); 此说明的含义是 ( )A) fun函数无返回值B)fun函数的返回值可以是任意的数据类型C) fun函数的返回值是无值型的指针类型D) 指针fun指向一个函数,该函数无返回值(32) 有以下程序 /字符指针、字符串的结束main() char s=“Yesn/No”,*ps=s;puts(ps+4);*(ps+4)=0;puts(s);程序运行后的输出结果是(选项D中的第一行是空行)( )A) n/No B) /No C) n/NO D) Yes Yes Yes /N
15、o /No /No Yes(33) 有以下程序 /负数的补码表示 main() unsigned int a;int b=-1;a=b;printf(“%u”,a);程序运行后的输出结果是( )A) -1 B) 65535 C) 32767 D) -32768(34) 有以下程序 /指针为形式参数、数组名为实际参数void fun(int *a,int i,int j) int t;if(ij) t=ai;ai=aj;aj=t;i+; j-;fun(a,i,j);main() int x=2,6,1,8,i;fun(x,0,3);for(i=0;inumB) p-num C) (*p).num
16、 D) stu3.age(36) 有以下程序 /一维数组、冒泡排序main() int x=1,3,5,7,2,4,6,0,i,j,k;for(i=0;i=i;j-) if(xj+1xj)k=xj;xj=xj+1;xj+1=k; for(i=0;i3;i+) for(j=4;jxj) k=xj;xj=xj+1;xj+1=k;for (i=0;i3;i+) for(j=4;jxj+1) k=xj;xj=xj+1;xj+1=k; for (i=0;i8;i+) printf(“%d”,xi); printf(“n”);程序运行后的输出结果是:( )A) 75310246 B) 01234567 C
17、) 76310462 D) 13570246(37) 有如下程序 /文件#include main()FILE*fp1; fp1=fopen(“f1.txt”,”w”); fprintf(fp1,”abc”); fclose(fp1);若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为( )A) goodabc B) abcd C) abc D) abcgood4850.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。#include /链表struct
18、node char data; struct node *next;(38)CreatList(char *s) struct node *h,*p,*q);h=(struct node *) malloc(sizeof(struct node);p=q=h;while(*s!=0)p=(struct node *) malloc(sizeof(struct node); p-data=(39); q-next=p; q=(40); s+;p-next=0;return h;main() char str=“link list”;struct node *head;head=CreatList
19、(str);.(38) A) char * B) struct node C) struct node* D) char(39) A) *s B) s C) *s+ D) (*s)+(40) A) p-next B) p C) s D) s-next二、填空题(1) 以下程序段的输出结果是11 。int i=9;printf(“%on”,i);(2) 以下程序运行后的输出结果是25 21 37 。main() int a,b,c;a=25;b=025;c=0x25;printf(“%d%d%dn”,a,b,c);(3) 以下程序运行后的输出结果是24 。main() int p7=11,13,
20、14,15,16,17,18;int i=0,j=0;while(i7 & pi%2=1) j+=pi+;printf(“%dn”,j);(4) 以下程序运行后的输出结果是2 1 。main() int x=1,y=0,a=0,b=0;switch(x) case 1:switch(y) case 0:a+; break;case 1:b+; break; case 2:a+;b+; break; printf(“%d%dn”,a,b);(5) 以下程序运行后的输出结果是92 。main() int a44=1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18;int
21、 i=0,j=0,s=0;while(i+4)if(i=2|i=4) continue;j=0;do s+= aij; j+; while(j4);printf(“%dn”,s);(6) 以下程序运行后的输出结果是gae 。main () char a=“Language”,b=“Programe”;char *p1,*p2; int k;p1=a; p2=b;for(k=0;k=7;k+)if(*(p1+k)=*(p2+k) printf(“%c”,*(p1+k);(7) 以下程序运行后的输出结果是*2*4*6*8* 。main() char a=“123456789”,*p; int i=
22、0;p=a;while(*p) if(i%2=0) *p=*;p+;i+; puts(a);(8) 以下程序中, for循环体执行的次数是4 。#defineN 2#defineM N+1#defineK M+1*M/2main() int i;for(i=1;iK;i+) . .(9) 通过函数求f(x)的累加和,其中f(x)x21main() printf(“The sum=%dn”,SunFun(10);SunFun(int n) int x,s=0; for(x=0;x=n;x+)s+=F(x ); return s;F( int x)return x*x+1 );(10) 以下程序从
23、终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。main() int i,a20,sum,count; sum=count=0; for(i=0;i20;i+)scanf(“%d”,&ai ); fro(i=0;i0) count+; sum+=ai ; printf(“sum=%d,count=%dn”,sum,count);(11) 以下程序中,函数 sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。#defineM 2#defineN 4void SumColumMin(int aMN,int *sum) int i,j,k,s=0;for(i=0;iN;i+) k=0;for(j=1;jaji)k=j;s+= aki; *sum =s;main() int xMN=3,2,5,1,4,1,8,3,s;SumColumMin(x,&s );printf(“%dn”,s);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1