1、国家二级( C语言)机试模拟试卷 36 及答案与解析 一、选择题 1 一个栈的初始状态为空。现将元素 1、 2、 3、 4、 5、 A、 B、 C、 D、 E依次入栈,然后再依次出栈,则元素出栈的顺序是 ( )。 ( A) 12345ABCDE ( B) EDCBA54321 ( C) ABCDE12345 ( D) 54321EDCBA 2 下列叙述中正确的是 ( )。 ( A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 ( B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 ( C)在循环队列中 ,只需要队尾指针就能反映队列中元素的动态变化情况 ( D)循环队列
2、中元素的个数是由队头指针和队尾指针共同决定 3 在长度为 n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。 ( A) O(n) ( B) O(n2) ( C) (log2n) ( D) O(nlog2n) 4 下列叙述中正确的是 ( )。 ( A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 ( B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 ( C)顺序存储结构能存储有序表,链式存储结构 不能存储有序表 ( D)链式存储结构比顺序存储结构节省存储空间 5 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)事件驱动 ( C
3、)模块调用 ( D)数据流 6 在软件开发中,需求分析阶段可以使用的工具是 ( )。 ( A) N S图 ( B) DFD图 ( C) PAD图 ( D)程序流程图 7 在面向对象方法中,不属于 “对象 “基本特点的是 ( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 8 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 9 在数据管理技术发展的三个阶段中,数据共享最好的是 ( )。 ( A)人工管理阶段 ( B)文件系统阶段 ( C)数据库系统阶段 ( D)三个阶段相同 10 有三个关系
4、R、 S和 T如下: 由关系 R和 S通过运算得到关系 T,则所使用的运算为 ( )。 ( A)笛卡尔积 ( B)交 ( C)并 ( D)自然连接 11 下列叙述中错误的是 ( )。 ( A) C程序可以由多个程序文件组成 ( B)一个 C语言程序只能实现一种算法 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 12 以下选项中,能用作数据常量的是 ( )。 ( A) 115L ( B) 118 ( C) 1.5e1.5 ( D) o115 13 按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是 ( )。 ( A)大写字母 ( B)下
5、划线 ( C)数字字符 ( D)连接符 14 设变量已正确定义并赋值,以下正确的表达式是 ( )。 ( A) x y z 5, y ( B) int(15.8%5) ( C) x y*5 x z ( D) x 25%5.0 15 设有定义: int x 2;,以下表达式中,值不为 6的是 ( )。 ( A) 2*x,x+=2 ( B) x, 2*x ( C) x* (1 x) ( D) x* x 1 16 有以下程序: #include stdio.h main() int x, y, z; x y 1; z x, y, y; printf(“%d, %d, %dn“, x, y, z); 程
6、序运行后的输出结果是 ( )。 ( A) 2,3,3 ( B) 2,3,2 ( C) 2,3,1 ( D) 2,2,1 17 有以下程序: #include stdio.h main() char c1, c2; c1 A 8 4; c2 A 8 5; printf( “%c, %dn“, c1, c2); 已知字母 A的 ASCII码为 65,程序运行后的输出结果是 ( )。 ( A) E,68 ( B) D,69 ( C) E, D ( D)输出无定值 18 若有定义 int x, y; 并已正确给变量赋值,则以下选项中与表达式 (x y): (x ) : (y )中的条件表达式 (x y
7、) 等价的是 ( )。 ( A) (x y 0|x y 0) ( B) (x y 0) ( C) (x y 0) ( D) (x y 0) 19 有以下程序: #include stdio.h main() int x 1, y 0; if (! x) y; else if (x 0) if (x) y 2; else y 3; printf(“%dn“, y); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 2 ( C) 1 ( D) 0 20 若有定义: float x 1.5; int a 1, b 3, c 2; 则正确的 switch语句是( )。 ( A) switch
8、(a b) case 1: printf(“*n“); case 2 1: printf(“*n“); ( B) switch(int)x); case 1: printf(“*n“); case 2: printf(“*n“); ( C) switch(x) case 1.0: printf(“*n“); case 2.0: printf(“*n“); ( D) switch(a b) case 1: printf(“*n“); case c: printf(“*n“); 21 有以下程序: #include stdio.h main() int y 9; for( ; y 0; y ) i
9、f(y%3 0) printf(“%d“, y); 程序的运行结果 是 ( )。 ( A) 852 ( B) 963 ( C) 741 ( D) 875421 22 有以下程序: #include stdio.h main() int i, j, m 1; for(i 1; i 3; i ) for(j 3; j 0; j ) if(i*j 3) break; m* i*j; printf(“m %dn“, m); 程序运行后的输出结果是 ( )。 ( A) m 4 ( B) m 2 ( C) m 6 ( D) m 5 23 有以下程序: #include stdio.h int fun (i
10、nt x, int y ) if (x! y) return ( (x y) /2 ); else return ( x ); main() int a 4, b 5, c 6; printf( “%dn“ , fun(2*a,fun(b,c); 第二次调用为 fun(8,5) ( A) 6 ( B) 3 ( C) 8 ( D) 12 24 有以下程序: #include stdio.h int add( int a, int b) return (a b); main() int k, (*f)(), a 5, b 10; f add; 则以下函数调用语句错误的是 ( )。 ( A) k f
11、(a, b); ( B) k add(a, b); ( C) k (*f)(a, b); ( D) k *f(a, b); 25 有以下程序: #include stdio.h main() int n, *p NULL; *p printf(“x1= d, x2= d, x3= d n”, x1, x2, x3); j=fun(x1, x2, x3); printf(“The minimal common multiple is: d n”, j); 四、程序设计题 43 学生的记录由学号和成绩组成, N名学生的数据已放入主函数中的结构体数组s中,请编写函数 fun,其功能是:把分数最高的学
12、生数据放在 b所指的数组中。注意:分数 最高的学生可能不止一个,函数返回分数最高的学生人数。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #define N 16 typedef struct char num10; int s; STREC; int fun(STREC*a, STREC*b) voidmain() STREC sN=“GA005”, 85, “GA003”, 76, “GA002”, 69), “GA004”, 85, “GA001”, 91,“G
13、A007”, 72), “GA008”, 64, “GA006”, 87, “GA015”, 85),“GA013”, 91, “GA012”, 64), “GA014”, 91, (“GA011”, 77),“GA017”, 64), “GA018”, 64, (“GA016”, 72); STREC hN; int i, n, n=fun(s, h); printf (“The d highest score: n”, n); for(i=0; i n; i+) printf(“ s 4d n”, hi num, hi 8); *输出最高分学生的学号和成绩 * printf(“n”), 国
14、家二级( C语言)机试模拟试卷 36 答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择 B。 2 【正确答案】 D 【试题解析】 循环队列有队头和队尾两个指针,但是循环队 列仍是线性结构的,所以 A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以 B)与 C)错误。 3 【正确答案】 C 【试题解析】 当有序线性表为顺序存储时才能用二分法查找。可以证明的是对于长度为 n 的有序线性表,在最坏情况下,二分法查找只需要比较 log2n 次,而顺序查找需要比较 n 次。 4 【正确答案】
15、A 【试题解析】 链式存储结构既可以针对线性结构也可以针对非线性结构,所以 B)与 C)错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间, 所以 D)错误。 5 【正确答案】 D 【试题解析】 数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。 6 【正确答案】 B 【试题解析】 在需求分析阶段可以使用的工具有数据流图 DFD图,数据字典DD,判定树与判定表,所以选择 B。 7 【正确答案】 A 【试题解析】 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A。 8 【正确答案】 B 【试题解析
16、】 因为一间宿舍可以住多个学生即多个学生住在 一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。 9 【正确答案】 C 【试题解析】 数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择 C。 10 【正确答案】 D 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据 T 关系中的有序组可知 R与 S 进行的是自然连接操作。 11 【正确答案】 B
17、【试题解析】 在一个 C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以 B)错误。 12 【正确答案】 A 【试题解析】 A)选项中 115L 表示 115是长整型数据,合法。 B)选项是八进制常量的表示方法,但是在八进制中不能含有数字 8,所以 B)错误。 C)选项中 e后面应该是整数不能是小数 1.5,所以 C)错误。 D)选项中八进制常量应该是数字 “0“开始,而不是字母 “o“开始。 13 【正确答案】 D 【试题解析】 C语言中标识符 由字母、下划线、数字组成,且开头必须是字母或下划线。所以 D)选项中的连接符不合法。 14 【正确答案】 A 【试题解析】 B)与 D)
18、选项中取模运算符 %的左右两个操作数均应为整数,所以B)、 D)错误。 C)选项中不能将 x y的值赋给表达式 y*5,所以 C)错误。 15 【正确答案】 A 16 【正确答案】 C 【试题解析】 z x, y, y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成 (z x ), (y ), ( y)。然后从左向右先计算表达式 z x ,因为 x先使用后自增,所以 z的值为 1, x的值为2。再计算逗号表达式第二个表达式 y,此时 y的值为 2,最后计算第三个表达式 y, y的值为 3。 17 【正确答案】 A 【试题解析】 本题目中字符变量 c1 是字符 A的 ASCI
19、I码加上 4,即 69所对应的字符 E。 字符变量 c2 是字符 A的 ASCII 码加上 3,即 68所对应的字符 D。但是打印输出时, c1 以 %c的格式输出,所以是 E, c2 以 %d 的格式输出,所以是68。 18 【正确答案】 A 【试题解析】 条件表达式:表达式 1:表达式 2:表达式 3 的含义是:先求解表达式 1,若为非 0(真 ),则求解表达式 2,条件表达式的值为表达式 2的值。若表达式 1的值为 0(假 ),则求解表达式 3,条件表达式的值为表达式 3的值。在本题中与 (x y)等价的是 (( x y) 0|( x y) 0)。答案为 A选项。 19 【正确答案】 D
20、 【试题解析】 在 if else语句中 else总是与离它最近的 if 配对。本题目中 x为 1所以! x为 0,所以执行 else if 语句中的内容,判断 (x 0)是否成立,因为 x为 1所以条件不成立,所以 else if 内部的 ife lse语句不再执行,所以 y的值还是初始值 0。 20 【正确答案】 A 【试题解析】 B)选项中 switch(int)x);语句中不应该有最后的分号。switch(expr1), 中的 expr1不能用浮点类型或 long类型,也不能为一个字符串,所以 C)错误。 case后面常量表达式的类型必须与 switch 后面表达式的类型一致,所以 D
21、)错误。 21 【正确答案】 A 【试题解析】 第一次 for循环, y的值为 9, y%3的值为 0,满足条件打印 y,即先减一后打印,所以打印 8;第二次 for循环, y的值为 7, y%3的值为1,不执行打印语句;第三次 for循环, y的值为 6, y%3的值为 0,满足条件打印 y,即先减一后打印,所以打印 5;第四次 for循环, y的值为 4,不满足 if 条件,不执行打印语句;第五次 for循环, y的值为 3,满足 if条件,打印输出 2;第六次 for循环, y的值为 1,不满足条件,不执行打印语句。 22 【正确答案】 C 【试题解析】 第一次外循环 i的值为 1,第一
22、次内循环 j的值为 3,不满足条件执行 m* i*j即 m的值为 3;第二次 j的值为 2,不满足条件执行 m* i*j,即 m的值为 6;第三次 j的值为 1,不满足条件执行 m* i*j,即 m的值仍为 6。第二次外循环 i的值为 2, j的值为 3,满足条件,执行 break 语句,跳出循环。 23 【正确答案】 A 【试题解析】 本题中第一次调用为 fun(8, fun(5,6),因为 fun(5,6)返回值为5,所以第二次调用为 fun(8,5) 6。所以选择 A。 24 【正确答案】 D 【试题解析】 D)选项中 *f(a, b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量 k。 25 【正确答案】 A 【试题解析】 选项 B的正确写法应为 p for(i=0, i N; i+) if(max=ai s) bj+=ai; *找出成绩与 max相等的学生的记录,存入结构体 b中 * return j; *返回最高成绩的学生人数 * 【试题解析】 该程序使用两个循环判断语句,第 1个循环判断语句的作用是找出最人值;第 2个循环判断语句的作用是找出与 mflx 相等的成绩 (即最高成绩 )的学生记录,并存入 b中。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1