1、国家二级( C语言)笔试模拟试卷 188及答案与解析 1 下面关于算法的叙述中,正确的是 ( )。 ( A)算法的执行效率与数据的存储结构无关 ( B)算法的有穷性是指算法必须能在执行有限个步骤之后终止 ( C)算法的空间复杂度是指算法程序中指令 (或语句 )的条数 ( D)以上三种描述都正确 2 下列二叉树描述中,正确的是 ( )。 ( A)任何一棵二叉树必须有一个度为 2的结点 ( B)二叉树的度可以小于 2 ( C)非空二叉树有 0个或 1个根结点 ( D)至少有 2个根结点 3 如果进栈序列为 A, B, C, D,则可能的出栈序列是 ( )。 ( A) C, A, D, B ( B)
2、 B, D, C, A ( C) C, D, A, B ( D)任意顺序 4 下列模式中,能够给出数据库物理存储结构与物理存取方法的是 ( )。 ( A)内模式 ( B)外模式 ( C)概念模式 ( D)逻辑模式 5 下列叙述中,不属于软件需求规格说明书的作用的是 ( )。 ( A)便于用户,开发人员进行理解和交流 ( B)反映出用户问题的结构,可以作为软件开发工作的基础和依据 ( C)作为确认测试和验收的依据 ( D)便于开发人 员进行需求分析 6 下列不属于软件工程 3个要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法 ( D)环境 7 数据库系统在其内部具有 3级模式,用来描
3、述数据库中全体数据的全局逻辑结构和特性的是 ( )。 ( A)外模式 ( B)概念模式 ( C)内模式 ( D)存储模式 8 将 E-R图转换到关系模式时,实体与联系都可以表示成 ( )。 ( A)属性 ( B)关系 ( C)记录 ( D)码 9 某二叉树中度为 2的结点有 10个,则该二叉树中有 ( )个叶子结点。 ( A) 9 ( B) 10 ( C) 11 ( D) 12 10 以下叙述中正确的是 ( )。 ( A) C程序中注释部分可以出现在程序中任意合适的地方 ( B) C程序的书写格式是固定的,每行只能写一条语句 ( C)构成 C程序的基本单位是函数,所有函数名都可以由用户命名 (
4、 D)在对 C语言程序进行编译时,可以发现注释行中的拼写错误 11 下列合法的标识符是 ( )。 ( A) 123 ( B) #256 ( C) a.55 ( D) abhj1_2_3 12 以下程序的运行结果是 ( )。 #include stdio.h main() int a=3, b=4,c=8, d=4, m=1, n=3; printf(“%dn“, (m=a B) for(; ( ); ss+) if(*ss=C)i+; return i; main() char aM, ch; printf(“nPlease enter a string: “); gets(A); print
5、f(“nPlease enter a char: “);ch=getchar(); printf(“nThe number of the char is: %dn“, fun(a, ch); 47 以下程序是求矩阵 a、 b的和,结果存入矩阵 c中,请填空。 #include stdio.h main() int a44=1, 2, 6, 7, 0, 4, 2, -8, 1, 4, 5, 2, 2, 4,6, 8; int b44=-4, 0, 7, 9, 2, -7, 7, 4), 6, 9, 0, 1), 8, 8,6, 5); int i,j, c44; for(i=0; i 4; i+
6、) for(j=0;j 4;j+) cij=( ); for(i=0; i 4; i+) for(j=0;j 4;j+) printf(“%d“, cij); 48 以下程序的输出结果是 ( )。 main() char *p=“ABC“, “DEF“, “GHI“,“JKL“; int i; for(i=3; i =0; i-, i-) printf(“%c“, *pi); 49 以下程序的功能是:从低位开始取出长整型变量 s中奇数位上的数,依次构成一个新数放在 t中。高位仍在高位,低位仍在低位。请填空。 #include stdio.h main() long s, t, s1=10; p
7、fintf(“n.Please enter s: “); scanf(“%1d“, &s); t=s%10; while(s 0) s=s/100; t=( ); s1=s1*10; printf(“The result is: %1dn“, t); 国家二级( C语言)笔试模拟试卷 188答案与解析 1 【正确答案】 B 【试题解析】 算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。算法的有穷性是指一个算法必须在执行有限的步骤以后结束。 2 【正确答案】 B 【试题解析】 二叉树是由 n0个结点的有限集合构成,此集合或者为空集,或者由一 个根结点及两棵互不相交的左右子树组成,并且左
8、右子树都是二叉树。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。 二叉树具有如下两个特点: 非空二叉树只有一个根结点。 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。 3 【正确答案】 B 4 【正确答案】 A 【试题解析】 数据库管理系统的三级模式结构由外模式、模式和内模式组成。 外模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式, 或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式,或存储模式,或物理模式,是指数据在数据库系统
9、内的存储介质上的表示,即对数据的物理结构和存取方式的描述。 5 【正确答案】 D 【试题解析】 软件需求规格说明书有以下几个方面的作用: 便于用户、开发人员进行理解和交流。 反映出用户问题的结构,可以作为软件开发工作的基础和依据。 作为确认测试和验收的依据。 6 【正确答案】 D 【试题解析】 软件工程包括 3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。 7 【正确答案】 B 【试题解析】 概念模式,也称逻辑模式,是对数据库系统中全局数据逻辑结构的描述,是全体用户应用公共数据视图。它不涉及具体的硬件环
10、境与平台,与具体的软件环境也无关。 8 【正确答案】 B 9 【正确答案】 C 【试题解析】 根据二叉树的性质 3:对任何一棵二叉树,度为 0的结点 (即叶子结点 )总是比度为 2的结点多一个。 10 【正 确答案】 A 11 【正确答案】 D 12 【正确答案】 A 【试题解析】 逻辑与 (&)运算符的功能是:当 “&”运算符两边的运算对象均为1时,整个表达式的值为 1,否则为 0。因为 a=3 b=4,即 m=0,所以整个表达式的值为 0。 13 【正确答案】 D 14 【正确答案】 A 【试题解析】 scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,在输入数据时,
11、按照一一对应的位置原样输入这些字符。 15 【正确答案】 D 【试题解析】 不同的编译系统或 计算机系统对几类整型数所占用的字节数有不同的规定。 long、 int和 short类型数据占用内存大小是由选择何种 C编译系统决定的。 16 【正确答案】 D 【试题解析】 因为没有 break语句,当 k=2的时候,会顺序执行两条语句, k=1的时候,会顺序执行 3条语句。 17 【正确答案】 B 【试题解析】 0 18 【正确答案】 B 【试题解析】 dowhile 循环的执行过程如下: 执行 do后面的循环体中的语句。 计算 while后一对圆括号中表达式的值。当值为非 0时,转去执行步骤 ;
12、当值为 0时,执行步骤 。 退出 dowhile 循环。对于本题变量 i的初始值等于“0”,接着执行 do后面的循环体中的语句,输出变量 i的值 0。再判断 while后面括号中表达式 i+的值,其值为 0,所以循环结束。此时变量 i的值经过自加已经变为 1,所以再次输出 i的值 “1”。 19 【正确答案】 B 【试题解析】 条件表达式的形式为: “表达式 1?表达式 2:表达式 3”。其含义为:当 “表达式 1”的值为非零时,求出 “表达式 2”的值,此时 “表达式 2”的值就是整个条件表达式的值;当 “表达式 1”的值为零时,求出 “表达 式 3”的值,此时 “表达式 3”的值就是整个条
13、件表达式的值。对于本题来说,当表达式 EXP为非 0值时条件成立,即执行语句 i+;当 EXP等于 0时,执行语句 j-;这等同于条件表达式 “(EXP!=0)?i+:i+; ”。 20 【正确答案】 C 【试题解析】 y的初值为 9,所以在 for循环中,当 y的值为 9、 6或 3时, if语句的条件成立,执行输出语句,输出表达式 -y的值。因为自减符号在 y的前面,所以首先 y自减 1,然后再输出 y的值,故输出结果为 8 5 2。 21 【正确答案】 B 【试题解析】 scanf()语句中用 “空格 ”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格; ge
14、tchar()函数用于输入字符,其调用形式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量 ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入 Enter键时,读入才开始执行。 gets()函数的调用形式为: gets(str_adr),其中 str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。 ge 22 【正确答案】 B 23 【正确答案】 B 【试题解析】 本题考查函数调用的基本概念。因为函数的结果是一个未知量,而函数定义时不能使用未知量,所以函数定义不可以嵌套,但是函数调用可以
15、嵌套。 24 【正确答案】 B 【试题解析】 本题考查函数调用时的参数传递。函数 reverse将数组 b进行了逆置,此时 b10=10,9,8,7,6,5,4,3,2,1),后面 for语句的功能是将 b中的后 3个数累加,并将结果放在 s中,最后将 s输出,结果 s=1+2+3=6。 25 【正确答案】 D 【试题解析】 &是取地址运算符, y=&a是将 a的地址赋给 y,而 a的地址没有发生变化,因此 y的值为 E2000。 26 【正确答案】 B 27 【正确答案】 D 【试题解析】 本题考查数组的 4个知识点: C语言中,二维数组或多维数组元素排列的顺序是按行存放; 不同数组的元素之
16、间可以相互赋值; 字符型数组中存放的是字符, int型数组中存放的是字符对应的 ASCII码值,虽然在计算机内部字符常量都是作为蹩型量来处理的,其对应的整数值就是 ASCII码值,但两者并不完全等价; 数组名后的方括号内可 以为常量,也可以为常量表达式,但不可以为变量。 28 【正确答案】 A 29 【正确答案】 C 【试题解析】 这种声明也具有定义的作用,并将预留存储空间。 register说明的声明等价于 auto说明的声明,所不同的是, register暗示了声明的对象将被频繁地访问,将尽可能存储在寄存器中。如果一个对象被声明为 register,则将不能对它应用一元运算符 &,声明为
17、register但实际按照 auto类型处理的对象的地址进行计算是非法的。 static将声明的对象说明为静态存储类。这种对象可 以用在函数内部或者函数外部。在函数内部,该说明符将引起存储空间的分配,具有定义的作用。在函数外部,该说明符将引起声明对象为 30 【正确答案】 D 【试题解析】 本题考查宏的使用规则: 字符替换格式: #define标识符字符串标识符称为宏名,无类型; 双引号中出现的宏名不替换; 宏名的定义通常用大写字母,但不是必须用大写; 宏定义不是赋值语句,不做语法检查。 31 【正确答案】 B 【试题解析】 本程序首先定义了静态字符数组 a,然后将指针 p指向数组 a的首地址
18、,第一次 for循环, p=a, p指向数组的第一个元素, *p是取指针 p所指地址的内容,输出 p;第二次 for循环, p=p+2,则 p指向数组的第三个元素, *p是取指针 p所指地址的内容,输出 o;第三次 for循环, p=p+2,则 p指向数组的第 5个元素, *p是取指针 p所指地址的内容,输出 r;第四次 for循环, p=p+2,则 p指向数组的第 7个元素, *p是取指针 p所指地址的内容,输出 m;结束循环。 32 【正确答案】 D 【试题解析】 本题考查数据文件的基本概念。 文件由数据流形式组成,可以按数据的存放形式分为二进制文件和文本文件; C语言既 能读写文本文件,
19、又可以读写二进制文件。 33 【正确答案】 C 【试题解析】 “s”是代表数组首地址的地址常量,不是变量, “=”左边不能出现常量,因此 s=“ABCDEF“语法错误。 “*s”和 “s”一样; “*s”是指变量地址,不能给其赋字符串。 34 【正确答案】 A 【试题解析】 分析 fun函数程序段,可知 fun函数要实现的功能是将 s中第 (t+1)个元素前面 (含该元素 )的元素逆置赋给数组 D。由于 fun函数定义了静态变量t=3,因此,在主函数中调用函数 fun(a, &x)时,就是将数组 a中 前 4个元素逆置赋给数组 x,最后输出 x数组。 35 【正确答案】 D 【试题解析】 在
20、C语言中,一个整型变量占用 4个字节的内存单元,并按整型数的存储方式存放数据,允许存放的数值范围是: -2147483648 2147483647。所以在这个题目中定义的宏变量 MAX的值就是整数范围内最大的数值,因而对于任意一个整数来说,其值都比 MAX小,而判断最小值,是当找到的数比 min小时,才交换。 36 【正确答案】 C 【试题解析】 程序首先将指针 p指向结构体数组 aa的首地址,通过 p- x引用了结构体 数组 aa0的第一个成员 2; +(p- x)是将 p- x的值加 1,所以输出结果为 3。 37 【正确答案】 B 38 【正确答案】 B 39 【正确答案】 B 40 【
21、正确答案】 1 【试题解析】 “sizeof“、 “%”、 “ ”、 “ ”、 “*=”,运算符的优先级顺序为: “*=”“ ”“ ”“%”“sizeof” ; 位运算的优先级顺序为:“ ”“ ”“ ”“&”“” 。 (b=2) (c=4)不成立,逻辑为假,所以n=0; (a=3)!=(b=2)成立 ,逻辑为真,所以 m=1。 41 【正确答案】 x/y=%d 【试题解析】 本题考查 prinff语句的输出格式。 printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。 printf()函数的调用格式为: printf(“格式化字符串 ”,
22、参最表 )其中,格式化字符串包括两部分内容。一部分足正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以 “%”开始,后跟一个或几个规定字符,用来确定输出内容格式。 参量表是需要输出的一系列参数,其个 数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用 “, ”分开,且顺序一一 42 【正确答案】 b=3 【试题解析】 条件表达式的基本格式为: “表达式 1?表达式 2:表达式 3”;其功能是:表达式 1的值若非 0,则计算表达式 2的值,且为最终结果;若表达式 1的值为 0,则计算表达式 3的值,且为最终结果。因为 a=3,则 a =0成立,所以b=a=3。 43 【正确答
23、案】 9 【试题解析】 本题考查的是条件运算符的应用。带参数的宏定义中定义的 MAX函数的功能是选出 a和 b中较大的数然后加 1; main()函数中显然 j比 i大,所以输出的是 j加 1后的值 9。 44 【正确答案】 B 【试题解析】 分析程序可知, n的初始值为 1,因此。 while(n =3)循环 3次。第1次: c=c*a=2; b=b+C=2; n=2。第 2次: c=c*a=4; b=b+c=6; n=3。第 3次:c=c*a=8; b=b+e=14。当 n=4时,判断条件不满足,退出循环。 45 【正确答案】 40 【试题解析】 分析程序,初始时 i=10, j=0,这时
24、 do循环中的 “i=j+i” 46 【正确答案】 *ss!=0 【试题解析】 本题考查的是指针的应用。题目要求求出字符串 ss中指定字符的个数。分析整个程序,空缺处是检验指针 ss是否指向了字符串的末尾,如没有,即执行下面语句,判断指针 ss指向的字符是否字符 c,若是, i自加 1;所以空缺处填入 *ss!=0,作为循环终止的条件。 47 【正确答案】 aij+bij 【试题解析】 求两个矩阵的和只要将对应元素相加即可。 48 【正确答案】 JD 【试题解析】 第一次循环, i=3, *p3=“JKL“,但因为是以 “%c“格式输出,只能 输出一个字符,所以只能输出 J。第二次循环, i=1, *p1=“DEF“,同样也只能输出 D。 49 【正确答案】 s%10*s1+t 【试题解析】 题目要求从低位开始取出长整型变量 s中奇数位上的数,设 s为7654321,所要去除的为 7531。 s在每次循环均除以 100,因此它的作用是将本次循环所需要得到的奇数位数放到最末一位,而要获得该数仅需在此后将 s对 10取余, s1初始值为 10,且在每次循环后均乘以 10,因此可想到是为了将本次循环所获得的奇数位数放到已有数的 “前面 ”,即将上一步所得之数乘以 s1,由 于是逐次获得奇次位数,所以每次还要加上 t的原债。