1、二级 C语言模拟 645及答案解析(总分:151.00,做题时间:90 分钟)一、选择题(总题数:40,分数:51.00)1.以下各选项企图说明一种新的类型名,其中正确的是 _。(分数:1.00)A.typedef vl int;B.typedef v2=intC.typedef int v3;D.typedef v4:int2.若变量已正确定义,则以下 for循环_: for(x=0,y=0;(y!=123)x+);(分数:1.00)A.执行 4次B.执行 3次C.执行次数不确定D.执行 123次3.设有定义: char*c; 以下选项中能够使 c正确指向一个字符串的是_。(分数:1.00)
2、A.char str()=“string“;c=str;B.scanf(“%s“, c);C.c=getchar();D.*c=“string“;4.若有以下程序段: struct stint n;struct st*next; stmct st a3=5,a1,7,a2,9,“/0“,*p; p=a0; 则以下选项中值为 6的表达式是_(分数:1.00)A.p-nB.(*p).nC.p-n+D.+(p-n)5.以下不能将 s所指字符串正确复制到 t所指存储空间的是_。(分数:1.00)A.while(*t=*s)t+; s+;B.for(i=0; ti=si; i+);C.do*t+=*s+
3、;while(*s);D.for(i=0, j=0; ti+=sj+; );6.有以下程序 #includestdio.h #define SUB(a)(a)-(a) main() int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:1.00)A.0B.-12C.-20D.107.有以下程序: #includestdio.h #includestring.h main() printf“%d/n“, strlen(“%d/n“, strlen(“ATS/n012/|“); 程序运行后的输出结果是_。(分数:1.
4、00)A.3B.8C.4D.98.将 E-R图转换为关系模式时,E-R 图中的实体和联系都可以表示为_。(分数:1.00)A.属性B键C.关系D域9.有以下程序 #includestdio.h 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; case 3:a+;b+; printf(“a=%d,b=%d/n“,a,b); 程序的运行结果是_。(分数:1.00)A.a=2,b=1B.a=2,b=2C.a=1,b=1D.a=
5、1,b=010.有以下程序: #includestdio.h main() int a=3; do printf(“%d,“,a-=2); while(!(-a); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.1B.1,-2,C.3,0,D.1,011.若有数组定义:char array=“China“;,则数组 array所占的空间为_。(分数:1.00)A.4个字节B.5个字节C.6个字节D.7个字节12.若有说明:int a3=1,2,3,4,5,6,7;,则 a数组第一维的大小是_。(分数:1.00)A.2B.3C.4D.无确定值13.以下程序拟实现计算
6、 sum=1+1/2+1/3+1/50。 #includestdio.h main() int i;double sum; sum=1.0; i=1; do i+;sum+=1/i; while(i50); printf(“sum=%lf/n“,sum); 程序运行后,不能得到正确结果,出现问题的语句是_。(分数:1.00)A.sum+=1/i;B.while(i50);C.sum=1.0;D.i+;14.构成计算机软件的是_。(分数:1.00)A.源代码B.程序和数据C.程序和文档D.程序、数据及相关文档15.有以下程序 #includestdio.h #define PT 3.5; #de
7、fine S(x)PT*x*x; main() int a=1,b=2;printf(“%4.1f/n“,S(a+b); 程序运行后的输出结果是_。(分数:1.00)A.31.5B.程序有错无输出结果C.7.5D.14.016.设栈的顺序存储空间为 S(0:49),栈底指针 bottom=49,栈顶指针 top=30(指向栈顶元素)。则栈中的元素个数为_。(分数:1.00)A.30B.29C.20D.1917.有以下程序 #include stdio.h void main() char s=“01aXy“;int i,n=0; for(i=0;si!=0;i+) if(s i=“a“ pri
8、ntf(“%d/n“,n); 程序运行后的输出结果是_。(分数:2.50)A.0B.2C.3D.518.有以下程序: #includestdio.h f(int a) int b=0; static int c=3; a=c+, b+; return(a); main() int a=2, i, k; for(i=0; i2; i+) k+f(a+); printf(“%d/n“, k); 程序运行后的输出结果是(分数:1.00)A.3B.6C.5D.419.有以下程序 #include stdio.h main() int i=5; do if(i%3=1) if(i%5=2) printf
9、(“*%d“,i);break;) i+; while(i!=0); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.*7B.*3*5C.*5D.*2*620.有以下程序: #includestdio.h main() short int a=5, b=6, c=7, d=8, m=2, n=2; printf(“%d/n“, (m=ab) 程序运行后的输出结果是(分数:2.00)A.0B.1C.2D.321.若有定义语句:int x3=1,2,3,4,5,6;,则以下选项中与该语句等价的是_。(分数:1.00)A.int x3=1,2,3,4,5,6;B.int x3=
10、1,2,3,4,5,6;C.int x3=1,2,3,4,5,6;D.int x3=1,2,3,4,5,6;22.有以下程序 #includestdio.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); 程序执行后的输出结果是_。(分数:2.00)A.25B.20C.45D.3623.若要使 int型变量 a、b、c、d 的值都为 0,以下写法中错误的是_。(分数:1.00)A.auto int a,b,c,d;a=b=c=d=0;B.auto int a=b=c=d=0;C
11、.auto int a=0,b=a,c=b,d=c;D.static int a,b,c,d;24.以下选项中,能用作用户标识符的是_。(分数:1.00)A._0_B.8_8C.voidD.unsigned25.下列数据结构中,属于非线性结构的是_。(分数:1.00)A.循环队列B.带链队列C.二叉树D.带链栈26.有以下程序: #includestdio.h void fun(char*c, int d) *c=*c+1, d=d+1; printf(“%c, %c“, *c, d); main() char b=“a“, a=;A“; fun( printf(“%c, %c/n“, b,
12、a); 程序运行后的输出结果是_。(分数:1.00)A.b,B,b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B27.若有代数式 (分数:2.50)A.sqrt(abs(nx+ex)B.sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(fabs(pow(n,x)+exp(x)D.sqrt(fabs(pow(x,n)+exp(x)28.有以下程序 #include void flint b)int i;for(i=2;i6;i+)bi*=2;main()int a10=1,2,3,4,5,6,7,8,9,10,i;f(a);for(i=0;i10;i+)printf
13、(“%d,“,ai);程序运行后的输出结果是_。 A.1,2,6,8,10,12,7,8,9,10, B.1,2,3,4,5,6,7,8,9,10, C.1,2,3,4,10,12,14,16,9,10, D.1,2,6,8,10,12,14,16,9,10,A B C D A解析 本题主要考查的是:数组名用作函数参数。数组名用作函数参数的情况类似于指针,属于传地址,故对形参数组元素的修改会同时修改实参。本题中,f()函数通过一个 for循环语句,将传入数组的元素从下标 2到下标 5每个各自乘以 2。因此,调用结束时,数组 a中的内容为1,2,6,8,10,12,7,8,9,10,故本题应该选
14、择 A。(分数:1.00)A.1,2,6,8,10,12,7,8,9,10,B.1,2,3,4,5,6,7,8,9,10,C.1,2,3,4,10,12,14,16,9,10,D.1,2,6,8,10,12,14,16,9,10,29.有下列程序: #includestdio.h void fun(int a,int n,int flag) int i=0,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(flag?(aiaj):(aiaj) t=ai;ai=aj;aj=t; main() int c10=7,9,10,8,3,5,1,6,2,4,i; fun
15、(c,10,1); fun(c,8,0); for(i=0;i10;i+) printf(“%d,“,ci); 程序执行后的输出结果是_。(分数:1.00)A.8,7,6,5,4,3,2,1,9,10,B.3,4,5,6,7,8,9,10,2,1,C.9,10,1,2,3,4,5,6,7,8,D.10,9,8,7,6,5,4,3,1,2,30.软件生命周期是指_。(分数:1.00)A.软件产品从提出、实现、使用维护到停止使用退役的过程B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程31.有以下程序: #includestdio.h main() char
16、a510=“China“,“beijing“,“very“,“welcome“,“you“; char *p5;int i; for(i=3;i5;i+) pi=*(a+i); printf(“%s“,pi); printf(“%c“,*pi); 程序执行后的输出结果是_。(分数:1.00)A.wwyyB.ChinaCbeijingbC.veryvwelcomewD.welcomewyouy32.以下程序段中的变量已正确定义 for(i=0;i4;i+,i+) for(k=1;k3;k+);printf(“*“); 程序段的输出结果是_。(分数:1.00)A.* *B.*C.*D.*33.设有
17、宏定义: #define IsDIV(k,n)(k%n=1)?1:0) 且变量 m已正确定义并赋值,则宏调用: IsDIV(m,5)IsDIV(m,7) 为真时所要表达的是_。(分数:2.00)A.判断 m被 5和 7整除是否都余 1B.判断 m是否能被 5和 7整除C.判断 m被 5或者 7整除是否余 1D.判断 m是否能被 5或者 7整除34.下面描述中,不属于软件危机表现的是_。(分数:1.00)A.软件过程不规范B.软件开发生产率低C.软件质量难以控制D.软件成本不断提高35.有以下定义和语句: struct workers int num; char name20; char c;
18、struct int day; int month; int year; s; ; struct workers w, *pw; pw= 能给 w中 year成员赋 1980的语句是_。(分数:1.00)A.*pw.year=1980;B.year=1980;C.pw-year=1980D.s.year=1980;36.设有定义: int x=2; 以下表达式中,值不为 6的是_。(分数:2.50)A.2*x, x+=2B.x+, 2*xC.x*=(1+x)D.x*=x+137.某系统结构图如下图所示: (分数:1.00)A.0B.1C.2D.338.VC6.0中 int类型变量所占字节数是(
19、分数:2.00)A.1B.2C.3D.439.以下程序的输出结果是_。 #include stdio.h 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); printf(“/n“); (分数:2.50)A.3981B.4284C.2668D.287040.若有语句 typedef struct Sint g;char h;T;,则下列叙述中正确的是_。(分数:2.00)A.可用 S定义结构体变量B.可用 T定义结构体变量C.S是 struct类型的变量D
20、.T是 struct S类型的变量二、程序填空题(总题数:1,分数:30.00)41.请补充函数 proc(),该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是:1 1 2 2 2 3 4 4 5 5 6 6 6 7 7 8 10 10。 删除后,数组中的内容应该是:1 2 3 4 5 6 7 8 10。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #d
21、efine M 80 int proc(int arr, int n) int i, t, j=0; t=arr0; for(i=1; in; i+) if( 1) ; else 2; t=arri; arrj+=t; return j; void main() int arrM=1, 1, 2, 2, 2, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 8, 10, 10, i, n=18; printf(“The original data: /n“); for(i=0; in; i+) printf(“%4d“, arri); n=proc(arr, n); printf(
22、“/n/nThe data after deleted; /n“); for(i=0; in; i+) printf(“%4d“, arri); printf(“/n“); (分数:30.00)三、程序修改题(总题数:1,分数:30.00)42.给定程序 MODI1.C中函数 fun的功能是:判断 ch中的字符是否与 str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。 请改正程序中的错误,使它能进行正确的操作。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #includestdio.h #includestring.h /*found*/
23、void fun(char str, char ch) while(*str /*found*/ if(*str=ch) str0=ch; /*found*/ str1=“0“; main() char s81, c; printf(“/nPlease enter a string:/n“); gets(s); printf(“/n Please enter the character to search:“); c=getchar(); fun(s, c); printf(“/nThe result is%s/n“, s); (分数:30.00)_四、程序设计题(总题数:1,分数:40.00
24、)43.请编写函数 proc(),它的功能是计算: s=(1-ln(1)-ln(2)-ln(3)-ln(m)2 s作为函数值返回。 在 C语言中可调用 log(n)函数求 ln(n)。log 函数的引用说明是 double log(double x)。 例如,若 m的值为 10,则 proc()函数值为 198.934454。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includemath.
25、h double proc(int m) void main() system(“CLS“); printf(“%f/n“,proc(10); (分数:40.00)_二级 C语言模拟 645答案解析(总分:151.00,做题时间:90 分钟)一、选择题(总题数:40,分数:51.00)1.以下各选项企图说明一种新的类型名,其中正确的是 _。(分数:1.00)A.typedef vl int;B.typedef v2=intC.typedef int v3; D.typedef v4:int解析:解析 C 语言中可以使用 typedef来重新定义已有的数据类型,相当于为数据类型取个别名。2.若变
26、量已正确定义,则以下 for循环_: for(x=0,y=0;(y!=123)x+);(分数:1.00)A.执行 4次 B.执行 3次C.执行次数不确定D.执行 123次解析:解析 循环判断语句为“(y!=123) 以下选项中能够使 c正确指向一个字符串的是_。(分数:1.00)A.char str()=“string“;c=str; B.scanf(“%s“, c);C.c=getchar();D.*c=“string“;解析:解析 A 选项为正确用法,先将字符串存于字符数组中,然后将数组名赋给字符指针(数组名代表数组首地址,定义数组时为其分配确定地址)。C 选项错误,getchar()函数
27、只能输入一个字符给字符型变量,而不是字符指针。B 选项和 D选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在 B选项和 D选项中,字符指针没有被赋值,是个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据,在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。所以A选项正确。4.若有以下程序段: struct stint n;struct st*next; stmct st a3=5,a1,7,a2,9,“/0“,*p; p=a0; 则以下选项中值为 6的表达式是_(分数:1.00)A.p-nB.(*p).nC.p-n+D.+(p-n) 解析:解
28、析 本题考查结构体变量的引用,其中 a为定义的结构体数组,D 选项中 p-n 为 5,+(p-n)为6,所以 D选项正确。5.以下不能将 s所指字符串正确复制到 t所指存储空间的是_。(分数:1.00)A.while(*t=*s)t+; s+;B.for(i=0; ti=si; i+);C.do*t+=*s+;while(*s); D.for(i=0, j=0; ti+=sj+; );解析:解析 C 项复制时没有复制结束串“/0”。6.有以下程序 #includestdio.h #define SUB(a)(a)-(a) main() int a=2,b=3,c=5,d; d=SUB(a+b)
29、*c; printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:1.00)A.0B.-12C.-20 D.10解析:解析 SUB(a+b)*c 展开后,(2+3)-(2+3)*5 值为-20,所以答案选择 C。7.有以下程序: #includestdio.h #includestring.h main() printf“%d/n“, strlen(“%d/n“, strlen(“ATS/n012/|“); 程序运行后的输出结果是_。(分数:1.00)A.3B.8 C.4D.9解析:解析 本题考查 strlen函数和转移字符,strlen 函数的功能是求字符串的长度,在本题中有“/
30、”,C 语言中“/”是转义字符,在计算长度时会将转义字符及后面的第一个字符作为 1个长度进行计算,所以答案选择 B。8.将 E-R图转换为关系模式时,E-R 图中的实体和联系都可以表示为_。(分数:1.00)A.属性B键C.关系 D域解析:解析 采用 E-R方法得到的全局概念模型是对信息世界的描述,并不适用于计算机处理,为了适合关系数据库系统的处理,必须将 E-R图转换成关系模式。这就是逻辑设计的主要内容。E-R 图是由实体、属性和联系组成,而关系模式中只有一种元素关系。故 C选项正确。9.有以下程序 #includestdio.h main() int x=1,y=0,a=0,b=0; sw
31、itch(x) case 1: switch(y) case 0: a+;break; case 1: b+;break; case 2:a+;b+;break; case 3:a+;b+; printf(“a=%d,b=%d/n“,a,b); 程序的运行结果是_。(分数:1.00)A.a=2,b=1 B.a=2,b=2C.a=1,b=1D.a=1,b=0解析:解析 case 常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行 switch语句时,根据 switch的表达式,找到与之匹配的 case语句,就从该 case子句执行下去,不再进行判断,直到碰到 break或语句结束为止。
32、因此执行内层 switch(y)时只执行了 a+,此时 a的值为 1。然后执行外层case 2语句的 a+;b+;a 为 2,b 为 1。所以结果为 A。10.有以下程序: #includestdio.h main() int a=3; do printf(“%d,“,a-=2); while(!(-a); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.1B.1,-2, C.3,0,D.1,0解析:解析 本题重点考查 do-while语句,该循环语句的特点是:先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环,如果为假,则终止循环。因此,do-whi
33、le 循环至少要执行一次循环语句。变量 a赋初值为 3,每循环一次需执行语句 a-=2一次,同时循环条件使变量 a自减 1,所以第一次循环后变量 a变为 1,第 2次循环后变量 a变为-2,因此 B选项正确。11.若有数组定义:char array=“China“;,则数组 array所占的空间为_。(分数:1.00)A.4个字节B.5个字节C.6个字节 D.7个字节解析:12.若有说明:int a3=1,2,3,4,5,6,7;,则 a数组第一维的大小是_。(分数:1.00)A.2B.3 C.4D.无确定值解析:13.以下程序拟实现计算 sum=1+1/2+1/3+1/50。 #includ
34、estdio.h main() int i;double sum; sum=1.0; i=1; do i+;sum+=1/i; while(i50); printf(“sum=%lf/n“,sum); 程序运行后,不能得到正确结果,出现问题的语句是_。(分数:1.00)A.sum+=1/i; B.while(i50);C.sum=1.0;D.i+;解析:解析 选项 A中,sum+=1/i;i 为整型,因此 1/i是整型类型,当 1/i有小数时,小数部分会被截断。因此 1/i结果始终为 0,导致结果出错,应改为 sum+=1.0/i。因此答案为 A选项。14.构成计算机软件的是_。(分数:1.0
35、0)A.源代码B.程序和数据C.程序和文档D.程序、数据及相关文档 解析:解析 软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档。故选 D。15.有以下程序 #includestdio.h #define PT 3.5; #define S(x)PT*x*x; main() int a=1,b=2;printf(“%4.1f/n“,S(a+b); 程序运行后的输出结果是_。(分数:1.00)A.31.5B.程序有错无输出结果 C.7.5D.14.0解析:解析 宏定义不是 C语句,末尾不需要有分号。因此语句“printf(“%4.1f/n“,S(a+b);”展开后为“p
36、rintf(“%4.1f/n“,3.5;*a+b*a+b;);”,所以程序会出现语法错误。16.设栈的顺序存储空间为 S(0:49),栈底指针 bottom=49,栈顶指针 top=30(指向栈顶元素)。则栈中的元素个数为_。(分数:1.00)A.30B.29C.20 D.19解析:解析 栈是一种特殊的线性表,它所有的插入与删除操作都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素,退栈运算即取出栈顶元素赋予指定变量。在内存中,栈的增大方向是地址递减,元素依次存储在单元 30:49中,个数为:49-30+1=20 个。17.有以下程序 #include stdio.h void mai
37、n() char s=“01aXy“;int i,n=0; for(i=0;si!=0;i+) if(s i=“a“ printf(“%d/n“,n); 程序运行后的输出结果是_。(分数:2.50)A.0 B.2C.3D.5解析:解析 这段程序的功能求出字符串 s中字符的 ASCII码小于小写字符 a并且大于小写字符 z的字符的个数。因为小写字符 z的 ASCII码大于小写字符 a的 ASCII码,所以满足 a的 ASCII码并且大于 z的 ASCII码的字符是不存在的,所以输出 0。18.有以下程序: #includestdio.h f(int a) int b=0; static int
38、c=3; a=c+, b+; return(a); main() int a=2, i, k; for(i=0; i2; i+) k+f(a+); printf(“%d/n“, k); 程序运行后的输出结果是(分数:1.00)A.3B.6C.5D.4 解析:19.有以下程序 #include stdio.h main() int i=5; do if(i%3=1) if(i%5=2) printf(“*%d“,i);break;) i+; while(i!=0); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.*7 B.*3*5C.*5D.*2*6解析:解析 本题考查的
39、是 break语句。dowhile 循环是“先执行,后判断”,所以无论条件如何,它都至少会执行一遍。程序首先初始化变量 i为 5,然后进入 dowhile循环体,首先判断(i%3=1),因为 5%3=2,所以 if条件不满足,跳过下面的 if语句,执行 i+,i 变为 6。第 1遍循环结束,判断(i!=0)为真,继续循环。现在 i%3=6%3=0,所以 i语句还是不被执行,继续 i+,i 变为 7,仍然满足(i!=0),继续循环。第 3遍循环 i%3=7%3=1,满足条件(i%3=1),继续判断条件 i%5=2成立,即输出*7,然后执行hreak语句跳出循环。20.有以下程序: #includ
40、estdio.h main() short int a=5, b=6, c=7, d=8, m=2, n=2; printf(“%d/n“, (m=ab) 程序运行后的输出结果是(分数:2.00)A.0 B.1C.2D.3解析:21.若有定义语句:int x3=1,2,3,4,5,6;,则以下选项中与该语句等价的是_。(分数:1.00)A.int x3=1,2,3,4,5,6;B.int x3=1,2,3,4,5,6;C.int x3=1,2,3,4,5,6;D.int x3=1,2,3,4,5,6; 解析:解析 二维数组初始化时,可以省略第一维的大小,但是不能省略第二维大小,这是由编译器原理
41、限制的。事实上,编译器是这样处理数组的:设有数组 int amn,如果要访问 aij的值,编译器的寻址方式为: for(i=0;i9;i+=2)s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:2.00)A.25 B.20C.45D.36解析:解析 本题考查的是通过数组首地址引用数组之素。当数组名出现在表达式中时,它类似于一个指针常量,该指针始终指向该数组第 1个元素的位置,它的指向不能被改变。但它又与普通的指针常量有所区别:对数组名使用 sizeof运算符时,得到整个数组所占内存的大小;而对于指针常量,在 TC中返回的始终是 2(TC中,一个指针占
42、2个字节的内存)。所以,要获得数组 t的第 i个元素的内容,既可以使用常规的 ti表达式,也可以将数组名 t看作一个指针常量,使用表达式*(t+i)来获取数组 t的第 i个元素的内容。在本题中,for 循环会循环 5次,循环变量 i从 0开始每次增加 2,所以 s=t0+ t2 + t4 + t6 + t8=25。23.若要使 int型变量 a、b、c、d 的值都为 0,以下写法中错误的是_。(分数:1.00)A.auto int a,b,c,d;a=b=c=d=0;B.auto int a=b=c=d=0; C.auto int a=0,b=a,c=b,d=c;D.static int a,
43、b,c,d;解析:解析 选项 B中,使用 auto int定义了整型 a,但 b、c、d 都是未定义的变量,所以不能做右值使用,错误;选项 A、C 都是正确的定义和初始化;选项 D中,static 变量定义了 a、b、c、d,由于未初始化,在程序运行时首先将这四个变量赋值为 0,正确。故本题答案为 B选项。24.以下选项中,能用作用户标识符的是_。(分数:1.00)A._0_ B.8_8C.voidD.unsigned解析:解析 C 语言中标识符由字母、下划线或数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。B 选项中以数字 8开头,所以错误。C 与 D中用的是关键字 void
44、与 unsigned,因此错误。故本题答案为 A。25.下列数据结构中,属于非线性结构的是_。(分数:1.00)A.循环队列B.带链队列C.二叉树 D.带链栈解析:解析 线性结构是指数据元素只有一个直接前驱和直接后驱,线性表是线性结构,循环队列、带链队列和栈是指对插入和删除有特殊要求的线性表,是线性结构。而二叉树是非线性结构。26.有以下程序: #includestdio.h void fun(char*c, int d) *c=*c+1, d=d+1; printf(“%c, %c“, *c, d); main() char b=“a“, a=;A“; fun( printf(“%c, %c
45、/n“, b, a); 程序运行后的输出结果是_。(分数:1.00)A.b,B,b,A B.b,B,B,AC.a,B,B,aD.a,B,a,B解析:解析 本题考查了函数的调用。首先主函数定义了两个字符型数据 b和 a,给 b赋值为字母 a,a赋值为字母 A,调用 fun(for(i=2;i6;i+)bi*=2;main()int a10=1,2,3,4,5,6,7,8,9,10,i;f(a);for(i=0;i10;i+)printf(“%d,“,ai);程序运行后的输出结果是_。 A.1,2,6,8,10,12,7,8,9,10, B.1,2,3,4,5,6,7,8,9,10, C.1,2,3,4,10,12,14,16,9,10, D.1,2,6,8,10,12,14,16,9,10,A B C D A解析 本题主要考查的是:数组名用作函数参数。数组名用作函数参数的情况类似于指针,属于传地址,故对形参数组元素的修改会同时修改实参。本题中,f()函数通过一个 for循环语句,将传入数组的