1、国家二级( C语言)机试历年真题试卷汇编 4及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)解决同一个问题的不同算法的时间复杂度一般是不同的 ( B)解决同一个问题的不同算法的时间复杂度必定是相同的 ( C)对同一批数据作同一种处理,如果数据存储结构不同,不同算法的时间复杂度肯定相同 ( D)对同一批数据作不同的处理,如果数据存储结构相同,不同算法的时间复杂度肯定相同 2 下列处理中与队列有关的是 ( )。 ( A)操作系统中的作业调度 ( B)执行程序中的过程调用 ( C)执行程序中的循环控制 ( D)二叉树的遍历 3 设栈的存储空间为 S(1: m),初始状态为 top
2、=m+1。经过一系列入栈与退栈操作后, top=1。现又要将一个元素进栈,栈顶指针 top值变为 ( )。 ( A)发生栈满的错误 ( B) 2 ( C) m ( D) 0 4 设二叉树共有 150个节点,其中度为 1的节点有 10个,则该二叉树中的叶子节点数为 ( )。 ( A) 71 ( B) 70 ( C) 69 ( D)不可能有这样的二叉树 5 非空循环链表所表示的数据结构 ( )。 ( A)有根节点也 有叶子节点 ( B)没有根节点但有叶子节点 ( C)有根节点但没有叶子节点 ( D)没有根节点也没有叶子节点 6 设二叉树中共有 31个节点,其中的节点值互不相同。如果该二叉树的后序序
3、列与中序序列相同,则该二叉树的深度为 ( )。 ( A) 31 ( B) 16 ( C) 17 ( D) 5 7 在最坏情况下,堆排序的时间复杂度是 ( )。 ( A) O(lgo2n) ( B) O(nlog2n) ( C) O(n2) ( D) O(n1.5) 8 软件按功能可以分为应用软件、系统软件和支撑软件 (或工具软 件 )。下面属于系统软件的是 ( )。 ( A)学籍管理系统 ( B) ERP系统 ( C) C编译程序 ( D) CAI软件 9 存储在计算机内有结构的数据集合是 ( )。 ( A)数据库 ( B)数据库系统 ( C)数据库管理系统 ( D)数据结构 10 在数据库技
4、术中,为提高数据库的逻辑独立性和物理独立性,数据库的结构被划分成用户级、存储级和 ( )。 ( A)概念级 ( B)外部级 ( C)管理员级 ( D)内部级 11 以下叙述错误的是 ( )。 ( A)一个算法所包含的操作步 骤应该是有限的 ( B)任何能通过编译和运行的算法都一定能得到所期望的结果 ( C)算法中每一条指令必须有确切的含义 ( D)算法可以用各种描述方法来进行描述 12 以下是正确 C语言实型常量的是 ( )。 ( A) e 1 ( B) e一 1 ( C)一 1e ( D) 1e一 1 13 以下叙述正确的是 ( )。 ( A)在 C语言中分号是语句的组成部分 ( B) C语
5、言程序由 C语句组成,可以省略 main函数 ( C)分号是 C语句之间的分隔符 ( D)所有程序行都必须用分号结束 14 若有定义: double a, b, c;能正确给 a, b, c输入数据的语句是 ( )。 ( A) scanf(“ If If If“ a, b, c); ( B) scanf(“ f f f“, a, b, c); ( C) scanf(“ If If If “, a, b, c); ( D) scanf(“ If If If“, a, b, c); 15 有以下程序: #include main() int x=0x9; printf(“ c n“, A+X);
6、程序运行后的输出结果是 ()。 ( A) I ( B) J ( C) K ( D) H 16 设有定义: double x=5 16894;,则语句 printf(“ If n“, (int)(x*1000+0 5) 1000 );的输出结果是 ( )。 ( A) 5 16900 ( B) 5 16800 ( C) 0 00000 ( D)输出格式说明符与输出项不匹配,产生错误信息 17 有以下程序: #include main() int a=0, b=0, C=0, d=0; if(a=1) b=1; c=2; else d=3; printf(“ d, d, d, d n“, a, b,
7、 c, d); 程序输出 ( )。 ( A)编译有错 ( B) 0, 0, 0, 3 ( C) 1, 1, 2, 0 ( D) 0, 1, 2, 0 18 有以下程序: #include main() int a=一 2, b=2; for(; +a一一 b; ) ; printf(“ d, d n“, a, b); 程序运行后的输出结果是 ( )。 ( A) 0, 1 ( B) 0, 0 ( C) 1,一 1 ( D) 0, 2 19 有以下程序: #nclude main() int t; scanf(“ d“, t); if(t+,则输出结果是 ( )。 ( A) 6 ( B) 8 (
8、C) 7 ( D) 5 20 有以下程序: #include main() char ch=D; while(chA) ch一一; putchar(ch); if(ch=A)break; putchar(ch+1); 程序运行后的输出结果是 ( )。 ( A) CB ( B) BCA ( C) CCBB ( D) CDBCA 21 以下程序拟实现计算 s=1+2*2+3*3+n*n+ ,直到 s1000为止。 #include main() int s, n; s=1: n=1; do n=n+1; s=s+n*n; while(s1000); printf(“s= d n“, s); 程序运
9、行后,不能得到正确结果,以下修改方案正确的是 ( )。 ( A)把 while(s1000);改 为 while(s main() int m, n; scanf(“ d d“, m, n); while(m!=n) while(mn)m=m n; while(nm)n=n m; printf(“ d n“, m); 该程序的功 能是 ( )。 ( A)计算 m和 n的最小公倍数 ( B)计算 m和 n的最大公约数 ( C)计算 m和 n的差值 ( D)找出 m和 n中的较大值 23 有以下程序: #include int add(int a, int b)return(a+b); main(
10、) int k, (*f)(), 13 =5, b=10; f: add; 则以下函数调用语句错误的是 ( )。 ( A) k=f(a, b); ( B) k=add(a, b); ( C) k=(*f)(a, b); ( D) k=*f(a, b); 24 若有定义语句: double x, y, *px, *py; 执行 px=dex; py= y; 正确的输入语句是 ( )。 ( A) seanf(“ If If“, x, y); ( B) scanf(“ f f“ x, y); ( C) scard“(“ f f“, x, y); ( D) seanf(“ If le“, px, py
11、); 25 以下定义数组的语句中错误的是 ( )。 ( A) int ilum3=1, 2, 3, 4, 5, 6; ( B) int num24=1, 2, 3, 4, 5, 6; ( C) int num=1, 2, 3, 4, 5, 6; ( D) int num4=1, 2, 3, 4, 5, 6; 26 有以下程序: #include void fun(int a, int n, int flag) int i=0, j, t; for(i=0; iaj) t=ai; ai=aj; aj=t; main() int c10=7, 9, 10, 8, 3, 5, 1, 6, 2, 4,
12、 i; fun(c, 4, 1); fun(c+4, 6, 0); for(i=0; i main() int i, k=0, a10; for(i_0; i int new_div(double a, double b) return a b+0 5; main() printf(“ d“, new_div(7 8, 3 1); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) O 29 函数 fun的功能是在 a所指的具有 n个元素的数组中查找最大值并返回给调用函数,函数不完整。 int fun(int*a, int n) int*p, *s; for(
13、P=a, s=a; P as ( B) *p*s ( C) apas ( D) p ap s 30 有以下程序: #include #include main() char str20=“One*Wodd“, “One*Dream!“, “*p=str1; printf(“ d, “, strlen(p); printf(“ s n“, p); 程序运行后的输出结果是 ( )。 ( A) 10, One*Dream! ( B) 9, One*Drealltl! ( C) 9, One*World ( D) 10, One*World 31 有以下程序: #include #include ma
14、in() int i, len; char b=“Welcome you to Beijing!“; len=strlen(b); for(i=0; i int f(int k) static int n=0; int m=0; n+; m+; k+; return 11+m+k: main() int k; for(k=0; k int m=12; int fun(int x, int y) static int m: 3; m=x * y m: return(m); main() int a=7, b=5; m=fun(a, b) m; printf(“ d n“, fun(a, b) m
15、); 程序运行后的输出结果是 ( )。 ( A) 2 ( B) 1 ( C) 3 ( D) 0 34 有以下程序: #nclude #include main() chara=“TEXT“, *b=“+“, c 3=“1“; printf(“ d, d, “, strlen(a), sized(a); printf(“ d, d, “, strlen(b), sized(b); printf(“ d, d, n“, strlen(c), sized(c); 程序运行后的输出结果是 ( )。 ( A) 4, 5, 2, 4, 1, 3, ( B) 4, 4, 2, 2, l, 1, ( C) 5
16、, 5, 3, 3, 2, 2, ( D) 4, 4, 2, 2, 1, 3 35 以下与存储类别有关的四组说明符中,全部属于静态类的一组是 ( )。 ( A) extern和 static ( B) auto和 static ( C) register和 static ( D) rester和 extern 36 为了建立如图所示的存储结构 (即每个节点含两个域, data是数据域, next是指向节点的指针域 )则在 ( )处填入的选项是 ( )。 struct linkchar data;()node; ( A) struct link, * next; ( B) link next;
17、( C) link*next; ( D) struct link next; 37 有以下程序: #include #include typedef struct stu char name10; char gender; int score; stu; void f(char name10, char gender, int score) strcpy(name, “Sun“); gender=in score=370; main() STU b=“Zhao“, m, 290, a=“Qian“, f, 350; b=a; printf(“ s, c, d, “, b name, b gen
18、der, b score); f(b name, b gender, b score); printf(“ s, c, d n“, b name, b gender, b score); 程序运行后的输出结果是 ( )。 ( A) Qian, f, 350, Sun, f, 350 ( B) Qian, f, 350, Qian, f, 350 ( C) Qian, f, 350, Sun, m, 370 ( D) Zhao, m, 290, Sun, m, 370 38 有以下程序: #include main() char a=3, b=6, c; c=(ab) void fun(int*
19、px, int*py) *found* int 【 1】; scanf(“ d“, k); *found* while 【 2】 if(k0)a+; if(k typedef struct list int data; struct list*next; LIST; int fun(LIST*h) LIST*p; *found* int t; p=h; *found* while(*p) *found* t=t+p data; p=(*p) next; return t; main() UsT a, b, c, *c h; a data=34; b data=51; c data=87; c
20、next=0; h= a; a next= b; b next= c; printf(“总和 = d n“, fun(h); 四、程序设计题 43 请编写函数 fun,其功能是分别统计形参 t所指二维数组中字母 A和 C的个数。 注意:部分源程序存在 PROGl C中,请勿改动主函数 main和其 他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include #include #define M 14 void NONO(); void fun(char(* t)M, int*a, int* c) void get(char(*s)M) int i, j;
21、 for(i=O; iA,每次循环执行两次 putchar(),否则跳出循环。第一次输出CD,第二次输出 BC,第三次输出 A,跳出循环。因此答案为 D选项。 21 【正确答案】 A 【试题解析】 题目中程序不能实现预期功能是因为 while的循环条件错误,在 B选项中,把 s=1,改为 s=0,最终的结果 s=4,与题目原意不同;在 C选项中,把n=1,改为 n=0,最终的结果 s=2,与题目原意不同;在 D选项中,把 n=n+1,改为 n=n*n,最 终的结果 s=2,与题目原意不同; A选项,正确地修改了 while循环条件,可以得到正确结果。故答案为 A选项。 22 【正确答案】 B
22、【试题解析】 题目使用更相减损术求最大公约数,其思想: 任意给定两个正整数,判断它们是否都是偶数。若是,则用 2约简,若不是则执行第二步。 以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个 2与第二步中等数的乘积就是所求的最大公约数。因此。故答案为 B选项。 23 【正确答案】 D 【试题解析】 *与 ()的优先级为 ()的优先级高于 *,因此 (*f)()定义函数指针 f。 f指向函数的指针, f=add,将函数 add()的首地址赋给指针 f,所以调用函数 add()可以写为 f(),其返回值是整型,不是指
23、针类型,不能用 *取指针指向的内存单元的数据,故 k=*f(a, b)的调用方式错误。答案为 D选项。 24 【正确答案】 D 【试题解析】 1Jf, le是针对 double类型的数据,如果仅用 f,输入的数据可能不能被完全接收,数据的精度可能不足。 f主要针对 float类型的变量输入, B选项错 误。根据 scanf(格式,变量地址 ), A, C选项错误。故答案为 D选项。 25 【正确答案】 B 【试题解析】 B选项中, int num24=1, 2, 3, 4, 5, 6;定义数组是 2行 4列,但是初始化的结构是 3行 2列,因此初始化错误。故答案为 B选项。 26 【正确答案】
24、 C 【试题解析】 fun()函数的作用是定义了冒泡法排序, flag控制升序 (0)或者降序(1), n为参与排序的元素个数, a为数组的起始地址。因此, fun(a, 4, 1)函数即将数组的前 4个数据降序排序 , fun(a+4, 6, 0)函数是对数组的第 4项后的 6个元素进行升序排序。故结果为 10, 9, 8, 7, l, 2, 3, 4, 5, 6。答案为 C选项。 27 【正确答案】 D 【试题解析】 第一个 for循环的作用是对数组 a赋初值,数组 a中各元素值依次为 0一 9,第二个 for循环是计算数组前 4项的 ai+i之和。 0+0, 1+1, 2+2,3+3,经
25、计算的结果为 12,因此答案为 D选项。 28 【正确答案】 C 【试题解析】 newdiv()的返回值是 int类型,因此, a b+0 5(其中 a, b均为double类型 )的小数部分将被截断。将 a、 b的值代入进行计算, 7 83 1+0 5=2 516+0 5=3 016,故打印的结果为 3。故答案为 C选项。 29 【正确答案】 B 【试题解析】 函数 fun()的功能是在形参 a所指的具有 n个元素的数组中查找最大值并返回。通过 for循环比较, s始终指向最大值的那个元素。使用 *p取指针的值,比较 *p和 *s,当 *sdata 【试题解析】 (1)int t;改为 int t=0;题目中变量 t是用来存放累加和的,必须初始化。 (2)*p改为 p或者 p!=NULL,题目中木 p是结构体,不能转化为 bool型。 (3)p data改为 p一 data, p是指针,只能用 p,不能用 p。 四、程序设计题 43 【正确答案】 int i=0, j=0;循环统计的下标 *a=0;初始化 a字符统计的个数 *c=0;初始化 c字符统计的个数 for(i=0; iM; i+)行 for(j=0; jM; j+)列 if(tij=A)字符是 a,计数 (*a)+; if(tij=C)字符是 c,计数 (c)+;
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1