1、国家二级( C语言)机试历年真题试卷汇编 8及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)每一个节点有两个指针域的链表一定是非线性结构 ( B)所有节点的指针域都为非空的链表一定是非线性结构 ( C)循环链表是循环队列的链式存储结构 ( D)线性结构的存储节点也可以有多个指针 2 使用白盒测试方法时,设计测试用例应根据 ( )。 ( A)程序的内部逻辑 ( B)程序的复杂结构 ( C)程序的功能 ( D)使用说明书 3 在医院,每个医生只属于某一个诊疗科,医生同一天可 为多位患者看病,而一名患者可在多个科室治疗。则;体医生和患者之间的联系是 ( )。 ( A)多对多 (
2、B)多对一 ( C)一对多 ( D)一对一 4 设序列长度为 n,在最坏情况下,时间复杂度为 O(10g2n)的算法是 ( )。 ( A)二分法查找 ( B)顺序查找 ( C)分块查找 ( D)哈希查找 5 设数据集合为 D=1, 3, 5, 7, 9, D上的关系为 R,下列数据结构 B=(D, R)中为非线性结构的是 ( )。 ( A) R=(5, 1), (7, 9), (1, 7), (9, 3) ( B) R=(9, 7), (1, 3), (7, 1), (3, 5) ( C) R=(1, 9), (9, 7), (7, 5), (5, 3) ( D) R=(1, 3), (3,
3、5), (5, 9) 6 深度为 7的二叉树共有 127个节点,则下列说法中错误的是 ( )。 ( A)该二叉树有一个度为 1的节点 ( B)该二叉树是满二叉树 ( C)该二叉树是完全二叉树 ( D)该二叉树有 64个叶子节点 7 某二叉树的中序序列为 BDCA,后序序列为 DCBA,则前序序列为 ( )。 ( A) DCBA ( B) BDCA ( C) ABCD ( D) BADC 8 下面能作为软件需求分析工具的是 ( )。 ( A) PAD图 ( B)程序流程图 ( C)甘特图 ( D)数据流程图 (DFD图 ) 9 下面不属于对象主要特征的是 ( )。 ( A)唯一性 ( B)多态性
4、 ( C)可复用性 ( D)封装性 10 关系 R经过运算 (A=B C4 D3)(R)的结果为 ( )。 ( A) (c, c, 11, 4) ( B) (e, e, 6, 1) ( C) (a, a, 2, 4) ( D) (a, a, 2, 4)和 (e, e, 6, 1) 11 简单程序设计 步骤中不包括 ( )。 ( A)编码 ( B)确定算法 ( C)安装编译程序 ( D)调试 12 若想给已定义为 int型的变量 a, b, c, d赋值为 1,以下选项中错误的语句是( )。 ( A) d=1, c=d, b=c, a=b; ( B) a: b=c=d=1; ( C) a=1,
5、b=a, c=b, d=c; ( D) a=b, b=c, c=d, d=1; 13 有 C语言表达式 2*3+4+15 3,关于其执行顺序,以下叙述正确的是 ( )。 ( A)先执行 2*3得 6,再执行 6+4得 10,再执行 15 3得 0, 最后执行 10+0得10 ( B)先执行 2 * 3得 6,再执行 15 3得 5,最后执行 6+4+5得 15 ( C)先执行 15 3得 0,再执行 2 * 3得 6,最后执行 6+4+0得 10 ( D)先执行 15 3得 3,再执行 4+3得 7,再执行 2 * 3得 6,最后执行 6+7得 13 14 若有定义: int a; float
6、 b; double c;,程序运行时输入: 1, 2, 3,能把1输入给变量 a、 2输入给变量 b、 3输入给变量 c的输入语句是 ( )。 ( A) scanf(“ d, f, If“, a, b, c); ( B) scanf(“ d f If“, a, b, c); ( C) seanf(“ d, If, If“, a, b, c); ( D) scanf(“ d, f, f“, a, b, c); 15 以下选项中,合法的 C语言实数是 ( )。 ( A) E1 ( B) le0 ( C) 0 10E ( D) 2 1e0 2 16 关于程序中的注释,以下叙述正确的是 ( )。 (
7、 A)注释的内容必须放在一对 *和 *之间 ( B)注释必须置于所说明的语句前或语句后 ( C)注释中间可以嵌套另一个注释 ( D)注释内容错误会导致编译出错 17 有以下程序: #include main() int a, b; for(a=0; a,则输出结果是 ( )。 ( A) 1, 2, 3, 2, 3, 3, ( B) 1, 2, 3, ( C) 1, 2, 2, 3, 4, 5, ( D) 1, 1, 1, 2, 2, 3 18 以下非法的定义语句是 ( )。 ( A) long b=0L; ( B) unsigned int a=一 100u; ( C) short c2=01
8、23; ( D) int d=00; 19 有以下程序: #include main() int a=0, b=0; for(; a main() char e; e=getchar(); do putchar(e+); while(e=getchar()!=#); 程序运行时从第一列开始输入: abcdefg#,则输出结果是 ( )。 ( A) bcdefgh$ ( B) bedefgh ( C) abcdefg# ( D) abcdefg 21 有如下程序: #include main() char s=0, b=a; int i; for(i=0; i main() char ch=M;
9、 while(ch!=K) putehar(ch); ch一一; 程序运行后的输出结果是 ( )。 ( A) ML ( B) MK ( C) OP ( D) mm 23 有以下程序: #include int k=5; void f(int, *s) s=&k; *s=k: main() int m=3; f(&m); printf(“ d, d n“, m, k); 程序运行后的输出结果是 ( )。 ( A) 3, 3 ( B) 5, 5 ( C) 3, 5 ( D) 5, 3 24 有如下程序: #include int sum_mod(int a, int b) return a+b 2
10、: main() int i; for(i=0; i int a=2; int f(int k) static int n=0; int m=0; n+; a+; m+; k+; return n+m+a+k; main() int k; for(k=0; k void f(int x, int n) if(n1) printf(“ d, “, x0); f(&x1, n一 1); printf(“ d, “, x0); else printf(“ d, “, x0); main() int z3=4, 5, 6; f(z, 3); printf(“ n“); 程 序运行后的输出结果是 ( )
11、。 ( A) 6, 5, 4, 6, 5, 4, ( B) 4, 5, 6, 5, 4, ( C) 4, 5, 6, 4, 5, 6, ( D) 6, 5, 4, 5, 6, 29 有如下程序: #include #include main() char a=“1234“, *b=“ABC“; printf(“ d, d, d, d n“, strlen(a), sizeof(a), strlen(b), sizeof(b); 程序运行后的输出结果是 ( )。 ( A) 4, 5, 1, 3 ( B) 4, 3, 2, 1 ( C) 4, 5, 3, 3 ( D) 4, 5, 3, 4 30
12、有以下程序: #include int*sum(int data) static int init=1; init+=data; retum&init; main() int i, *p; for(i=1; i #define S(x)x x*x main() int k=6, j=3; printf(“ d, d n“, S(k+j), S(j+k); 程序运行后的输出结果是 ( )。 ( A) 27, 27 ( B) 9, 9 ( C) 27, 29 ( D) 29, 29 33 若有定义: typedef int * T; T*a20; 则以下与上述定义中 a类型完全相同的是 ( )。
13、( A) int*a20; ( B) int(*a)20; ( C) int*(*a)20; ( D) int*a20; 34 设有以下程序段: struct person float weight; char sex; char name10; rec, *ptr; ptr=&rec; 从键盘读入字符串给结构体变量 rec的 name成员,错误的输入语句是 ( )。 ( A) scanf(“ s“, rec一 name); ( B) scanf(“ s“, rec name); ( C) scanf(“ s“, (*ptr) name); ( D) scanf(“ s“, ptr一 name
14、); 35 有如下程序: #include struet pair int first, second; ; struct pair get_min_max(int*array, int len) int i; struct pair res; res first=array0; res second=array0; for(i=1; ires second) res.second=array i; return res; main() int array6=19, 21, 3, 4; struct pair min_max=get_min_max(array, 6); printf(“min
15、= d, max= d n“, min_max first, min_max second); 程序运行后的输出结果是 ( )。 ( A) min=0, max=6 ( B) min=1, max=20 ( C) min=1, max=19 ( D) min=0, max=21 36 有以下程序: #include main() int i; FILE*fp; for(i=0; i main() int x; for(x=65; x #include #define N 10 double fun(double*x) int i, j; double 8, av, yN; s=0; for(i
16、=0; iav) *found* y【 2】 =xi; xi=一 1; for(i=0; i #include double fun(int n) main() *主函数 * void NONO(); printf(“s= f n“, fun(1000); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp * wf; int i, n; double s; fo=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; iav)表达的是当 x数组中的数大于平均值时,
17、应该把这些大于平均值的数放在 y数组的前半部分,因而此空应该填j+。 填空 3:此空表明当 xi不等于什么时, xi中的数要赋值给 y数组,由题意可知此空只能填写一 1。 三、程序修改题 42 【正确答案】 (1)for(i=2; im; i+)改为 for(i=2; i=m; i+) (2)y一 =1 (i*i)改为 y一 =1 0 (i*i); 【试题解析】 (1)使用 for循环计算公式,必须计算到 m,所以应改为 for(i=2;i=m; i+)。 (2)在除法运算中,如果除数和被除数都是整数,那么所除结果也是整数,因此应改为 y一 =1 0 (i*i)。 四、程序设计题 43 【正确答案】 double fun(int n) double sum=0 0; int i; for(i=21; i=n; i+) if(i 3=0) (i 7=0)sum+=i;同时能被 3与 7整除 return sqrt(sum); 【试题解析】 本题考查算术运算的算法,首先利用一个 for循环判断小于 n且能同时被 3和 7整除的整数,并将满足条件的整数累加到 sum,之后调用 sqrt函数计算 sum的平方根,并作为函数的返回值。