1、国家二级 C语言机试(选择题)模拟试卷 22及答案与解析 一、选择题 1 下列链表中,其逻辑结构属于非线性结构的是 ( A)二叉链表 ( B)循环链表 ( C)双向链表 ( D)带链的栈 2 设循环队列的存储空间为 Q(1: 35),初始状态为 front=rear=35。现经过一系列入队与退队运算后, front=15, rear=15,则循环队列中的元素个数为 ( A) 15 ( B) 16 ( C) 20 ( D) 0或 35 3 下列关于栈的叙述中,正确的是 ( A)栈底元素一定是最后入栈的元素 ( B)栈 顶元素一定是最先入栈的元素 ( C)栈操作遵循先进后出的原则 ( D)以上说法
2、均错误 4 在关系数据库中,用来表示实体间联系的是 ( A)属性 ( B)二维表 ( C)网状结构 ( D)树状结构 5 公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是 ( A) 1: 1联系 ( B) m: 1联系 ( C) 1: m联系 ( D) m: n联系 6 有两个关系 R、 S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( A)选择 ( B)投影 ( C)自然连接 ( D)并 7 数据字典( DD) 所定义的对象都包含于 ( A)数据流图( DFD图 ) ( B)程序流程图 ( C)软件结构图 ( D)方框图 8
3、软件需求规格说明书的作用不包括 ( A)软件验收的依据 ( B)用户与开发人员对软件要做什么的共同理解 ( C)软件设计的依据 ( D)软件可行性研究的依据 9 下面属于黑盒测试方法的是 ( A)语句覆盖 ( B)逻辑覆盖 ( C)边界值分析 ( D)路径覆盖 10 下面不属于软件设计阶段任务的是 ( A)软件总体设计 ( B)算法设计 ( C)制定软 件确认测试计划 ( D)数据库设计 11 下列叙述中错误的是 ( A) C程序可以由多个程序文件组成 ( B)一个 C语言程序只能实现一种算法 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 12
4、 C语言源程序名的后缀是 ( A) .C ( B) .exe ( C) .obj ( D) .cp 13 以下选项中不能用作 C程序合法常量的是 ( A) 123 ( B) 123 ( C) 1,234 ( D) x7D 14 表达式 a+=a -= a=9 的值 是 ( A) 18 ( B) -9 ( C) 0 ( D) 9 15 若有定义语句: int x=12, y=8, z; 在其后执行语句 z= 0.9+x/y; 则 z的值为 ( A) 1 ( B) 1.9 ( C) 2 ( D) 2.4 16 阅读以下程序 #include main() int case ; float prin
5、tF; printf(“请输入 2个数: “); scanf(“%d %f“, printf(“%d %fn“,case,printF ); 该程序在编译时产生错误,其出错原因是 ( A)定义语句出错, case是关键字,不能用作用户自定义标识符 ( B)定义语句出错, printF不能用作用户自定义标识符 ( C)定义语句无错, scanf不能作为输入函数使用 ( D)定义语句无错, printf不能输出 case的值 17 有以下程序 #include main() char c1,c2,c3,c4,c5,c6; scanf(“%c%c%c%c“, c5=getchar(); c6=get
6、char(); putchar(c1); putchar(c2); printf(“%c%cn“,c5,c6); 程序运行后,若从键盘输入(从第 1列开始 ) 123 45678 则输出结果是 ( A) 1245 ( B) 1256 ( C) 1278 ( D) 1267 18 以下选项中,当 x为大于 1的奇数时,值为 0的表达式是 ( A) x/2 ( B) x%2=0 ( C) x%2!=0 ( D) x%2=1 19 以下选项中与 if(a=1)a=b; else a+; 语句功能不同的 switch语句是 ( A) switch(a=1) case 0:a=b;break; case
7、 1:a+; ( B) switch (a)case 1:a=b;break; default : a+; ( C) switch (a)default:a+;break; case 1:a=b; ( D) switch(a=1) case 1:a=b;break; case 0:a+; 20 若变量已正确定义,有以下程序段 i=0; do printf(“%d,“,i); while( i+ ); printf(“%dn“,i); 其输出结果是 ( A) 0,1 ( B) 0,0 ( C) 1,1 ( D)程序进入无限循环 21 有以下程序 #include main() int a=1,b
8、=2,c=3,d=0; if (a=1 else printf(“%d,%d,%dn“,a,b,c); else printf(“%d,%d,%dn“,a,b,c); 程序运行后的输出结果是 ( A) 1,3,2 ( B) 1,3,3 ( C) 1,2,3 ( D) 3,2,1 22 有以下程序段 int i, n; for( i=0; i 8; 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
9、0: exit(0); printf(“%d n“,n); 以下关于程序段执行情况的叙述,正确的是 ( A) for循环语句固定执行 8 ( B)当产生的随机数 n为 4时结束循环操作 ( C)当产生的随机数 n为 1和 2时不做任何操作 ( D)当产生的随机数 n为 0时结束程序运行 23 有以下程序 #include int fun1( double a ) return (int)(a*=a); int fun2(double x, double y) double a=0,b=0; a=fun1( x ); b=fun1( y ); return (int)(a+b); main()
10、double w; w=fun2(1.1,2.0); printf(“%4.2f“, w); 程序执行后输出结果是 ( A) 0.0 ( B) 5 ( C) 5.21 ( D) 5.00 24 设有定义语句 int (*f)(int); 则以下叙述正确的是 ( A) f是基类型为 int的指针变量 ( B) f是指向函数的指针变量,该函数具有一个 int类 型的形参 ( C) f是指向 int类型一维数组的指针变量 ( D) f是函数名,该函数的返回值是基类型为 int类型的地址 25 有以下程序 #include void fun( int *a,int *b) int *c; c=a;a=
11、b;b=c; main() int x=3, y=5, *p= fun(p,q); printf(“%d,%d,“,*p,*q); fun( printf(“%d,%dn“,*p,*q); 程序运行 后的输出结果是 ( A) 3,5,3,5 ( B) 3,5,5,3 ( C) 5,3,3,5 ( D) 5,3,5,3 26 若有定义: int w35; 则以下不能正确表示该数组元素的表达式是 ( A) *( for (i=2; i 6; i+) bi *= 2; main() int a10=1,2,3,4,5,6,7,8,9,10, i; f (a); for (i=0; i 10; i+)
12、 printf(“%d,“, ai); 程序运行后的输出结果是 ( A) 1,2,3,4,5,6,7,8,9,10, ( B) 1,2,6,8,10,12,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, 28 有以下程序 #include int fun( char s) int n=0; while(*s = 9 s+; return (n); main() char s10= 6, 1, *, 4, *, 9, *, 0, *; printf(“%dn“,fun(s); 程序的运行结果是 ( A
13、) 5 ( B) 9 ( C) 61 ( D) 61490 29 以下正确的字符串常量是 ( A) ( B) abc ( C) Olympic Games ( D) “ 30 下列选项中,能够满足 “只要字符串 s1等于字符串 s2,则执行 ST“要求的是 ( A) if(s1-s2=0) ST; ( B) if(s1=s2) ST; ( C) if(strcpy(s1,s2)=1) ST; ( D) if(strcmp(s2,s1)=0) ST; 31 有以下程序 #include int fun(char p10) int n=0,i; for(i=0; i 7; i+) if(pi0=
14、T) n+; return n; main() char str10=“Mon“,“Tue“,“Wed“,“Thu“,“Fri“,“Sat“,“Sun“; printf(“%dn“,fun(str); 程序执行后的输出结果是 ( A) 1 ( B) 2 ( C) 3 ( D) 0 32 有以下程序 #include void fun(char *t , char *s) while(*t!=0) t+; while( (*t+ = *s+ )!=0 ) ; main() char ss10=“acc“,aa10=“bbxxyy“; fun(ss, aa);printf(“%s,%sn“, ss
15、,aa); 程序的运行结果是 ( A) acc,bbxxyy ( B) accbbxxyy,bbxxyy ( C) accxxyy,bbxxyy ( D) accxyy,bbxxyy 33 有以下程序 #include void fun( char *p, int n ) char b6=“abcde“; int i; for( i=0,p=b; i n; i+ ) pi=bi; main() char a6=“ABCDE“; fun(a, 5);printf(“%sn“,a); 程序运行后的输出结果是 ( A) abcde ( B) ABCDE ( C) edcba ( D) EDCBA 3
16、4 有以下程序 #include fun( int a, int b ) int static m=0, i=2; i=i+m+1; m=i+a+b; return m; main() int k=4, m=1, p; p=fun( k, m); printf(“%d,“,p); p=fun( k, m); printf(“%dn“,p); 程序运行后的输出结果是 ( A) 8,17 ( B) 7,16 ( C) 8,8 ( D) 7,17 35 若有以下程序 #include int *f(int *s, int *t) int k; if (*s *t) k = *s; *s=*t; *t
17、=k; return s; main() int i=3, j=5, *p= r=f(p,q); printf(“%d,%d,%d,%d,%dn“, i, j, *p, *q, *r); 则程序的输出结果是 ( A) 5,3,3,5,5 ( B) 3,5,5,3,5 ( C) 3,5,3,5,5 ( D) 5,3,5,3,5 36 以下结构体说明和变量定义中 ,正确的是 ( A) typedef struct abc int n;double m; ABC; ABC x,y; ( B) struct abc int n;double m ; struct abc x, y; ( C) stru
18、ct ABC int n;double m; struct ABC x, y; ( D) struct abc int n;double m; ; abc x, y; 37 以下叙述中错误的是 ( A)用 typedef可以说明一种新的类型名 ( B) typedef的作用是用一个新的标识符来代表已存 在的类型名 ( C)可以用 typedef说明的新类型名来定义变量 ( D) typedef说明的新类型名必须使用大写字母,否则会出编译错误 38 以下叙述中错误的是 ( A)只要类型相同,结构体变量之间可以整体赋值 ( B)函数的返回值类型不能是结构体类型,只能是简单类型 ( C)可以通过指针
19、变量来访问结构体变量的任何成员 ( D)函数可以返回指向结构体变量的指针 39 若有定义语句 int b = 2; 则表达式 ( b 2 ) / ( 3 | b )的值是 ( A) 0 ( B) 2 ( C) 4 ( D) 8 40 有以下程序 #include #define N3 void fun( int aN, int b ) int i, j; for( i=0; i N; i+ ) bi = ai0; for( j=1; j N; j+ ) if ( bi aij ) bi = aij; main() int xNN = 1, 2, 3, 4, 5, 6, 7, 8, 9, yN
20、,i; fun( x, y ); for ( i=0; i N; i+ )printf( “%d,“, yi ); printf( “n“ ); 程序运行后的输出结果是 ( A) 3,5,7 ( B) 1,3,5, ( C) 2,4,8, ( D) 3,6,9, 国家二级 C语言机试(选择题)模拟试卷 22答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。带链的栈可以用来收集计 算机存储空间中所有空闲的存储结点,是线性表。在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表
21、(一个结点中含有两个指针),也是线性链表。循环链表具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活,属于线性链表。二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结构。答案为 A选项。 2 【正确答案】 D 【试题解析】 在循环队列中,用队尾指针 rear指向队列中的队尾元素,用排头指针 front指向排头元素的前一个位置。在循 环队列中进行出队、入队操作时,头尾指针仍要加,朝前移动。只不过当头尾指针指向向量上界时,其加操作的结果是指向向量的下界。由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾指针均相等
22、。答案为 D选项。 3 【正确答案】 C 【试题解析】 栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。栈的修改是按后进先出的原则进行的。因此,栈称为先进后出表,或 “后进先出 ”表,所以选择C。 4 【正确答案】 B 【试题解析】 关系模型实体间的联系采用二维表来表示,简称表。选项 C为网状模型实体间的联系,选项 D为层次模型实体间的联系,选项 A属性刻画了实体。 5 【正确答案】 C 【试题解析】 两个实体集间的联系实际上是实体集间的函数关系,主要有一对一联系( 1:1)、一对多联系( 1:m)、多对一联系( m:1)、多对
23、多联系( m:n)。对于每一个实体部门,都有多名职员,则其对应的联系为一对多联系( 1:m),答案选 C。 6 【正确答案】 A 【试题解析】 由关系 R到关系 S为一元运算,排除 C和 D。关系 S是 关系 R的一部分,是通过选择之后的结果,因此选 A。 7 【正确答案】 A 【试题解析】 在数据流图中,对所有元素都进行了命名,所有名字的定义集中起来就构成了数据字典。因此选 A,而 B, C, D都不符合。 8 【正确答案】 D 【试题解析】 软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之一。 软件需求规格说明书有以下几个方面的作用。 便于用户、开发人员进行理解和交流,
24、B正确; 反映出用户问题的结构,可以作为软件开发工作的基础和依据, C正确; 作为确认测试和验收的依据, A正确。 9 【正确答案】 C 【试题解析】 黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试用例。在使用黑盒测试法时,手头只需要有程序功能说明就可以了。黑盒测试法分等价类划分法、边界值分析法和错误推测法,答案为 C。而 A、 B、 D均为白盒测试方法。 10 【正确答案】 C 【试题解析】 从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。所以 A、 B、 D正确, C为软件测试阶段的任务。 11 【正确答案】 B 【试题解析 】 一个 C语言程序可以
25、实现多种算法 ,可以由多个程序文件共同构成。一个 C语言程序可以由一个或多个函数组成 ,一个 C函数可以单独作为一个 C程序文件存在,被包含到其他程序中 ?所以选择 B选项。 12 【正确答案】 A 【试题解析】 C语言源程序名的后缀是 .C,目标文件的扩展文件是 .obj,可执行文件的扩展名是 .exe。 13 【正确答案】 C 【试题解析】 C选项中不能含有逗号 ,所以 “1,234“不能用作 C程序的合法常量 ?B选项中表示的是八进制的常量 ,D选项中表示的是十六进制的常量。 14 【 正确答案】 C 【试题解析】 首先计算 a=9,然后计算 a-=9,即 a=a-9,结果为 0,然后计
26、算 a+=0,即a=a+0,所以最终结果为 0。 15 【正确答案】 A 【试题解析】 先计算 x/y,结果为 1,然后计算 0.9+1,结果为 1.9,但由于变量 z为整型 ,所以取值 1,所以 z的值为 1。 16 【正确答案】 A 【试题解析】 C语言中标识符的定义中区分大小写 ,所以 printF与 printf不一样 ,可以作为标识符。而 case是 C语言中的关键字,不能作为变量名, scanf是标准的输入函数 ,printf是标准的输出函数 ,所以选择 A选项。 17 【正确答案】 A 【试题解析】 Scanf按照格式字符进行输入 ,所以 123与回车的值分别送入了c1.c2.c
27、3.c4变量的存储空间, getchar()函数的功能是从键盘输入的字符串中读入一个字符 ,所以 4送入了变量 c5的存储空间 ,5送入了变量 c6的存储空间,所以打印时结果为 1245。 18 【正确答案】 B 【试题解析】 A选项的值为不定值 ,但绝对不是 0,算术运算符的优先级高于关系运算符的优先级 ,所以当 x为大于 1的奇数时 ,B选项的值为假 ,即 0?C选项的值为真 ,即 1, D选项的值为真 ,即 1,选项 B正确。 19 【正确答案】 A 【试题解析】 if语句的含义是如果 a的值为 1,将 b的值赋给 a,否则将 a的值自增1?Swich(a=1)中表达式 a= =1的结果
28、如果为真即为 1,则从 case1开始执行 ,直到遇到 break语句跳出 switch语句 ,如果 a=1的结果如果为假即 0,则从 case0开始执行 ,所以与题干含义执行操作相反的是选项 A中的语句。 20 【正确答案】 A 【试题解析】 第一次首先先执行循环体打印 i的值 0,然后判断 while的条件 i+,先用后自增 ,所以判断时条件为假 ,跳出循环 ,但是仍执行了 i的自增操作 ,i的值为1,在接下来的打印语句中进行打印。 21 【正确答案】 B 【试题解析】 else总是和最近的 if配对 ,所以进入第一个 if语句中条件判断时 ,因为是逻辑与操作需要两边运算对象的值均为非零值
29、 ,才为真 ,所以需要逐个执行判断的结果为 1,不再执行第二个 case语句中的操作,而是进入第二个 if语句条件判断 ,因为 b!=2条件成立所以整个条件表达式的值为真 ,所以不再执行逻辑或的第二个运算对象 (c- !=3)c的值不变 ,也不再执行第一个 else语句 ?打印 a的值 1,b的值 3,c的值 3。 22 【正确答案】 D 【试题解析】 当产生的随机数为 4时 ,对 5取余结果为 4,执行 case4后面语句 ,见到 continue结束本次循环 ,而非结束程序运行 ,所以 B选项错误,当产生的随机数为1时 ,执行 case1后面的所有语句 ,直到遇到 break语句跳出 sw
30、itch结构 ;当随机数为2时 ,执行 case2后面的所有语句 ,直到遇到 continue语句跳出本次循环 ,所以 C选项错误,由于循环体中含有 exit(0)语句 ,该语句的功能是终止程序的执行 ,所以不是固定执行 8次 ,A选项错误。 23 【正确答案】 D 【试题解析】 题中变量 w的定义为 double型,函数 fun2()的定义为 int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。因此 D选项正确。 24 【正确答案】 B 【试题解析】 int(*f)(int);为指向函数的指针变量的定义方法,其中 f为指向函数的指针变量,第一个 int为函数返回值类型,第二个
31、 int为函数的形参类型。因此 B选项正确。 25 【正确答案】 A 【试题解析】 fun函数的功能是交换 形式参数的值,即交换指针变量 a和 b的值,但是 fun函数并不能够交换实参的值,因此 fun(p,q)不能交换 p和 q的值,所以第一个 printf语句的输出为 3,5。第二个 fun函数对 x和 y的地址进行了操作,同样不能交换 x和 y的值,并不能影响 p和 q指针指向的数据,因此第二个 printf语句的输出也是 3,5。因此 A选项正确。 26 【正确答案】 D 【试题解析】 A选项中 *(B选项中 *(*w+3) 表示w03;C选项中 *(*(w+1) 表示 w01;而 D
32、选项中 *(w+1)4的正确写法是(*w+1)4,表示 w14;因此选择 D选项。 27 【正确答案】 B 【试题解析】 数组名是常量,表示的是数组首元素的地址。当执行 f( a)的时候,由于传递的是首地址,相当于直接对数组 a进行操作,所以从数组 a的第三个元素 a2到元素 a5,每个元素值扩大两倍。因此 B选项正确。 28 【正确答案】 C 【试题解析】 在 fun函数中, while循环的功能是:逐个取字符数组 s的字符判断其是否是数字。若是则将其作为个位数字保存到变量 n中, n的 原数据的各个数位将相应左移一个 10进制位。当指针 s指向数组的第 3位时,循环条件不成立,循环结束,返
33、回 n的值,输出 n的值为 61。因此 C选项正确。 29 【正确答案】 D 【试题解析】 本题考察的知识点是:字符串常量。在 C语言中,字符串常量是以双引号括起来的字符序列。因此 B选项和 C选项不正确。字符序列中可包含一些转义字符,转义字符都是以 “开头的。 A选项中包含了三个 “,前两个 ()代表了一个 “字符,后面一个和 “一起 (“)被看作一个 “,所以该字符串缺少一个结束的 “,因此不正确。 D选项的两个 “之间没有任何字符,代表的是一个空串,是合法的字符串常量,因此 D选项正确。 30 【正确答案】 D 【试题解析】 在 C语言中要对两个字符串的大小进行比较,就需要调用字符串比较
34、函数 strcmp,如果这个函数的返回值等于 0,说明两个字符串相等。因此 D选项正确。 31 【正确答案】 B 【试题解析】 此程序是统计一周七天中英文名称首字母为 “T“的个数。 P i 0是字符串的首字符,一共有两个 “T“,所以 n=2。因此 B选项正确。 32 【正确答案】 B 【试题解析】 本题重点考察 while循环语句的简单应用。函数 fun()中,前一个while循环的作用是:如果形参指针 t所指内容不为 0,则让 t增 1,直到它指向0。后一个 while循环的作用是:将 s所指内容赋给 t所指地址,然后两者同时增1,直到赋给 t的内容为 0。由此可见,函数 fun()的作
35、用就是将形参 s所指字符串连接到形参 t所指字符串末尾,相当于库函数中的 strcat()。主函数中使用 fun()将数组 aa中的字符串连接到了数组 ss中原有字符串之后,所以执行完后, ss中的字符串为 “accbbxxyy“。程序最后输出的结果是: accbbxxyy,bbxxyy。因此 B选项正确。 33 【正确答案】 B 【试题解析】 本题考查数组名作为函数参数,执行 f函数时,传进去的 a指针被重新指向了 b,所以原本 a数组的地址内容不变,所以输出结果为 ABCDE,答案为 B选项。 34 【正确答案】 A 【试题解析】 本题考查静态局部变量,本题中先执行 fun(4,1)得到返
36、回值为 8,此时静态局部变量 m为 8, i为 3,那么再次执行 fun(4,1)得到的值为 17,所以选项 A正确。 35 【正确答案】 D 【试题解析】 在主函数中分 别给整型变量 i、 j和指针型变量 p、 q赋初值,并声明指针变量 r;调用 f函数,并将实参变量 p和 q的值传递给形参变量 s和 t,并且 f函数是指针型函数,即函数的返回值将是一个地址。在 f函数中,如果条件成立,则将指针变量 s和 t的值互换,并且将指针 s的地址返回主函数。最后输出 i, j, *p, *q, *r的值,即 5,3,5,3,5。因此 D选项正确。 36 【正确答案】 A 【试题解析】 本题考查 ty
37、pedef的使用方法, typedef对已存在的类型使用一个新的名字,选项 A中 ABC为新的类型别名,定义正确。 37 【正确答案】 D 【试题解析】 本题考查 typedef的使用方法, typedef对已存在的类型使用一个新的名字,新类型可以使用小写,所以 D选项错误。 38 【正确答案】 B 【试题解析】 本题考查结构体相关知识,函数返回值可以是结构体,所以 B选项错误。 39 【正确答案】 D 【试题解析】 本题考查位运算 、 /,以及逻辑运算符 |。 b2为 8,3 3 | b为 1,所以结果为 8,所以 D选项正确。 40 【正确答案】 D 【试题解析】 函数 fun()的作用是求出 二维数组 aN中每一行中的最大元素,所以在 main()函数中执行完 fun(x,y)后,数组 y中的元素为二维数组 xNN每一行的最大元素。因此 D选项正确。