1、二级 C语言模拟 654及答案解析(总分:145.00,做题时间:90 分钟)一、选择题(总题数:40,分数:57.00)1.以下选项中,与 k=n+完全等价的表达式是_。(分数:1.00)A.k=n, n=n+1B.n=n+1, k=nC.k=+nD.k+=n+12.关于 Do循环体 while(条件表达式); 以下叙述中正确的是_。(分数:2.00)A.条件表达式的执行次数总是比循环体的执行次数多一次B.循环体的执行次数总是比条件表达式的执行次数多一次C.条件表达式的执行次数与循环体的执行次数一样D.条件表达式的执行次数与循环体的执行次数无关3.VC 6.0中 int类型变量所占字节数是_
2、。(分数:1.00)A.1B.2C.3D.44.现有格式化输入语句,scanf(“x=%d,sumy=%d, linez=%dL“, x, y, z);,已知在输入数据后,x,y,z 的值分别是 23,56,78,则下列选项中正确地输入格式的是 注 “表示空格,Enter表示回车(分数:1.00)A.23, 56, 78EnterB.x=23, y=56, z=78EnterC.x=23C, sumy=56, z=78EnterD.x=23, sumy=56, linez=78Enter5.有以下程序: #includestdio.h main() char ch=“uvwxyz“,*pc;
3、pc=ch; printf(“%c/n“,*(pc+5); 程序运行后的输出结果是_。(分数:1.00)AzB.0C.元素 ch5的地址D.字符 y的地址6.有以下程序: #include stdio.h main() char a 44=“; int i,j; for(i=0;i4; i+) ai0=ai3=“#“; for(j=1; j3; j+) a0j=a 3j=“#“; if(i!=0) for(i=1;i3;i+) for(j=0; j4;j+) printf(“%2c“ ,aij); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.#o o#o o#B.#
4、# # # o o #C.# o o # # # #D.# # # # # # #7.有以下程序段 #includestdio.h int j; float y; char name50; scanf(“%2d%f%s“, 当执行上述程序段,从键盘上输入 55566 7777123后,y 的值为_。(分数:1.00)A.566.0B.55566.0C.7777.0D.566777.08.下列选项中不是 C语句的是_。(分数:2.50)A. int i; i+; printf(“%d/n“, i); B.;C.a=5,c=10D.;9.构成计算机软件的是_。(分数:1.00)A.源代码B.程序和
5、数据C.程序和文档D.程序、数据及相关文档10.以下叙述中正确的是_。(分数:1.00)A.在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B.在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C.在 printf函数中,各个输出项只能是变量D.使用 printf函数无法输出百分号%11.有以下程序: #include stdio.h main( ) int a=3; a+=a-=a*a; printf(“%d/n“,a); 程序的输出结果是_。(分数:1.00)A.0B.9C.3D.-1212.以下关于字符串处理的叙述正确的是_。(分数:1.00)A
6、.进行字符串复制时,目的串的存储空间必须足够大B.两个字符串进行比较时,短的一个必定比长的一个小C.计算一个字符串的长度时,应包含串尾的结束标志D.两个字符串连接时,对存储空间的大小没有要求13.以下说法正确的是_。(分数:1.00)A.C程序是从第一个定义的函数开始执行的B.在 C程序中,要调用的函数必须在 main()函数中定义C.C程序是从 main()函数开始执行D.C程序中的 main()函数必须放在程序的开始部分14.已知大写字母 A的 ASCII码是 65,小写字母 a的 ASCII码是 97。以下不能将变量 c中的大写字母转换为对应小写字母的语句是_。(分数:2.50)A.c=
7、(“A“+c)%26-“a“B.c=c+32C.c=c-“A“+“a“D.c=(c-“A“)%26+“a“15.有以下程序 #include stdio.h main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.25B.20C.45D.3616.以下选项中关于程序模块化的叙述错误的是_。(分数:1.00)A.把程序分成若干相对独立的模块,可便于编码和调试B.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C.可采用自低向
8、上、逐步细化的设计方法把若干独立模块组装成所要求的程序D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序17.有以下程序: #includestdio.h main() unsigned char a=2, b=4, c=5, d; d=a | b;d printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:1.00)A.3B.4C.5D.618.某二叉树共有 12个节点,其中叶子节点只有 1个,则该二叉树的深度为(根节点在第 l层)_。(分数:1.00)A.3B.6C.8D.1219.关系数据库规范化主要为克服数据库逻辑结构中的插入异常、删除异常以及_。(分
9、数:1.00)A.数据丢失的问题B.结构不合理的问题C.数据不一致的问题D.冗余度大的问题20.有以下程序: #includestdio.h #includestdlib.h int fun(int n) int *p; p=(int *)malloc(sizeof(int); *p=n; return *p; main() int a; a=fun(10); printf(“%d/n“, a+fun(10); 程序的运行结果是_。(分数:1.00)A.10B.20C.0D.出错21.以下叙述中错误的是_。(分数:2.00)A.gets函数用于从终端读入字符串B.getchar函数用于从磁盘文
10、件读入字符C.fputs函数用于把字符串输出到文件D.fwrite函数用于以二进制形式输出数据到文件22.已知函数的调用形式:fread(buffer,size,count,fp);,其中 buffer代表的是_。(分数:2.00)A.一个整型变量,代表要读入的数据项总数B.一个文件指针,指向要读的文件C.一个指针,是指向的输入数据放在内存中的起始位置D.一个存储区,存放要读的数据项23.有两个关系 R和 T如下: R A B C a 1 2 b 4 4 c 2 3 d 3 2 T A C a 2 b 4 c 3 d 2 则由关系 R得到关系 T的操作是_。(分数:1.00)A.选择B交C.投
11、影D并24.若有以下程序段,w 和 k都是整型变量: w=k; LB:if(w=0)go to LE; w-; printf(“*“) goto LB; LE; (分数:2.50)A.for(w=k; w!=0; w-)printf(“*“);B.for(w=k; w; -w)printf(“*“);C.w=k;while(w-!=0)printf(“*“);D.w=k;w+; dow-; printf(“*“); while(w!=0);25.以下定义数组的语句中错误的是_。(分数:2.00)A.int num=1, 2, 3, 4, 5, 6;B.int num3=1, 2, 3, 4,
12、5, 6;C.int num24=1, 2, 3, 4, 5, 6;D.int num4=1, 2, 3, 4, 5, 6;26.有以下程序 #includestdio.h int fun(int x, int y) if(x!=y)return(x+y)/2); else return(x); main() int a=4, b=5, c=6; printf(“%d/n“, fun(2*a, fun(b, c); 程序运行后的输出结果是_。(分数:2.00)A.6B.3C.8D.1227.下列语句组中,正确的是_。(分数:1.00)A.char*s;s=“Olympic“;B.char s7
13、;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;28.以下所列对结构类型变量 tdl的声明中错误的是_。(分数:3.00)A.typedef struct aaint n;float m;AA;B.#define AA struct aaAAint n;float m;)tdl;AAtdl;C.structint n; float m;)aa;D.structint n;float m;tdl;struct aa tdl;29.以下程序运行后的输出结果是_。 #includestdjo.h void reverse(int a,i
14、nt n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; mam() int b10=10,9,8,7,6,5,4,3,2,1);int i,s=0; reverse(b,10); for(i=0;i3;i+) s+=bi; printf(“%d/n“,s); (分数:2.50)A.27B.6C.25D.3030.下列选项中,由 C语言提供的合法关键字的是_。(分数:1.00)A.swicthB.cherC.defaultD.Case31.有以下程序段: int x; for(x=3; x6; x+) printf(x%2)?(“*%d“
15、): (“#%d/n“), x); 程序段的输出结果是(分数:2.00)A.*3#4*5B.#3*4#5C.#3*4#5.D.*3#4*532.以下 fun函数返回数组中最大值的下标: #includestdio.h int fun(int*s,int n) int i,k; for(i=0,k=i;in;i+) if(sisk)_; return(k); 在横线处应填入的内容是_。(分数:1.00)A.+kB.i=kC.k+D.k=i33.有以下程序: #includestdio.h struct tt int x;struct tt *y; s3=1,0,2,0,3,0; main() s
16、truct tt *p=s+1; p-y=s; printf(“%d,“,p-x); p=p-y; printf(“%d/n“,p-x); 程序运行后的输出结果是_。(分数:1.00)A.2,3B.2,1C.1,2D.3,134.若有定义语句: int b=2; 则表达式(b2)/(3 | b)的值是_。(分数:1.00)A.0B.2C.4D.835.有以下程序: #includestdio.h main() int i=3, j=5, *p= r= printf(“%d, %d, %d, %d, %d/n“, i, j, *p, *q, *r); 执行后的输出结果是_。(分数:1.00)A.
17、3,5,3,5,5B.5,3,5,3,5C.3,5,3,5,3D.3,5,3,3,536.数据库技术的根本目标是要解决数据的_。(分数:1.00)A.存储问题B.共享问题C.安全问题D.保护问题37.有以下程序: matin() char * s=“one“, “two“, “three“, *p; p=s1; printf(“% c, % s/n“, *(p+1),so); 执行后的输出结果是_。(分数:2.00)A.n, twoB.t, oneC.w, oneD.o, two38.下列关于 C语言数据文件的叙述中正确的是_。(分数:2.00)A.文件由 ASCII码字符序列组成,C 语言只
18、能读写文本文件B.文件由二进制数据序列组成,C 语言只能读写二进制文件C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件39.已知某程序中有声明“int a4,j;”及语句“for(j=0;jA.int p4;B.int*p4;C.int*p4;D.int(*p)4;40.有以下程序: #includestdio.h main() int a=1,b=2,c=3; char flag; flag=b=2 switch(a) case 1:switch(flag) case 0: printf(“*“);brea
19、k; case 1: printf(“%“);break; case 0: switch(c) case 1: printf(“$“);break; case 2: printf(“break; default: printf(“#“); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.*$B.%#C.% char c; n=0; for(i=0;si!=“/0“;i+) n+; if(n%2=0) k=n- 1; else k=n- 2; c=sk; for(i=k-2;i=1;i=i-2) si+2=si; s1= 3; void main() char s80
20、=“abcdefgh“; printf(“/nThe original string is:%s/n“,s); fun (s); printf(“/nThe result is:%s/n“,s); (分数:30.00)三、程序修改题(总题数:1,分数:18.00)42.下列给定程序中函数 fun的功能是:将 m(1m10)个字符串连接起来,组成一个新串,放入 pt所指存储区中。例如:把三个串“abe”、“CD”、“EF”连接起来,结果是“abcCDEF”。请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题源程序 #inclu
21、destdio.h #includestring.h void fun(char str10,int m,char*pt) /*found*/ Int k,q,i; for(k=0;km;k+) q=strlen(strk); for(i=0;iq;i+) /*found*/ pti=strk,i; pt+=q; pt0=0; main() int m,h; char s1010,p120; printf(“Please enter m:“); scanf(“%d“,gets(s0); printf(“Please enter%d string:“,m); for(h=0;hm;h+)gets
22、(sh); fun(s,m,p); printf(“The result is:%s“,p); (分数:18.00)_四、程序设计题(总题数:1,分数:40.00)43.假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用 C语言提供的字符串函数。函数 fun中给出的语句仅供参考。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后字符串中的内容应当是:*ABCDEFG。 注意:部分源程序在文件 PROG1. C文件中。 请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你
23、编写的若干语句。 #include stdio. h void fun(char *a) /*以下代码仅供参考*/ int i=0, k; while(ai=“*“) i+; k=i; while(ai!=“/0“)/*以下程序段实现非*字符前移*/ ak=“/0“; main( ) char s81; void NONO( ); printf(*Enter a string: /n“); gets(s); fun(s); printf(“The string after deleted: /n“); puts(s); NONO( ); void NONO( ). /*本函数用于打开文件,输入
24、数据,调用函数,输出数据,关闭文件。*/ FILE *in, *out; int i;char s81; in=fopen (“C: /WEXAM/24990001/in. dat“, “r“); out=fopen (“C:/WEXAM/24990001/out. dat“, “w“); for(i=0; i10; i+) fscanf(in, “%s“, s); fun(s); fprintf(out, “%s/n“, s); fclose(in); fclose(out); (分数:40.00)_二级 C语言模拟 654答案解析(总分:145.00,做题时间:90 分钟)一、选择题(总题
25、数:40,分数:57.00)1.以下选项中,与 k=n+完全等价的表达式是_。(分数:1.00)A.k=n, n=n+1 B.n=n+1, k=nC.k=+nD.k+=n+1解析:解析 题中的表达式是先让 n参与赋值运算,然后再对本身进行自加,所以选 A。2.关于 Do循环体 while(条件表达式); 以下叙述中正确的是_。(分数:2.00)A.条件表达式的执行次数总是比循环体的执行次数多一次B.循环体的执行次数总是比条件表达式的执行次数多一次C.条件表达式的执行次数与循环体的执行次数一样 D.条件表达式的执行次数与循环体的执行次数无关解析:3.VC 6.0中 int类型变量所占字节数是_。
26、(分数:1.00)A.1B.2C.3D.4 解析:解析 VC 6.0 中基本整型 int占 4个字节。4.现有格式化输入语句,scanf(“x=%d,sumy=%d, linez=%dL“, x, y, z);,已知在输入数据后,x,y,z 的值分别是 23,56,78,则下列选项中正确地输入格式的是 注 “表示空格,Enter表示回车(分数:1.00)A.23, 56, 78EnterB.x=23, y=56, z=78EnterC.x=23C, sumy=56, z=78EnterD.x=23, sumy=56, linez=78Enter 解析:解析 若在 scanf的格式化控制串中插入
27、了其他字符,则在输入时要求按一一对应的位置原样输入这些字符。格式化输入函数必须严格按照双引号里面的格式进行输入。在格式化输出函数中,格式控制串中除了合法的格式说明外,可以包含任意的合法字符。5.有以下程序: #includestdio.h main() char ch=“uvwxyz“,*pc; pc=ch; printf(“%c/n“,*(pc+5); 程序运行后的输出结果是_。(分数:1.00)Az B.0C.元素 ch5的地址D.字符 y的地址解析:解析 语句 pc=ch;使得指针变量指向字符数组 ch的首地址,即指向字符u。则 pc+5指向的是字符向后移动 5位,指向字符z。所以输出的
28、*pc+5 的值即为z。因此 A选项正确。6.有以下程序: #include stdio.h main() char a 44=“; int i,j; for(i=0;i4; i+) ai0=ai3=“#“; for(j=1; j3; j+) a0j=a 3j=“#“; if(i!=0) for(i=1;i3;i+) for(j=0; j4;j+) printf(“%2c“ ,aij); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.#o o#o o# B.# # # # o o #C.# o o # # # #D.# # # # # # #解析:解析 程序的执行过程为
29、:定义 4行 4列二维数组字符 a并且初始化为 a00=“,其他元素均为 0。执行 for循环将数组第一列和第四列赋值为#。执行 for循环将数组第一行和第四行的第二个到第三个元素赋值为#,然后将剩余元素全部赋值为0。此时矩阵为#,#,#,#,#,o,o,#,#,o,o,#,#,#,#,#。之后输出矩阵第二行与第三行元素为:# o o #回车# o o #,故 A选项正确。7.有以下程序段 #includestdio.h int j; float y; char name50; scanf(“%2d%f%s“, 当执行上述程序段,从键盘上输入 55566 7777123后,y 的值为_。(分数
30、:1.00)A.566.0 B.55566.0C.7777.0D.566777.0解析:解析 本题考查的是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其中的格式命令可以说明最大域宽。在百分号(%)与格式码之间的整数用于限制从对应域读入的最大字符数。因此 j的值为 55,y 的值为 566.0,字符数组 name的值为 7777123。故本题答案为 A。8.下列选项中不是 C语句的是_。(分数:2.50)A. int i; i+; printf(“%d/n“, i); B.;C.a=5,c=10 D.;解析:解析 C 项缺少分号。因为赋值语句两个标志:赋值(就是“=“)和
31、语句(加上“;“)。9.构成计算机软件的是_。(分数:1.00)A.源代码B.程序和数据C.程序和文档D.程序、数据及相关文档 解析:解析 软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D选项。10.以下叙述中正确的是_。(分数:1.00)A.在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 B.在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C.在 printf函数中,各个输出项只能是变量D.使用 printf函数无法输出百分号%解析:解析 scanf 函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也
32、不会输出到屏幕上,所以 A选项正确。scanf()的格式控制串可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配就可以,所以 B选项错误。pnntf 函数可以输出常量也可以输出变量,所以 C选项错误。prinf 函数可以用“/%”来输出百分号%,所以 D选项错误。11.有以下程序: #include stdio.h main( ) int a=3; a+=a-=a*a; printf(“%d/n“,a); 程序的输出结果是_。(分数:1.00)A.0B.9C.3D.-12 解析:解析 等号“=”运算符是从右到左,且与“+、-、*”运算符相比,优先级较低,首先计算 a * a
33、结果为 9,执行 a=a-9后,a 的值为-6,然后执行 a+=a,即 a=a+a=-6+(-6),所以值为-12。12.以下关于字符串处理的叙述正确的是_。(分数:1.00)A.进行字符串复制时,目的串的存储空间必须足够大 B.两个字符串进行比较时,短的一个必定比长的一个小C.计算一个字符串的长度时,应包含串尾的结束标志D.两个字符串连接时,对存储空间的大小没有要求解析:解析 两个字符串进行比较时,按照字符串中相同位置的字符 ASCII码顺序进行比较,故选项 B错误;字符串需要包含串尾的结束标志,但是计算字符串长度时,不包含串尾的结束标志,故选项 C错误;要将字符串 s2连接到 s1后面,串
34、 s1所在存储空间必须可以存储字符串 s1和字符串 s2连接后构成新串的字符,故选项 D错误。故答案选 A选项。13.以下说法正确的是_。(分数:1.00)A.C程序是从第一个定义的函数开始执行的B.在 C程序中,要调用的函数必须在 main()函数中定义C.C程序是从 main()函数开始执行 D.C程序中的 main()函数必须放在程序的开始部分解析:解析 C 语言程序总是从程序的 main()函数开始执行。main()函数可以放在 C程序的任何位置,包括最前面和最后面。C 程序中的函数可以任意地相互调用,它们之间的关系是平等的。14.已知大写字母 A的 ASCII码是 65,小写字母 a
35、的 ASCII码是 97。以下不能将变量 c中的大写字母转换为对应小写字母的语句是_。(分数:2.50)A.c=(“A“+c)%26-“a“ B.c=c+32C.c=c-“A“+“a“D.c=(c-“A“)%26+“a“解析:解析 大写字母转换为对应小写字母,即加上 32,A 选项不是累加 32,所以选择 A。15.有以下程序 #include stdio.h main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.25 B.20C.4
36、5D.36解析:解析 本题考查的是数组名的概念。当数组名出现在表达式中时,它类似于一个指针常量,该指针始终指向该数组第 1个元素的位置,它的指向不能被改变。但它又与普通的指针常量有所区别:对数组名使用 sizeof运算符时,得到整个数组所占内存的大小;而对于指针常量,返回的始终是 2(一个指针占2个字节的内存)。所以,要获得数组 t的第 i个元素的内容,既可以使用常规的 ti表达式,也可以将数组名 t看作一个指针常量,使用表达式*(t+i)来获取数组 t的第 i个元素的内容。在本题中,for 循环会循环 5次,循环变量 i从 0开始每次增加 2,所以 s=t0+t2+t4+t6+t8=25。1
37、6.以下选项中关于程序模块化的叙述错误的是_。(分数:1.00)A.把程序分成若干相对独立的模块,可便于编码和调试B.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C.可采用自低向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序解析:解析 模块化的特征为将程序分解成独立的模块、模块的重用性、自顶向下逐步细化。17.有以下程序: #includestdio.h main() unsigned char a=2, b=4, c=5, d; d=a | b;d printf(“%d/n“,d); 程序运行后
38、的输出结果是_。(分数:1.00)A.3B.4 C.5D.6解析:解析 p=(int *)malloc(sizeof(int); *p=n; return *p; main() int a; a=fun(10); printf(“%d/n“, a+fun(10); 程序的运行结果是_。(分数:1.00)A.10B.20 C.0D.出错解析:解析 由 main()函数可知:程序需要打印出变量 a与 fun(10)返回值相加的结果,而变量 a的值等于 fun(10)的返回值,所以最终结果取决于 fun(10)的返回值。在函数 fun()中,传入整型参数 n,定义整型变量指针 p,并使用 mallo
39、c()函数为指针 p分配了内存空间,接着将参数 n的值赋给 p指针所指的整型对象,并返回 p指针所指对象,由此可知,函数返回值等于传入的参数 n,所以 fun(10)的返回值为10,且 a=10,最终结果为 20。因此答案 B正确。对于选项 D,虽然在 fun()函数中,p 指向的动态分配的内存空间未被释放,使得程序存在内存泄露的问题,但只要内存还有剩余,就不会影响程序的运行,不会造成程序运行崩溃。故答案为 B选项。21.以下叙述中错误的是_。(分数:2.00)A.gets函数用于从终端读入字符串B.getchar函数用于从磁盘文件读入字符 C.fputs函数用于把字符串输出到文件D.fwri
40、te函数用于以二进制形式输出数据到文件解析:解析 本题考查字符处理函数和文件读写函数,属于基础知识。其中 B选项的 getchar函数用于从终端读入字符。22.已知函数的调用形式:fread(buffer,size,count,fp);,其中 buffer代表的是_。(分数:2.00)A.一个整型变量,代表要读入的数据项总数B.一个文件指针,指向要读的文件C.一个指针,是指向的输入数据放在内存中的起始位置 D.一个存储区,存放要读的数据项解析:23.有两个关系 R和 T如下: R A B C a 1 2 b 4 4 c 2 3 d 3 2 T A C a 2 b 4 c 3 d 2 则由关系
41、R得到关系 T的操作是_。(分数:1.00)A.选择B交C.投影 D并解析:解析 关系 T是由关系 R的第 1、3 列的元组组成,这是对关系 R进行投影运算的结果。可以简单理解为:选择运算是对行的操作,投影运算是对列的操作。24.若有以下程序段,w 和 k都是整型变量: w=k; LB:if(w=0)go to LE; w-; printf(“*“) goto LB; LE; (分数:2.50)A.for(w=k; w!=0; w-)printf(“*“);B.for(w=k; w; -w)printf(“*“);C.w=k;while(w-!=0)printf(“*“); D.w=k;w+;
42、 dow-; printf(“*“); while(w!=0);解析:解析 当循环结束时,w 的值应为-1,而其他选项中 w的值为 0,故选择 C选项。25.以下定义数组的语句中错误的是_。(分数:2.00)A.int num=1, 2, 3, 4, 5, 6;B.int num3=1, 2, 3, 4, 5, 6;C.int num24=1, 2, 3, 4, 5, 6; D.int num4=1, 2, 3, 4, 5, 6;解析:解析 int num24定义 2行 4列数组,赋值给 num数组 3行错误。所以选择 C。26.有以下程序 #includestdio.h int fun(in
43、t x, int y) if(x!=y)return(x+y)/2); else return(x); main() int a=4, b=5, c=6; printf(“%d/n“, fun(2*a, fun(b, c); 程序运行后的输出结果是_。(分数:2.00)A.6 B.3C.8D.12解析:解析 本题中第一次调用为 fun(8, fun(5, 6),因为 fun(5, 6)返回值为 5,所以第二次调用为fun(8, 5)=6,因此选择 A。27.下列语句组中,正确的是_。(分数:1.00)A.char*s;s=“Olympic“; B.char s7;s=“Olympic“;C.c
44、har*s;s=“Olympic“;D.char s7;s=“Olympic“;解析:解析 字符型指针变量可以用选项 A的赋值方法:char *s;s=“Olympic“,选项 C的写法:char*s;s=“Olympic“;是错误的。字符数组可以在定义的时候初始化:char s=“Olympic“;或者char s=“Olympic“,都是正确的,但是不可以在定义字符数组后再对数组名赋值(数组名是常量,代表数组首地址)。所以 B、D 选项都是错误的。对于本例,选项 B、D 中字符数组 s的大小至少为 8,才能存放下字符串。(字符串的末尾都有结束标识“/0“)。所以选择 A选项。28.以下所列
45、对结构类型变量 tdl的声明中错误的是_。(分数:3.00)A.typedef struct aaint n;float m;AA;B.#define AA struct aaAAint n;float m;)tdl;AAtdl;C.structint n; float m;)aa; D.structint n;float m;tdl;struct aa tdl;解析:29.以下程序运行后的输出结果是_。 #includestdjo.h void reverse(int a,int n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; mam() int b10=10,9,8,7,6,5,4,3,2,1);int i,s=0; reverse(b,10); for(i=0;i3;i+) s+=bi; printf(“%d/n“,s); (分数:2.50)A.27B.6 C.25D.30解析:30.下列选项中,由 C语言提供的合法关键字的是_。(分数:1.00)A.