1、国家二级( C语言)笔试模拟试卷 247 及答案与解析 1 对线性表进行二分法检索,其前提条件是 ( )。 ( A)线性表以顺序方式存储,并按关键码值排好序 ( B)线性表以顺序方式存储,并按关键码的检索频率排好序 ( C)线性表以链式方式存储,并按关键码值排好序 ( D)线性表以链式方式存储,并按关键码的检索频率排好序 2 下列说法正确的是 ( )。 ( A)在 C程序中, main()函数必须位于程序的最前面 ( B)在 C程序中,一条语句只能写一行而不能写多行 ( C) C程序是以行 为基本单位的 ( D) C语言本身没有输入输出语句 3 对长度为 n的线性表进行顺序查找,在最坏情况下需
2、要比较的次数为 ( )。 ( A) 125 ( B) n/2 ( C) n ( D) n+1 4 下述关于数据库系统的叙述中正确的是 _。 ( A)数据库系统减少了数据冗余 ( B)数据库系统避免了 切冗余 ( C)数据库系统中数据的 致性是指数据类型的 致 ( D)数据库系统比文件系统能管理更多的数据 5 视图设计 般有 3种设计次序,下列不属于视图设计的是 _。 ( A)自顶向下 ( B)由外向内 ( C)由内向外 ( D)自底向上 6 待排序的关键码序列为 (33,18,9,25,67,82,53,95,12,70) ,要按关键码值递增的顺序排序,采取以第一个关键码为基准元素的快速排序法
3、,第一趟排序后关键码 33被放到第 ( )个位置。 ( A) 3 ( B) 5 ( C) 7 ( D) 9 7 数据库设计的 4个阶段是:需求分析、概念设计、逻辑设计和 ( )。 ( A)编码设计 ( B)测试阶段 ( C)运行阶段 ( D)物理设计 8 SQL语言又称为 _。 ( A)结 构化定义语言 ( B)结构化控制语言 ( C)结构化查询语言 ( D)结构化操纵语言 9 下面描述中,不符合结构化程序计风格的是 _。 ( A)使用顺序、选择和重复 (循环 )三种基本控制结构表示程序的控制逻辑 ( B)自顶向下 ( C)注重提高程序的执行效率 ( D)限制使用 goto语句 10 算法的空
4、间复杂度是指 ( A)算法在执行过程中所需要的计算机存储空间 ( B)算法所处理的数据量 ( C)算法程序中的语句或指令条数 ( D)算法在执行过程中所需要的临时工作单元数 11 设有一联 合体变量定义如下: uniondata long a; float b; int c: char d; ; union data x: 执行下列语句后,正确的联合体变量 x的值是 ( )。 x a=111111; x b=2222; X c=2 1546; x d=R ( A) 111111 ( B) 2222 ( C) 2 1546 ( D) R 12 已知 char a; int b; float c;
5、 double d;则表达式 a-b+c-d结果为 ( )型。 ( A) double ( B) float ( C) int ( D) char 13 设一棵满二叉树共有 15个结点,则在该满二叉树中的叶子结点数为 ( )。 ( A) 7 ( B) 8 ( C) 9 ( D) 10 14 以下不正确的叙述是 ( A)在 C程序中,逗号运算符的优先级最低 ( B)在 C程序中, APH和 aph是两个不同的变量 ( C)若 a和 b类型相同,在计算了赋值表达式 a=b后 b中的值将放入 a中,而 b中的值不变 ( D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数
6、值 15 以下叙述中正确的是 ( )。 ( A)构成 C程序的基本单位是函数 ( B)可以在一个函数中定义另一个函数 ( C) main函数必须放在其他函数之前 ( D) C函数定义的格式是 K main() int a,b,c; sub(10,5,sub(7,a,sub(a,b, int i,j; i=sizeof(A) ; j=strlen(A) ; printf(“%d,%d“,i,j); ( A) 7,7 ( B) 7,6 ( C) 6,6 ( D) 6,7 26 若希望 下列的程序运行后输出 25,程序空白处的正确选项是 ( )。 main() int i,j 50,a 7,4,10
7、,5,8; for( ) j+ ai; primf(“%d,j-40); ( A) i 1;i 4;+i ( B) i 1;i 3;+i ( C) i 4;i 2;i- ( D) i 2;i 4;+i 27 数据处理的最小单位是 _。 ( A)数据 ( B)数据元素 ( C)数据项 ( D)数据结构 28 有以下程序 : #include stdio.h main() int a 10=1, 2, 3, 4, 5,6, 7, 8, 9, 10, *p= for(b =1;b =10;b+) if(a =8) break; if(a%2 = 1) a + =5;continue; a- =3;
8、printf( “% d n“ ,b);程序运行后的输出结果 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 30 有如下程序段: int *p,a=10,b=1; p= a= *p+b;执行该程序段后, a的值为( )。 ( A) 12 ( B) 11 ( C) 10 ( D)编译出错 31 有以下程序: void fun(int *a,int i,int j) int t; if(i j) t=ai;ai=aj;aj=t; i+; j-; fun(a,ij); main() int x=2,6,1,8,i; fun(x,0,3); for(i=0;i 4;i+) prin
9、tf(“%2d“,xi); printf(“n); 程序运行后的输出结果是 ( )。 ( A) 1 2 6 8 ( B) 8 6 2 1 ( C) 8 1 6 2 ( D) 8 6 1 2 32 若有以下定义和语句,则下列选项中对 w数组元素非法引用的是 _。 int w2 3, (*pw) 3; pw=w; ( A) w0+2 ( B) *(pw+1)2 ( C) pw00 ( D) *(pw1+2) 33 以下程序的输出结果是 _。 main() int num=0; while(num =2) num+; printf(“%dn“,num); ( A) 1 2 3 4 ( B) 1 2
10、3 ( C) 1 2 ( D) 1 34 下面程序的输出结果为 _。 #include string.h main() char p17=“abc“,p2=“ABC“,str50=“xyz“; strcpy(str,strcat(p1,p2); printf(“%s“,str); ( A) xyzabcABC ( B) abcABC ( C) xyzabc ( D) xyzABC 35 设有如下定义: struct ss char name10; int age; char sex; std3,*p=std; 下面各输入语句中错误的是 ( )。 ( A) scanf(“%d“, ( C) sc
11、anf(“%c“, 36 以下对结构体类型变量 td的定义中,错误的是 ( A) typedef struct aa int n; float m; AA; AA td; ( B) struct aa int n; float m; td; struct aa td; ( C) struct int n; float m; aa; struct aa td; ( D) struct int n; float m; td; 37 有以下程序 main() int i=0, s=0; for(;) if(i=3i=5) continue; if(i=6) break; i+; s+=i; ; pr
12、intf(“%dn“,s); 程序运行后的输出结果是 ( A) 10 ( B) 13 ( C) 24 ( D)程序进入死循环 38 若有以下说明和语句: struct stint n; char * ch;; struct st a3=5,“abc“, 7, “def“,9, “ghk“, *p=a; 则值为 6的表达式是 _。 ( A) p+- n ( B) p- n+ ( C) (*p).n+ ( D) +p- n 39 有如下程序 main() int i,sum; for(i=1; i =3; sum+)sum+=i; printf(“%dn“,sum); 该程序的执行结果是 _。 (
13、 A) 6 ( B) 3 ( C)死循环 ( D) 0 40 有以下程序: #include string.h void f(char *s,char *t) char k; k=*s; +s=*t; *t=k; S+; t-; if(*s) f(s, t); main() char.str10=“abcdefg“, *p; p=str+strlen(str) /2+1; f(p, p-2); printf(“%sn“, str); 程序运行后的输出结果是 _。 ( A) abcdefg ( B) gfedcba ( C) gbcdefa ( D) abedcfg 41 若有定义: char
14、*x=“abcdefghi“;,以下选项中正确运用了 strcpy函数的是_。 ( A) char y10; strcpy(y,x4); ( B) char y10; strcpy( y, ( C) char y10,*s; strcpy(s=y 5,x); ( D) char y10,*s; strcpy(s=y 1,x 1); 42 最简单的交换排序方法是 _。 43 关系数据库管理系统能实现的专门关系运算包括选择、连接和【 】。 44 在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种;前序遍历、【 】遍历和后序遍历。 45 结构化程序设计的三种基本逻辑结构为顺 序、选择
15、和【 】。 46 结构化设计主要分为系统设计和模块设计,【 】的任务是决定系统的模块结构。 47 下列程序的输出结果是 _。 #include stdio.h main() int a=2,b=- 1,c=2; if(a b) if(b 0) c=0; else c+; printf(“%dn“,c); 48 以下程序运行后的输出结果是【 】。 main() char c; int n=100; float f=10; double x; x=f* =n/=(c=50); printf(“%d %fn“,n,x); 49 下面程序的输出是 ( )。 main() int arr8,i,k=0;
16、 for(i=0;i 8;i+) arri=i; for(i=1;i 5;i+) k+=arri+i; printf(“%dn“,k); 50 程序测试分为静态测试和动态测试。其中 ( )是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。 51 以下程序运行后的输出结果是【 】。 #include stdio.h main() int a=1,b=3,c=5; if (c=a+b) printf(“yesn“); else printf(“non“); 52 以下程序的输出结果是 _。 main() char s=“abcdef“; s3=0; printf(“
17、%sn“, s); 53 以下程序的输出结果是 _。 #define MCRA (m) 2*m #define MCRB (n,m) 2*MCRA (n)+m main() int i-2,j=3; printf(“%dn“,MCRB(j,MCRA(i); 54 下列程序的输出结果是【 】。 void fun(int *n) while(*n)-); printf(“%d“, +(*n); main() int a=100; fun(通过键盘可以向计算机输入允许的任何类型的数据。选项 D)中当从键盘输入数据时 ,对于整型变量可以输入整型数值和字符 ,对于实型变量可以输入实型数值和整型数值等。
18、15 【正确答案】 A 【试题解析】 构成 C程序的基本单位是函数, A) 正确;函数的定义是互相平行、独立的,一个函数内不能定义另一个函数, B) 错误; main 函数可以在其他函数之前定义,也可以在其他函数之后定义, C) 错误; C函数定义的一般格式分为传 统格式和现代格式,传统格式也称 Ka=*p+b表达式的含义是指针变量 p 所指内存的值 10与 b 的和赋给 a。 31 【正确答案】 C 【试题解析】 函数 fun()中用了 个 if 语句,当数组下标 i小于数组下标 j时,交换数组元素 ai和 aj的值,并使 i值加 1, j值减 1。其功能就是把数组 a中从下标 i到 j的元
19、素首尾互换。主函数中定义一个数组,在定义该数组的时候缺省了定义长度,定义的同时将其初始化赋值,所以该数组的长度为初始化该数组时的元素的个数即 4,接着调用 fun(a,0,3),其中将 a数组的第一个元素的下标 0和最后一个元素的下标 3传给了函数 fun(),故执行完该函数后,数组 a中的元素首尾互换,因此最后依次输出的数组 a中值为 8, 1, 6和 2,所以, 4 个选项中选项 C符合题意。 32 【正确答案】 B 33 【正确答案】 B 【试题解析】 while的执行过程是:先计算条件表达式的值,若成立则执行循环体,重复上述过程,直到条件表达式的值为 “假 ” (值为零 )时,退出循环
20、,并转下语句去执行。本题在输出 num的值为 3之后,再判断 while的循环条件 3=2,不成立,所以不再输出 num的值,故本题的答案选 B。 34 【正确答案】 B 【试题解析】 strcpy(str1, s1):作用是将字符串 s1拷贝到字符数组 str1中去。strcat(字符数组 1,字符数组 2):把字 符串 2接到字符串 1的后面,结果放在字符数组 1中,函数调用后返回字符数组 1的地址。本题定义了三个字符数组p1,p2,str, strcat(p1,p2)函数的作用是将字符串数组 p2接到字符串 p1的后面,结果放在字符数组 p1,再通过 strcpy()函数将该字符串拷贝到
21、 str数组中,原 str数组中的字符串 xyz被覆盖,因此打印输出字符串 str即可得到 abcABC。 35 【正确答案】 B 【试题解析】 选项 A中 ”用于将指针变量 p指向 e字符所在的存储单元, p-2指向了 c字符所在的存储单元,在函数 f中将这两个存 储单元的内容交换,并使得 f 函数中指向 c字符的指针变量 s加 1。指向 c字符的指针变量 t减 1,然后继续将 s和 t指向的存储单元的内容进行交换,直到 s指向的存储单元的内容为空为止。所以本题程序输出的结果是字符串“abcdefg”的倒序形式 “gfedcba”。 41 【正确答案】 D 【试题解析】 选项 A中 x4是取
22、字符 e,也就是将字符复制到 y中, strcpy实现的是地址的复制所以选项 A错误;选项 B 中 y是错误的,不允许对常量进行自加运算 (y 是 个确定的地址值 ),所以选项 B 错误;选项 C指针变量 s指向了 y向 后的第 5位,则存放 x时会出现越界问题,所以选项 C错误;选项 D中,指针变量 s指向了 y向后的第 位,此时 s可存放数据的长度为 9,而地址 “x 1”起的字符串的地址长度也刚好为 9(包括 “0”),所以开始复制不会出现地址越界问题,故选项 D正确。 42 【正确答案】 冒泡排序 【试题解析】 交换排序是指借助数据元素之间的互相交换进行排序的一种方法。冒泡排序是一种最
23、简单的交换排序方法,它是通过相邻元素之间的相互交换逐步将线性表变成有序。 43 【正确答案】 投影 【试题解析】 专门关系运算包括对单个 关系进行垂直分解 (投影操作 )或水平分解(选择操作 )和对多个关系的结合 (连接操作 )等。 44 【正确答案】 中序 【试题解析】 在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、中序遍历和后序遍历前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。中序遍历指在访问根结点、遍历左了树与遍历右子树这三者
24、中,首先遍历左子树,然后访问根结点,最后遍历右子 树:并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。后序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历右子树,然后访问根结点,最后遍历左子树;并且遍历左、右子树时,仍然光遍历右子树,然后访问根结点,最后遍历左子树。 45 【正确答案】 重复 (或循环 ) 46 【正确答案】 系统设计 【试题解析】 结构化设计主要分为系统设计和模块设计。系统设计决定系统的模块结构,模块设计具体考虑每个模块内部的算法、模块输入、输出及模块功能。 47 【正确答案】 2 【试题解析】 分析程序, a=2, b=-1, c=2时,
25、 if 语句的表达式 a b 不成立,不再往下判断,直接退出 if语句,执行后面的输出语句,程序结束。在这个程序中a、 b、 c的值没做任何改变。 48 【正确答案】 2 20.000000 【试题解析】 注意区分运算符的优先级。先是给 c赋值,然后计算 x f*=n/=50,得 x=f*=2,最后有 x=20。 x输出是按浮点数的形式输出的,小数点后的 0不能少。 49 【正确答案】 20 50 【正确答案】 静态测试 51 【正确答案】 yes 【试 题解析】 程序 if语句中是赋值表达式,而不是相等 “=”运算。因为 c=a+b中 a+b 的值为 4,赋给 c, c=4,表达式为真,输出
26、 yes。 52 【正确答案】 abc 【试题解析】 字符串的结束标记 0,当输出一个存放在字符数组中的字符串时,只需输出到 0为止,而不管其后有什么数据。本题给字符数组 s的元素 s3赋值为 0,故只能输出 3个字符 “abc”。 53 【正确答案】 16 【试题解析】 首先将程序中宏替换掉,先把 “MCRA(i)”替换成 “2*i”,然后把“MCRA(j, 2*i)”替换成 “2*2*j+2*i”,经计算该表达式的值为 16,所以最后输出为16。 54 【正确答案】 0 【试题解析】 在函数 fun()中, while(*n)-)是先引用 *n 的值,再做 (*n)-运算,所以循环结束时
27、*n 的值为 0,再做 (*n)-运算后, *n 的值为 -1;执行 +(*n)后, *n的值是 0。 55 【正确答案】 2.0。 【试题解析】 x和 y为整数,运算符 “/”在这里是整型除,整除后值为 0。 56 【正确答案】 -3 【试题解析】 该运算符是求两个数相除的 余数,其结果与被除数的符号一致,本题中 “-19%4”的值为 “-3”,所以说空格处应该填 -3。 57 【正确答案】 8 【试题解析】 二维数组可以看成是按矩阵形式排列的,题目中给二维数组赋初值是按行分段赋值的, a44可以分解为 4个一维数组,其数组名分别为 a0、a1、 a2、 a3,这 4个一维数组都有, 4个元素, a0的元素为 a00、a01、 aO2、 a03。