1、国家二级( C语言)笔试模拟试卷 87及答案与解析 1 下列叙述中错误的是 ( )。 ( A)一种数据的逻辑结构可以有多种存储结构 ( B)数据的存储结构与数据处理的效率无关 ( C)数据的存储结构与数据处理的效率密切相关 ( D)数据的存储结构在计算机中所占的空间不一定是连续的 2 以下数据结构中不属于线性数据结构的是 ( )。 ( A)队列 ( B)线性表 ( C)二叉树 ( D)栈 3 在一棵二叉树上第 5层的结点数最多是 ( )。 ( A) 8 ( B) 16 ( C) 32 ( D) 15 4 下面描述中,符合结构化程序设计风格的是 ( )。 ( A)使用顺序、选择和重复 (循环 )
2、3种基本控制结构表示程序的控制逻辑 ( B)模块只有一个入口,可以有多个出口 ( C)注重提高程序的执行效率 ( D)不使用 goto语句 5 下面对对象概念描述错误的是 ( )。 ( A)任何对象都必须有继承性 ( B)对象是属性和方法的封装体 ( C)对象间的通信靠消息传递 ( D)操作是对象的动态属性 6 在结构化设计方法中生成的结构图 (SC)中,带有箭头的连线表示 ( )。 ( A)模块之间的调用关系 ( B)程序的组成成分 ( C)控制程序的执行顺序 ( D)数据的流向 7 下列叙述中正确的是 ( )。 ( A)接口复杂的模块,其耦合程度一定低 ( B)耦合程度弱的模块,其内聚程度
3、一定低 ( C)耦合程度弱的模块,其内聚程度一定高 ( D)上述三种说法都不对 8 在关系模型中, ( )。 ( A)为了建立一个关系,首先要构造数据的逻辑关系 ( B)表示关系的二维表中各元组的每一个分量还可以分成若干数据项 ( C)一个关系的属性名表称为关系模式 ( D)一个关系可以包括多个二维表 9 下列关系运算中 ,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是 ( )。 ( A)选择 ( B)连接 ( C)投影 ( D)并 10 下列关于 E-R图的描述中正确的是 ( )。 ( A) E-R图只能表示实体之间的联系 ( B) E-R图只能表示实体和属性之间的联系 ( C
4、) E-R图只能表示实体和属性 ( D) E-R图能表示实体、属性和实体之间的联系 11 C语言源程序的最小单位是 ( )。 ( A)程序行 ( B)语句 ( C)函数 ( D)字符 12 以下选项中合法的用户标识符是 ( )。 ( A) long ( B) _2Test ( C) 3Dmax ( D) A.dat 13 已知大写字母 A的 ASCII码值是 65,小写字母 a的 ASCII码是 97,则用八进制表示的字符常量 101是 ( )。 ( A)字符 A ( B)字符 a ( C)字符 e ( D)非法的常量 14 设变量 a是 int型, f是 float型, i是 double型
5、,则表达式 10+a+i*f的值的数据类型为 ( )。 ( A) int ( B) float ( C) double ( D)不确定 15 以下非法的赋值语句是 ( )。 ( A) n=(i=2, +i); ( B) j+; ( C) +(i+1); ( D) x=j 0; 16 设 a和 b均为双精度型变量,且 a=5.5、 b=2.5,则表达式 (int)a+b/b的值是 ( )。 ( A) 6.5 ( B) 6 ( C) 5.5 ( D) 6 17 已知 i、 j、 k为整型变量,若从键盘输入 1, 2, 3回车,使 i的值为 1、 j的值为 2、 k的值为 3,以下选项中正确的输入语
6、句是 ( )。 ( A) scanf(“%2d%2d%2d“, ( B) scanf(“%d %d %d“, ( C) scanf(“%d,%d,%d“, ( D) scanf(“i=%d,j=%d,k=%d“, 18 a、 b、 c、 d变量均为 float类型且已正确赋值,下列选项中与数学式子“2ab/(5cd)”等价的 C语言表达式是 ( )。 ( A) 2/5*a/c*d/b ( B) a/(5*c*d)*(2*b) ( C) 2*a*b/5*c*d ( D) 2/5*a*d*(1/c*d) 19 若有如下程序; main() int m=-i; printf(“%d,%u,%o,%X
7、“,m,m,m,m); 则程序运行后的输出结果是 ( )。 ( A) -1, 65535, 177777, ffff ( B) -1, -1, 177777, fffe ( C) -1, 1, 177777, ffff ( D) -1, 65535, 177776, fffe 20 若有以下程序: main() int k=2,i=2,m; m=(k+=i*=k);printf(%d,%dn“,m,i); 执行后的输出结果 是 ( )。 ( A) 8, 6 ( B) 8, 3 ( C) 6, 4 ( D) 7, 4 21 以下程序的输出结果是 ( )。 main() char c1=6,c1=
8、0 printf(“%d,%d,%dn“,c1,c2,c1-c2); ( A)因输出格式不合法,输出出错信息 ( B) 54, 48, 6 ( C) 6, 0, 7 ( D) 6, 0, 6 22 设有以下语句: char a=3,b=6,C; c=a|b 2; printf(“%dn“,C); 则 c的二进制值是 ( )。 ( A) 11011 ( B) 10100 ( C) 11100 ( D) 11000 23 表达式 “1|2|3|4”的值是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 24 若有如下定义: int x=6,y=3,z=2; 则表达式 “x=y|y
9、 z printf(“%d“;n); 则 while循环执行的次数是 ( )。 ( A) 0 ( B) 1 ( C) 10 ( D)无数 26 若说明 int*p, n;则通过语句 scanf能够正确读入数据的程序段是 ( )。 ( A) p= for(;) if(i=3|i=5) continue; if(i=6) break; i+; s+=i; printf (“%dn“s); 程序运行后的输出结果是( )。 ( A) 10 ( B) 13 ( C) 21 ( D)程序进入死循环 28 下面程序段的执行结果为 ( )。 int i=3,j=0,k=0; for(;i 0;-i) +k;
10、do +j; if (i!=j) break; +k; while(j 5); printf(“i=%d j=%d k=%dn“,i,j,k); ( A) i=0 j=4 k=12 ( B) i=0 j=5 k=5 ( C) i=0 j=4 k=4 ( D) i=0 j=3 k=3 29 下列条件语句中,功能与其他语句不同的是 ( )。 ( A) if(a) printf(“%dn“,x); else printf(“%dn“,y); ( B) if(a=O) printf(“%dn“,y); else printf(“%dn“,x); ( C) if(a!=0) printf(“%dn“,x
11、); else printf(“%dn“,y); ( D) if(a=0) printf(“%dn“,x); else printf(“%dn“,y); 30 若有函数内部说明: int a34;则数组 a中各元素 ( )。 ( A)可在程序的运行阶段得到初值 0 ( B)可在程序的编译阶段得到初值 0 ( C)不能得到确定的初值 ( D)可在程序的编译或运行阶段得到初值 0 31 有以下 程序: main() int a10=1,2,3,4,5,6,7,8,9,10,*p= printf(“%dn“, *p+*q); ( A) 16 ( B) 10 ( C) 8 ( D) 6 32 以下叙述
12、中正确的是 ( )。 ( A)局部变量说明为 static存储类,其生存期将得到延长 ( B)全局变量说明为 static存储类,其作用域将被扩大 ( C)任何存储类的变量在未赋初值时,其值都是不确定的 ( D)形参可以使用的存储类说明符与局部变量完 全相同 33 下面程序段的执行结果可能为 ( )。 main() int b=1,2,3),i; for(i=1;i=4;+i) printf(“%ut“,bi); ( A) 1 2 3 65516 ( B) 0 1 2 3 ( C) 2 3 65516 285 ( D)程序不能通过编译 34 下面程序的输出结果是 ( )。 #define WW
13、(X) X*X main() int a,i; i=3; a=+WW(i+1); printf(“%dn“,a); ( A) 5 ( B) 6 ( C) 9 ( D)程序有错误 35 以下程序的输出结果是 ( )。 main() int a=2,k; for(k=0;k 3;k+) printf(“%4d“,f1(a); f1(int a) int b=0;static int c=3; b+;c+; return(a+b+c); ( A) 7 7 7 ( B) 7 10 13 ( C) 7 9 11 ( D) 7 8 9 36 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #
14、define N 10 void artin( int xN) int i=0; while(i N) scanf(“%d“, ); 在下划线处应填入的是 ( )。 ( A) x+i ( B) void func2(int i); char st=“hello,friend!“; void funcl(int i) printf(“%C“,sti); if(i 3) i+=2;func2(i); ) void func2(int i) printf(“%c“,sti); if(i 3) i+=2;func1(i); main() int i=0;funcl(i);printf(“n“); )
15、( A) hlm ( B) hlo ( C) hello ( D) he1 38 根据下面的定义,能打印出字母 M的语句是 ( )。 struct person char name9; int age; ; struct person class10=“John“,17,“Paul“,19,“Mary“,18,“Adam“,16; ( A) printf(“%cn“,class3.name; ( B) printf(“%cn“,class2.name0); ( C) printf(“%cn“,class3.name1); ( D) printf(“%cn“,class2.name1); 39
16、以下正确的数组定义语句是 ( )。 ( A) int y14=1,2,3,4,5, ; ( B) float x3=l,2,3; ( C) long s23=1,1,21,2,3,; ( D) double t3=0 40 下列程序执行后的输出结果是: main() char arr24; strcpy(arr“you“); strcpy(arr1,“me“); arr03= printf(“%sn“,arr); 程序的输出结果是 ( )。 ( A) you for(k=0;k =2;k+) switch(k) case 0: X+; case 1: y+; case 2: X+;y+; pr
17、intf(“%d,“dn“,x,y); 则程序运行后的输出结果是 ( )。 ( A) 3,3 ( B) 2,2 ( C) 4,5 ( D) 2,3 42 以下程序中函数 scmp的功能是返回形参指针 s1和 s2所指字符串中较小字符串的首地址: #include stdio.h #include string.h char *scmp (char *S1,char *s2) if(strcmp(s1,s2) 0) return(s1); else return(s2); main() int i; char string20,str3 20; for(i=0;i 3;i+) gets(stri
18、); strcpy(string,scmp(str0,str1);/*库函数 strcpy对字符串进行复制 */ strcpy(string,scmp(string, str2); printf(“%sn“,string); 若运行时依次输入abed、 abba和 abc三个字符串,则输出结果为 ( )。 ( A) abed ( B) abba ( C) abc ( D) abca 43 若有如下程序: void sub() int a,b; a=lO;b=20; printf(“%d,%dn“,b,a); main() int a=1O,b=20; sub(); printf(“%d,%dn
19、“ab); 则程序运行后的输出结果是 ( )。 ( A) 10,20 ( B) 20,10 20,10 ( C) 20,10 ( D) 10,20 10,20 20,10 44 在下述程序中,判断 i j共执行的次数是 ( )。 main() int i=O,j=10,k=2,s=0; for( ; ) i+=k; if(i j) ptintf(“%d“,s); break; s+=i; ( A) 4 ( B) 7 ( C) 5 ( D) 6 45 整型变量 x和 y的值相等并且为非零值,则下面选项中,结果一定为零的表达式是 ( )。 ( A) x|y ( B) xy ( C) x|y ( D
20、) x printf(“%dn“,MA(1+a+b); ( A) 5 ( B) 6 ( C) 7 ( D) 8 47 以下各选项均为说明一种新的类型名,其中正确的是 ( )。 ( A) typedef v1 int; ( B) typedef v1=int; ( C) typedef int v1; ( D) typedef v1=int; 48 有以下程序: main() union unsigned int n; unsigned char c; u1; u1.c=A; printf(“%cn“,u1.n); 执行后输出结果是 ( )。 ( A)产生语法错误 ( B)随机值 ( C) A
21、( D) 65 49 若要用 fopen函数打开一个文本文件,该文件要既能读也能写,则文件使用方式的字符串为 ( )。 ( A) r+ ( B) a+ ( C) rb+ ( D) wb+“ 50 若有如下程序: sub(int *t,int a34) int m,n; for(m=0;m 3;m+) for(n=0;n 4;n+) *t=amn;t+; main() int*t,s34)=1,2,3),4,5,6),7,8,9; t=(int*)malloc(50); sub(t,s); printf(“%d,%dn“,t4,t7); 则程序运行后的输出结果是 ( )。 ( A) 4, 7 (
22、 B) 4, 0 ( C) 5, 8 ( D)程序错误 51 算法的复杂度主要包括【 】复杂度和空间复杂度。 52 在面向对象方法中,允许作用于某个对象上的操作称为【 】。 53 软件生命周期包括 8个阶段。为了使各时期的任务更明确,又可分为 3个时期:软件定义期、软件开发期、软件维护期。编码和测试属于【 】期。 54 如果一个工人可管理多个设备,而一个设备只被一个工人管理,则卖体 “工人 ”与实体 “设备 ”之间存在【 】关系。 55 关系数据库管理系统能实现的专门关系运算包括选择、连接和【 】。 56 若下面程序的输出结果是 4,请填空。 main() int i, j, k; k = 0
23、 ; i = j =【 】; k+=-(i+j); printf(“%dn“, k); 57 若有程序: main() int i, j; scanf(i=%d, j=%d“; &i, &j); printf(“i=%d, j=%dn“, i, j); 要求给 i赋 10,给 j赋 20,则应该从键盘输入上【 】。 58 若有以下程序: main() int p, a=5; if(p=a!=0) printf(“%dn“, p); else printf(“%dn“, p+2); 执行后输出结果是【 】。 59 以下程序运行后的输出结果是【 】。 main() int X=1, y=0, a=
24、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); 60 以下程序运行后的输出结果是【 】。 main() int a44=1, 2, 3, 4), 5, 6, 7, 8, 11, 12, 13, 14, 15, 16,17, 18; int i=0, j=0, s=0; while (i+ 4) if (i=2 | i=4)continue; j=0; do S+= aij ; j+; while (j 4
25、); printf(“%dn“, s); 61 若有如下程序: main() int x=20; if(x 10)printf(“%d“, x-=5); if(x 15)printf(“%d“, x); 则程序运行后的输出结果是【 】。 62 函数 fun的功能是计算 xn double fun(double x, int n) int i; double y=1; for(i=1; i =n; i+) y=y*x; return y; 主函数中已正确定义 m、 a、 b变量并赋值,而且调用 fun函数计算: m=a4+b4-(a+b)3。实现这一计算的函数调用语句为【 】。 63 下述程序的
26、输出结果是【 】。 # include stdio.h void main() char c120=“1234“; char c220=“5678“; char *p1, *p2; p1=c1; p2=c2; while(*p1+) while(*p1+=*p2+); printf(“%s, c1); 64 若 fp已正确定义为一个文件指针, d1.dat为二进制文件,请填空,以便为 “读 ”而打开此文件: fp=fopen(【 】 );。 65 函数 check用来判断字符串 s是否是 “回文 ”(顺读和倒读都一样的字符串为 “回文 ”,如 abeba)。是则函数返回值 1,否则返回值 0,
27、请填空。 int check(char *s) char *p1, *p2; int n; n=strlen(s); p1=s; p2=【 】; while(p1 p2) if (*p1 != *p2) break; else p1+; p2-; if(【 】 )return 0; else return 1; 66 以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。 main() int i, a20,sum, count; sum=count=0; for(i=0; i 20; i+)scanf(“%d“, (【 】 ); for(i=0; i 20; i+) i
28、f(ai 0) count+; sum+=(【 】 ); printf(“sum=%d, count=%dhn“, sum, count); 67 下面程序的功能是求整数 m、 n的最大公约数,请填空。 main() int m, n, r; scanf(“%d, %d“, &m, &n); if(【 】 )r=m; m=n; n=r; ) while(【 】 ) r=m%n; m=n; n=r; printf(“%d“, m); 国家二级( C语言)笔试模拟试卷 87答案与解析 1 【正确答案】 B 【试题解析】 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、
29、索引等,选项 A和选项 D正确。采用不同的存储结构,其数据处理的效率不同,因此,在处理数据时选择合适的存储结构很重要,选项 c正确,选项 B错误,应为本题正确答案。 2 【正确答案】 C 【试题解析】 线性 结构是指满足如下条件的非空数据结构:有且只有一个根结点;每一个结点最多有一个前驱、一个后继。队列、线性表和栈同时满足这些条件,二叉树的结点可能存在两个后继,所以不是线性结构。 3 【正确答案】 B 【试题解析】 在二叉树的第 K层上,最多有 2k-1个结点。所以,第 5层的结点数最多为 25-1即 16个。 4 【正确答案】 A 【试题解析】 符合结构化程序设计风格中,应该选择只有一个入口
30、和一个出口的模块,故选项 B错误;首先要保证程序正确,然后才要求提高效率,故选项 C错误;严格控制使用 goto语句 ,必要时可以使用,故选项 D错误。 5 【正确答案】 A 【试题解析】 继承是使用已有的类定义作为基础建立新类,已有的类可当成基类来引用,则新类相应可当成派生类来引用。但并非所有对象都必须有继承性。选项 A说法错误。 6 【正确答案】 A 【试题解析】 结构图中用带有箭头的连线表示模块之间的调用关系。 7 【正确答案】 C 【试题解析】 模块之间的连接形式以及模块接口的复杂性,是影响模块耦合的主要因素。接口复杂的模块,其耦合程度要比接口简单的的模块强;耦合程度弱的模块,其内聚程
31、度一定高。 8 【正确答案】 C 【试题解析】 在关系模型中,只要将数据按照一定的关系存入计算机,也就是建立关系,不需要事先构造数据的逻辑关系,选项 A错误;表示关系的二维表最基本的要求是,表中元组的每一个分量必须是不可分的数据项,即不允许表中再有表,选项 B和选项 D错误。 9 【正确答案】 B 【试题解析】 两个关系的笛卡尔积中的属 性个数是两个原关系中的属性个数之和。即两个关系经连接运算后得到的新关系中属性个数多于原来关系中属性个数。 10 【正确答案】 D 【试题解析】 E-R图不仅可以描述实体及其相互之间的联系,还可以描述多个实体集之间的联系和一个实体集内部实体之间的联系。 11 【
32、正确答案】 C 【试题解析】 C语言源程序的最小单位是函数,所以本题选 C。 12 【正确答案】 B 【试题解析】 long为 C语言的保留字,不能作为用户标识符,故选项 A错误。3Dmax开头的第一个为数字,而 C语言规定,第一 个字符必须为字母或者下划线,故选项 C错误; A.dat中的字符 “.”不符合 C语言中用户标识符只能由字母、数字和下划线组成的规定,故选项 D错误。只有选项 B正确。 13 【正确答案】 A 【试题解析】 本题的关键是八进制 101的十进制是多少。八进制的 101转换为十进制为 65,也就是字符 A的 ASCII码。故应该选择 A。 14 【正确答案】 C 【试题
33、解析】 int型、 float型、 double型的数据可以混合,要先转换成同一类型再运算。 10+a运算后值的类型为 int型, i*f运算后值的类型为 double型,最后表达式值的类型为 double型。 15 【正确答案】 C 【试题解析】 常量和表达式是不能被赋值的。选项 A为复合表达式,首先计算(i=2, +i)的值,然后赋值给 n,故选项 A正确;选项 B为简单自加运算,因为运算改变了变量 j的内容,所以也算一种赋值语句,故选项 B正确;选项 c在表达式+(i+1);中, (i+1)不是变量,该表达式的值为常量,而在 +运算中,其运算对象必须为变量,故选项 C错误:选项 D将逻辑
34、表达式 j 0的值赋给 x,是合法的赋值语句。所以应当选择 C。 16 【正确 答案】 D 【试题解析】 在这个表达式中,优先级最高的是 (int)a,也就是对 5.5取整,结果是 5,其次是 b/b,即 2.5/2.5,结果是 1.000000,最后相加结果为 6.000000(表达式的最终结果为实型 ),所以 4个选项中 D正确。 17 【正确答案】 C 【试题解析】 使用 scanf()函数时,要求除格式控制符以外的字符都要原样输入, “,”为非格式符,要原样输入。选项 A,输入格式描述为 “%2d%2d%2d”,意思是输入一个长度为 6的数字串, scanf()将每两个为一组读入 3个
35、变量中,不 满足键盘输入 1, 2, 3的条件,故 A错误;选项 B中,输入格式描述符为“%d %d %d”,输入要用空格隔开,故错误;选项 D中,输入格式描述符为“i=%d, j=%d, k=%d”,应该从键盘输入 i=1, j=2, k=3,才能使得 i, j, k的值为 1, 2, 3,故选项 D错误。 4个选项中 C正确。 18 【正确答案】 B 【试题解析】 选项 A和选项 D中首先计算 2/5,因为两个计算分量都是整型,所以结果为 2,与实际运算不符;选项 B中因为乘除法满足交换律,所以 2*b放前面和放后面都是一样的,所以满足题目要求;选项 C中的表达式等价于 2abcd/5,所
36、以不满足题目要求。故应该选择 B。 19 【正确答案】 A 【试题解析】 -1为带符号的整型数,在内存中的存放形式为1111111111111111。按带爷号的整型格式输出仍为 -1;按无带符号的整数输出为65535(将 1111 1111 1111 1111转换为十进制数 );按八进制数输出为 177777(将1111 1111 1111 1111转换为八进制数,方法为由低位到高位,每三位一组,用一个八进制数代替 );按八进制数输出为 ffff(将 1111111111111111转换为十六进制数,方法为由低位到高位,每四位一组,用一个十六进制数代替 )。 20 【正确答案】 C 【试题解析
37、】 在复合赋值语句中,应该由右向左依次赋值,在表达式m=(k+=i*=k)中,右端由 i*=k得 i=2*2为 4, k=k+i,即 k值为 6, m=k故 m=6。所以 4个选项中 C正确。 21 【正确答案】 A 【试题解析】 因为 main()函数缺少左大括号,所以编译无法通过。应该选择 A。 22 【正确答案】 A 【试题解析】 因为左移运算符的优先级比位或运算符,要高,所以先 计算 b 2。而左移 n位在不溢出的前提下相当于乘以 2n,所以 b 2=6*22=24。再计算 3|24=(00000011)2|(0001 1000)2=(0001 1011)2,故本题的正确答案是 A。
38、23 【正确答案】 A 【试题解析】 C语言中任何非 0值都表示真,所以表达式 1|2|3|4就是 “真 |真 |真|真 ”,结果为真。又因为 C语言中的真值转换为整型就是 1,故选项 A正确。 24 【正确答案】 B 【试题解析】 表达式 x=y|y z&z=z中共有 5种运算符,其优先级从 高到低排列依次是:小于、等于 =、逻辑与 &、逻辑或 |、赋值二。所以原式可看做x=(y|(y z&z=z),在子表达式 y|(y z&z=z)中,因为 y=3为真,而真 |任何数都为真,所以表达式等价于 x=真 =1,故整个表达式的值为 1,应该选择 B。 25 【正确答案】 D 【试题解析】 本题的
39、 while循环条件为 1恒为真,所以是一个无限循环。应该选择答案 D。 26 【正确答案】 D 【试题解析】 函数 scanf的地址列表应由变量的地址组成。选项 A中虽然 &p也为地址,但它是指 针变量 p的地址,该地址的存储单元中只能存放地址值,不能存放整型数据。选项 B中 *p相当于变量 n,所以不能正确读入数据;选项 C不正确,因为 n为变量名;选项 D中 p为指针变量,并且值为变量 n的地址,所以选项 D能够正确读入数据。 D为所选。 27 【正确答案】 D 【试题解析】 本题程序中的 for循环省略了 for语句的 3个表达式,如果循环体中没有 break语句的话则为死循环。循环中
40、每次 i被增 1,当 i到 6时才能执行到break语句跳出循环,但是当 i自增到 3的时候会执行 continue语句重新循环,此时后面的 “i+; ”语句执行不到, i的值为 3一直没有改变,所以 continue语句始终要执行,因此 for循环将一直循环下去,所以, 4个选项中选项 D符合题意。 28 【正确答案】 C 【试题解析】 程序开始时 (i, j, k)三个值分别为 (3, 0, 0),然后进入 for循环,由于 for的第一条语句空缺,所以不做初始化,此时 i为 3满足循环条件,进入循环体。然后执行 “+k; ”使 k变成 1,再无条件进入 do-while循环体执行 “+j
41、; ”使 j变成 1,此时 i和 j不相等所以执行 break;语句跳出 do-while循环。 准备开始第二遍 for循环, i的值被减 1,此时 3个值分别为 (2, 1, 1), i为 2满足循环条件,进入循环体。然后依次执行 +k;和 +j;使它们增 1,此时 i和 j同为 2相等,所以跳过 break;语句再执行一次 +k;使 k为 3,由于此时 j满足 do-while的循环条件,所以下一步回到前面执行 do后面的 +j;语句,使 j为 3,此时 i和 j不相等,所以执行 break;跳出 do-while循环。 准备开始第三遍 for循环, i的值被减 1,此时 3个值分别为 (
42、1, 3, 3), i为 1满足循环条件,进入循环体。然后依次执行 +k;和 +j;使它们增 1,此时 i和 j不相等,所以执行 break;跳出 do-while循环。 准备开始第四遍 for循环, i的值被减 1,此时 3个值分别为 (0, 4, 4), i为 0不满足 for语句的循环条件,所以执行循环体后面的 printf()函数输出 3个值,故正确答案为 C。 29 【正确答案】 D 【试题解析】 选项 A、选项 B和选项 C都是在 a的值为 0的时候输出 y, a不为0的时候输出 x,而选项 D是在 a为 0的时候输出 x, a不为 0的时候输出 y。所以, 4个选项中选项 D符合
43、题意。 30 【正确答案】 C 【试题解析】 int a34定义了数组但未赋初值,系统为所定义的数组在内存中开辟了已连续的存储单元,但这些存储单元中没有确定的值。 31 【正确答案】 B 【试题解析】 本题定义了一维数组 a和两个指针变量。指针变量 p的初值为第 4个数组元素的地址,指针变量 q的初值为,第 6个数组元素的地址。*p+*q=4+6=10。 32 【正确答案】 A 【试题解析】 局部变量在执行到它所在的程序块时产生,执行完时被摧毁,而静态局部变量的生存期将一直延长到程序运行结束,故选项 A正确;全局 变量的只有一种静态存储类别,故全局变量说明为 static存储类,和没有说明为
44、static存储类其生存期都是一直延长到程序运行结束,故选项 B不正确:未赋初值的局部变量的初值是随机的,故选项 C不正确;形参只能是一般局部变量,不能使用任何存储类说明符,故选项 D不正确。所以, 4个选项中选项 A符合题意。 33 【正确答案】 C 【试题解析】 本题使用了一个 for循环输出 b1 b4的值,由于数组 b定义时初始化列表只有 3个值,所以数组 b的长度为 3,下标范围是 0 2,故输出的前面两个数一定是 2和 3,后面的 数就不能确定了,因为已经超出数组 b的范围。故正确答案为 C。 34 【正确答案】 C 【试题解析】 表达式 “a+WW(i+1); ”,宏展开之后为
45、a=+i+1*i+1,先计算+i,结果为 4, i的值也变为 4,所以 a=4+1*4+1=9。所以正确答案是选项 C。 35 【正确答案】 D 【试题解析】 程序中使用一个 for循环, 3次输出函数 f1(2)的返回值。 f1()函数中存在一个静态局部变量 c,第 1次调用 f1()函数返回 a+b+c=2+1+4=7, c变为4,第 2次调用返回 2+1+5=8, c变 为 5,第 3次返回 2+1+6=9。所以正确答案是D。 36 【正确答案】 C 【试题解析】 根据 scanf()的定义,应该在空白处填入一地址值,又因为要为数组中所有元素赋值,故空白处填入的表达式应使 i每次增 1,
46、选项 A和 B不会使 i增 1,所以不正确。选项 D在第一次执行时 i先自增为 1,所以输入的第一个数据被存到 xl中,而第 N次执行时会将数据输入到 xN,这个地址已经超过数组 x的范围,属于越界行为,所以也不正确。故正确答案为 C。 37 【正确答案】 B 【试题解析】 本题定义了两个很相似的子 函数互相调用,子函数首先输出 sti,然后判断 i是否小于 3,是的话就让 i增 2后调用另一个子函数。在主函数中只调用了一次 funcl(0), funcl()输出 st0,然后调用 func2(2), func2()输出 st2,又调用 func1(4),此时 i不小于 3,所以 funcl(
47、)只输出 st4就返回了。故最终输结果为h1o,正确答案为 B。 38 【正确答案】 B 【试题解析】 在结构体数组 class10的初始化列表中只有第 5个初始值中包含大写字母 M,而该结构体只有两个成员变量,所以每两个初 始值初始化一个数组元素,故第 5个初始值是属于第 3个数组元素 class2的前一个成员变量的,选项 A和 C不正确。又因为 M是 “Mary”的第一个元素,所以应该输出 class2的name0, B是正确答案。 39 【正确答案】 D 【试题解析】 选项 A定义了一个 1行 4列的二维数组,只有 4个元素,而初始化列表有 5个初始值,所以不正确。定义二维数组时只能省略第二维的长度,选项B省略的是第一维的长度,所以不正确。选项 C定义了一个 2行 3列的二维数组,但初始值列表中使用了 3个大括号,使行数超出定义范围 ,所以不正确。故正
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1