1、国家二级( C语言)机试模拟试卷 85及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)数据的存储结构会影响算法的效率 ( B)算法设计只需考虑结果的可靠性 ( C)算法复杂度是指算法控制结构的复杂程度 ( D)算法复杂度是用算法中指令的条数来度量的 2 设数据集合为 D=1, 2, 3, 4, 5。下列数据结构 B=(D, R)中为非线性结构的是 ( )。 ( A) R=(1, 2), (2, 3), (3, 4), (4, 5) ( B) R=(1, 2), (2, 3), (4, 3), (3, 5) ( C) R=(5, 4), (4, 3), (3, 2), (2,
2、 1) ( D) R=(2, 5), (5, 4), (3, 2), (4, 3) 3 某二叉树共有 150个结点,其中有 50个度为 1的结点,则 ( )。 ( A)不存在这样的二叉树 ( B)该二叉树有 49个叶子结点 ( C)该二叉树有 50个叶子结点 ( D)该二叉树有 51个叶子结点 4 循环队列的存储空间为 Q(1: 50),初始状态为 front=rear=50。经过一系列正常的人队与退队操作后, front=rear=25,此后又正常地插入了一个元素,则循 环队列中的元素个数为 ( )。 ( A) 51 ( B) 50 ( C) 49 ( D) 1 5 下列排序方法中,最坏情况
3、下时间复杂度 (即比较次数 )低于 O(n2)的是 ( )。 ( A)快速排序 ( B)简单插入排序 ( C)冒泡排序 ( D)堆排序 6 下面描述正确的是 ( )。 ( A)软件测试是指动态测试 ( B)软件测试可以随机地选取测试数据 ( C)软件测试是保证软件质量的重要手段 ( D)软件测试的目的是发现和改正错误 7 下面图中属于软件设计建模工具的是 ( )。 ( A) DFD图 (数据流程图 ) ( B)程序流程图 (PFD图 ) ( C)用例图 (L SECASE图 ) ( D)网络工程图 8 数据库 (DB)、数据库系统 (DBS)和数据库管理系统 (DBMS)之间的关系是 ( )。
4、 ( A) DB包括 DBS和 DBMS ( B) DBMS包括 DB和 DBS ( C) DBS包括 DB和 DBMS ( D) DBS、 DB和 DBMS相互独立 9 医院里有不同的科室,每名医生分属不同科室,则实体科室与实体医生间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 10 有 3个关系 R、 S和 T如下:则由关系 R和S得到关系 T的操作是 ( )。 ( A)投影 ( B)选择 ( C)交 ( D)差 11 以下叙述错误的是 ( )。 ( A)任何能通过编译和运行的算法都一定能得到所期望的结果 ( B)一个算法所包含的操作步骤应该是有限的
5、( C)算法中每一条指令必须有确切的含义 ( D)算法可以用各种描述方法来进行描述 12 若有定义语句: int x=10:则表达式 x一 =x+x的值为 ( )。 ( A) 10 ( B)一 20 ( C) 0 ( D)一 10 13 若有定义: double a=22; int i=0, k=18;则不符合 C语言规定的赋值语句是( )。 ( A) a=a+, i+; ( B) i=(a+k) int a, b, c; a=10; b=50; c=30; if(ab)a=b, b=c; c=a; prinff(“a= d b= d c= d n”, a, b, c); 程序的输出结果是 (
6、 )。 ( A) a=10 b=50 c=10 ( B) a=10 b=50 c=30 ( C) a=10 b=30 c=10 ( D) a=50 b=30 e=50 20 以下关于循环语句的叙述中正确的是 ( )。 ( A) dowhile 语句的循环体至少执行一次 ( B) while语句的循环体至少执行一次 ( C) for语句的循环体至少执行一次 ( D)上述 A、 B、 C说法均正确 21 有以下程序: #include main() int x, y=0, z=0, t; do seanf(“ d”, int i, a6=1, 2, 3, 4, 5, 6, k; fp=fopen(
7、”datA)dat”, “w+b”); fwrite(&a0, sizeof(int), 1, fp); 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) 57, 39 ( B) 57, 57 ( C) 9, 9 ( D) 39, 39 35 若要通过位运算使整型变量 a中的各位数字全部清零,以下选项正确的是( )。 ( A) a=a&0; ( B) a=a 1 0; ( C) a=a0; ( D) a=!a; 36 程序中若有
8、以下的说明定义和语句: #include #include struet STR char nHm10; int S; ; main() struet STR t, *p; P=&t: 则不能给变量 t的 s成员赋整数 99,给 num成员赋空串的语句组是 ( )。 ( A) (*P) s=99; (*p) Rum Rm “”; ( B) P一 s=99; P一 num0=0; ( C) (*p) s=99; P一 num0: 0; ( D) P一 s=99; strcpy(*p) num, “”); 37 有以下程序: #include int fun(int a) int b=2; sta
9、tic int c=2: b+: c一一; return(a+b+e); main() int k, a=2; for(k=0; k #include #include struct person char name10; int age; ; struct person group6= “zhang”, 18, “wang”, 20, “li, 19, “zhao”, 18, “liu 19 , *p; main() int i, flag=0; P=(struct person*)malloe(sizeof(struct person); gets(&p一 name); for(i=0;
10、iname, groupi name)=0) prinff(“ d n”, groupi age); flag=1: if(flag=0)prinff(“No find! n”); 程序有语法错误,出错的是 ( )。 ( A) gets( p一 name); ( B) P=(struct person*)malloe(sizeof(struct person) ( C) if(strcmp(P一 name, groupi name)=0) ( D) prinff(“ d n”, groupi age) 40 有以下程序: #include #include main() FILE=l=fo;
11、char ch, str5: if(fp=fopen(“file txt”, “wb+”)=NULL) prinff(“error! n”); exit(0); eh=getchar(); while(ch!=!) fputc(ch, f0); ch=getchar(); rewind(fp); do fgets(str, 4, f0); puts(str); while(!feof(fo); fclose(fp); 程序运行时输入: c: test!,则程序的输出结果是 ( )。 ( A) C: ( B) e: test te st ( C) e: tes ( D) e: t t est 二
12、、程序填空题 41 下列给定程序中,函数 fun的功能是:将形参 n中个位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。 例如,输入一个整数 27638496,函数返回值为 64862。 请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include unsigned long fun(unsigned long n) unsigned long x=0; int t; while(n) t=n 10; *found* if(t 2=1) *foun
13、d* x=2+t; *found* n=3; return x: main() unsigned long n=一 1; while(n99999999 n #include char*fun(char tt) int i; for(i=0; tti; i+) *found* if(a #include #de6ne N 8 struct slist double s; struct slist* next; ; typedef struct slist STREC; double fun(STREC*h) STREC*creat(double*s) STREC*h, *P, *q; int
14、i=0; h=P=(STREC*)malloc(sizeof(STREC); p一 s=0; while(is=si; i+; P一 next=q; P=q; P一 next=0: return h; oudist(STREC*h) STREC*p; P=h一 next; prinff(“head”); do prinff(“一 4 If”, P一 s); P=P一 next; while(P!=0); prinff(“ n n”); main() double sN=85, 76, 69, 85, 9l, 72, 64, 87, ave; void NONO(); STREC*h; h=cr
15、eat(s); outlist(h); ave=fun(h); prinff(“ave= 6 3f n”, ave); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE* in, * out; int i, j; double sN, ave; STREC*h: in=fopen(“in dat”, “r”); out=fopen(“out dat”, “w”); for(i=0; i”运算符引川结构体成员变量, main函数中声明结构体 STR变量 t,和结构体 STR指针 *p,并将 t的地址赋给 p,所以使用 p访问成员
16、变量时,使用 “一 ”运算符;使用 *p访问成员变量时,使用 “ ”运算符。另外,由于成员变量 num是字符数组,所以不能直接进行赋值,若要对 num赋空字符串值,可以把 num中第一个元素赋值为 0或 0,或者使用 strcpy复制函数将空字符串 “”复制到 num中,故选项 B、 c、 D正确,选项 A错误,因此答案为 A。 37 【正确答案】 C 【试题解析】 由于 main函数 for循环中 k的取值为 0, 1, 2,所以 for循环三次调用 fun()函数,每次调用函数 fun,形参 a的值为 2(实参 a传入 ),局部变量 b初始化为 2(fun函数中初始化 ),静态局部变量 c
17、保留上一次函数调用结束后的值,所以第一次调用 fun(),形参 a=2, b=2, c=2,然后执行 b自增 1, c自减 1,返回值为: 2+3+1=6;第二次调用 fun(),形参 a=2, b=2, c=1,然后执行 b自增 1, c自减 1,返回值为: 2+3+0=5;第三次调用 fun(),形参 a=2, b=2, c=0,然后执行b自增 1, c自减 1,返回值为: 2+3一 1=4,所以结果为: 654,答案为 C。 38 【正确答案】 A 【试题解析】 首先字符数组只有在初始化的时候整体赋值,否则只能对字符数组逐个赋值,所以选项 B错误;字符数组名 s1、 s2是常量,不能改变,故选项 C错误;字符串 “Program”包含结尾的 0,选项 D中在处理到 s2i= 0时,跳出循环,未将 0赋给 s1,所以选项 D也是错误的;由于 “Program”包含结尾的 0总共有 8个字符,所以选项 A是正确的,答案为 A。 39 【正确答案】 A 【试题解析】 语句 gets(&p一 name)中, gets的参数应该是成员变量 name数组的首地址,而 &p一 name是首先获取数组 name的首地址,然后再对首地址取地址符,所以这是错误的,正确参数应该是: gets(p一 name);,故答案选 A。 40 【正确答案】 A