1、二级 C 语言模拟 651 及答案解析(总分:124.00,做题时间:90 分钟)一、选择题(总题数:40,分数:54.00)1.数据流图中带有箭头的线段表示的是_。(分数:1.00)A.控制流B.事件驱动C.模块调用D.数据流2.以下叙述中错误的是_。(分数:1.00)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式3.有以下程序段: int k=0,a=1,b=2,c=3; k=ab?
2、b:a;k=kc?c:k; 执行该程序段后,k 的值是_。(分数:2.00)A.3B.2C.1D.04.若有以下程序 #includestdio.h main() int a=-2,b=0; while(a+) +b; printf(“%d,%d/n“,a,b); 则程序的输出结果是_。(分数:2.00)A.2,3B.0,2C.1,3D.1,25.下面四个选项中,均是不正确的八进制数或十六进制数的选项是(分数:1.00)A.016 0x8f 018B.0abc 017 0xaC.010 -0x11 0x16D.0a12 7ff -1236.有以下程序: #include stdio.h #in
3、clude string.h void fun(char *s, int n) char *t; int i,j; for(i=0; in-1; i+ +) for(j=i+1; jn; j+ +) if(strlen(si) strlen(sj) t=si;si=sj;sj=t; main( ) char *ss=“bcc“,“bbcc“,“xy“,“aaacc“,“aabcc“; fun(ss,5); printf(“%s,%s/n“,ss0,ss4); 程序的运行结果是_。(分数:2.50)A.aaaacc,xyB.xy,aaaaccC.bcc,aabccD.aabcc,bcc7.以下程
4、序的运行结果为_。 #define MIN(x,y)(x)(y)?(x):(y) main() int a=0,b=3,c=1,d=3,X; X=MIN(c+d,a+b)*100; printf(“%d/n“,X); (分数:2.00)A.300B.4C.3D.4008.有以下程序段 int *p; p=_malloc(sizeof(int); 若要求使 p 指向一个 int 型的动态存储单元,在横线处应填入的是_。(分数:2.00)A.(int*)B.intC.int*D.(*int)9.有以下程序 #includestdio.h void fun(char*a,char*b) while(
5、*a=“*“)a+; while(*b=*a)b+;a+; main() char*s=“*a*b*“,t80; fun(s,t);puts(t); 程序的运行结果是_。(分数:1.00)A.a*b*B.a*bC.*a*bD.ab10.对于循环队列,下列叙述中正确的是_。(分数:2.50)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针11.有以下程序: #include stdio.h main() char *s 6=“ABCD“,“EFGH“,“IJKL“,“MNOP“,“QRST“,“UVWX“*p; in
6、t i; p=s; for( i=0; i4; i+ ) printf(“%s“,pi); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.ABCDEFGHIJKLMNOPB.ABCDEFGHIJKLC.ABCDD.AEIM12.有以下程序 #includestdio.h void f(int*q) int i=0; for(;i5;i+)(*q)+; main() int a5=1,2,3,4,5,i; f(a); for(i=0;i5;i+)printf(“%d,“,ai); 程序运行后的输出结果是_。(分数:1.00)A.6,2,3,4,5,B.2,2,3,4
7、,5,C.1,2,3,4,5,D.2,3,4,5,6,13.以下叙述中正确的是_。(分数:1.00)A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1 个数据D.C 语言中的文件是流式文件,因此只能顺序存取数据14.有以下程序: #includestdio.h struct Sint n;int a20; void f(int*a,int n) int i; for(i=0;in-1;i+) ai+=i; main() i
8、nt i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(s.a,s.n); for(i=0;is.n;i+) printf(“%d,“,s.ai); 程序运行后的输出结果是_。(分数:1.00)A.2,3,1,6,8,7,5,4,10,9,B.3,4,2,7,9,8,6,5,11,10,C.2,4,3,9,12,12,11,11,18,9,D.1,2,3,6,8,7,5,4,10,9,15.以下选项中叙述错误的是_。(分数:1.00)A.C 程序函数中定义的自动变量,系统不自动赋确定的初值B.在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合
9、语句内C.C 程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值D.C 程序函数的形参不可以说明为 static 型变量16.有以下程序段: struct st int x; int *y; *pt; int a=1,2, b=3,4; struct st c2=10,a,20,bt; pt=c; 以下选项中表达式的值为 11 的是_。(分数:2.00)A.+pt-xB.pt-xC.*pt-yD.(pt+)-x17.若有以下定义和语句 ( ) int u010,vOx10,w10; printf(“%d,%d%d/n“,u,v,w); 则输出结果是(分数:1.00)A.8,16,1
10、0B.10,10,10C.8,8,10D.8,10,1018.设有以下语句: int a=1,b=2,c; c=a(b2); 执行后,c 的值为 _ 。(分数:1.00)A.6B.7C.8D.919.有如下程序: main() int x=1, a=0, b=0; switch(x) case 0: b+; case 1: a+; case 2: a+; b+; printf(“a=%d, b=%d/n“, a, b); 该程序的输出结果是_。(分数:2.50)A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=220.若变量均已正确定义并赋值,以下合法的 C 语言赋值语句是
11、_。(分数:1.00)A.x=y=5;B.x=n%2.5;C.x+n=i;D.x=5=4+1;21.有以下程序段: int i,n; for(i=0;i8;i+) n=rand()%5; switch(n) case 1: case 3:printf(“%d/n“,n); break; case 2: case 4:printf(“%d/n“,n); continue; case 0:exit(0); printf(“%d/n“,n); 以下关于程序段执行情况的叙述,正确的是_。(分数:1.00)A.for 循环语句固定执行 8 次B.当产生的随机数 n 为 4 时结束循环操作C.当产生的随机
12、数 n 为 1 和 2 时不做任何操作D.当产生的随机数 n 为 0 时结束程序运行22.有以下程序: #includestdio.h #includestring.h main() char p20=“a“,“b“,“c“,“d“,q=“abc“,r=“abcde“; strcat(p,r);strcpy(p+strlen(q),q); printf(“%d/n“,strlen(p); 程序运行后的输出结果是_。(分数:1.00)A.11B.9C.6D.723.if 语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是_。(分数:1.00)A.必须是逻辑值B.必须是整数
13、值C.必须是正数D.可以是任意合法的数值24.不能把字符串“Hello!“赋给数组 b 的语句是_。(分数:1.00)A.char b10=“H“,“e“,“l“,“l“,“o“,“!“;B.char b10=“h“,“e“,“l“,“l“,“o“,“!“;C.char b10;strcpy(b,“Hello!“);D.char b10=“Hello!“;25.有以下程序: # include stdio.h main() char a,b,c; b=“1“;c=“A“; for(a=0;a6;a+) if(a%2) putchar(b+a); else putchar(c+a); 程序运行后
14、的输出结果是_。(分数:1.00)A.1B3D5FB.ABCDEFC.A2C4E6D.12345626.下列叙述中正确的是( )。(分数:1.00)A.数据库系统是一个独立的系统,不需要操作系统的支持B.数据库技术的根本目标是要解决数据的共享问题C.数据库管理系统就是数据库系统D.以上 3 种说法都不对27.有以下程序: #includestdio.h main( ) int sum=0,x=5; dosum+=x;while(!-x); printf(“%d/n“,sum); 程序的运行结果是_。(分数:1.00)A.0B.5C.14D.1528.有以下程序: #include stdio.
15、h struct S int a;int b; main( ) struct S a, *p= a.a=99; printf(“%d/n“,_); 程序要求输出结构体中成员 a 的数据,以下不能填入横线处的内容是_。(分数:1.00)A.aB.*p.aC.p-aD.(*p).a29.有以下程序: #includestdio.h int fun(int(*s)4,int n,int k) int m,i; m=s0k; for(i=1;in;i+) if(sikm) m=sik; return m; main() int a44=1,2,3,4, 11,12,13,14, 21,22,23,24
16、, 31,32,33,34; printf(“%d/n“,fun(a,4,0); 程序运行后的输出结果是_。(分数:1.00)A.4B.34C.31D.3230.以下对 C 语言中联合类型数据的正确叙述是_。(分数:2.50)A.定义了联合变量后,即可引用该变量或该变量中的任意成员B.一个联合变量中可以同时存放其所有成员C.联合中的各个成员使用共同的存储区域D.在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变31.有以下程序: main() int x,i; for(i=1;i=50;i+) x=i; if(x%2=0) if(x%3=0) if(x%7=0) printf(“%d,
17、i)“; 输出结果是_。(分数:1.00)A.28B.27C.42D.4132.下面能作为软件需求分析工具的是_。(分数:1.00)A.PAD 图B.程序流程图C.甘特图D.数据流程图(DFD 图)33.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是_。(分数:1.00)A.一对一B.一对多C.多对一D.多对多34.以下程序的输出结果是_。 point(char*pt); main() char b4=“m“,“n“,“o“,“p“,*pt=b; point(pt); printf(“%c/a“,*pt); point(char*p) p+=3;(分数:2.00)ApBoCnDm35.有以
18、下程序 #includestdio.h int fun() static int x=1; x*=2;return x; main() int i,s=1; for(i=1;i=2;i+)s=fun(); printf(“%d/n“,s); 程序运行后的输出结果是_。(分数:1.00)A.0B.1C.4D.836.若有定义语句 int b=2; 则表达式(b2)/(3|b)的值是_。(分数:2.00)A.8B.2C.4D.037.有如下程序: #include stdio.h int sum(int*array,int len) if(len = 0) return array0; else
19、return array0+sum(array+1, len-1); main() int array5 = 1,2,3,4,5; int res = sum(array,4); printf(“%d/n“,res); 程序运行后的输出结果是_。(分数:1.00)A.15B.10C.8D.138.下面函数的功能是 _ 。 sss(s,t) char*s,*t; while(*s); while(*t) *(s+)=*(t+); return s; (分数:2.00)A.将字符串 s 复制到字符串 t 中B.比较两个字符串的大小C.求字符串的长度D.将字符串 t 续接到字符串 s 中39.有以下
20、程序段: #includestdio.h int j;float y;char name50; scanf(“%2d%f%s“,j,y,name); 当执行上述程序段,从键盘上输入 55566 7777abc 后,y 的值为_。(分数:1.00)A.566.0B.55566.0C.7777.0D.566777.040.设有定义 #includestdio.h #includestdlib.h typedef structint x,y;T; typedef structint x,y;*USER; USER fun() USER p; p=(USER)malloc(sizeof(T); p-x
21、=1; p-y=2; return p; 函数 fun 返回值的类型是_。(分数:1.00)A.T 类型的结构体B.指向结构体类型的指针C.int 类型的元素D.int 类型的指针二、程序填空题(总题数:1,分数:30.00)41.给定程序中,函数 fun 的功能是计算 x 所指数组中 N 个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。 例如,有 10 个正数:46 30 32 40 6 17 45 15 48 26,平均值为 30.500000。主函数中输出 m=30。 请在程序的下划线处填入正确的内容并把下划线删
22、除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序如下。 #include stdlib.h #include stdio.h #define N 10 double fun(double x,double*av) int i,j;double d,s; s=0; for(i=0;iN;i+)s=s+xi; /*found*/ 1=s/N; d=32767; for(i=0;iN;j+) if(xi*avj= 2; /*found*/ return 3; main() int i; double xN=46,
23、30,32,40,6,17,45,15,48,26; double av,m; for(i=0;iN;i+)printf(“%4.0f“,xi); printf(“/n“); m=fun(x, printf(“/nThe average is:%f/n“,av); printf(“m=%5.0f“,m); printf(“/n“); (分数:30.00)三、程序修改题(总题数:1,分数:20.00)42.给定程序 MODI1.C 中函数 fun 的功能是:判断一个整数是否是素数,若是返回 1,否则返回 0。在main 函数中,若 fun 返回 1 则输出“YES”,若 fun 返回 0 则输出
24、“NO!”。 请改正程序中的错误,使该程序能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include stdio.h int fun(int m) int k=2; while(k=m else return 0: main() int n; printf(“/nPlease enter n;“); scanf(“%d“, if(fun(n) printf(“YES/n“); else printf(“NO!/n“); (分数:20.00)_四、程序设计题(总题数:1,分数:20.00)43.函数 fun 的功能是:将两个两位数的
25、正整数 a、b 合并形成一个整数放在 c 中。 合并的方式是:将 a 数的十位和个位数依次放在 c 数的个位和百位上,b 数的十位和个位数依次放在 c 数的千位和十位上。 例如,当 a=45,b=12 时,调用该函数后,c=1524。 注意:部分源程序存在文件 PROG1.C 中。数据文件 in.dat 中的数据不得修改。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入要编写的若干语句。 #includestdio.h void fun(int a,int b,long*c) main() int a,b;long c; void NONO(); print
26、f(“Input a,b:“); scanf(“%d,%d“, fun(a,b, printf(“The result is:%1d/n“,c); NONO(); void NONO() /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FILE*rf,*wf; int i,a,b;long c; rf=fopen(“in.dat“,“r“); wf=fopen(“out.dat“,“w“); for(i=0;i10;i+) fscanf(rf“%d,%d“, fun(a,b, fprintf(wf,“a=%d,b=%d,e=%ld/n“,a,b,c); fclose(rf
27、); fclose(wf); (分数:20.00)_二级 C 语言模拟 651 答案解析(总分:124.00,做题时间:90 分钟)一、选择题(总题数:40,分数:54.00)1.数据流图中带有箭头的线段表示的是_。(分数:1.00)A.控制流B.事件驱动C.模块调用D.数据流 解析:解析 数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流的名称,因此本题答案为 D。2.以下叙述中错误的是_。(分数:1.00)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值 C.用户定义的函数
28、中若没有 return 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式解析:解析 本题重点考察函数返回值的相关知识,函数的值只能通过 return 语句返回主调函数,在函数中允许有多个 return 语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void。因此 B 选项正确。3.有以下程序段: int k=0,a=1,b=2,c=3; k=ab?b:a;k=kc?c:k; 执行该程序段后,k 的值是_。(分数:2.00)A.3B.2 C.1D.0解析:解析 本题考查
29、条件表达式的概念。第一个条件表达式“ab?b:a=12? 2:1=2”,并将 2 赋给k,第二个条件表达式“kc?c:k=23?3:2=2”,并将 2 再赋给 k,此时 k 的值为 2。4.若有以下程序 #includestdio.h main() int a=-2,b=0; while(a+) +b; printf(“%d,%d/n“,a,b); 则程序的输出结果是_。(分数:2.00)A.2,3B.0,2C.1,3D.1,2 解析:5.下面四个选项中,均是不正确的八进制数或十六进制数的选项是(分数:1.00)A.016 0x8f 018B.0abc 017 0xaC.010 -0x11 0
30、x16D.0a12 7ff -123 解析:解析 八进制中,不可能包括 8 以上的数字,它的范围只在 07 之间,以 0 开头。同样,十六进制是以 0x 开头,数字在 09 和 AF 之间。6.有以下程序: #include stdio.h #include string.h void fun(char *s, int n) char *t; int i,j; for(i=0; in-1; i+ +) for(j=i+1; jn; j+ +) if(strlen(si) strlen(sj) t=si;si=sj;sj=t; main( ) char *ss=“bcc“,“bbcc“,“xy“
31、,“aaacc“,“aabcc“; fun(ss,5); printf(“%s,%s/n“,ss0,ss4); 程序的运行结果是_。(分数:2.50)A.aaaacc,xyB.xy,aaaacc C.bcc,aabccD.aabcc,bcc解析:解析 函数 fun(char s,int n)的功能是对字符串数组的元素按照字符串的长度从小到大排序,在主函数中执行 fun(ss,5)语句后,* ss=“xy“,“bcc“,“bbcc“,“aabcc“,“aaaacc“,ss0,ss4的输出结果为 xy,aaaacc。因此 B 选项正确。7.以下程序的运行结果为_。 #define MIN(x,y)
32、(x)(y)?(x):(y) main() int a=0,b=3,c=1,d=3,X; X=MIN(c+d,a+b)*100; printf(“%d/n“,X); (分数:2.00)A.300 B.4C.3D.400解析:8.有以下程序段 int *p; p=_malloc(sizeof(int); 若要求使 p 指向一个 int 型的动态存储单元,在横线处应填入的是_。(分数:2.00)A.(int*) B.intC.int*D.(*int)解析:解析 int *表示返回值为指向 int 类型的指针,符合题意。9.有以下程序 #includestdio.h void fun(char*a,
33、char*b) while(*a=“*“)a+; while(*b=*a)b+;a+; main() char*s=“*a*b*“,t80; fun(s,t);puts(t); 程序的运行结果是_。(分数:1.00)A.a*b* B.a*bC.*a*bD.ab解析:解析 第一个 while 循环跳过字符串前面的*,第二个 while 循环将剩余的字符串赋值给字符串b,所以 fun 函数功能是删除字符串 s 的前置*赋值给 t。10.对于循环队列,下列叙述中正确的是_。(分数:2.50)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,
34、也可以小于队尾指针 解析:解析 循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以对头指针有时可能大于队尾指针有时也可能小于队尾指针,故本题答案为 D。11.有以下程序: #include stdio.h main() char *s 6=“ABCD“,“EFGH“,“IJKL“,“MNOP“,“QRST“,“UVWX“*p; int i; p=s; for( i=0; i4; i+ ) printf(“%s“,pi); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.ABCDEFGHIJKLMNOP B.ABCD
35、EFGHIJKLC.ABCDD.AEIM解析:解析 题目中定义了一个指针数组,并对其初始化,6 个指针分别指向 6 个字符串。定义指向指针的指针,并使其指向这个指针数组。调用 printf 函数打印前 4 个字符串,结果为“ABCDEFGHIJKLMNOP”,故 A 选项正确。12.有以下程序 #includestdio.h void f(int*q) int i=0; for(;i5;i+)(*q)+; main() int a5=1,2,3,4,5,i; f(a); for(i=0;i5;i+)printf(“%d,“,ai); 程序运行后的输出结果是_。(分数:1.00)A.6,2,3,
36、4,5, B.2,2,3,4,5,C.1,2,3,4,5,D.2,3,4,5,6,解析:解析 f 函数将 a0自增 5 次,所以答案选择 A。13.以下叙述中正确的是_。(分数:1.00)A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失 B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1 个数据D.C 语言中的文件是流式文件,因此只能顺序存取数据解析:解析 B 选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C
37、 选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第 1 个数据,可以用 fseek()函数进行重新定位即可。D 选项中,C 语言中的文件可以进行随机读写。故本题答案为 A。14.有以下程序: #includestdio.h struct Sint n;int a20; void f(int*a,int n) int i; for(i=0;in-1;i+) ai+=i; main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(s.a,s.n); for(i=0;is.n;i+) printf(“%d,“,s.ai);
38、 程序运行后的输出结果是_。(分数:1.00)A.2,3,1,6,8,7,5,4,10,9,B.3,4,2,7,9,8,6,5,11,10,C.2,4,3,9,12,12,11,11,18,9, D.1,2,3,6,8,7,5,4,10,9,解析:解析 题目中定义了一个结构体类型 S,然后定义了一个结构体变量 s 并初始化,执行 f 函数后,将 s 中元素 a 的每个元素都加上 i,这里需要注意最后一个元素没有加 i,所以最终答案为 C 选项。15.以下选项中叙述错误的是_。(分数:1.00)A.C 程序函数中定义的自动变量,系统不自动赋确定的初值B.在 C 程序的同一函数中,各复合语句内可以
39、定义变量,其作用域仅限本复合语句内C.C 程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 D.C 程序函数的形参不可以说明为 static 型变量解析:解析 A 选项描述正确,自动变量未赋初值,为随机值;B 选项描述正确,变量定义除在函数开始位置外,在复合语句开始也可以;c 选项描述是错误的,函数内的静态变量,只在第一次调用时候赋值,以后调用保留上次值;D 选项描述也正确,形参属于局部变量,占用动态存储区,而 static 型变量与用静态存储区。16.有以下程序段: struct st int x; int *y; *pt; int a=1,2, b=3,4; struct s
40、t c2=10,a,20,bt; pt=c; 以下选项中表达式的值为 11 的是_。(分数:2.00)A.+pt-x B.pt-xC.*pt-yD.(pt+)-x解析:解析 本题考查结构体数组初始化以及结构体变量的引用方法。题目中定义了一个结构体数组 c并初始化,指针 pt 指向 c 的第一个元素,那么 pt-x 为 10,+pt-x 为 11,* pt-y 为 1,(pt+)-x为 20,所以答案为 A。17.若有以下定义和语句 ( ) int u010,vOx10,w10; printf(“%d,%d%d/n“,u,v,w); 则输出结果是(分数:1.00)A.8,16,10 B.10,1
41、0,10C.8,8,10D.8,10,10解析:18.设有以下语句: int a=1,b=2,c; c=a(b2); 执行后,c 的值为 _ 。(分数:1.00)A.6B.7C.8D.9 解析:解析 本题考查两个知识点,按位异或和左移。把 b 左移 2 位化成二进制 c=a(b2)=a(0000102)=a001000=0000001001000=9,故选择 D。19.有如下程序: main() int x=1, a=0, b=0; switch(x) case 0: b+; case 1: a+; case 2: a+; b+; printf(“a=%d, b=%d/n“, a, b); 该
42、程序的输出结果是_。(分数:2.50)A.a=2,b=1 B.a=1,b=1C.a=1,b=0D.a=2,b=2解析:解析 当 x 为 1 时,执行 case 1,a 自加等于 1,因为 case 1 后没有 break,接着执行 case 2,此时 a 的值为 2,b 自加为 1,故选择 A 选项。20.若变量均已正确定义并赋值,以下合法的 C 语言赋值语句是_。(分数:1.00)A.x=y=5; B.x=n%2.5;C.x+n=i;D.x=5=4+1;解析:解析 B 选项中运算符“%”的前后必须为整数,C 选项中不能将变量赋给表达式 x+n,D 选项中不能将表达式 4+1 赋给常量 5。2
43、1.有以下程序段: int i,n; for(i=0;i8;i+) n=rand()%5; switch(n) case 1: case 3:printf(“%d/n“,n); break; case 2: case 4:printf(“%d/n“,n); continue; case 0:exit(0); printf(“%d/n“,n); 以下关于程序段执行情况的叙述,正确的是_。(分数:1.00)A.for 循环语句固定执行 8 次 B.当产生的随机数 n 为 4 时结束循环操作C.当产生的随机数 n 为 1 和 2 时不做任何操作D.当产生的随机数 n 为 0 时结束程序运行解析:解析
44、 程序中的 for 循环是固定地执行 8 次,属于计数器,程序是从中随机抽取一个数,然后对5 进行求余再输出,共抽取 8 个数。所以答案为 A。22.有以下程序: #includestdio.h #includestring.h main() char p20=“a“,“b“,“c“,“d“,q=“abc“,r=“abcde“; strcat(p,r);strcpy(p+strlen(q),q); printf(“%d/n“,strlen(p); 程序运行后的输出结果是_。(分数:1.00)A.11B.9C.6 D.7解析:解析 strcpy:字符串拷贝函数;strlen:求字符串长度函数(注
45、意:不包含字符串结束标识符“/0“);strcat:字符串连接函数。执行完语句 strcat(p,r);后,p 数组中存储的元素为:a,b,c,d,a,b,c,d,e。执行语句 strcpy(p+strlen(q),q);得到的结果是将 q 所指向的字符串拷贝至p+strlen(q)开始的存储位置,因为 strlen 的值为 3,即从 p+3 开始存储 q 中的元素。所以执行完strcpy(p+strlen(q),q)语句后,字符数组 p20的存储元素为:a,b,c,a,b,c。所以 strlen(p)的结果为6,C 选项正确。23.if 语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是_。(分数:1.00)A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值 解析:解析 if 语句中的表达式可以是任意合法的数值,如常量、变量表达式。所以 D 选项正确。24.不能把字符串“Hello!“赋给数组 b 的语句是_。(分数:1.00)A.char b10=“H“,“e“,“l“,“l“,“o“,“!“;B.char b10=“h“,“e“,“l“,“l“,“o“,“!“; C.char b10;st