1、国家二级( C语言)机试历年真题试卷汇编 13及答案与解析 一、选择题 1 设某二叉树的后序序列为 CBA,中序序列为 ABC,则该二叉树的前序序列为( )。 ( A) BCA ( B) CBA ( C) ABC ( D) CAB 2 下列叙述中正确的是 ( )。 ( A)存储空间不连续的所有链表一定是非线性结构 ( B)节点中有多个指针域的所有链表一定是非线性结构 ( C)能顺序存储的数据结构一定是线性结构 ( D)带链的栈与队列是线性结构 3 算法时间复杂度的度量方法是 ( )。 ( A)算 法程序的长度 ( B)执行算法所需要的基本运算次数 ( C)执行算法所需要的所有运算次数 ( D)
2、执行算法所需要的时间 4 设循环队列为 Q(1: m),初始状态为 front=rear=m。现经过一系列的入队与退队运算后, front=rear=1,则该循环队列中的元素个数为 ( )。 ( A) 1 ( B) 2 ( C) m1 ( D) 0或 m 5 计算机软件的构成是 ( )。 ( A)源代码 ( B)程序和数据 ( C)程序和文档 ( D)程序、数据及相关文档 6 下面不属于软件设计阶段任务的是 ( )。 ( A)软件的详细设计 ( B)软件的总体结构设计 ( C)软件的需求分析 ( D)软件的数据设计 7 下面属于黑盒测试方法的是 ( )。 ( A)边界值分析法 ( B)基本路径
3、测试 ( C)条件覆盖 ( D)条件一分支覆盖 8 一名雇员就职于一家公司,一个公司有多名雇员,则实体公司和实体雇员之间的联系是 ( )。 ( A) 1: 1联系 ( B) 1: m联系 ( C) m: 1联系 ( D) m: n联系 9 有关系 R如下,其中属性 B为主键: 则其中最后一个记录违反了 ( )。 ( A)实体完整性约束 ( B)参照完整性约束 ( C)用户定义的完整性约束 ( D)关系完整性约束 10 在数据库系统中,用于对客观世界中复杂事物的结构及它们之间的联系进行描述的是 ( )。 ( A)概念数据模型 ( B)逻辑数据模型 ( C)物理数据模型 ( D)关系数据模型 11
4、 以下选项中可用作 C语言中合法用户标识符的是 ( )。 ( A) 123 ( B) void ( C) abc ( D) 2a 12 以下选项中合法的 C语言赋值语句是 ( )。 ( A) +i; ( B) a=b=34 ( C) a=3, b=9 ( D) k=int(a+b); 13 以下程序段中的变量已定义为 int类型,则 sunl=pad=5; pAd=sum+, pAd+, +pAd; printf(“ d n“, pad); 程序段的输出结果是 ( )。 ( A) 6 ( B) 4 ( C) 5 ( D) 7 14 有以下程序: #include #inelude main()
5、 int a=1, b=4, C=2; double x=10 5, y=4 0, z; z=(a+b) c+sqrt(y)* 1 2 c+x; printf(“ f n“, Z); 程序运行后的输出结果是 ( )。 ( A) 13 700000 ( B) 14 000000 ( C) 15 400000 ( D) 14 900000 15 有以下程序 (字母 A的 ASCII代码为 65): #include main() char c1=A, c2=Y; printf(“ d, d n“, c1, c2); 程序运行后的输出结果是 ( )。 ( A)输出格式不合法,输出出错信息 ( B)
6、A, Y ( C) 65, 90 ( D) 65, 89 16 若变量已正确定义,则以下 for循环 ( ): for(x=0, y=0; (y!=123)&(x main() int a, b, c=241; a=c 100 9: b=(一 1)&(一 1); printf(“ d, d n“, a, b); 程序运行后的输出结果是 ( )。 ( A) 2, 1 ( B) 6, 1 ( C) 6, 0 ( D) 2, 0 20 有以下程序: #include main() int i; for(i=1; i main() printf(“ d n“, NULL); 程序运行后的输出结果是 (
7、 )。 ( A) 0 ( B)变量无定义,输出不确定 ( C)一 1 ( D) 1 23 函数调用语句: fun(exp1, exp2), (exp1, exp2, exp3);含有的实参个数是( )。 ( A) 1 ( B) 4 ( C) 5 ( D) 2 24 若有定义语句: int a10=0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p=a;,以下选项中错误引用 a数组元素的是 (其中 0i main() int a10=11, 12, 13, 14, 15, 16, 17, 18, 19, 20, *p=a, i=9; printf(“ d, d, d n“, apa
8、, pi, *(&ai); 程序运行后的输出结果是 ( )。 ( A) 11, 19, 19 ( B) 12, 20,20 ( C) 11, 20, 20 ( D) 12, 19, 20 26 有以下程序: #include void fun(int, * s, int t, int*k) int p; for(p=0, * k=p;ps*k)*k=p; main() int a10=11, 12, 13, 14, 15, 16, 20, 18, 19, 10,k; fun(a, 10, &k); printf(“ d, d n“, k, ak); 程序运行后的输出结果是 ( )。 ( A)
9、6, 20 ( B) 10, 9 ( C) 7, 20 ( D) 10, 10 27 有以下说明语句: char/s=“ “ Name Address n“; 指针 S所指字符串的长度是 ( )。 ( A) 17 ( B) 15 ( C) 14 ( D)说明语句不合法 28 有以下程序: #include main() char str12=s, t, r, I, n, g; printf(“ d n“, strlen(str); 程序运行后的输出结果是 ( )。 ( A) 6 ( B) 7 ( C) 1 1 ( D) 12 29 有以下程序: #include main() char* s6
10、=“ABCD“, “EFGH“, “IJKL“, “MNOP“, “QRST“, “UVWX“, *p; int i; =s: for(i=0; i main() int i=1, j=3; printf(“ d, “, i+); int i=0; i+=j*2; printf(“ d, d, “, i, j); printf(“ d, d n“, i, j); 程序运行后的输出结果是 ( )。 ( A) 1, 6, 3, 1, 3 ( B) 1, 6, 3, 2, 3 ( C) 1, 6, 3, 6, 3 ( D) 1, 7, 3, 2, 3 31 有以下程序: #include int f
11、un(int a, int b) static int m=0, i=2; i+=m+1; m=i+a+b; return m: main() int k=4, m=1, P; P=fun(k, m); printf(“ d, “, P); P=fun(k, m); printf(“ d n“, P); 程序运行后的输出结果是 ( )。 ( A) 8, 17 ( B) S, 16 ( C) 8, 8 ( D) 8, 20 32 若有以下程序段: char str412=“aaa“, “bbbb“, “cccc“, “dddddd“, * strp4; int i; for(i=0; i #de
12、fine F(x)2 84+x #define PR(a)printf(“ d“, (int)(a) #define PRINT(a)PR(a); putchar( n) main() PRINT(F(5)*2); 程序运行后的输出结果是 ( )。 ( A) 12 ( B) 13 ( C) 15 ( D) 11 34 以下关于 fclose(fp)函数的叙述正确的是 ( )。 ( A)当程序中对文件的所有写操作完成之后,必须调用 fclose(fp)函数关闭文件 ( B)当程序中对文件的所有写操作完成之后,不一定要调用 fclose(fp)函数关闭文件 ( C)只有对文件进行输入操作之后 ,才
13、需要调用 fclose(fp)函数关闭文件 ( D)只有对文件进行输出操作之后,才能调用 fclose(fp)函数关闭文件 35 若有以下定义和语句: struct stint n; struct st*next; ; struct st a3=5, &a0, 6, &81, 7, &a2, *p; P=&a0; 则值为 6的表达式是 (提示:运算符一 的优先级高于 +)( )。 ( A) (*p) n+ ( B) p+一 n ( C) p一 n+ ( D) (+p)一 n 36 标准库函数 fgets(s, n, f)的功能是 ( )。 ( A)从文件 f中读取长度不超过 n一 1的字符串存
14、入指针 8所指的内存 ( B)从文件 f中读取长度为 n的字符串存入指针 8所指的内存 ( C)从文件 f中读取 n个字符串存入指针 s所指的内存 ( D)从文件 f中读取 n一 1个字符串存入指针 8所指的内存 37 有以下程序: #include main() char c=A; int x=36, b; b=(x2)&(c typedef struct char name10; int age; ST; main() ST stud10=“Adum“, 15, “Muty“, 16, “Paul“, 17, “Johu“, 14, ; 程序运行后不能输出字符 u的语句是 ( )。 ( A
15、) printf(“ c n“, stud1 name1); ( B) printf(“ c n“, stud3 name E 3); ( C) printf(“ c n“, stud2 name2); ( D) printf(“ c、 n“, stud0 name3); 39 有定义: int a=64, b=8;,则表达式 (a&b)(a&b)和 (a b)&(ab)的值分别为( )。 ( A) 1和 1 ( B) 1和 0 ( C) 0和 1 ( D) 0和 0 40 有以下程序: #include main() FILE*fp; int i, a6=1, 2, 3, 4, 5, 6,
16、k; fp=fopen(“data dat“, “w+“); fprintf(fp, “ d n“, a0); for(i=1; i typedef struct int num; char name9; float score3; STU; void show(STU tt) int i; printf(“ d 8: “, tt num, tt name); for(i=0; i【 2】 *=a; main() STU std=1, “Zhanghua“, 76 5, 78 0, 82 0; float a; printf(“ nThe original number and name an
17、d scores: n“); show(std); printf(“ nInput a number: “); scanf(“ f“, &a); *found* modify(【 3】, a); printf(“ hA result of modifying: n“); show(std); 三、程序修改题 42 下列给定程序中,函数 fun的功能是:求 k!(k #include long fun(int k) *found* if k1 return(k* fun(k一 1); return 1; main() int k=10; printf(“ d!= ld n“, k, fun(k)
18、; 四、程序设计题 43 程序 定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN, int n),该函数的功能是:使数组左下半三角元素中的值乘以 n。例如,若n的值为 3, a数组中的值为: 则返回主程序后 a数组中的值应为: 注意:部分源程序给出如下。请勿改动函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#include#include#include#define N 5void fun(int aN, int n)main() int aNN,n, i, j; printf(“*The array* n”);
19、 for(i=0; i 国家二级( C语言)机试历年真题试卷汇编 13答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 二叉树遍历可以分为 3种:前序遍历 (访问根节点在访问左子树和访问右子树之前 )、中序遍历 (访问根节点在访问左子树和访问右子树两者之间 )、后序遍历 (访问根节点在访问左子树和访问右子树之后 )。后序序列为 CBA,则 A为根节点。中序序列为 ABC,则 B和 C均为左子树节点或右子树节点,且 B为 C父节点,可知前序序列为 ABC,故 C选项正确。 2 【正确答案】 D 【试题解析】 一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有一
20、个前件,也最多有一个后件,称为线性结构,也称为 线性表,可以采用顺序存储和链式存储,其中链式存储空间不连续,所以 A选项错误。双向链表节点有两个指针域分别为指向前一个节点的指针和指向后一个节点的指针,也是线性结构,故 B选项错误。顺序存储结构中可能根节点不唯一,故可能不是线性结构,所以 C选项错误。栈是所有的插入与删除都限定在表的同一端进行的线性表;队列是允许在一端进行插入,而在另一端进行删除的线性表。故 D选项正确。 3 【正确答案】 B 【试题解析】 算法的时间复杂度是指执行算法所需要的计算工作量,算法的计算工作量是用算法所执行的基本运算次数来度量 的,故 B选项正确。选项 D,根据工程的
21、大小来决定的,与算法复杂度无关。 4 【正确答案】 D 【试题解析】 由初始状态为 front=rear=m可知此时循环队列为空。入队运算时,首先队尾指针进 1(即 rear+1),然后在 rear指针指向的位置插入新元素。特别地,当队尾指针 rear=m+l时,置 rear=l。退队运算时,排头指针进 1(即front+1),然后删除 front指针指向的位置上的元素,当排头指针 front=m+1时,置 front=1。若经过运算, front=rear可知队列空或者队列满,故 D选项正确。 5 【正确答案】 D 【试题解析】 计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不
22、可执行的,与软件开发、运行、维护、使用等有关的文档。故 D选项正确。 6 【正确答案】 C 【试题解析】 软件生命周期分为:软件定义期、软件开发期、运行维护期。软件设计属于软件开发期任务,通常又分为概要设计和详细设计两个阶段。概要设计给出软件的结构、模块的划分、功能的分配以及处理流程。需求分析属于软件定义期任务,故 C选项正确。 7 【正确答案】 A 【试题解析】 黑盒测试 是把程序看成一只黑盒子,测试者完全不了解,或不考虑程序的结构和处理过程。它根据规格说明书的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误推测法和因果图
23、等,故 A选项正确。白盒测试的主要技术有逻辑覆盖测试 (语句覆盖、路径覆盖、判断覆盖、条件覆盖 )、基本路径测试等,故B、 C、 D选项错误。 8 【正确答案】 B 【试题解析】 一般来说,实体集之间必须通过联系来建立连接关系,分为 3类:一对一联系 (1: 1)、一对多联系 (1: m)、多对多联 系 (m: n)。一个公司与多个雇员的关系为 l: m联系,故 B选项正确。 9 【正确答案】 A 【试题解析】 关系模型中可以有 3类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指,若属性 M是关系的主键,则属性 M中的属性值不能为空值。属性 B为主键,最后
24、一个记录为空,违反了实体完整性约束,故 A选项正确。 10 【正确答案】 A 【试题解析】 数据模型按照不同的应用层次分为以下 3种类型:概念数据模型,着重于对客观世界复杂事物的描述及对它们内在联系的刻画;逻辑数据模 型,是面向数据库系统的模型,着重于在数据库系统一级的实现;物理数据模型,是面向计算机物理实现的模型,此模型给出了数据模型在计算机上物理结构的表示。故 A选项正确。 11 【正确答案】 A 【试题解析】 合法的标识符由字母 (大、小写均可 )、数字和下划线组成,并且必须以字母或下划线开头,故 A选项正确。 void为关键字,故 B选项错误。 C选项以 “一 ”开头,不合法。 D选项
25、由数字开头,不合法。关键字是指被 C语言保留的,不能用作其他用途的一些标识符,它们在程序中都代表着固定的含义。 12 【正确答案】 A 【试题解析】 赋值语句是在赋值表达式末尾加上分号构成的。 B、 C选项缺少分号,不是合法语句。 D选项为强制类型转换赋值语句,但是 int缺少括号,是非法语句。 +i;相当于 i=i+1;,是合法赋值语句,故 A选项正确。 13 【正确答案】 C 【试题解析】 自增和自减运算符的两种用法:前置运算,运算符放在变量之前,规则是先使变量的值增 (或减 )1,然后以变化后表达式的值参与其他运算;后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值
26、增 (或减 )1。逗号表达式的计算过程是从左到右逐个求 每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。逗号运算符的优先级低于赋值运算符。程序执行过程为: sum=5, pad=5; pAd=5, sum=6, phd=6, pAd=7。输出 pad,pad=5,故 C选项正确。 14 【正确答案】 A 【试题解析】 如果一个运算符两边的运算数类型不同,要先将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算。程序执行过程为: a+b=5, 5 2=2(int类型 ), sqrt(y)=2 0(double类型 ), 2 0*1 2 2=1 2(double类型 ),z=
27、2 0(由 int类型自动转换成 double类型 )+1 2+10 5=13 7。故 A选项正确。 15 【正确答案】 D 【试题解析】 一个整数,只要它的值在 0255范围之内,也可以用字符形式输出。输出之前,系统会将该整数转化为相应的 ASCII码字符。字符也可以用整型来输出,输出的是对应的 ASCII值。 A的 ASCII值为 65, Y的 ASCII值为 89,故 D选项正确。 16 【正确答案】 A 【试题解析】 for循环语句格式为: for(expl; exp2; exp3)。 expl通常用来给循环变量赋初值; exp2通常是循环条件,以便决定是否继续执行循环体; exp3通
28、常用来修改循环变量的值。程序执行过程为:赋初值 x=0, y=0,逻辑表达式 y!=123为真, x。故 A选项正确。 34 【正确答案】 A 【试题解析】 对一个文件操作完成后,要将该文件关闭, “关闭 ”就是使文件指针变量不再指向该文件。程序编写者应该在程序终止之前关闭所有文件,如果不关闭,文件将会丢失数据。因为,在向文件写数据时,是先将数据输出到缓冲区,待缓冲区充满后才正式输出给文件。如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用 fclose函数关闭文件,可以避免这个问题,它先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。所以对文件的所有写操作完成之后必须
29、要关闭文件,故 A选项正确, B选项错误。只要对文件进行操作后,都要调用 fclose文件关闭文件,故 C、 D选项错误。 35 【正确答案】 D 【试题解析】 定义指向结构体变量的指针 p,并将结构体数组首 地址赋给 p。(+p)一 n, p指针自加一指向数组第二个元素,其成员 n=6, D选项正确。 p+一 n, p指向结构体数组第一个元素,其成员 n=5。 p一 n+, p指向结构体数组第一个元素,其成员 n=5,由于 +是后缀,先取值,所以表达式为 5,之后再自加一。 (*p).n+, *p为结构体数组第一个元素,其成员 n=5,先取值,表达式为 5。故选 D。 36 【正确答案】 A
30、 【试题解析】 fgets函数功能是从 f所指文件中读入 n一 1个字符放入 s为起始地址的空间内,并在尾端自动加一个结束标志 “ 0”。同时将读 写位置指针向前移动字符串长度个字节。在读出 n一 1个字符之前,如遇到了换行符或 EOF,则读出结束, A选项正确。 B选项中 “读取长度为 n”错误。 C选项与 D选项中 “读取 n n一 1个字符串 ”错误,读取的是 n1个字符。故选 A。 37 【正确答案】 A 【试题解析】 “”右移运算符每次右移一位等价于除 2, x=36,执行 x2后,x=9; “ ”逻辑与运算,先计算左表达式真假,若为假,不计算右表达式,整个逻辑表达式为假,若左表达式
31、为真,再计算右表达式,之后做逻辑与运算; x2为真, A的 ASCII码为 65, a的 ASCII码为 97, c2) (c”右移, “ ”按位与, “”按位异或, “ ”按位或。运算时,先将数值转化为二进制。逻辑或运算符 “,计算左表达式值,如果为真,则不计算右表达式,而整个表达式为真,若左表达式为假,再计算右表达式然后做或运算。逻辑与运算符 “ ”,计算左表达式值,如果为假则不计算右表达式,而整个表达式为假,若左表达式为真,再计算右表达式然后做与运算。 a=64=1000000B, b=8=1000B, a b=0为假, ab为真, (a b)(a b)为真,值为 1。 a b=1001
32、000B为真, ab为真,则 (a b) (ab)为真,值为 1。故 A选项正确。 40 【正确答案】 A 【试题解析】 fopen函数以一定方式打开指定文件,返回一个指向文件的文件指针。如果不能实现打开指定文件的操作,则返回一个空指针 NULL。 fscanf函数从文本文件中按格式输入。 fprintf函数按照格式向文本文件中输出数据。文件定位函数 fseek,将指针由文件开头 0、当前位置 1、末尾 2移动指定字节。 rewind函数功能使文件的位置指针返回到文件头。本例中,循环实现的功能是求数组的和。程序执行过程为:以读写方式建立一个新的文本文件 data dat,将 1写入文件;执行
33、for循环,将文件指针移到文件开头,将文件第一个数值 1赋给 k,再将指针移动到开头,向文件内输入 ai+k=3。 for循环实现将 a数组中元素累加,结果 2l存放在文件中。调用 rewind将文件指针移动到开头,调用 fscanf函数从文件中读出数值赋予 k=21,调用 fclose函数关闭文件,打印 k值,故 A选项正确。 二、程序填空题 41 【 正确答案】 (1)STU (2)scorei (3) std 【试题解析】 本题是利用结构体存储学生记录,对记录进行修改并由实参 ss返回。 填空 1:实参 ss是一个结构型指针变量,所以应填 STIJ。 填空 2:该学生的各科成绩都乘以一个
34、系数 a,所以应填 scorei。 填空 3:函数的调用,由于函数定义时使用的指针结构型变量,所以应填std。 三、程序修改题 42 【正确答案】 if(k1) 【试题解析】 语法错误, if条件表达式应写在小括 号内。 四、程序设计题 43 【正确答案】 void fun(int aN, int n) int i, j; if(a=NULL)return; for(i=0; iN; i+) for(j=0; j: i; j+) *矩形的下三角时,积相乘 * aij=aij*n; 【试题解析】 首先从数组中找出要被乘以 n的那部分元素,这一过程其实就是找出将被挑出的元素在原数组中的分布规律的过程。通过观察得出,要被 处理的元素下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以 n。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1