1、国家二级( C语言)笔试模拟试卷 15及答案与解析 1 已知 8个数据元素为 (34, 76, 45, 18, 26, 54, 92, 65),按照依次插入结点的方法生成一棵二叉排序树后,最后 2层上的结点总数为 _。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 2 一个栈的输入序列为 1, 2, 3, 4,下列选项中的 _序列不可能是这个栈的输出序列。 ( A) 1, 3, 2, 4 ( B) 2, 3, 4, 1 ( C) 4, 3, 1, 2 ( D) 3, 4, 2, 1 3 循环链表的主要优点是 _。 ( A)不再需要头 指针了 ( B)已知某个结点的位置后,能够容易找到
2、它的直接前驱 ( C)在进行插入、删除运算时,能更好地保证链表不断开 ( D)从表中任一结点出发都能扫描到整个链表 4 软件测试是软件开发过程中重要且不可缺少的阶段,测试过程中的 _是基础测试。 ( A)系统测试 ( B)有效性测试 ( C)单元测试 ( D)集成测试 5 在瀑布模型中,将软件开发划分为若干时期,而软件的可行性研究一般被属于_。 ( A)计划时期 ( B)维护时期 ( C)运行时期 ( D)开发时期 6 在数据库 技术中,面向对象数据模型是一种 _。 ( A)概念模型 ( B)结构模型 ( C)物理模型 ( D)形象模型 7 在 C语言中提供的合法的关键字是 _。 ( A) s
3、wicth ( B) cher ( C) Case ( D) default 8 若定义 static int a22=1, 2, 3, 4,则 a数组的各数组元素分别为 _。 ( A) a00=1、 a01=2、 at10=3、 a11=4 ( B) a00=1、 a01=3、 a10=2、 a11=4 ( C) a00=4、 a01=3、 a10=2、 s11=1 ( D) a00=4、 a01=2、 a10=3、 a11=1 9 下列变量说明语句中,正确的是 ( A) char: a b c; ( B) chara; b; c; ( C) intx; z; ( D) intx, z; 1
4、0 若有以下定义和语句,则输出的结果是 _。 char c1=b, c2=e; printf(“%d, %cn“, c2-c1, c2-a+“A“); ( A) 2,M ( B) 3,E ( C) 2,E ( D)输出结果不确定 11 下列不正确的转义字符是 _。 ( A) , ( B) ( C) 074 ( D) 0 12 设有如下定义,则执行表达式 (nFa b) float f; long 1; int i; i=f=1=d=20/3; printf(“%d %ld %f %f n“, i,l,f,d); ( A) 6 6 6.0 6.0 ( B) 6 6 6.7 6.7 ( C) 6
5、6 6.0 6.7 ( D) 6 6 6.7 6.0 17 当下面的程序运行后,变量 c的值为 _。 main () int a=45, b=27, c=0; c=max (a, b); int max (x, y) int x,y; int z; if (xy) z=x; else z=y; return(z); ( A) 45 ( B) 27 ( C) 0 ( D) 72 18 若有语句 scanf(“%d%c%f“, int i,j; for (i=0;stringli !=0;i+) stringi=stringli; for (j=0;string2j !=0;j+) stringi
6、+j=string2j; stringi+j =0; main ( ) char s1 100 , s2 100 , s 100; printf (“n 输入 string1: n“); scanf(“%s“,s1); printf (“ n 输入 string2: n“ ); scanf (“%s“, s2); connect (s1, s2, s); printf (“%sn“, s); ( A) I am a boy! ( B)输入 string2: ( C) I am ( D) I am a boy! 20 下面能正确进行字符串赋值操作的语句是 _。 ( A) char s5=“ABC
7、DE“; ( B) char s5 =a,b,c,d,e; ( C) char *s;s=“ABCDEF“ ( D) char *s;scanf(“%s“,s); 21 下列程序的输出结果是 ( )。 main() int i=1,j=2,k=3; if(i+= =1 ( A) 1 2 3 ( B) 2 3 4 ( C) 2 2 3 ( D) 2 3 3 22 下列程序的输出结果是 ( )。 #include stdio.h main() int a=0,i; for(i=1;i 5;i+) switch(i) case 0: case 3:a+=1; case 1: case 2:a+=2;
8、 default:a+=3; printf(“%d“,A) ; ( A) 19 ( B) 18 ( C) 6 ( D) 8 23 在 C语言中, while和 dowhile 循环的主要区别是 ( )。 ( A) dowhile 的循环体不能是复合语句 ( B) dowhile 允许从循环体外转到循环体内 ( C) while的循环体至少被执行一次 ( D) dowhile 的循环体至少被执行一次 24 若各选项中所用变量已正确定义, fun()函数中通过 return语句返回一个函数值,下列选项中错误的程序是 ( )。 ( A) main() x =fun(2,10); float fun(
9、int a,int b) ( B) float fun(int a,int b) main() x =fun(i,j); ( C) float fun(int,int); main() x =fun(2,10); float fun(int a,int b) ( D) main() float fun(int I,int j); x =fun(i,j); float fun(int a,int B) 25 判断 char型变量 c1是否为小写字母的正确表达式为 ( )。 ( A) a =c1 =z ( B) (c1 =A) (c1 =z) ( C) (a= c1(z =c1) ( D) (c1
10、 =a) while(-k) printf(“%d“,k-=3); printf(“n“); 执行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 4 ( D)死循环 27 若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是 ( )。 ( A)实参与其对应的形参共占存储单元 ( B)只有当实参与其对应的形参同名时才共占存储单元 ( C)实参与其对应的形参分别占用不同的存储单元 ( D)实参将数据传递给形参后,立即释放原先占用的存储单元 28 在 C语言程序中,下列说法正确的是 ( )。 ( A)函数的定义和函数 的调用均可以嵌套 ( B)函数的定义不可以嵌套,但函数的调用
11、可以嵌套 ( C)函数的定义可以嵌套,但函数的调用不可以嵌套 ( D)函数的定义和函数的调用均不可以嵌套 29 下列说法中不正确的是 ( )。 ( A)指针是一个变量 ( B)指针中存放的是数值 ( C)指针可以进行加、减等算术运算 ( D)指针变量占用存储空间 30 若有定义和语句: int*pp,*p,a=20,b=10; pp=p=p=printf(%d,%dn“,*p,*pp); 则输出 结果是 ( )。 ( A) 20,10 ( B) 20,20 ( C) 10,20 ( D) 10,10 31 下列二维数组的说明中,不正确的是 ( )。 ( A) float a4=0,1,8,5,
12、9; ( B) int a34; ( C) #define N 5 ( D) int a29.5; float aN3; 32 若有定义: “int a23;”则对 a数组的第 i行第 j列元素的正确引用为 ( )。 ( A) *(*(a+i)+j) ( B) (a+i)j ( C) *(a+i+j) ( D) *(a+i)+j 33 下列能正确进行字符串赋值的是 ( )。 ( A) char s5=“ABCDE“; ( B) char s5=A,B,C,D,E; ( C) char*s;s=“ABCDE“; ( D) char*s; printf(“%s“,s); 34 若有说明 char
13、s130=“abc“,s2=“defghi“;,则在使用函数 strcat(s1,s2)后,结果是 ( )。 ( A) s1的内容 更新为 abcdefghi ( B) s1的内容更新为 defghi0 ( C) s1的内容更新为 defghiabc0 ( D) s1的内容更新为 abcdefghi0 35 设有变量说明 int(*p)m,其中的标识符 p是 ( )。 ( A) m个指向整型变量的指针 ( B)指向 m个整型变量的指针 ( C)一个指向具有 m个整型元素的一维数组的指针 ( D)具有 m个指针元素的一维指针数组,每个元素都指向整型变量 36 下列描述中正确的是 ( )。 ( A
14、)在 C语言程序中预处理是指完成宏替换和文件包 含指定的文件的调用 ( B)预处理指令只能位于 C源程序文件的首部 ( C)预处理命令可以放在程序中的任何位置 ( D)预处理命令结尾需要加分号 37 若有结构体定义: struct stuint num; char sex; int age; a1,a2; 则下列语句中错误的是 ( )。 ( A) printf(“%d,%c,%d“,a1); ( B) a2.age=a1.age; ( C) a1.age+; ( D) a1.num=5; 38 C语言结构体类型变量在 程序执行期间 ( )。 ( A)所有成员一直驻留在内存中 ( B)没有成员驻
15、留在内存中 ( C)部分成员驻留在内存中 ( D)只有一个成员驻留在内存中 39 在位运算中,操作数每右移两位,其结果相当于 ( )。 ( A)操作数乘以 2 ( B)操作数除以 2 ( C)操作数除以 4 ( D)操作数乘以 4 40 在 “文件包含 ”预处理语句的使用形式中,当 #include后面的文件名用 “, (双撇号 )括起时,寻找被包含文件的方式是 ( )。 ( A)直接按系统设定的标准方式搜索目录 ( B)先在源程 序所在的目录搜索,如没找到,再按系统设定的标准方式搜索 ( C)仅仅搜索源程序所在目录 ( D)仅仅搜索当前目录 41 一棵二叉树第六层 (根结点为第一层 )的结点
16、数最多为【 】个。 42 算法复杂度主要包括时间复杂度和【 】复杂度。 43 在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块 (桩模块 ),其中【 】的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。 44 数据管理技术的发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数据独立性 最高的阶段是【 】。 45 数据结构分为逻辑结构和存储结构,循环队列属于【 】结构。 46 以下程序运行时,若从键盘输入: 10 20 30 回车,输出的结果是【 】。 #include stdio.h main() int i=0, j=0, k=0; scan
17、f(“% d%* d%d“, prinff(“% d n“ , S( i + j) ); 48 以下程序运行后的输出结果是【 】。 #include stdio, h main( ) int a=3,b=4,c=5,t=99; if(b a a=c;c=t; if(a e b=a;a=t; printf( “%d %d %d n“ ,a,b,e); 49 已知字符 A的 ASCII代码值为 65,以下程序运行时若从键盘输入: B33 回车,则输出结果是【 】。 #include stdio.h main( ) char a,b; a = getchar( ) ;seanf( “% d“ , a
18、=a-A +0;b=b* 2; prinff( “% c % c n“ ,a,b); 50 以下程序运行后的输出结果是【 】 #include stdio, h fun( int a) int b = 0; static int c = 3; b+;c+; return(a + b + c); main( ) int i,a = 5; for(i =0;i 3;i + ) prinff(“% d% d“ ,i,fun(a) ); printf(“ n“ ); 51 以下程序中, fun函数的功能是求 3行 4列二维数组每行元素中的最大值。请填空。 #include stdio, h void
19、fun(int,int,int( * )4 ,int* ); main ( ) int a3 4 = 12,41,36,28, 19,33,15,27, 3,27,19,1 ,b3 ,i; fun(3,4,a,b); for(i =0;i 3;i + ) printf( “%4d“ ,bi ); prinff(“ n“ ); void fun(int m,int n,int ar 4 ,int* br) int i,j,x; for(i =0;i m;i + ) x = ari 0 ; for(j = 0;j n;j + ) if(x ari j ) x = ari j; 【 】 =x; 52
20、 有下面的程序 : #include stdio, h main ( ) enum team my,your=4,his,her=his+10; prinff(“ % d %d %d %d n“ ,my,your,his,her); 此程序的输出结果是【 】。 A) 0 1 2 3 B) 0 4 0 1 0 C) 0 4 5 1 5 D) 1 4 5 1 5 53 以下程序运行后的输出结果是【 】。 #include stdio, h #include stating, h void fun(char * s,int p,int k) int i; for(i=p;i k-1;i+) si =
21、si+2; main( ) char s = “abedefg“; fun(s,3 ,strlen(s) ); puts(s); 54 以下程序运行后的输出结果是【 】。 #include stdio, h #include string, h main( ) char ch =“abc“.,x3 4: int i: for(i=0;i 3:i +) strcpy(xi ,ch): for(i =0;i 3:i+) printf( “% s“ , printf(“ n“ ) 55 以下程序运行后输出结果是【 】。 #include stdio, h void swap(int x.int y)
22、 int t; t = x;x = y;y = t: printf( “% d % d “,x,y); main ( ) iht a=3,b=4: swap(a,b); prinff( “% d % d“ ,a,b); 56 以下程序运行后的输出结果是【 】。 #include stdio, h main( ) char c1 ,c2; for( el = 0, c2 =9; e1 c2; c1 + + , c2 - ) printf(“ %c%c“, c1, c2 ); printf(“n“ ); 57 以下程序运行后输出结果是【 】。 #include stdio, h main( ) i
23、nt a,b,c; a=10; b:20; c=(a%b 1) (a/b 1); printf(“%d %d %dn“,a,b,c); 58 以下程序中函数 huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串 “yes!”,否则函数返回字符串 “no!”,并在主函数中输出。所谓回文即正向与反向的拼写都一样,例如: adsda。请填空。 #include stdio, h #include string, h char * huiwen(char * str) char *p1, * p2; int i,t=0; p1 = str;p2 =【 】 ; for(i =0
24、;i = strlen(str)/2;i + ) if( * pl + ! = * p2 - ) t = 1 ;break if(【 】 ) return( “yes !“ ); else return( “no!“ ); main( ) char str50; printf( “Iaput:“ ); scanf(“ % s“, str); printf(“%s n“, 【 】 ); 国家二级( C语言)笔试模拟试卷 15答案与解析 1 【正确答案】 B 2 【正确答案】 C 3 【正确答案】 D 4 【正确答案】 C 5 【正确答案】 A 6 【正确答案】 B 7 【正确答案】 D 8 【正
25、确答案】 A 9 【正确答案】 D 10 【正确答案】 B 11 【正确答案】 C 12 【正确答案】 B 13 【正确答案】 D 14 【正确答案】 C 15 【正确答案】 B 16 【正确答案】 A 17 【正确答案】 A 18 【正确答案】 D 19 【正确答案】 C 20 【正确答案】 C 21 【正确答案】 D 【试题解析】 本题考查自增运算符 “+”、逻辑与运算符 “ *(ai+j); *(*(a+i)+j); *(ai)j; *(&a00+3*i+j)。 33 【正确答案】 C 【试题解析】 字符串存储要有结束符 “0”且要占用一个空间,选项 A)、 B的空间不够: printf
26、用来输出字符,不能输入字符串 34 【正确答案】 D 【试题解析】 strcat(s1, s2)是把 s2字符串连接到 s1字符串的末尾,要保证 s1能容纳下连接后的字符串。 35 【正确答案】 C 【试题解析】 本题考查指向数组的指针变量的声明。这里的 p表示一个指向数组的指针; *p表示指针 p指向地址的内容。 36 【正确答案】 C 【试题解析】 本题考查预处理命令的特点,编译预处理命令的特点: 为了区别一般的语句,预处理命令行都必须以 “#”号开始,结尾不加分号; 预处理命令可以放在程序中的任何位置; 在程序中凡是以 “#”号开始的语句行都是预处理命令行。 37 【正确答案】 A 【试
27、题解析】 题中 a1和 a2两个结构体变量名所对应的成员相同,可以与运算“+相结合。结构体变量的输出格式为: printf(“要输出变量名; %dt“,结构变量名要输出的成员变量名 ), 38 【正确答案】 A 【试题解析】 C语言结构体类型变量在程序执行期间所有成员一直驻留在内存中, 39 【正确答案】 C 【试题解析】 在位运算中,操作数每右移两位,相当于在操作数的左侧添 0,最右面的两位被移出,即操作数除以 4。 40 【正确答案】 B 【试题解析】 本题考查库函数调用的知识点。格式 1: #include(文件名 ),预处理程序在标准目录下查找指定的文件:格式 2: #include“
28、文件名 “,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系 统指定的标准目录搜索。 41 【正确答案】 32 【试题解析】 根据二叉树的性质:二叉树第 i(i1)层上至多有 2i-1个结点,得到第六层的结点数最多是 26-1=32。 42 【正确答案】 空间 【试题解析】 程序在计算机上运行时所耗费的时间由程序运行时所需输入的数据总量、对源程序进行编译所需时间、计算机执行每条指令所需时间、程序中的指令重复执行的次数等决定。习惯上常常把语句重复执行的次数作为算法运行时间的相对量度,称作算法的时间复杂度。算法在运行过程中需辅助存储空间的大小称为算法的空间 复杂度
29、。 43 【正确答案】 驱动模块 【试题解析】 在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块 (桩模块 )。其中,驱动模块相当于被测试模块的主程序,它接收测试数据,并传给被测试模块,输出实际测试结果。承接模块通常用于代替被测试模块调用的其他模块,其作用仅做少量的数据操作,是一个模拟子程序,不必将子模块的所有功能带入。 44 【正确答案】 数据库系统阶段 【试题解析】 在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段,其中数据独立 性最高的阶段是数据库系统阶段。 45 【正确答案】 逻辑 【试题解析】 数据的逻辑结构是反映数据元素之间逻辑
30、关系的数据结构,它在计算机存储空间中的存放形式称为数据的存储结构 (也称数据的物理结构 )。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。而循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。所以循环队列不需要存放元素之间的前后件关系,故它属于逻辑结构。 46 【正确答案】 10300 【试题解析】 在 scanf格式控制符中有一个 “*”附加说明符,表示跳过它指定的列数。程序中 “%d%*d%d“表示首先将 10赋给 i,然后遇 %。 d读入整数但不赋给任何变量,最后将读人的整数 30赋给变量 j,变量
31、k并没有重新赋值,仍为初始值 0。所以输出的结果为 10300。 47 【正确答案】 81 【试题解析】 带参数的宏定义是按 #define命令行中指定的字符串从左到右进行替换。本题替换后得到: 4*i+j*i+j+1,代入 i, j的值得 81。 48 【正确答案】 4599 【试题解析】 要注意每条证语句后面 是三条语句,而不是一条语句。执行第一条if语句时,条件表达式不成立,执行 a=c; c=t;,此时 a=5, c=99;执行第二条 if语句时,条件表达式成立,执行 t=b; b=a; a=t;交换 a, b的值,输出结果为4, 5和 99。 49 【正确答案】 1 B 【试题解析】
32、 本题输入 B33,字符 B被输入给字符变量 a, 33赋给 b,执行 a=a-A+0;得到 a的值 1;执行 b=b*2;得到 b值 66,最后以字符型输出为 1 B。 50 【正确答案】 10111212 【试题解析】 用 static关键字声明的变量称为静态局部变量。静态局部变量只在编译时赋一次初值,以后再次调用函数时不再重新赋初值,而是保留上次函数调用结束时的值。程序中的变量 c为静态变量,当再次调用 fun函数时,变量 c不再被赋初值,变量 c的值为上次调用 fun函数时所保留下来的值,具体在程序运行过程中的体现如下: 当 i=0时,第一次调用 fun(5),这时 a=5, b=0,
33、 c=3,执行 b+, c+,得到b=1, c=4,则 a+b+c=10,返回主函数输出 010;当 i=1时,第二次调用 fun(5),这时 a=5, b=0, c=4,执行 b+, c+,得到 b=1, c=5,则 a+b+c=11,返回主函数输出 111;当 i=2时,第三次调用 fun(5),这时 a=5, b=0, c=5,执行 b+,c+,得到 b=1, c=6,则 a+b+c=12,返回主函数输出 212;当 i=3时,循环结束,所以输出结果为: 010111212。 51 【正确答案】 bri或 *(br+i) 【试题解析】 程序中的数组 a是一个 3行 4列的二维数组,一维数
34、组 b用于存放每行的最大数。在函数 fun中,通过二重 for循环求每行的最大数,外层 for循环用于控制行数,内层 for循 环用于控制列数,当外层循环执行一次时,内层循环则从一行的 4个数中找出最大数 x,然后将最大值 x赋给数组 br,故空格处应填 bri或 *(br+i)。 52 【正确答案】 C 【试题解析】 枚举的语法规定,当枚举元素没有赋值时,如果前面没有其他枚举元素,其值为 0;如果前面有其他枚举元素,其值为前一个元素的值加 1,所以his的值为 5, her的值为 15。 53 【正确答案】 abcfg 【试题解析】 fun函数中 for循环语句的作用是将 s所指的字符串中从
35、第 5个字符到第 7个字符依次向前移动两个位置 。输出结果为 abcfg。 54 【正确答案】 abcbcc 【试题解析】 for循环用 strcpy函数将字符数组 ch的值 “abc“,分别复制给二维数组 x的每一行,然后通过 for循环先后打印出以 x00, x11, x22开头的字符串 “abe“, “bc“, “c“,所以输出结果为: abcbcc。 55 【正确答案】 433 4 【试题解析】 程序将变量 a, b的值传给函数 swap的形参 x, y,并在函数中对x, y的值进行交换,所以在函数 swap中输出 x, y的值 4, 3,由于 c程序 的函数是僧传递,实参 a, b的
36、值不会随形参 x, y的改变而改变,所以在主函数中输出的 a, b的值为 3, 4。 56 【正确答案】 918273645 【试题解析】 程序通过 for循环将字符 0 9从前向后,同时从后向前依次输出,所以输出结果为: 0918273645。 57 【正确答案】 10 20 0 【试题解析】 程序中 (a%b 1)|(a/b 1)的运算顺序为先算括号 算术运算符 关系运算符 逻辑运算符。首先计算 a%b=10, a/b=0,因为 a%b 1为假 (0), a/b 1也为假 (0),所以整个表达式的结果为假 (0),最后输出 a, b, c的值为 10 20 0。 58 【正确答案】 p1+
37、(stfien(str)-1)或 str+(strlen(str)-1) t=0或 !t huiwen(str)或 (strlen(str)-1)+p1或 (stden(str)-1)+str 【试题解析】 回文字符串是指正向与反向拼写都一样。由 huiwen函数可知,第三处应该填写调用函数 huiwen(str)。在函数 huiwen中,执行 P1=str;使 p1指向字符串 str中第一个字符的地址, 则第一处应该使 p2指向字符串 str中最后一个字符的地址,故填 p1+(stden(str)-1)或 str +(strlen(str)-1)。本题要求如果是回文,则返回 “yes!“,否则,返回 “no!“,故当 t=0时,说明字符串 str为回文,所以第二处应填 t=0或 !t。