1、国家二级( C语言)笔试模拟试卷 98及答案与解析 1 下列不属于算法特性的是 ( A)确定性 ( B)可行性 ( C)有输出 ( D)无穷性 2 下列叙述中,正确的是 ( A)线性表是线性结构 ( B)栈和队列是非线性结构 ( C)线性链表是非线性结构 ( D)二叉树是线性结构 3 设有下列二叉树: 对此二叉树后序遍历的结果为 ( A) ABCDEF ( B) DBEAFC ( C) ABDECF ( D) DEBFCA 4 源程序中应包含一些内部文档,以帮助阅读和理解程序,源程序的内部文档通常包括选择 合适的标识符、注释和 ( A)程序的视觉组织 ( B)尽量不用或少用 GOTO语句 (
2、C)检查输入数据的有效性 ( D)设计良好的输出报表 5 在面向对象中,一个对象请求另一个对象为其服务的方式是通过发送 ( A)调用语句 ( B)命令 ( C)口令 ( D)消息 6 下列不属于软件工程三要素的是 ( A)工具 ( B)过程 ( C)方法 ( D)环境 7 软件调试的目的是 ( A)发现错误 ( B)改正错误 ( C)改善软件的性能 ( D)挖掘软件的潜能 8 下列不属于数据库管理系统提供的 数据语言的是 ( A)数据定义语言 ( B)数据查询语言 ( C)数据操纵语言 ( D)数据控制语言 9 利用 E-R模型进行数据库的概念设计,可以分成三步:首先设计局部 E-R模型,然后
3、把各个局部 E-R模型综合成一个全局的模型,最后对全局 E-R模型进行(),得到最终的 E-R模型。 ( A)简化 ( B)结构化 ( C)最小化 ( D)优化 10 在数据库设计的 4个阶段;为关系模式选择存取方法应该在 ( A)需求分析阶段 ( B)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 11 以下叙 述中正确的是 ( A) C语言比其他语言高级 ( B) C语言可以不用编译就能被计算机识别执行 ( C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 ( D) C语言出现的最晚,具有其他语言的一切优点 12 C语言中用于结构化程序设计的三种基本结构是 ( A
4、)顺序结构、选择结构、循环结构 ( B) if,switch、 break ( C) for、 while、 do-while ( D) if,for、 continue 13 在一个 C程序中 ( A) main函数必须出现在所有函数之前 ( B) main函数可以在任何地方出现 ( C) main函数必须出现在所有函数之后 ( D) main函数必须出现在固定位置 14 下列叙述中正确的是 ( A) C语言中既有逻辑类型也有集合类型 ( B) C语言中没有逻辑类型但有集合类型 ( C) C语言中有逻辑类型但没有集合类型 ( D) C语言中既没有逻辑类型也没有集合类型 15 下列关于 C语言
5、用户标识符的叙述中正确的是 ( A)用户标识符中可以出现下划线和中划线 (减号 ) ( B)用户标识符中不可以出现中划线,但可以出现下划线 ( C)用户标识符中可以出现下划线,但不 可以放在用户标识符的开头 ( D)用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 16 若有以下程序段 (n所赋的是八进制数 ) int m=32767, n=032767; printf(“%d,%on“,m,n); 执行后输出结果是 ( A) 32767,32767 ( B) 32767,032767 ( C) 32767,77777 ( D) 32767,077777 17 下列关于单目运算
6、符 +、 -的叙述中正确的是 ( A)它们的运算对象可以是任何变量和常量 ( B)它们的运算对象可以是 char型变量和 int型变量,但不能是 float型变量 ( C)它们的运算对象可以是 int型变量,但不能是 double型变量和 float型变量 ( D)它们的运算对象可以是 char型变量、 int型变量和 float型变量 18 若有以下程序段 int m=0xabc, n=0xubc; m-=n; printf(“%Xn“,m); 执行后输出结果是 ( A) 0X0 ( B) 0x0 ( C) 0 ( D) 0XABC 19 有以下程序段 int m=0, n=0; char
7、c=a; scanf(“%d%c%d“, 3;i+) switch(i) csse 1: printf(“%d“,i); case 2: printf(“%d“,i); default: printf(“%d“,i); 执行后输出结果是 ( A) 11122 ( B) 12 ( C) 12020 ( D) 120 21 在 16位 C编译系统上,若定义 long a;,则能给 a赋 40000的正确语句是 ( A) a=20000+20000; ( B) a=4000*10; ( C) a=30000+10000; ( D) a=4000L*10L; 22 以下叙述正确的是 ( A)可以把 d
8、efine和 if定义为用户标识符 ( B)可以把 define定义为用户标识符,但不能把 if定义为用户标识符 ( C)可以把 if定义为用户标识符,但不能把 define定义为用户标识符 ( D) define和 if都不能定义为用户标识符 23 若定义: int a=511, *b=i 20; i+)scanf(“%d(“%d“,【 】 ); for(i=0; i 20; i+) if(ai 0) count+; sum+=【 】; printf(“sum=%d,count=%dn“,sum,count); 国家二级( C语言)笔试模拟试卷 98答案与解析 1 【正确答案】 D 【试题解
9、析】 一个算法必须具有 5个特性,即有穷性、确定性、可行性、有输入、有输出。其中有穷性是指算法必须总是在执行完有穷步之后 结束,而且每步都在有穷时间内完成。 2 【正确答案】 A 【试题解析】 所谓的线性结构是指:如果一个非空的数据结构满足下列两个条件: 1)有且只有一个根结点; 2)每一个结点最多有一个前件,也最多有一个后件。所以同时满足两个条件的有队列、线性表、栈,而二叉树的结点可能存在两个后件,不是线性结构。 3 【正确答案】 D 【试题解析】 二叉树的遍历分为先序、中序、后序三种不同方式。本题要求后序遍历,其遍历顺序应该为:后序遍历左子树 -后序遍历右子树 -访问根结点。按照定义,后序
10、 遍历序列是 DEBFCA。 4 【正确答案】 A 【试题解析】 源程序文档化主要包括 3个方面的内容:标识符的命名、程序中添加注释以及程序的视觉组织。 5 【正确答案】 D 【试题解析】 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,一个对象与另一个对象通过发送消息彼此交换信息,请求对方执行某一处理或回答某一要求 6 【正确答案】 D 【试题解析】 软件工程三要素是方法、工具和过程。 7 【正确答案】 B 【试题解析】 在对程序进行了测试以后进入程序调试。调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。 8 【正确答案】 B 【试题解析】
11、 通常数据库管理系统提供的数据语言有数据定义语言、数据操纵语言和数据控制语言。其中数据操纵语言负责数据的操纵,包括查询及增、删、改等操作。所以查询语言属于数据操纵语言的一部分。 9 【正确答案】 D 【试题解析】 在概念设计中按照模块的划分画出各个模块的 E-R图,然后把这些图合成一张 E-R图作为全局模型,最后 应该对全局 E-R图进行优化,看看是否有重复和不合理的地方。不能只进行简单的合并。 10 【正确答案】 D 【试题解析】 需求分析阶段是分析用户的需求,显然不属于这个阶段。概念设计是将需求分析得到的用户需求抽象为信息结构及概念模型的过程,涉及不到数据的存取。逻辑设计是在概念设计的基础
12、上将 E-R图转换成数据库管理系统的逻辑数据模型表示的逻辑模式,也不涉及存取问题。 11 【正确答案】 C 【试题解析】 C语言是一种高级语言,必须编译成目标代码才能执行;与其他语言相比, C语言更接近于硬件,更 “低级 ”;程序语言是不断发展的,不断有新的语言出现, C语言不是出现最晚的;高级语言类似于人类的自然语言和数学语言。 12 【正确答案】 A 【试题解析】 结构化程序设计是由顺序结构、选择结构和循环结构 3种基本结构组成。 13 【正确答案】 B 【试题解析】 一个完整的 C语言程序有且仅有一个主函数 (main()函数 )。程序总从 main()函数的第一条语句开始执行,到 ma
13、in()函数的最后一条语句结束,其他函数都是在执行 main()函数时,通过函数调用或嵌套调用而得以执行的。 C语言规定, main ()函数在程序中的位置是任意的。 14 【正确答案】 D 【试题解析】 在 C语言中没有逻辑类型,逻辑类型用整型来表示, C语言中没有集合类型。 15 【正确答案】 B 【试题解析】 在 C语言中, C语言标识符的命名规则:合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或者下划线。 16 【正确答案】 A 【试题解析】 程序在定义时,以十进制形式为 m赋初值,以八进制的形式为 n赋初值。输出的时候 m以十进制形式输出, n以八进制形式输出,因此输
14、出的结果为 32767和 32767。 17 【正确答案】 D 【试题解析】 C语言中的 +和 运算符,这两种运算符是单目运算符,其运算对象可以是整型、字符型、 float型和 double型等基本数据类型。 18 【正确答案】 C 【试题解析】 C语言中的自反赋值运算符。 “m-=n”相当于 “m=m-n”,两个相等的数相减,其值为 0。 19 【正确答案】 A 【试题解析】 scanf()函数输入格式字符 “%d”用于输入整数, “%c”用来输入字符。在输入时,系统把第一个 10作为整数 10赋给 m,把随后的 A作为字符赋 值给 c,后面的 10作为整数赋给 n,最后输出的结果为 10,
15、 A, 10。 20 【正确答案】 A 【试题解析】 for循环执行了 3次,第一次时 i的值为 0,执行其后的 switch语句,没有匹配的 case,执行 default语句后的 printf语句,输出为 0;第二次循环时 i的值为 1,执行其后的 switch语句,与第一个 case分支匹配,执行其后的printf语句,输出 1,由于没有遇到 break语句,所以一直向下执行,又输出了两个 1,第三次循环时 i值为 2,执行其后的 switch语句,同理输出两个 2。 21 【正确答案】 D 【试题解析】 由于 20000+20000、 4000+10及 30000+10000都是整型表
16、达式,故运算的结果仍然是整型,表达式运算的结果超出了整型数据的范围,不正确。而D是长整型运算,不会超出长整型的范周。 22 【正确答案】 B 【试题解析】 C语言中的保留字,而 define不是保留字。用户标识符不允许使用保留字。 23 【正确答案】 D 【试题解析】 本题中先定义了一个 int型的变量 a并赋初值为 511,接着定义了一个指向。的指针变量 b,在 printf()函数 的输出格式中,是输出 *b,即输出指针所指向变量 a的值为 511,因此输出 511。 24 【正确答案】 C 【试题解析】 在 C语言中问号表达式 (如: a c?a:c; )的计算规则为:如果 a c为真,
17、那么表达式的值为 a的值;否则表达式的值为 c的值。本题中的 printf()函数中的输出表达式,首先计算括号内的条件表达式,它的值为 6(a c?a:C中 a c即 5 6为假故该表达式的值为 c的值即为 6),然后再计算外面表达式 (等价于 ab?6:B) 的值,同理可得该表达式的值为 6,将值 6赋值给 d,因此最后输出该表 达式的值为 6。 25 【正确答案】 D 【试题解析】 break语句只能在循环体和 switch语句体内使用,当 break出现在 switch语句体内时,其作用只是跳出该 switch语句体。当 break出现在循环体中,但不在 switch语句体内时,则在执行
18、 break后,跳出本层循环体。而continue语句的作用是结束本次循环,即跳过本次循环中余下尚未执行的语句,接着再一次进行循环的条件判定。本程序中,变量 i的初始值为 0,判断 while后面括号内表达式的值为真,执行循环体内的 if语句,判断 if后 面括号内表达式的值为真,执行 “continue;”语句。因 continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判断,所以 i的值未发生变化,循环条件仍然为真, if语句也仍然成立,因此循环将无止境地进行下去。 26 【正确答案】 A 【试题解析】 switch语句的执行过程是:在 swit
19、ch后面的表达式的值和 case后面常量表达式的值吻合时,就执行该 case分支的语句。如果在该语句的后面没有break语句,则按顺序继续执行下一个 case分支,直到遇到 break语句或 switch多分支语句结束,在 switch语句中, break语句的作用是使流程跳出 switch结构,终止 switch语句的执行。在本题中,因为每个 case语句后面都没有 break语句,所以,第一轮循环 (i=1)执行过后 a的值为 8,第 2轮 (i=2)执行过后 a的值为16,第 3轮 (i=3)执行过后 a的值为 26,第 4轮 (i=4)执行过后 a的值为 31,然后执行 “i+”语句,
20、这时循环条件为假,循环结束。 27 【正确答案】 A 【试题解析】 由于单目运算符优先级高于 “”, b5的值 6,故 s的值变为 10。把 s作为函数值返回并赋值给 x。 43 【正确答案】 C 【试题解析】 本题首先定义了一个 4行 5列的数组 s,又定义了一个指向由 5个元素组成的一维数组的指针变量 ps,通过赋值让 ps指向了数组 s的首地址。此时数组元素 si)j的地址为 “*(ps+i)+j”,数组元素 sij可表示为 *(*(pe+i)+j);选项B表示的是数组元素 a30的地址;选项 D表示的是数组元素 s13的地址;选项 A中 “ps+1”为指向下一行 (第二行 )的地址;选
21、项 C中 ps02无条件等价于“*(ps0 +2)”又无条件等价于 “*(*(pe+0)+2)”,即是数组元素 s02。 44 【正确答案】 B 【试题解析】 本题中定义了一个二维数组 b并初始化,定义了一个变量 t并赋初值 1。接着通过一个二重循环将若干个元素的值加到变量 t中。循环的执行步骤是: 外层循环变量 i=0时,内层循环变量 j=i执行语句 “t=t+bibjj”,相当于t=t+b 0b0)0,由于 b00的值为 0,得到 t的值为 1;依次类推,循环共执行了 3次,最后输出 t的值为 4。 45 【正确答案】 D 【试题解析】 strcpy()函数的作用是把第二个参数代表的字符串
22、,复制到第一个参数指向数组中。首先定义了两个字符数组 b1和 b2,并用一个字符串给 b1赋初值,然后定义了一个字符型指针变量 pb,通过赋初值使它指向 b13。接着执行while循环,该循环 执行了 3次:第一次判断条件 “-pb =b1”,使 pb的值为“b1+2”,执行 “strcpy(b2, pb) ; ”后, b2中的内容为 “cdefg”;第二次判断条件 “-pb =b”,使 pb的值为 “b1+1”,执行 “strcpy(b2, pb) ; ”后 b2的内容为 “bcdefg”第三次判断条件 “-pb :b1”使 pb的值为 “b1”,执行 “strcpy(b2, pb) ; ”
23、后 b2的内容为 “abcdefg”。最后输出 b2数组中存放的字符串长度,显然是 7。 (这里还有一个关键点:就是每当执行一次 while循环判断条件, 就执行一次 “-pb”,使得指针 pb自减 1,即前移一位 )。 46 【正确答案】 D 【试题解析】 定义指向整型元素的指针变量形式为: int*指针变量名。定义指向整型一维数组的行指针形式为: int(*指针变量名 长度 ,定义指向返回值为整型的函数的指针变量的形式为: int(*函数名 )(),定义返回值为指向整型的指针型函数的形式为: int*函数名 ()。本题定义的是一个返回值为指针型的函数 f()。 47 【正确答案】 C 【试
24、题解析】 main()函数可以带有参数,并且参数只能有两个,第一个 参数类型为整型,用来记下命令行的参数个数;第二个参数为一个字符型指针数组,或字符型二级指针变量 (指向一个数组,数组元素又是一个一级字符指针 ),其各个元素用来记下从命令行各参数字符中的首地址。故本题只有 C选项不符合要求。 48 【正确答案】 C 【试题解析】 本题首先定义一个全局变量 x并赋初值为 3,主函数中使用这个全局变量控制循环次数,循环执行了 2次,调用两次 incre()函数。第一次调用incre(),定义一个静态变量 x并赋初值 1,然后执行 “x*=x+1”,使 x的值变为 2;第二次调用 incre()函数
25、时,静态变量将保留上一次退出时的值即 2,执行语句“x*=x+1”后, x的值变成 6,输出 x的值为 6。 49 【正确答案】 D 【试题解析】 在本题中指针 p指向变量 a, q指向变量 c。要把 c插入到变量 a和变量 b之间,就应该首先让变量 a的指针域指向变量 c,即 (*p).next=q,然后让变量 c的指针域指向变量 b,即 (*q).next=&b。 50 【正确答案】 B 【试题解析】 本题通过 typedef在定义一个结构体类型的同时,把它自定义成类型名 PER,故 PER是结构体类型名。 51 【 正确答案】 空间复杂度和时间复杂度 【试题解析】 算法的复杂性是指对一个
26、在有限步骤内终止算法和所需存储空间大小的估计。算法所需存储空间大小是算法的空间复杂性,算法的计算量是算法的时间复杂性。 52 【正确答案】 存储结构 【试题解析】 数据结构包括 3个方面,即数据的逻辑结构、数据的存储结构及对数据的操作运算。 53 【正确答案】 可重用性 【试题解析】 继承的优点:相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余,提高软件的可重用性。 54 【正确答案】 类 【试题解析】 面向对象模型中,最基本的概念是对象和类。对象是现实世界中实体的模型化:将属性集和方法集相同的所有对象组合在一起,可以构成一个类。 55 【正确答案】 完善性 【试题解析】 软件
27、维护活动包括以下几类:改正性维护、适应性维护、完善性维护和预防性维护。完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。 56 【正确答案】 2, 1 【试题解析】 本题中,执行 a=a+b时, a=1, b=2, a=1+2=3; b=a-b时, a=3,b=2, b=3-2=1; a=a-b时, a=3, b=1, a=3-1=2;因此,本题的输出是 2, 1 57 【正确答案】 6.6 【试题解析】 本题,已知结果 z=16.00,即 16.0=a/2+b*x/y+1/2,分别把 a、 b代入,得到 16.0=(9/2+2*x/1.1+1/2。因为 a=9, a是整型,所以 9/2的值在没有进行类