1、国家二级( C语言)机试模拟试卷 121及答案与解析 一、选择题 1 算法的空间复杂度是指 ( )。 ( A)算法程序的长度 ( B)算法程序中的指令条数 ( C)算法程序所占的存储空间 ( D)算法执行过程中所需要的存储空间 2 下列叙述中正确的是 ( )。 ( A) 个逻辑数据结构只能有一种存储结构 ( B)逻辑结构属于线性结构,存储结构属于非线性结构 ( C) 个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率 ( D) 个逻辑数据结构可以有多种存储结构,且各种存储结构 影响数据处理的效率 3 下列关于类、对象、属性和方法的叙述中,错误的是 ( )。 ( A)类是对一类
2、具有相同的属性和方法对象的描述 ( B)属性用于描述对象的状态 ( C)方法用于表示对象的行为 ( D)基于同一个类产生的两个对象不可以分别设置自己的属性值 4 在软件开发中,需求分析阶段产生的主要文档是 ( )。 ( A)数据字典 ( B)详细设计说明书 ( C)数据流图说明书 ( D)软件需求规格说明书 5 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和 ( )。 ( A) 编码设计 ( B)测试阶段 ( C)运行阶段 ( D)物理设计 6 在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是 ( )。 ( A)并 ( B)交 ( D)除 7 下列叙述中,正确的是 ( )
3、。 ( A)软件交付使用后还需要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期就结束 ( D)软件维护是指修复程序中被破坏的指令 8 设一棵满二叉树共有 15个结点,则在该满二叉树中的叶子结点数为 ( )。 ( A) 7 ( B) 8 ( C) 9 ( D) 10 9 设 R是一个 2元关系,有 3个元组, S是一个 3元关系,有 3个元组。如 TRS,则 T的元组的个数为 ( )。 ( A) 6 ( B) 8 ( C) 9 ( D) 12 10 下列选项中,不属于数据库管理的是 ( )。 ( A)数据库的建立 ( B)数据库的调整 ( C)数据库的监控
4、 ( D)数据库的校对 11 对于一个正常运行的 C程序,下列叙述中正确的是 ( )。 ( A)程序的执行总是从 main函数开始,在 ma1n函数结束 ( B)程序的执行总是从程序的第一个函数开始,在 main函数结束 ( C)程序的执行总是从 main函数开始,在程序的最后一个函数中结束 ( D)程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束 12 以下选项中与 if(a=1)a+; else a=b;语句功能不同的语句是 ( )。 ( A) switch(a) case 0:a=b; break; default: a+; ( B) switch(a=1) case
5、0:a+; default:a=b; ( C) switch(a) default: a=b; case 1: a+; ( D) a=(a=1)?( a+): b break; 13 以下不合法的用户标识符是 ( )。 ( A) 804zhang ( B) hh ( C) yy614 ( D) If 14 已知 char a; int b; float c; double d;则表达式 ab+cd结果为 ( )型。 ( A) double ( B) float ( C) int ( D) char 15 假设有语句 sizeof(double),则它是 ( )。 ( A) 个整型表达式 ( B
6、) 个 双精度浮点型表达式 ( C) 种函数调用 ( D) 种函数定义 16 若变量都己正确说明,则以下程序段输出结果为 ( )。 #inc1ude main() char a=a; int b=2; printf(ab?“*a= d“: “#b= d“, a, b); ( A) *a=3 ( B) #b=3 ( C) *a=3#b=5 ( D)全部错误 17 若有以下定义(设 int类型变量占 2个字节) int i=8, j=9; 则以下语句: printf(“i= d, j= d n“, i, j); 输出的结果是 ( )。 ( A) i=8, j=9 ( B) i= d, j= 8 (
7、 C) i= d, j= d ( D) 8, 9 18 设 a和 b均为 int型变量,且 a=6, b=l1,则能使值为 3的表达式是 ( )。 ( A) b (a 4) ( B) b (aa 5) ( C) b aa 5 ( D) (b a) (a 4) 19 有关 return语句说法不正确的是 ( )。 ( A)系统默认的返回值类型为整型,故当函数的返回值为 int型时,在函数定义时,返回值的类型说明可以省略。 ( B)当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数。 ( C)当函数没有返回值时,函数的返回值类型可以说明为 void型,它表示 “无类型 ”或 “空类型 ”
8、。 ( D)函数的返回值类型必须与 return语句中的表达式值的类型一致,但 C语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将 retum语句中表达式的值转换为函数的返回值类型。 20 有以下程序: #inc1ude main() int i0, a=0, while(110) break; ( B) while(1); ( C) int k=0; do+k; while(k main() int a=1, b3; if(+a main() fint x; scanf(“ d“, for( i=0; 1intunsigned longfloatdouble; 赋值运算
9、中最终结果的类型,以赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应转换。 15 【正确答案】 A 【试题解析】 sizeof(double)是 C语言内部规定的一个计算参数 ( double)在计算机的内存中所占用的字节数量的函数,它返回一个整数值。 16 【正确答案】 D 【试题解析】 本题考查 printf函数的格式和三目运算符 “?: ”的使用。 printf函数中格式说明符之前插入的任何字符都原样输出。本题中 “ab”为真,所以返回 “*a=97”。 17 【正确答案】 B 【试题解析】 本题考查 printf函数的格式。 printf函数中格式
10、说明符之前插入的任何字符都按原样输出。对于 printf函数,有两个说明,第一个后面的内容要按原样输出。 18 【正确答案】 D 【试题解析】 表达式 “a b”表示的是求 a除以 b的余数。因此,选项 A): (64)=2, 11 2=1; 选项 B): (66 5)=5, 11 5=1; 选项 C): 11 665=4;选项 D): (1 1 6)一 (6 4)=3。 19 【正确答案】 D 【试题解析】 函数的返回值类型一般与 return语句中的表达式值的类型一致,但 C语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将 return语句中表达式的值转换为函数的返回
11、值类型。 20 【正确答案】 D 【试题解析】 本题考查 while循环。当 i20”,循环结束。 21 【正确答案】 C 【试题解析】 本题考查死循环的知识。选项 A)中, for循环没有任何控制语句就会一直执行下去,所以不可能通过控制表达式的值结束循环。循环体内,“1=1 10+1”这个表达式的值永远不会大于 10,所以永远不会跳出循环,是死循环;选项 B)中, while中表达式永远是非 0,不会结束循环;选项 C)中,当k10时,结束循环;选项 D)中, “while(s); ”后面没有任何表达式而是直接加了一个分号,会一直执行,形成死循环。 22 【正确答案】 D 【试题解析】 本题
12、考查函数调用的有关知识点。函数调用 可以出现在表达式中; 可以作为独立的语句存在; 可以作为一个函数的实参。 23 【正确答案】 C 【试题解析】 解答本题的关键在于 if语句条件中的表达式。初始时 “a=1,b=3”,所以 “+a_20”,因此 “Ha12?x+10:x12”即,如果 x12成立,则 x+10的值即为此表达式的值,否则 x12即为此表达式的值。因为 x=12,所以 x12不成立,所以执行 “y=x12=0”。 27 【正确答案】 C 【试题解析】 本题考查 “switch”语句。因为 “ch=A”,所以第一个 switch语句,执行 “case A”后面的语句,输出 AAAA
13、,没有遇到 break语句,所以接着再执行“case B“和 default,分别输出 BBBB和 CCCC。 28 【正确答案】 A 【试题解析】 本题考查循环的 4个知识点: break语句可以出现在循环体内及switch语句体内,不能用于其他的语句; continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确定下一次循环是否继续执行,也就是说执行 contiune语句不会使整个循环终止; 在循环体内使用 break语句会使循环提前终止; 从多层循环嵌套中退出时,可以使用 goto语句或者 break语句。 29 【正确答案】 C 【
14、试题解析】 在 C语言中,文件指针实际上 是指向一个结构体类型的指针,一般称这个结构体类型名为 FILE,可以用此类型名来定义文件指针。定义文件类型指针变量的一般形式为: FILE *指针变量名;选项 C)中少了 “*”,所以选项 C)错误。 30 【正确答案】 A 【试题解析】 本题考查两个知识点: 字符串比较函数 strcmp(s1, s2),若s1s2,则返回 1;若 s1=s2,则返回 0;若 s1n。 “左移 ()”运算的规则是将 x的二进制位全部向右移 动 n位,将右边移出的低位舍弃,左边高位空出要根据原来符号位的情况进行补充,对无符号数则补0,对有符号数,若为正数则补 0,若为负
15、数则补 1。 “异或 ”运算是当两个运算量的相应位相同时结果为 0,不相同时结果为 l。 b=2的二进制为 (00000010) b999) k=4; 7 else if (n99) k=3; 8 else if (n9) k=2; 9 else k=1; 10 return k; 11 【试题解析】 本题 fun函数的主要功能是判断形参 n中的正整数是几位数(输入数据的位 数不超过 4位),并将结果通过函数值返回。首先我们能想到这一题主要在于判断,因为题目已经限制了条件,就是数字的大小要不超过四位数的数字,而且要求只要输出这个数字的位数,这样我们就能想到,只要判断这个数字的大小就能知道位数了
16、,小于 10位 1位,大于等于 10小于 100为 2位,大于等于100小于 1000位 3位,大于等于 1000小于等于 9999为 4位。所以只需要很简单的几个判断语句就能实现函数的功能,然后输出结果。 主函数中首先要定义数据,然后需要手动输入一个用来进行判断的数字,注意数字要不超过 4位,见程序代码第 14 16行,而且这里为了防止输入时不小心的错误或者是有人故意错误输入而引发的不好的后果,在数据进入 fun函数处理之前还要一个 while函数来进行判断数据是否合理在进行处理,见程序代码第 17行。然后数字进入 fun函数,这里很明显会出现四种情况,数字的位数为 1位, 2位,3位或 4位,所以我们用 ifelse if来区别这四种情况见程序第 6 9行,在判断完之后我们就可以返回数字位数 k的值然后再到主函数 mam函数中进行输出处理。