1、国家二级( C语言)笔试模拟试卷 276 及答案与解析 1 在一棵二叉树上,第 5层的结点数最多是 ( )。 ( A) 8 ( B) 9 ( C) 15 ( D) 16 2 在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为 ( A) 63 ( B) 64 ( C) 6 ( D) 7 3 下面关于完全二叉树的叙述中,错误的是 _。 ( A)除了最后 层外,每 层上的结点数均达到最大值 ( B)可能缺少若干个左右叶子结点 ( C)完全二叉树 般不是满二叉树 ( D) 具有结点的完全二叉树的深度为 log2n+1 4 下列描述中正确的是 _。 ( A)程序就是软件 ( B)软件开
2、发不受计算机系统的限制 ( C)软件既是逻辑实体,又是物理实体 ( D)软件是程序、数据与相关文档的集合 5 源程序的文档不包括 ( )。 ( A)符合号名的命名要有实际意义 ( B)正确的文档形式 ( C)良好的视觉组织 ( D)正确的程序注释 6 下列实体的联系中,属于多对多联系的是 ( )。 ( A)学生与课程 ( B)学校与校长 ( C)住院的病人与病床 ( D)职工与工资 7 算法一般都可以用 _控制结构组合而成。 ( A)循环、分支、递归 ( B)顺序、循环、嵌套 ( C)循环、递归、选择 ( D)顺序、选择、循环 8 设 a=2、 b=3、 c=4,则表达式 a+b c int
3、v0=1,v1=0,v2=0; do switch(c=getchar() case a:case A: case e:case E: case i:case I: case o:case O: case u:case U:v1+=1; default:v0+=1;v2+=1; while(c!=n); printf(“v0=%d,v1=%d,v2=%dn“,v0,v1,v2); ( A) v0=7,v1=4,v2=7 ( B) v0=8,v1=4,v2=8 ( C) v0=11,v1=4,v2=11 ( D) v0=13,v1=4,v2=12 16 以下定义语句中正确的是 ( A) char
4、 a=A b=B; ( B) float a=b=10.0; ( C) int a=10,*b= ( D) float *a,b= 17 若有以下定义和语句: int a=1,2,3,4,5,6,7,8,9,10, *p=a; 则值为 3的表达式是 _。 ( A) p+=2,*(p+) ( B) P+=2,*+p ( C) P+=3,*p+ ( D) P+=2,+*p 18 有以下程序: main() int i; for(i=0;i 3;i+) switch(i) case 0: prinft(“%d“,i); Case 2: prinft(“%d“,i); default: prinft(
5、“%d“,i); 程序运行后的输出结果是 ( )。 ( A) 22111 ( B) 21021 ( C) 122 ( D) 12 19 下面程序的执行结果是 _。 main() char str=“quert?“,*p=str; while(putchar(*p+)!=?); ( A) quert ( B) Rvfsu ( C) quert? ( D) rvfsu? 20 八进制数 253.74转换成二进制数是 ( ) ( A) 10101011.1111 ( B) 10111011.0101 ( C) 11001011.1001 ( D) 10101111.1011 21 有以下程序 #in
6、clude int fun() static int x=l: X*=2: return X: main() int i, s=l: for(i=l; i int Fun() ststic int x=1; x*=2;return x; main () int i,s=1; For(i=1;I1)层上 至多有 2i-1个结点。得到第5层的结点数最多是 16个。 2 【正确答案】 B 【试题解析】 顺序查找是从线性表的第 个元素开始依次向后查找,如果线性表中的第一个元素就是要查找的元素,则只需要做 次比较就查找成功;但如果要查找的元素是线性表中的最后一个元素,或者要查找元素不在线性表中,则需要与
7、线性表中所有元素进行比较,这是顺序查找的最坏情况,比较次数为线性表的长度。 3 【正确答案】 B 【试题解析】 满二叉树指除最后一层外每一层上所有结点都有两个子结点的二叉树。完全二叉树指除最后一层外 ,每 层上的结点数均达到最大值,在最后 层上只缺少右边的若干子结点 (叶子结点 )的二叉树。 4 【正确答案】 D 【试题解析】 程序是软件的一部分,软件是一种逻辑实体,它的开发、运行都依赖计算机系统,因此出现了软件的移植问题。 5 【正确答案】 B 【试题解析】 本题主要考查源程序的定义: 符号名应具有一定实际的含义; 正确的程序注释; 良好的视觉组织。 6 【正确答案】 A 【试题解析】 只有
8、选项 A符合多对多联系的条件,因为一个学生可以选修多门课程,而一门课程又可以由多个学生来 选修,所以学生与课程之间的联系是多对多联系。 7 【正确答案】 D 【试题解析】 算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。 8 【正确答案】 D 9 【正确答案】 D 【试题解析】 在关系数据库中,用二维表来表示实体之间联系。 10 【正确答案】 C 【试题解析】 关系代数运算是以关系代数作为运算对象的一组高级运算的集合。它的基本操作是并、交 、差、笛卡尔积,另外还包括垂直
9、分割 (投影 )、水平分割(选择 )、关系的结合 (连接 )等。 11 【正确答案】 A 【试题解析】 题中要求 x的取值是小于等于 0或者大于等于 1,这说明表达式是或的关系,所以在写成 C语言表达式应是逻辑或的关系,逻辑或运算符是 “。 12 【正确答案】 D 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。 13 【正确答案】 A 【试题 解析】 C语言中允许进行不同数据类型的混合运算,但在实际运算时,要先将不同类型的数据转化成同一类型再进行运算。类型转换的一般规
10、则是: 运算中将所有 char型转换成 int型, float型转换成 double型; 低级类型服从高级类型,并进行相应的转换,数据类型由低到高的顺序为: char-int-unsigned-long-float-double; 赋值运算中最终结果的类型,以赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应转换。 14 【正确答案】 B 【试题解析】 数据库的三级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。 15 【正确答案】 D 【试题解析】 本题考查 switch 语句的掌握。必须撑握以下内容
11、:首先应该明白switch 语句的语法格式 : switch 语句的语法格式为 : switch (表达式 ) case 常量表达式 1:语句组 1; case 常量表达式 2:语句组 2; case 常量表达式 n:语句组 n; default:语句组 n+1; 另外 ,以下几点关于 switch 语句的重点 : 系统在执行时计算开关表达式的值 ; 根据所得的值在各个 case标号表达式中寻找匹配 ,直到发现与表达式匹配的标号 (本例中匹配的是 找 到匹配后执行后面相应的语句表 ,顺序往下执行 ; 如果无相匹配的标号 ,若存在 default标号 ,则执行该语句标号后面的语句表 n+1;当不
12、存在 default标号时 ,不执行 switch中的任何一个语句表。 一般而言 ,在多分支结构中总会出现 “意外 “的情况 ,这时均可归入 default程序段 ,作统一的处理。 default 标号是可选性的 ,不必每次都 有 ,视需要而定。 switch 语句中还可以包含 switch 语句 ,形成 switch 的嵌套。 16 【正确答案】 C 【试题解析】 选项 A中定义两个变量 a和 b,并赋初值, C语言中可以同时定义多个变量,但变量之间必须用 “, ”隔开,显然,选项 A中少了一个逗号 “, ”,故选项 A不正确;选项 B 中定义变量时用了连续的赋值语句,这在定义变量是不正确的
13、,故选项 B 不正确,选项 D定义一个指针,然后定义了一个变量并让这个变量的初值为该指针变量,显然这这时的指针变量还没初始化就被赋值给变量,是不对的,故选项 D不正确,所以, 4个 选项中选项 C符合题意。 17 【正确答案】 A 【试题解析】 引用 个数组元素,可以用: (1)下标法,如 ai形式: (2)指针法,如 *(a+i)或 *(p+i)。数组的下标从 0开始,值为 3的数组元素是 a2。 B、 C的内容为 a3, D将 a2前自加,结果为 4。 18 【正确答案】 C 【试题解析】 程序中 for循环了三次,第一次 i=O,执行 switch 语句中 case0:分支,直到遇到 d
14、efault语句,退出 switch,这里共执行了 3个输出语句分别输出0、 0、 0,第二次循环 i=1, switch 语句中没有匹配的分支,故只执行 default语句输出 1,退出 switch 语句;第三次循环 i=2,从 switch 语句中的 case2:开始执行,共执行了两个输出语句输出 2、 2。最后输出的结果为 000122。所以, 4个选项中选项 C符合题意。 19 【正确答案】 C 【试题解析】 *p+是先取 *p的值,然后指针变量 p 指向下一个字符, putchar是先执行 (输出 )再判断,所以 “?”是可以显示的。 20 【正确答案】 A 21 【正确答案】 B
15、 【试题解析】 fun 函数中的变量 x为 静态局部变量,它在内存的静态存储区中占据着永久性的存储单元即使退出 fun函数也不释放 x的存储单元,仍保留其原来的值,函数共调用了 3次 fun 函数,第一次调用 fun 函数后, x=2, s=2;第二次调用 fun函数后, x=l, s=8;第三次调用 fun 函数后 x=8, s=64。故程序运行后输出结果为 64。 22 【正确答案】 B 【试题解析】 函数 scmp 的功能是比较两个符号串的大小,返回值较小的那个符号串。 str0中存放 “abcd“、 str1中存放 “abba“、 str2中存放 “abc“,执行完 语句 strcpy
16、(string, scmp(sty0, sir1);后 string中存放 “abba“,执行完语句strcpy(string, scmp(string, str2);后 string中存放 “abba“。 23 【正确答案】 A 【试题解析】 strcmp(str1, str2)是比较字符串 str1和 sir2,当两字符串相等时,返回值为 0,不相等时返回值为非 0;所以此段程序的功能是在未接收到字符串“the end”时,读入字符并输出。 24 【正确答案】 A 【试题解析】 在给 p和 q 数组赋初值时,系统会自动添加字符串结束符,从题目中可以看出数组 p和 q 都有 3个字符,所以长
17、度均为 3。 25 【正确答案】 B 【试题解析】 在 C语言中,对于自定义函数要遵循 “先定义,后使用 ”的规则,如定义时不指定函数类型, C编译系统都默认函数的返回值是 int型。 26 【正确答案】 C 【试题解析】 要注意不能将结构体变量作为一个整体进行输入和输出,只能对结构体变量中的各个成员进行输入和输出。引用结构体变量中成员的方式有以下几种:结构体变量名 .成员名;指针变量名 -成员名; (*指针变量名 ).成员名。 27 【正确答案】 B 【试题解析】 在 main()函数中定义了一个具有 5个元素的 x数组并赋初值,然后调用 findmax()函数求数组中元素的最大值。调用时把
18、数组元素 x的首地址,传给了形参指针变量 a,把 5传给形参 n。在函数 findmax()中定义了两种指针变量 p和 s,其中 s用来记录最大元素的地址, p 作为循环控制变量,表示每个元素的地址求最大值的算法是先将第一个元素 (用 s记下它的地址 )做为最大值,然后用最大值 (*s)与后面的每个元素比较 (*p),若后面的元素大,则用 s 记 下它的地址,所以下划线应填 “*s*s”。所以, 4个选项中 B为所选。 28 【正确答案】 A 【试题解析】 本题考查的知识点是数组名作为函数参数及函数调用。 reverse()数的功能是将具有 n个元素的数组 a反序存放。在主函数中调用语句是 “
19、reverse(b,8); ”,实现的功能是把 b 数组的前八个元素逆置,所以 b数组中依次存放的值为“8, 7, 6, 5, 4, 3, 2, 1, 9, 10”。 for循环了 4次,分别把 b6、 b7、 b8和b9的值 (分别是 2、 1、 9、 10)加到了 s中, s的 结果是 22,所以最后输出的 s值为22。所以 4个选项中 A正确。 29 【正确答案】 D 【试题解析】 本题考核的知识点是文件的基本概念。 C语言可以读写二进制文件和文本文件两种,故选项 A和选项 B 不正确;文件按数据的存放格式可分为二进制文件和文本文件两种,其中二进制文件中数据都是以二进制的形式存放,故选项
20、 C不正确。所以, 4个选项中选项 D符合题意。 30 【正确答案】 C 【试题解析】 本题考查移位运算和按位或运算,注意按位或运算时只要对应的二进制位中有一个为 1,结果为 1;若都为 0,结果为 00 31 【正确答案】 A 【试题解析】 对未给出初始值的整数数组元素,被默认初始化为零。 32 【正确答案】 C 33 【正确答案】 D 【试题解析】 C语言中规定:一个数组名代表它的起始地址。本题中,定义了一个长度为 10的数组 a并赋初值,数组名 a就是数组的起始地址,由于数组下标是从 0开始,因此 a0的地址也是 a的值, a1的地址可以用 a+1 表示,也就是说a+1指向数组 a中下标
21、为 1的元素,同样 a+i是 ai的地址, *p= i=2:k=2+arr2+2 即 k=6; i=3:k=6+arr3+3 即 k=12; 48 【正确答案】 1 【试题解析】 “sizeof“、 “%”、 “ ”、 “ ”、 “*=”,运算符 的优先级顺序为: “*=”“ ”“ ”“%”“sizeof” ; 位运算的优先级顺序为:“ ”“ ”“ ”“&”“” 。 (b=2) (c=4)不成立,逻辑为假,所以n=0; (a=3)!=(b=2)成立,逻辑为真,所以 m=1。 48 【试题解析】 小写字母在内存中以 ASCII的形式存入,且从 a到 z依次递增,所以可以直接用 c a&c =z判
22、断是不是小写字母; c!=n判断是用换行符结束循环。 48 【试题解析】 本题考查的是 C语言逗号表达式的相关知识。程序 在计算逗号表达式时,从左到右计算由逗号分隔各表达式的值,整个逗号表达式的值等于其中最后一个表达式的值。本题中,首先 i被赋值为 2,再自加 1,最后 i+的值计算为3。 49 【正确答案】 C 50 【正确答案】 数据操作 【试题解析】 数据模型就是现实世界的反映,数据模型所描述的内容有 3个部分,它们是数据结构、数据操作与数据约束。 51 【正确答案】 malloc(11*sizeof(shar)。 【试题解析】 本题考查库函数调用的一些方法,要写 11个字节的动态存储空
23、间的库函数是 malloc(11*sizeof(shar)。 52 【正确答案】 5 【试题解析】 此程序中, for循环语句后面直接跟了一个 “; ”,表明循环体为空输出语句不在 for循环体内,所以在循环执行完毕后才输出 s的值 s、 i的初值分别为 0和 1,判断循环条件,表达式 “13”成立,执行 “i+, s+=i”后, i和 s的值分别为 2和 1,继续判断循环条件,表达式 “23”成立,执行 “i+, s+=i”后, i和 s的值分别为 3,再次判断循环条件,表达式 “33”不成立,循环结束。 53 【正确答案】 n1=%dnn2=%dn或 n1=%dnn2=%d或 n1=%2d
24、nn2=%2dn 或n1=%2dnn2=%2d 【试题解析】 printf函数有两种参数:格式控制参数和输出项参数,其中格式控制参数由两种成分组成:格式说明和普通字符,普通字符将被简单地复制显示,格式说明项将引起一个输出参数项的转换与显示,它是由 “%”引出并以一个类型描述符结束的字符串。本题中, n1=和 n2=就是普通字符,可以直接显示,又因为n1, n2为整数,所以格式说明项为 % d,也可以在 %与 d之间加上域宽,另外还要在每行输出结束时加转义 字符 n 进行换行。所以,应填写 n1=%dnn2=%dn或n1=%dnn2=%d 或 n1=%2dnn2=%2dn 或 n1 =%2dnn
25、2=%2d。 54 【正确答案】 passwarn 【试题解析】 n+是在执行完其所在的语句后再加 1,因此,在执行 case的时候, n的值依然为 c,执行 casec后面的语句,先打印出 “pass”;在执行完 casec后,未遇到 break 跳出 switch,便接着执行下面的语句,又打印出 warn。所以此题输出结果是 passwarn。 55 【正确答案】 10 4 【试题解析】 结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。 int占 2个字节, float占 4个字节,共用体变量所占的内存长度等于最长的成员的长度。所以, sizeof(a.share)的值是 4, sizeof(a)的值是 2+2+2+4=10。