1、国家二级( C语言)笔试模拟试卷 122及答案与解析 1 下列选项中,不是一个算法的基本特征的是 ( )。 ( A)完整性 ( B)可行性 ( C)有穷性 ( D)拥有足够的情报 2 下列数据结构中,属于非线性的是 ( )。 ( A)线性表 ( B)队列 ( C)树 ( D)栈 3 下列叙述中错误的是 ( )。 ( A)线性表是由 n个元素组成的一个有限序列 ( B)线性表是一种线性结构 ( C)线性表的所有结点有且仅有一个前件和后件 ( D)线性表可以是空表 4 按照 “先进先出 ”组织 数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向链表 ( D)二叉树 5 下列关于线性
2、链表的描述中正确的是 ( )。 ( A)存储空间不一定连续,且各元素的存储顺序是任意的 ( B)存储空间不一定连续,且前件元素一定存储在后件元素的前面 ( C)存储空间必须连续,且各前件元素一定存储在后件元素的前面 ( D)存储空间必须连续,且各元素的存储顺序是任意的 6 某二叉树共有 60个叶子结点与 50个度为 1的结点,则该二叉树中的总结点数为( )。 ( A) 148 ( B) 169 ( C) 182 ( D) 198 7 下列数据结构中,能用二分法进行查找的是 ( )。 ( A)顺序存储的有序线性表 ( B)结性链表 ( C)二叉链表 ( D)有序线性链表 8 简单的交换排序方法是
3、 ( )。 ( A)快速排序 ( B)选择排序 ( C)堆排序 ( D)冒泡排序 9 对于长度为 n的线性表,在最坏情况下,下列各种排序法所对应的比较次数中正确的是 ( ( A)冒泡排序为 n/2 ( B)冒泡排序为 n ( C)快速排序为 n ( D)快速排序为 n(n-1)/2 10 结构化程序 设计的 3种基本结构是 ( )。 ( A)过程、子程序和分程序 ( B)顺序、选择和重复 ( C)递归、堆栈和队列 ( D)调用、返回和转移 11 下列叙述中正确的是 ( )。 ( A) C程序由函数组成 ( B) C程序由主函数构成 ( C) C程序由函数和过程构成 ( D)在 C程序中无论是整
4、数还是实数,都可以正确无误的表示出来 12 设有定义下列: int a=1,b=2,c=3,d=4,m=2,n=2; 则表达式 (m=a b) int a,b,c; a=(-x=y+)?x:+y; b=+x; c=y; ( A) a=5, b=5, c=5 ( B) a=4, b=5, c=5 ( C) a=5, b=6, c=5 ( D) a=1, b=5, c=6 14 下列程序的输出结果是 ( )。 main() int a=1,b=2; printf(“%d,%dn“,-a,+b); ( A) 1, 2 ( B) 1, 3 ( C) 0, 2 ( D) 0, 3 15 下列变量声明合法
5、的是 ( )。 ( A) short a=1.4e-1; ( B) double b=1+3e2.8; ( C) long do=0xfdaL; ( D) float2_aaa=1e-3; 16 在函数 scanf的格式控制中,格式说明的类型与输入项的类型应该对应匹配。如果类型不匹配,系统将 ( )。 ( A)不予接 收 ( B)并不给出出错信息,但不能得到正确的数据 ( C)能接收到正确输入 ( D)给出出错信息,不予接收输入 17 若有下列定义 (设 int类型变量占 2个字节 ): floatx=123.4567; 则下列语句: printf(“x=%5.2f“,x); 输出的结果是 (
6、 )。 ( A) x=123.46 ( B) 123.4567 ( C) x=123.4567 ( D) 123.46 18 下列程序的输出结果是 ( )。 #include stdio.h main() int i; for(i=1 ;i =10; i+) if(i*i =20) printf(“%dn“,i*i); ( A) 49 ( B) 36 ( C) 25 ( D) 64 19 若执行下列的程序时,从键盘上输入 1和 2,则输出结果是 ( )。 #include stdio.h main() int a,b,s; scanf(“%d%d“, s=a; if(a b) s=b; S=S
7、*S, printf(“%dn“,s); ( A) 1 ( B) 4 ( C) 2 ( D) 9 20 有下列程序 main() int t, a=1, b=5, c=-2; while(a b c) t=a; a=b; b=t; c+; printf(“%d, %d, %d“, a, b, c); 程序输出的结果是 ( )。 ( A) 1, 5, 0 ( B) 1, 5, -2 ( C) 5, 1, -1 ( D) 5, 1, -2 21 有下列程序段: int k=0, a=1, b=2, c=3; k=a b?b: a; k=k c?c=k; 执行该程序段后, k的值是 ( )。 ( A
8、) 3 ( B) 2 ( C) 1 ( D) 0 22 有下列程序: main() int y=20; doy-; while(-y); printf(“%dn“, y-); 当执行程序时,输出的结果是 ( )。 ( A) -1 ( B) 1 ( C) 4 ( D) 0 23 有下列程序段: struct st int x; int *y; *pt; int a=1, 2, b=3,4; struct st c2=10,a,20,b; pt=c; 下列选项中表达式的值为 11的是( )。 ( A) *pt- y ( B) pt- x ( C) +pt- x ( D) (pt+)- X 24 表
9、达式 8-2的值是 ( )。 ( A)整数 6 ( B)字符 6 ( C)表达式不合法 ( D)字符 8 25 在嵌套使用 if语句时, C语言规定 else总是 ( )。 ( A)和之前与其具有相同缩进位置的 if配对 ( B)和之前与其最近的 if配对 ( C)和之前与其最近的且不带 else的 if配对 ( D)和之前的第一个 if配对 26 下列函数值的类型是 ( )。 fun(double x) float y; y=3*x-4; return y; ( A) int ( B)不确定 ( C) void ( D) float 27 有下列程序: main() int k=5, n=0
10、; do switch(k) case 1: case 3: n+=1; k-; break; default: n=0; k-; case2: case 4;n+=2; k-; break; printf(“%d“, n); while(k 0 a=3;b=4;c=5; if(a b) if(a c) printf(“%d“,a); else printf(“%d“,b); printf(“%dn“,c); 49 下列语句能循环 _次。 int s=12; while(s); -s; 50 下列程序的运行结果是 _。 main() int a=1,b=10; do b-=a;a+;while
11、(b- 0); printf(“%d,%dn“,a,b); 51 若定义 #define PI 3.14159,则执行完下列程序后输出结果是 _。 #define PI 3.14159;printf(“PI=%f“,PI); 52 下列程序的输出结果是 _。 main() int a=31,27,20,12,6,1),*p=a; p+; printf(“%dn“,*(p+2); 53 若有下列定义和语句: char *s1=“12345“,*s2=“1234“; printf(“%dn“,strlen(strcpy(s1,s2); 则输出结果为 _。 54 下列程序的运行结果是 _。 main
12、() int i,a10; a0=a1=1; for(i=2;i 5;i+) ai=ai-2+ai-1; for(i=0;i 5;i+) if(i%2=0)printf(“n“); printf(“%d“,ai); 55 下列程序的输出结果是 _。 #include stdio.h int fun(int x) int p; if(x=0x=1) return 3; else p=x-fun(x-2); return p; void main() printf(“n%d“,fun(11); 国家二级( C语言)笔试模拟试卷 122答案 与解析 1 【正确答案】 A 【试题解析】 作为一个算法,
13、一般应该具有下列 4个特征: 可行性,即考虑到实际的条件能够达到一个满意的结果: 确定性,算法中的第一个步骤都必须是有明确定义的: 有穷性,一个算法必须在有限的时间内做完; 拥有足够的情报。 2 【正确答案】 C 【试题解析】 线性结构,是指数据元素只有一个直接前件元素和直接后件元素。线性表是线性结构。栈和队列是指对插入和删除操作有特殊要求的线性表,树是非线性结构。 3 【正确答案】 C 【试题解析】 线性表是一种线性结 构,由 n(n0)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件,所以 C是错误的。 4 【正确答
14、案】 A 【试题解析】 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫 “队尾 ”,删除元素的一端叫 “队头 ”,先插入的元素先被删除,是按 “先进先出 ”的原则组织数据的。 5 【正确答案】 A 【试题解析】 线性表的链式存储结构中的结点空间是动态生成的,它们在内存中的地址可能是连续 的,也可能是不连续的。 6 【正确答案】 B 【试题解析】 叶子结点总是比度为 2的结点多一个。所以,具有 60个叶子结点的二叉树有 59个度为 2的结点。总结点数 =60个叶子结点 +59个度为 2的结点 +50个度为 1的结点 169个结点 7 【正确答案】 A 【
15、试题解析】 二分法查找只适用于顺序存储的有序线性表,对于顺序存储的非有序线性表和线性链表,都只能采用顺序查找。 8 【正确答案】 D 【试题解析】 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括 冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。 9 【正确答案】 D 【试题解析】 在最坏情况下,冒泡排序和快速排序的比较次数都是 n(n-1)/2。所谓冒泡排序,就是将相邻的两个数据相比较,如前面的数据大于后面的,则位置互换。这样不停地比较、互换,其实就是把大的数往后排,小的数往前撑 (就像冒泡一样冒出来了 )。 10
16、 【正确答案】 B 【试题解析】 程序的 3种基本控制结构包括顺序、选择和重复 (循环 ),这 3种结构就足以表达出各种其他形 式的结构。 11 【正确答案】 A 【试题解析】 本题涉及 C语言最基本的两个知识点: C程序是由函数构成的,有且仅有一个主函数,也可以有其他的函数; 整数在允许的范围内可以准确无误的表示出来,但计算机的存储能力有限,不能表示无限精度的实数。 12 【正确答案】 C 【试题解析】 在逻辑与 ”语句,输出 c的值,输出结果为5。 49 【正确答案】 无限 【试题解析】 分析程序 “while(s)”语句后面有一个 “; ”不能执行后面的语句,只是执行空语句,所以 s=1
17、2保持不变,因此,没有条件限制的能循环无限次 (即死循环 )。 50 【正确答案】 2,8 【试题解析】 dowhile 语句的功能是:首先执行循环体语句,然后检测循环控制条件表达式的值,若为真,则重复执行循环体语句,否则退出循环。这里程序初始时 a=1, b=10,经过操作 b-=a; a+后 b=9, a=2,判断条件 b- 0不成立,退出循环,但 b的值被减 1,因此结果为: a=2, b=8。 51 【正确答案】 PI=3.14159 【试题解析】 本题先定义了一个宏名 PI,以后在程序中出现 PI都用 3.14159替代,但是 C语言规定:双引号中的宏名是不进行替换的。 52 【正确
18、答案】 12 【试题解析】 本题考查如何用指针引用数组元素。分析程序,首先定义了一个指向数组 a的指针 p, p指向数组的首地址,通过 p+,将 p指向 a1, p+2是将指针后移 2位指向 a3, *(p+2)即是取 a3的值 12。 53 【正确答案】 4 【试题解析】 strcpy(s1, s2)函数的作用是将字符串 s2中的内容拷贝到字符串 s1中,并将原来 s1中的内容覆盖。 strlen()函数是求字符串的长度。本题实际上是要求 s2字符串的长度,即是 4。 54 【正确答案】 1 1 CR 2 3 CR 5( CR代表换行 ) 【试题解析】 本题通过语句 ”for(i=2;i 5
19、;i+)ai=ai-2+ai-1;”将数组中前面两项的和赋值给数组当前元素,得到 a的值应为 1,1,2,3,5)。语句if(i%2=0)printf(“n“)是要将数组中的元素以每行 2个的形式输出。 55 【正确答案】 4 【试题解析】 本题考查函数的 递归调用。在主函数中第 1次调用子函数是调用的fun(11),返回 11-fun(9);第 2次调用子函数是调用的 fun(9),返回 9-fun(7);第 3次调用子函数是调用的 fun(7),返回 7-fun(5);第 4次调用子函数是调用的fun(5),返回 5-fun(3);第 5次调用子函数是调用的 fun(3),返回 3-fun(1);第 6次调用子函数是调用的 fun(1),返回 3。总的返回值是: 11-(9-(7-(5-(3-3)=4。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1