1、国家二级 C语言机试(选择题)模拟试卷 36及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)一个算法的空间复杂度大,则其时间复杂度也必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一个算法的时间复杂度大,则其空间复杂度必定小 ( D)算法的时间复杂度与空间复杂度没有直接关系 2 下列叙述中正确的是 ( A) 循环队列中的元素个数随队头指针与队尾指针的变化而动态变化 ( B)循环队列中的元素个数随队头指针的变化而动态变化 ( C)循环队列中的元素个数随队尾指针的变化而动态 变化 ( D)以上说法都不对 3 一棵二叉树中共有 80个叶子结点与 70个度为 1的结点,
2、则该二叉树中的总结点数为 ( A) 219 ( B) 229 ( C) 230 ( D) 231 4 对长度为 10的线性表进行冒泡排序,最坏情况下需要比较的次数为 ( A) 9 ( B) 10 ( C) 45 ( D) 90 5 构成计算机软件的是 ( A)源代码 ( B)程序和数据 ( C)程序和文档 ( D)程序、数据及相关文档 6 软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是 ( A)测 试 ( B)设计 ( C)可行性研究 ( D)实现 7 下面不能作为结构化方法软件需求分析工具的是 ( A)系统结构图 ( B)数据字典 (DD) ( C)数据流程图 (
3、DFD图 ) ( D)判定表 8 在关系模型中,每一个二维表称为一个 ( A)关系 ( B)属性 ( C)元组 ( D)主码(键) 9 若实体 A和 B是一对多的联系,实体 B和 C是一对一的联系,则实体 A和 C的联系是 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 10 有三个关系 R, S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( A)选择 ( B)差 ( C)交 ( D)并 11 以下叙述中正确的是 ( A) C语言程序所调用的函数必须放在 main函数的前面 ( B) C语言程序总是从最前面的函数开始执行 ( C) C语言程序中 main函数必须放在程
4、序的开始位置 ( D) C语言程序总是从 main函数开始执行 12 C语言程序中,运算对象必须是整型数的运算符是 ( A) sum = pad = 5; pAd = +sum, pAd+, +pad; printf(“%dn“, pad ); 程序的输出结果是 ( A) 5 ( B) 6 ( C) 7 ( D) 8 14 有以下程序 #include main() int a=3; a+=a-=a*a; printf( “%dn“, a ); 程序的输出结果是 ( A) 0 ( B) 9 ( C) 3 ( D) -12 15 sizeof( double )是 ( A)一个整型表达式 ( B
5、)一个双精度型表达式 ( C)一个不合法的表达式 ( D)一种函数调用 16 有以下程序 #include main() int a=2, c=5; printf( “a=%d,b=%dn“, a,c ); 程序的输出结果是 ( A) a=2,b=5 ( B) a=%2,b=%5 ( C) a=%d,b=%d ( D) a=%d,b=%d 17 若有定义语句: char a=82; 则变量 a ( A)说明不合法 ( B)包含 1个字符 ( C)包含 2个字符 ( D)包含 3个字符 18 有以下程序 #include main() char c1=A, c2=Y; printf( “%d,
6、%dn“, c1,c2 ); 程序的输出结果是 ( A)输出格式不合法,输出出错信息 ( B) 65,89 ( C) 65,90 ( D) A,Y 19 若变量已正确定义 for( x=0,y=0; ( y!=99 x+ ) 则以上 for循环 ( A)执行 3次 ( B)执行 4次 ( C)执行无限次 ( D)执行次数 不定 20 对于 while(!E) s; ,若要执行循环体 s,则 E的取值应为: ( A) E等于 1 ( B) E不等于 0 ( C) E不等于 1 ( D) E等于 0 21 有以下程序 #include main() int x; for( x=3; x 6; x+
7、 ) printf( (x%2 ) ? (“*%d“) :(“#%d“),x); printf(“n“); 程序的输出结果是 ( A) *3#4*5 ( B) #3*4#5 ( C) *3*4#5 ( D) *3#4#5 22 有以下程序 #include main() int a, b; for( a=1,b=1; a =100; a+ ) if(b=20) break; if(b % 3=1) b=b+3; continue; b=b-5; printf(“%dn“,a); 程序的输出结果是 ( A) 10 ( B) 9 ( C) 8 ( D) 7 23 有以下程序 #include vo
8、id fun( int x, int y, int *c, int *d ) *c = x+y;*d = x-y; main() int a=4, b=3, c=0, d=0; fun ( a, b, printf( “%d %dn“ , c, d ); 程序的输出结果是 ( A) 0 0 ( B) 4 3 ( C) 3 4 ( D) 7 1 24 有以下程序 #include void fun( int *p, int *q ) int t; t = *p;*p = *q;*q=t; *q = *p; main() int a=0, b=9; fun ( printf( “%d %dn“ ,
9、 a,b ); 程序的输出结果是 ( A) 9 0 ( B) 0 0 ( C) 9 9 ( D) 0 9 25 有以下程序 #include main() int a = 2,4,6,8,10 , x, *p, y=1; p = for( x=0; x main() int i, x33 = 1,2,3,4,5,6,7,8,9 ; for( i=0; i 3; i+ ) printf( “%d “, xi2-i ); printf( “n“ ); 程序的输出结果是 ( A) 1 5 0 ( B) 3 5 7 ( C) 1 4 7 ( D) 3 6 9 27 设有某函数的说明为 int* fun
10、c(int a10, int n); 则下列叙述中,正确的是 ( A)形参 a对应的实参只能是数组名 ( B)说明中的 a10写成 a或 *a效果完全一样 ( C) func的函数体中不能对 a进行移动指针(如 a+)的操作 ( D)只有指向 10个整数内存单元的指针,才能作为实参传给 a 28 有以下程序 #include char fun( char *c ) if ( *c =Z return *c; main() char s81, *p=s; gets( s ); while( *p ) *p =fun( p ); putchar( *p ); p+; printf( “n“); 若
11、运行时从键盘上输入 OPEN THE DOOR,程序的输出结果是 ( A) OPEN THE DOOR ( B) oPEN tHE dOOR ( C) open the door ( D) Open The Door 29 设有定义语句: char *aa2= “abcd“,“ABCD“; 则以下叙述正确的是 ( A) aa0存放了字符串 “abcd“的首地址 ( B) aa数组的两个元素只能存放含有 4个字符的一维数组的首地址 ( C) aa数组的值分别是字符串 “abcd“和 “ABCD“ ( D) aa是指针变量,它指向含有两个元素的字符型数组 30 有以下程序 #include int
12、 fun( char *s ) char *p=s; while (*p !=0 ) p+; return ( p-s ); main() printf( “%dn“, fun( “goodbey!“ ) ); 程序的输出结果是 ( A) 0 ( B) 6 ( C) 7 ( D) 8 31 有以下程序 #include int fun( int n ) int a; if( n=1 ) return 1; a = n + fun( n-1 ); return ( a ); main() printf( “%dn“, fun( 5 ) ); 程序的输 出结果是 ( A) 9 ( B) 14 (
13、C) 10 ( D) 15 32 有以下程序 #include int d=1; void fun( int p ) int d=5; d += p+; printf(“%d “, d ); main() int a=3; fun( a ); d += a+; printf(“%dn“,d); 程序的输出结果是 ( A) 8 4 ( B) 9 6 ( C) 9 4 ( D) 8 5 33 有以下程序 #include int fun(intA) int b=0; static int c=3; a =( c+,b+); return ( a ); main() int a = 2, i, k;
14、 for( i=0; i 2; i+ ) k = fun(a+); printf( “%dn“,k ); 程序的输出结果是 ( A) 4 ( B) 0 ( C) 1 ( D) 2 34 有以下程序 #include main() char c25= “6934“, “8254“ ,*p2 ; int i, j, s=0; for( i=0; i 2; i+ ) pi=ci; for( i=0; i 2; i+ ) for( j=0; pij0 j+=2 ) s = 10*s + pij - 0; printf( “%dn“ ,s ); 程序的输出结果是 ( A) 693825 ( B) 698
15、25 ( C) 63825 ( D) 6385 35 有以下程序 #include #define SQR(X) X*X main() int a=10, k=2, m=1; a /= SQR(k+m)/SQR(k+m); printf(“%dn“,a); 程序的输出结果是 ( A) 0 ( B) 1 ( C) 9 ( D) 10 36 有以下程序 #include main() char x=2, y=2, z; z=( y 1 ) printf( “%dn“,z ); 程序的输出结果 是 ( A) 1 ( B) 0 ( C) 4 ( D) 8 37 有以下程序 #include struc
16、t S int a;int b; ; main() struct S a, *p= a.a=99; printf( “%dn“ , _ ); 程序要求输出结构体中成员 a的数据,以下不能填入横线处的内容是 ( A) a.a ( B) *p.a ( C) p- a ( D) (*p).a 38 有以下程序 #include #include void fun( double *p1,double *p2,double *s) s = (double *)calloc( 1,sizeof(double) ); *s = *p1 + *( p2+1 ); main() double a2 = 1.1
17、, 2.2 , b2 = 10.0, 20.0 , *s=a; fun( a, b, s ); printf( “%5.2fn“, *s); 程序的输出结果是 ( A) 21.10 ( B) 11.10 ( C) 12.10 ( D) 1.10 39 若已建立以下链表结构,指针 p、 s分别指向如图所示结点 则不能将 s所指结点插入到链表末尾的语句组是 ( A) p=p- next; s - next=p; p- next=s; ( B) s - next=0; p=p- next; p- next=s; ( C) p=p- next; s - next=p- next; p- next=s;
18、 ( D) p=(*p).next; (*s ).next=(*p).next; (*p).next=s; 40 若 fp已定义为指向某文件的指针,且没有读到该文件的末尾,则 C语言函数feof(fp)的函数返回值是 ( A) EOF ( B)非 0 ( C) -1 ( D) 0 国家二级 C语言机试(选择题)模拟试卷 36答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为 D。 2 【正确答案】 A 【试题解析】 在循环队列中,用队尾指针 rear指
19、向队列中的队尾元素,用排头指针 front指向排头元素的前一个位置。因此,从排头指针 front指向的后一个位置直到队尾指针 rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数与队头指针和队尾指针的变化而变化, A正确。 3 【正确答案】 B 【试题解析】 二叉树中,度为 0的节点数等于度为 2的节点数加 1,即 n2=n0-1,叶子节点即度为 0,则 n2=79,总结点数为 n0+n1+n2=80+70+79=229,答案为B。 4 【正确答案】 C 【试题解析】 冒泡法是 在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换
20、的次数为9+8+7+6+5+4+3+2+1=45,选 C。 5 【正确答案】 D 【试题解析】 软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选 D。 6 【正确答案】 C 【试题解析】 开发阶段包括分析、设计和实施两类任务。其中分析、设计包括需求分析、总体设计和详细设计 3个阶段,实施则包括编码和测试两个阶段, C不属于开发阶段。 7 【正确答案】 A 【试题解 析】 结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。 8 【正确答案】 A 【试题解析】 关系模型采用二维表来表示,即每个二维表称为一个关系。 9 【正确答案】 B 【试题解析】
21、A和 B为一对多的联系,则对于 A中的每一个实体, B中有多个实体与之联系,而 B与 C为一对一联系,则对于 B中的每一个实体, C中之多有一个实体与之联系,则可推出对于 A中的每一个实体, C中有多个实体与联系,所以为一对多联系。 10 【正确答案】 D 【试题解析】 关系 T中的元素与关系 R和关 系 S中不同元素的总和,因此为并操作。 11 【正确答案】 D 【试题解析】 C语言所调用的函数可以放在调用它的函数前 ,也可以放在调用它的函数后 ,所以 A错误, C语言程序总是从 main函数开始执行 ,所以 B错误, main函数的位置可以放在开始 ,也可以放在中间 ,也可以放在最后 ,所
22、以 C错误。 12 【正确答案】 C 【试题解析】 %取余运算是二目运算符 ,且要求运算对象必须为整数 ,所以选 C。 13 【正确答案】 B 【试题解析】 C语言区分大小写 ,pad与 pAd是两个不同的变量,首先将 5赋 值给两个变量 ,由于赋值运算符的优先级高于逗号运算符 ,所以计算 pAd=+sum,此时pAd为 6,sum也为 6,然后计算 pAd+,pAd的值变为 7,+pad,pad的值变为 6,所以选择 B。 14 【正确答案】 D 【试题解析】 首先计算 a*a结果为 9,执行 a=a-9,a的值为 -6,然后执行 a+=a,即a=a+a=-6+(-6),所以值为 -12。
23、15 【正确答案】 A 【试题解析】 sizeof是 C语言中的一个操作符 (operator),不是函数调用 ,简单的说其作用就是返回一个对象或者 类型所占的内存字节数,所以选择 A。 16 【正确答案】 C 【试题解析】 C语言中用 “%“打印输出字符 “%“,所以 %d,输出为 %d两个普通字符 ,而不是格式控制符 “%d“的含义 ,所以打印结果为 C。 17 【正确答案】 A 【试题解析】 定义语句: char a=82;定义字符变量 a,但是赋初值时却给赋值字符常量,因此 A选项正确。 18 【正确答案】 B 【试题解析】 本题重点考察字符变量的相关知识。分别给字符型变量 a和 b分
24、别赋值为 A和 Y,即 A和 Y的 ASSCII码 ,因此输出结果为 65,89,因此 B选项正确。 19 【正确答案】 B 【试题解析】 本题重点考察 for语句的循环次数, for(x=0,y=0;(y!=99x+), y!=99含义为变量 x对 2求余,如果结果为真,则按照 “*%d“格式输出,否则按照 #%d输出。 因此 A选项正确。 22 【正确答案】 B 【试题解析】 首先注意 for循环的控制条件 当 b=20或者 a100则跳出 for循环 也即 b22时跳出循环,结束程序。所以 b从 1增加到 22,有( 22-1) /3=7,所以 a=1+7=8。 因此 B选项正确。 23
25、 【正确答案】 D 【试题解析】 主函数中首先初始化整型变量 a、 b、 c、 d分别为 4、 3、 0、 0。调用函数 fun,将实参传递给形参。在 fun函数内, *c=7、 *d=1。返回主函数,最后输出 7和 1。因此 D选项正确。 24 【正确答案】 C 【试题解析】 主函数中定义整型变量 a、 b,分别赋值 0和 9。将 a和 b的地址传递给指针变量 p和 q,函数 fun中将 a和 b的值互换后,又将 a的值赋给 b。返回主函数,最后输出 9和 9。因此 C选项正确。 25 【正确答案】 B 【试题解析】 本题通过语句 “p=后 d变为 4,所以答案为 A。 33 【正确答案】
26、B 【试题解析】 题目中 fun函数被执行了两次,两次执行后,都是返回了函数内部的 b值,所以答案为 0,即 B选项正确。 34 【正确答案】 D 【试题解 析】 本题的意图在于将 c中两个字符串的偶数位置的数字组成一个新数,找到的四个数字分别为 6、 3、 8、 5,组成的数为 6385,所以答案为 D选项。 35 【正确答案】 B 【试题解析】 本题考查宏定义,宏定义只是做个简单的替换,执行SQR(k+m)/SQR(k+m)=k+m*k+m/ k+m*k+m=15/2, a/= SQR(k+m)/SQR(k+m)的结果为 1,选项 B正确。 36 【正确答案】 B 【试题解析】 本题考查位
27、运算 1为 1,二者与一下为 0,所以 B选项 正确。 37 【正确答案】 B 【试题解析】 本题考查结构体变量的引用,题目中要求输出结构体中成员 a的数据, p为指针, *p为结构体变量,那么 *p.a可以表示为结构体中成员 a的数据。 38 【正确答案】 D 【试题解析】 本题考查把数组名作为函数参数,执行 fun函数后, s的值并没有发生变化,仍然是指向 a,所以输出结果为 1.10,选项 D正确。 39 【正确答案】 A 【试题解析】 本题考查向链表中插入节点, A选项语句错误,不能够实现在链表末尾插入。 40 【正确答案】 D 【试题解析】 本题考查文件的定位, feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符), eof函数值为非零值,否则为 0,所以选项 D正确。