1、完整word版C语言期末模拟试题一、选择题:(20分,每题2分)1以下不正确的C语言标识符是(D)。 A. ABC B. abc C. a_bc D. ab.c2C程序是由B构成的。A. 主程序与子程序B. 主函数与若干子函数C. 一个主函数与一个其它函数D. 主函数与子函数3以下说法中正确的是:A。A. 在C语言中,实参与其对应的形参各占独立的存储单元;B. 在C语言中,实参与其对应的形参共占同一个存储单元;C. 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元;D. 在C语言中,形参是虚拟的,不占存储单元。4设n=3;则n+的结果是(B)。A. 2 B. 3 C. 4 D.
2、 55设整型变量n=10,i=4,则赋值运算n%=i+1执行后,n的值是(A)。 A. 0 B. 1 C. 2 D. 36凡是函数中未指定存储类别的局部变量其隐含的存储类别是(A)。 A. 自动(auto) B. 静态(static) C. 外部(extern) D. 寄存器(register)7在while(x)语句中的x与下面条件表达式等价的是:D。A. x= =0 B. x= =1 C. x!=1 D. x!=08若有以下说明和语句: struct worker int no;char *name; work, *p=&work;则以下引用方法不正确的是(D)。 A. work.no B
3、. (*p).no C. p-no D. work-no9以下对二维数组进行正确初始化的是(B)。A. int a23=1,2,3,4,5,6; B. int a3=1,2,3,4,5,6; C. int a2=1,2,3,4,5,6;D. int a2=1,2,3,4; 10二维数组a有m列,则在aij之前的元素个数为:B。A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1二、给出下列程序的运行结果:(20分,前四题每题3分,后两题每题4分)1#includemain()int i=16,j,x=6;j=i+1;x*=i=j;printf(“%d,%dn”,j,x
4、);运行结果是:2#include #include main() int a=1,b=4,c=2;float x=10.5,y=4.0,z;z=(a+b)/c+sqrt(double)y)*1.2/c+x;printf(“%fn”,z); 运行结果是:3#include main() int a,b,c,d;a=c=0;b=1;d=20;if(a) d=d-10;else if(!b) if(!c) d=25;else d=15;printf(“d=%dn”,d); 运行结果:4main()int i=10;switch(i) case 9: i+=1; case 10: i+=1; cas
5、e 11: i+=1; default : i+=1; printf(“%d”,i);运行结果:5#includemain() int a=1,2,3,4,i,j,s=0; j=1; for(i=3;i=0;i-) s=s+ai*j; j=j*10; printf(s=%dn,s);运行结果:6func(int x) x=20; main()int x=10;func(x);printf(“%d”,x);运行结果:三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(20分,每空2分)1已知能被4整除而不能被100整除的或者能被400整除的年份是润年,则判断某一
6、年是否是润年的程序如下:main() int year,leap; scanf(“%d”,&year); if() leap=1; else leap=0; if() printf(“是润年”); else printf(“不是润年”);2将100至200间不能被3整除的数输出:main()int n;for(n=100;n=200;n+) if(n%3=0) ;printf(“%d ”,n); 3判断m是否是素数#include main()int m,i,k;scanf(“%d”,&m); k=sqrt(m);for(i=2;i=k+1) printf(“%d is a prime num
7、bern”,m);else printf(“%d is not a prime numbern”,m);4给定一3*4的矩阵,求出其中值最大的元素的值,及所在的行列号。main() int i,j,row=0,colum=0,max; static int a34=1,2,3,49,8,7,610,-10,-4,4;for(i=0;i=2;i+) for(j=0;jmax) max=aij; printf(“max=%d,row=%d,colum=%dn”,max,row,colum);5下面函数的功能是将两个字符串s和t连接起来。char *conj(char *s, char *t) ch
8、ar *p=s; while(*s); while(*t) *s=;s+;t+;*s=0; 四、编程(40分)1计算1-1/2+1/3-1/4+1/99-1/100+,直到最后一项的绝对值小于10-4为止。(13分)2输入一行字符,分别统计求出其中英文字母、空格、数字和其他字符的个数并输出结果。(13分)3任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果。(14分)答案一、选择题1、D,2、B,3、A,4、B,5、A, 6、A,7、D,8、D,9、B,10、B二、给出下列程序的运行结果1、17,1022、13.7000003、d=204、135、s=12346、10三、阅读程序,在标
9、有下滑线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。1、 (year%4= = 0 & year%100 !=0)| year%400= =0) leap2、 continue3、 break4、 max = a00row = i +1colum = j +15、 s+*treturn(p)四、编程1、#includemain()int i;float sum,sign; i=1; sum=0; sign=1.0;while(1.0/i)=1e-4) sum += sign / i ; i+; sign = - sign; printf(sum=%.4f,sum);2、#incl
10、udemain()char str81;int i ;int letter,space ,num ,other ;char c; printf (Please enter a string : ); gets(str); letter=space=num=other=0;for( i= 0;stri!=0; i+) c=stri;if(c= A&c=a& c=0 & c=9) num+;elseif ( c= ) space+;else other +; printf(In this string : letter =%d,space=%d ,num=%d,other=%d,letter ,s
11、pace,num,other);3、#includemain() int num10;int i,j,k;int temp; printf(Please enter 10 numbers :n);for(i=0;i10;i+) scanf(%d,&numi);for (i=0;i9;i+) k= i ;for (j=i+1;jnumj) k=j;if(k!=i) temp=numi; numi=numk;numk=temp; printf(After sorted :n);for (i=0;i 6) printf( %dn,m); e1se printf(%dn,-m ); A)4 B)5 C
12、) 7 D) 68、当a=1,b=3,c=5,d=4,执行完下面一段程序后x 的值是 :B if(ab) if(cd) x=1; else if(ac) if(bd) x=2; else x= 3; else x=6; else x=7; A)1 B)2 C)3 D)69、阅读以下程序,当输入数据的形式为25,13,10正确的输出结果为 Dmain()int x,y,z scanf(%d%d%d,&x,&y,&z );printf(“x+y+z=%dn” ,x+y+z);。 A)x+y+z=48 B)x+y+z=35 C)x+y+z=35 D)不确定值10、 已知各变量的类型说明如下 int
13、k,a,b; unsigned long w= 5; double x=1.42;则以下不符合C语言语法的表达式是A:A) x%(-3) B) w+=-2C) k=(a=2,b=3,a+b) D) a+= a-=(b=4)*(a=3)11、 设有:int a=1, b=2, c=3, d=4, m=2, n=2;执行 (m=ab)&(n=cd)后n的值为_B_。A) 1 B) 2 C) 0 D) 412、 判断char型变量ch是否为大写字母的正确表达式是_C_。 A) A =ch = A)&(ch= A )&(ch=Z) D)( A = ch)13、 以下描述中正确的是_C_: A)由于do
14、一while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B) 在while循环体中,循环体至少要执行一次。 C)在do一while循环体中,循环体至少无条件的执行一次 D) do一while循环由do开始,用while结束,在while(表达式)后面不能写分号14、 已知int x=10,y=20,z=30; 以下语句执行后x, y, z的值是_D_。if (xy)z=x; x=y; y=z;A) x=10, y=20, z=30 B) x=20, y=30, z=20C) x=20, y=30, z=10 D) x=20, y=30, z=30 15、 若i为整型变量
15、,则以下循环执行次数是:D for ( i=2; i!=0; ) printf(%d,i- - ); A)无限次 B) 0次 C) 1 次 D) 2次16、 下面程序段: Bfor (t=1; t=100;t+) scanf(%d,&x); if(x0) continue; printf(%3d,t); A) 当x=0时什么也不输出 C) printf函数永远也不执行 D)最多允许输出100个非负整数17、 若有说明:int a34;则对a数组元素的正确引用是_C_。A) a24 B) a1,3 C) a1+10 D) a(2)(1)18、 定义如下变量和数组: B int k; int a3
16、3=1,2,3,4,5,6,7,8,9; 则下面语句的输出结果是:B for(k=0;k3;k+) printf (%d,a2-k k); A) 3 6 9 B) 7 5 3 C) 9 6 3 D) 3 5 719、 判断字符串a和b是否相等,应当使用_D_.A) if (a= =b) B) if (a=b)C) if (strcpy (a,b) ) D) if (strcmp (a,b) )20、 对两个数组a和b进行如下初始化 char a =ABCDEF; char b =A,B,C,D,E,F; 则以下叙述正确的是 _D_. A) a与b数组完全相同 B) a与b长度相同 C) a和b
17、中都存放字符串 D) a数组比b数组长度长21、 有两个字符数组a和b,则以下正确的输入语句是_B_:A) gets(a,b); B) scanf(“%s%s”,a,b);C) scanf(“%s%s”,&a,&b); D) gets(“a”),gets(“b”);22、 下面程序段的运行结果是_B_ char str =ABC , *p=str ;printf (%dn,*(p+2); (A) 0 (B) 字符C的ASCII码 (C) 字符C的地址 (D) 字符C23、 下面描述正确的是_D_。A) 两个字符串所包含的字符个数相同时,才能比较字符串B) 字符个数多的字符串比字符个数少的字符串
18、大C) 字符串”STOP ”(注:有一个空格)与”STOP”相等D) 字符串”That”小于字符串”The”24、 下面判断正确的是_B_。A)char *a= “china”; 等价于 char *a; *a= “china”;B)char str10=“china”;等价于 char str10; str =“china”;C)char *s= “china”; 等价于 char *s; s= “china”;D)char c4= “abc”, d4= “abc”; 等价于 char c4=d4= “abc”;25、 若用数组名作为函数调用的实参,传递给形参的是_A_。A) 数组的首地址B
19、) 数组第一个元素的值C) 数组中全部元素的值D) 数组元素的个数26、 下面函数调用语句含有实参的个数为_C_。 y = func ( a, b, max(d ,e));A)5 B) 2 C) 3 D) 427、 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是_B_。A)float型B)int 型C)long 型D)double 型28、 在C语言中,形参的缺省存储类是AA) auto B) register C) static D) extern29、 以下正确的函数定义形式是_A_:A) double fun(int x,int y)B) double fun(int x;int
20、 y)C) double fun(int x,int y);D) double fun(int x,y);30、 在宏定义 #define PI “3.14159”中,用宏名PI代替一个_D_。A) 常量 B)单精度数 C)双精度数 D)字符串31、 #define ADD(x) x+xmain( ) int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf(“sum=%d”,sum);上面的程序运行结果是_B_:A) sum=9 B) sum=10 C) sum=12 D) sum=1832、 以下有关宏替换和函数的调用叙述不正确的是_A_:A) 宏替换和函数的
21、调用均占用运行时间。B) 宏名无类型,函数有类型C) 宏替换只是字符替换,不分配内存,但函数调用要分配内存D) 再调用宏时程序的长度要加长,而函数调用不变33、 以下程序的输出的结果是Cmain( ) int i;for (i=1;i=2;i+) incre();incre() static int x=1;x*=x+1;printf(%d,x);A) 3 3 B) 2 2 C) 2 6 D) 2 534、 有如下定义Dstruct personchar name9; int age;strict person class10=Johu, 17,Paul, 19,Mary, 18,Adam”,
22、 16,;根据上述定义,能输出字母M的语句是A) prinft(%cn,class3.mane);B) pfintf(%cn,class3.name1);C) prinft(%cn,class2.name1)D) printf(%cn,class2.name0);35、 以下程序的输出结果是哪一项?D#include main() int a12=1,2,3,4,5,6,7,8,9,10,11,12, *p4,i; for(i=0;i4;i+) pi=&ai*3; printf(%dn,p32); A. 输出项不合法 B. 6 C. 8 D. 1236、 以下程序的输出结果是Bunion my
23、un struct int x, y, z; u;int k; a;main() a.u.x=4; a.u.y=5; a.u.z=6;a.k=1;printf(%dn,a.u.y);A) 4 B) 5 C) 6 D) 137、 以下关于结构体与共用体的说法,其中正确的是CA) 共用体同一个内存段可以来存放几种不同类型的成员,但在某一时刻只能存放一个成员。B) 结构体变量所占的内存长度等于最长的成员的长度,共用体变量所占内存长度是各成员占的内存长度之和。C) 共用体每个成员分别占有自己的内存单元。D)结构体类型可以出现在共用体类型的定义中,但共用体不能出现在结构体类型定义之中。38、 以下程序的输出结果是Blong fun( int n) long s;if(n= =1 | n= =2) s=2;else s=n-fun(n-1);return s;main() printf(%ldn, fun(5); A) 1 B)