1、国家二级( C语言)机试模拟试卷 38及答案与解析 一、选择题 1 在最坏情况下 ( A)快速排序的时间复杂度比冒泡排序的时间复杂度要小 ( B)快速排序的时间复杂度比希尔排序的时间复杂度要小 ( C)希尔排序的时间复杂度比直接插入排序的时间复杂度要小 ( D)快速排序的时间复杂度与希尔排序的时间复杂度是一样的 2 在深度为 7的满二叉树中,度为 2的结点个数为 ( A) 64 ( B) 63 ( C) 32 ( D) 31 3 设栈的顺序存储空间为 S(1: m),初始状态为 top=m+1。现经过一系列入栈与 退栈运算后, top=20,则当前栈中的元素个数为 ( A) 30 ( B) 2
2、0 ( C) m-19 ( D) m-20 4 算法空间复杂度的度量方法是 ( A)算法程序的长度 ( B)算法所处理的数据量 ( C)执行算法所需要的工作单元 ( D)执行算法所需要的存储空间 5 下面不属于软件开发阶段任务的是 ( A)测试 ( B)可行性研究 ( C)设计 ( D)实现 6 下面属于字符类的实例是 ( A) 518 ( B) 5 ( C) nm ( D) n 7 某系统结构图如下图所示 该系统结构 图的最大扇出数是 ( A) n ( B) 1 ( C) 3 ( D) 4 8 一个兴趣班可以招收多名学生,而一个学生可以参加多个兴趣班。则实体兴趣班和实体学生之间的联系是 (
3、A) 1:1联系 ( B) 1:m联系 ( C) m:1联系 ( D) m:n联系 9 有三个关系表 R、 S和 T如下,其中三个关系对应的关键字分别为 A, B和复合关键字( A, B)。 表 T的记录项( b,q,4)违反了 ( A)实体完整性约束 ( B)参照完整性约束 ( C)用户定义的完整性约束 ( D)关系完整性约束 10 在数据库系统中,给出数 据模型在计算机上物理结构表示的是 ( A)概念数据模型 ( B)逻辑数据模型 ( C)物理数据模型 ( D)关系数据模型 11 若有定义语句: int a=12;,则执行语句: a+= a-= a*a;后, a的值是 ( A) -264
4、( B) 552 ( C) 144 ( D) 264 12 若在程序中变量均已定义成 int类型,且已赋大于 1的值,则下列选项中能正确表示代数式 的表达式是 ( A) 1.0/a/b/c ( B) 1/(a*b*c) ( C) 1.0/a*b*c ( D) 1/a/b/(double)c 13 有以下程序 #include stdio.h main() int x=010, y=10; printf(“%d,%dn“, +x, y-); 程序运行后的输出结果是 ( A) 10,9 ( B) 11,10 ( C) 010,9 ( D) 9,10 14 以下选项中叙述正确的是 ( A) C语言的
5、标识符可分为关键字、预定义标识符和用户标识符三类 ( B) C语言的标识符可分为语句、变量和关键字三类 ( C) C语言的标识符可分为函数名、变量和预定义标识符三类 ( D) C语 言的标识符可分为运算符、用户标识符和关键字三类 15 以下选项中叙述正确的是 ( A)函数体必须由 开始 ( B) C程序必须由 main语句开始 ( C) C程序中的注释可以嵌套 ( D) C程序中的注释必须在一行完成 16 已知 a=5,b=6,c=7,d=8,m=2,n=2,执行 (m=a b) do printf(“%2dn“, x-); while( !x ); 程序的执行结果是 ( A)输出 321 (
6、 B)输出 23 ( C)不输出任何内容 ( D)陷入无限循环 18 有以下程序 #include stdio.h main() char c; while( ( c=getchar() )!= n ) switch( c-2 ) case 0 : case 1 : putchar( c+4 ); case 2 : putchar( c+4 ); break; case 3 : putchar( c+3 ); default : putchar( c+2 ); break; printf( “n“ ); 程序运行后从第一列开始输入以下数据 2473回车 程序的输出结果是 ( A) 668977
7、 ( B) 4444 ( C) 6677877 ( D) 68766 19 有以下程序 #include stdio.h main() int i=0, sum=1; do sum += i+ ; while( i 6 ); printf(“%d n“,sum); 程序的输出结果是 ( A) 22 ( B) 18 ( C) 20 ( D) 16 20 有以下程序段,若变量已正确定义并赋值 if(a b)printf(“x=%d,“, x); else printf(“y=%d,“, y); if(a =b)i+; else j+; 则与此程序段功能相同的选项是 ( A) if(a b)prin
8、tf(“x=%d,“, x);j+; else printf(“y=%d,“, y);i+; ( B) if(a b)printf(“x=%d,“, x);i+; else printf(“y=%d,“, y);j+; ( C) if(a =b)printf(“x=%d,“, x);i+; else printf(“y=%d,“, y);j+; ( D) if(a =b)printf(“x=%d,“, x);i+; else printf(“y=%d,“, y);j+; 21 以下程序的功能是判断输入的一个整数是否能被 3或 7整除,若能整除,输出YES,否则输出 NO。在下划线处应填入的选项
9、是 #include stdio.h main() int k; printf(“Enter a int number : “); scanf(“%d“, if _ printf(“YESn“); else printf(“NOn“); printf(“%dn“,k%3); ( A) ( (k%3=0) | (k%7=0) ) ( B) (k/3=0) | (k/7=0) ( C) ( (k%3=0) | (k%7=0) ) ( D) ( (k%3=0) *t=*p; *p=*q; *q=*t; main() int i=10,j=20, *a= swap(a,b); printf(“i=%d
10、 j= %dn“, i,j ); ( B) #include stdio.h void swap( int *p,int *q) int t; t=*p; *p=*q; *q=t; main() int i=10,j=20, *a= swap(a,b); printf(“i=%d j= %dn“, i,j ); ( C) #include stdio.h #include stdlib.h void swap( int *p,int *q) int *t; t=(int *)malloc(sizeof(int); *t=*p; *p=*q; *q=*t; free(t); main() int
11、 i=10,j=20; swap( printf(“i=%d j= %dn“, i,j ); ( D) #include stdio.h void swap( int *p,int *q) int t; t=*p; *p=*q; *q=t; main() int i=10,j=20 , *x= swap(x,y); printf(“i=%d j= %dn“, i,j ); 23 有以下程序 #include stdio.h main() int a10 = 1,3,5,7,11,13,17 , *p=a; printf(“%d,“, *( p+ ); printf(“%dn“, *( +p )
12、; 程序运行后的输出结果是 ( A) 3,7 ( B) 3,5 ( C) 1,5 ( D) 1,3 24 有以下程序 #include stdio.h main() int *p, x=100; p= x=*p+10; printf(“%dn“, x); 程序运行后的输出结果是 ( A) 110 ( B) 120 ( C) 100 ( D) 90 25 以下程序中给数组所有元素输入数据,请从选项中选择正确的答案填入下划线处 #include stdio.h main() int a10, i=0; while( i 10 ) scanf(“%d“, _ ); ( A) a+(i+) ( B)
13、main() int a, b, c; fun(10,5, fun(7,a, fun(a,b, printf(“%d,%d,%dn“, a,b,c ); 程序运行后的输出结果是 ( A) 5,2,3 ( B) -5,-12,-7 ( C) -5,-12,-17 ( D) 5,-2,-7 27 有以下程序 #include stdio.h void fun( int *s, int n1, int n2 ) int i,j,t; i=n1; j=n2; while( i j ) t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i+; j-; main() int a10 =
14、 1,2,3,4,5,6,7,8,9,0 ,i, *p = a; fun( p,0,3 ); fun( p,4,9 ); fun( p,0,9 ); for( i=0; i 10; i+ )printf(“%d “, *( a+i ) ); printf(“n“ ); 程序运行后的输出结果是 ( A) 5 6 7 8 9 0 1 2 3 4 ( B) 0 9 8 7 6 5 4 3 2 1 ( C) 4 3 2 1 0 9 8 7 6 5 ( D) 0 9 8 7 6 5 1 2 3 4 28 若有定义语句: char str1=“string“,str28,*str3, str410=“st
15、ring“;,库函数strcpy的功能是复制字符串,以下选项中错误的函数调用是 ( A) strcpy(str3, “HELLO!“) ( B) strcpy(str2, “HELLO!“) ( C) strcpy(str1, “HELLO!“) ( D) strcpy(str4, “HELLO!“) 29 当没有指定 C语言中函数形参的存储类别时,函数形参的存储类别是 ( A)外部( extern) ( B)静态 (static) ( C)寄存器 (register) ( D)自动 (auto) 30 以下语句的 输出结果是 printf(“%dn“, strlen(“t“065xffn“)
16、; ( A) 5 ( B) 8 ( C) 14 ( D)输出项不合法,无正常输出 31 若有说明和语句: char str=“Hello“, *p; p=str;,则此时 *(p+5)中的值为 ( A) 0 ( B) o ( C) o的地址 ( D)不确定的值 32 有以下程序 #include stdio.h #include string.h main() char s=“Beijing“; printf(“%dn“, strlen(strcpy( s,“China“) ); 程序运行后的输出结果是 ( A) 5 ( B) 7 ( C) 12 ( D) 14 33 有以下函数 int fu
17、n( char *s, char *t ) while( *s ) return (*s-*t); 函数的功能是 ( A)求字符串的长度 ( B)比较两个字符串的大小 ( C)将字符串 s复制到字符串 t中 ( D)连接字符串 s和字符串 t 34 以下叙述正确的是 ( A) EOF只能作为文本文件的结束标志,其值为 -1 ( B) EOF可以作为所有文件的结束标志 ( C) EOF只能作为二进制文件的结束标志 ( D)任何文件都不能用 EOF作为文件的结束标志 35 以下叙述正确的是 ( A)在 C语言中调用 fopen函数就可把程序中要读、写的文件与磁盘上实际的数据文件联系起来 ( B)
18、fopen函数的调用形式为: fopen(文件名 ) ( C) fopen函数的返回值为 NULL时,则成功打开指定的文件 ( D) fopen函数的返回值必须赋给一个任意类型的指针变量 36 以下不能对文件进行输出的库函数是 ( A) fwrite ( B) fputc ( C) fpout ( D) fprintf 37 有以下程序 #include stdio.h #define N 2 #define M N+1 #define MUN (M+1)*M/2 main() printf( “%dn“, MUN ); 程序运行后的输出结果是 ( A) 8 ( B) 9 ( C) 5 ( D
19、) 6 38 有 以下程序 #include stdio.h struct link int data; struct link* next; ; main() struct link *h,a ,b; h= a.data=10; a.next= b.data=20; 程序运行时不能输出 10,20的语句是 ( A) printf(“%d,%d n“,h- data,a.next.data); ( B) printf(“%d,%d n“,a.data,(*a.next).data); ( C) printf(“%d,%d n“,h- data,(*a.next).data); ( D) pri
20、ntf(“%d,%d n“,a.data,a.next- data); 39 有以下程序 #include stdio.h main() int a=3 ,b=3; printf(“%d n“,a 程序运行后的输出结果是 ( A) 6 ( B) 1 ( C) 0 ( D) 3 40 有以下程序段 FILE *fp; if( (fp=fopen(“test.txt“, “w“) = NULL) printf(“不能打开文件! “); exit(0); else printf(“成功打开文件! “); 若指定文件 test.txt不存在,且无其他异常,则以下叙述错误的是 ( A)输出 “不能打开文
21、件! “ ( B)输出 “成功打开文件! “ ( C)系统将按指定文件名 新建文件 ( D)系统将为写操作建立文本文件 二、程序填空题 41 下列给定程序中,函数 fun的功能是:将形参 a所指数组中的前半部分元素中的值与后半部分元素中的值对换。形参 n中存放数组中数据的个数,若 n为奇数,则中间的元素不动。 例如,若 a所指数组中的数据为: 1, 2, 3, 4, 5, 6, 7, 8, 9,则调换后为:6, 7, 8, 9, 5, 1, 2, 3, 4。 请在程序的下画线处填入正确的内容并将下画线删除使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程 序的结构
22、 ! 试题程序: #include stdio h #define N 9 void fun(int a, int n) int i, t, P; /*found*/ P=(n 2=0)?n 2: n 2+【 1】 ; for(i=0; i n 2; i+) t=ai; /*found*/ ai=aP+【 2】 ; /*found*/ 【 3】 =t, main() int bN=1, 2, 3, 4, 5, 6, 7, 8, 9), i; printf(“nThe original data: n”); for(i=0, i N; i+) printf(“ 4d”, bi); printf(
23、“ n”); fun(b, N), printf(“ nThe data after moving: n”); for(i=0; i N; i+) printf(“ 4d”, bi), printf(“n”); 三、程序修改题 42 下列给定程序中函数 fun的功能是:从低位开始依次取出长整型变量 s中偶数位上的数,构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 s中的数为 7654321时, t中的数为 642。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 mmn函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #
24、include stdio h #include conio h /*found*/ void fun(long s, long t) long s1=10; s =10; *t=s 10; /*found*/ while(s 0) s=s 100; *t=s 10*s1+* t; s1=s1*10; voidmain() long s, t, system(“CLS”); printf(“ nPlease enter s: ”), scanf(“ ld”, s); fun(s, t); printf(“The result is: ld n”, t); 四、程序设计题 43 编写函数 fun
25、,其功能是:比较字符串的长度,不得使用 C语言提供的求字符串长度的函数,函数返回较长的字符串。若两个字符长度相同,则返回第一个字符串。 例如,输入 “beijing” CR “shanghai” CR ( CR为 Enter键 ),函数将返回“shanghai”。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h char*fun(char*s, char*t) voidmain() char a20, b20, printf(“Input 1 th string: ”);
26、 gets(a); printf(“Input 2th string: ”); gets(b); printf(“ s”, fun(a, b); 国家二级( C语言)机试模拟试卷 38答案与解析 一、选择题 1 【正确答案】 C 2 【正确答案】 B 【试题解析】 在树结构中,一个节点所拥有的后件个数称为该节点的度。深度,定义一棵树的根节点所在的层次为,其他节点所在的层次等于它的父节点所在的层次加,树的最大层次称为树的深度。满二叉树指除最后一层外,每一层上的所有节点都有两个子节点的二叉树。一棵深度为 K的满二叉树,整棵二叉树共有 2k-1个节点;满二叉树在其第 i层 上有 2i-1个节点。在满
27、二叉树中,只有度为 2和度为 0的节点。深度为 7的满二叉树,节点个数为 27-1=127,第七层叶节点个数为 27-1=64,则 127-64=63, B选项正确。 3 【正确答案】 C 【试题解析】 栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。栈为空时,栈顶指针 top=0,经过入栈和退栈运算,指针始终指向栈顶元素。初始状态为 top=m+1,当 top=20时,元素依次存储在单元 20: m中,个 数为 m-19, C选项正确。 4 【正确答案】 D 【试题解析】 算法的空间复杂度是指执行这个算
28、法所需要的内存空间,。算法执行期间所需的存储空间包括 3个部分:输入数据所占的存储空间;程序本身所占的存储空间;算法执行过程中所需要的额外空间。 D选项正确。 5 【正确答案】 B 【试题解析】 软件生命周期分为 3个时期共 8个阶段:软件定义期,包括问题定义、可行性研究、需求分析;软件开发期,包括概要设计、详细设计、实现、测试;运行维护期,即运行维护阶段。可行性研究属于软件定义期任务, B选项错误。 6 【正确答案】 D 【试题解析】 字符实例的一般形式是用一对单引号括起来的一个字符。另外ASCII码中还有一些控制字符, C语言中用转义字符的形式来书写这些常,转义字符一反斜杠( )开始,后面
29、跟 1个字符或字符序列。 518单引号中有三个字符, A选项错误。 “5“双引号为字符串, B选项错误。 nm单引号中有两个字符,C选项错误。 n为换行符,属于字符类实例, D选项正确。 7 【正确答案】 A 【试题解析】 扇出指的是由一个模块直接调用的其他模块数。题干中某系统为一个模块,其扇出数目为 n(n 3),功能 1与功能 n模块扇出数均为 2,故 A选项正确。 8 【正确答案】 D 【试题解析】 一般来说,实体集之间必须通过联系来建立联接关系,分为 3类:一对一联系( 1:1)、一对多联系( 1:m)、多对多联系( m:n)。多个兴趣班与多个学生的关系为 m:n联系, D选项正确。
30、9 【正确答案】 B 【试题解析】 关系模型中可以有 3类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指,若属性是关系的主键,则属性中的属性值不能为空值。 T中主键不为空, A选项错 误。参照完整性约束是指,若属性(或属性组) A是关系 M的外键,它与关系 M的主码相对应,则对于关系 M中的每个元组在 A上的值必须为:要么取空值;要么等于关系 M中某个元组的主码值。属性 B为关系 S的外键,它与关系 S的主键相对应,则 T中元组在 B上应该为空或者与 S中主键值相等,题目中不相等,违反参照完整性约束, B选项正确。此题关系中无语义要求, C选项错误。 10
31、 【正确答案】 C 【试题解析】 数据模型按照不同的应用层次分为以下 3种类型:概念数据模型,重于对客观世界复杂事物的描述及对它们内在联系的刻画;逻辑数据 模型,是面向数据库系统的模型,着重于在数据库系统一级的实现;物理数据模型,是面向计算机物理实现的模型,此模型给出了数据模型在计算机上物理结构的表示。 C选项正确。 11 【正确答案】 A 【试题解析】 赋值运算结合性为自右向左, a+=a-=a*a相当于 a=a-a*a,a=a+a;自右向左计算过程为 a=a-a*a=-132, a=a+a=-264, A选项正确。 12 【正确答案】 A 【试题解析】 由于 abc均大于 1,所以表达式
32、1/abc小于 1,需要用浮点类型表示。若要计算表达式值,需要使其自 动转化成浮点类型,所以 A选项正确。 B选项由于变量与常量均为整型,不会自动转换为浮点类型, B选项错误。 C选项表示表达式 bc/a,故错误。 D选项,由于算数运算法结合性自左向右,先计算 1/a,结果为 0,之后的计算无论是否转换数据类型结果均为 0, D选项错误。 13 【正确答案】 D 【试题解析】 整型常量有种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法,八进制整常量以 O作为前缀。自增和自减运算符的两种用法:前置运算,运算符放在变量之前,规则是先使变量的值增(或减) 1,然后以变化后表达 式的
33、值参与其他运算 ;后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)。 x=010=8,y=10, +x先自加后取值,输出 9, y-先取值输出 10,再自减 y=9, D选项正确。 14 【正确答案】 A 【试题解析】 标识符就是一个名称,用来表示变量、常量、函数以及文件等名称。 C语言的标识符可分为关键字、预定义标识符和用户标识符三类, A选项正确 ,B、 C、 D选项错误。合法的标识符由字母、数字和下划线组成,并且必须以字母或下划线开头。用户标识符为用户根据编程需求自定义的标 识符。关键字是指被语言保留的,不能用作其他用途的一些标识符,它们在程序中都代表着
34、固定的含义,用户不可重新定义。预定义标识符是系统已经有过定义的标识符,用户可以重新定义。 15 【正确答案】 A 【试题解析】 函数体是函数首部下面的花括号内的部分,所以函数体必须由 开始, A选项正确。一个源程序文件可以包括预处理命令、全局声明、函数定义,程序总是从 main函数开始执行的,不是 main语句, B选项错误。 C程序中的允许两种注释,以 /开头的单行注释;以 /*开始,以 */结束的块式注释, D选项错误。函数可以 嵌套,注释不能嵌套, C选项错误。 16 【正确答案】 C 【试题解析】 =优先级低于 “ “ “。 “相当于 sum += i;i+;程序执行过程为:sum=1
35、, i=1; sum=2, i=2; sum=4, i=3; sum=7, i=4; sum=11, i=5; sum=16,i=6;退出循环。 D选项正确。 20 【正确答案】 A 【试题解析】 题目中程序段执行过程为:如果 a b,输出 x,否则输出 y;如果a =b, i加 1,否则 j加 1。 A选项为:如果 a b,输出 x且 j加 1,否则输出 y且 i加 1,与题目中功能相同, A选项正确 。 B选项为:如果 a b,输出 x且 i加1,否则输出 y且 j加 1,与题目中功能不相同, B选项错误。 C选项为:如果 a=b,输出 x且 i加 1,否则输出 y且 j加 1,与题目中功
36、能不相同, C选项错误。 D选项判断条件为 a =b,多了 a=b,故 D选项错误。 21 【正确答案】 A 【试题解析】 求余运算符为 %,是否能被 3或 7整除表达式为 (k%3=0)|(k%7=0), A选项正确。 B选项 “/“为除号,错误。 C选项中 “=“为赋值运算符,不是逻辑运算符 “=“,错误。 D选项 “ j+); if(i =j) *比较两个字符串的长度 * return t; *函数返回较长的字符串,若两个字符串长度相等,则返回第 1个字符串 * else return S; 【试题解析】 本题中,第 1个 for循环的作用是求出 s串的字符个数 i,第 2个for循环的作用是求出 t串的字符个数 j。因为任何循环都要控制一条语句,所以在每一个 for循环语句后面加上一个分号以结束循环。