1、国家二级( C语言)笔试模拟试卷 66及答案与解析 1 设有栈 S和队列 Q,其初始状态为空,元素 a1、 a2、 a3、 a4、 a5、 a6依次入栈,出栈的元素进入队列 Q,若 6个元素出队列的顺序是 a2、 a4、 a3、 a6、 a5、a1,则栈的容量至少是 _。 ( A) 6 ( B) 4 ( C) 3 ( D) 2 2 一个存储结点存放一个 _。 ( A)数据项 ( B)数据元素 ( C)数据结构 ( D)数据类型 3 在数据结构中,从逻辑结构上看可以分成 _。 ( A)动态结构和静态结构 ( B)线 性结构和非线性结构 ( C)内部结构和外部结构 ( D)紧凑结构和非紧凑结构 4
2、 若待排序序列中元素非常多,而且它们的排列是完全无序的,那么最好选用下列排序方法中的 _。 ( A)冒泡排序 ( B)简单选择排序 ( C)直接插入排序 ( D)快速排序 5 软件文档不仅是软件开发各阶段的重要依据,而且也影响软件的 _。 ( A)可维护性 ( B)可移植性 ( C)可扩展性 ( D)可用性 6 设有系和学生 2个实体集,一个学生只能在一个系里注册,而一个系有很多学生。系和学生的关系是 _。 ( A)多对多联系 ( B)多对一联系 ( C)一对多联系 ( D)一对一联系 7 下列程序的输出结果是 _。 main() int n; (n=6*4, n+6), n*2; print
3、f(“n=%dn“, n); ( A) 22 ( B) 23 ( C) 24 ( D) 25 8 下列描述中,错误的一条是 _。 ( A) C语言中,二维数组或多维数组的排列顺序是按行存放的 ( B)赋值表达式 b12=a23/2*a00是正确的 ( C)表达式 3=4 2!=5 2的值为 0 ( D)数组名后的方括弧内可以为常量表达式,也可以为变量 9 下列程序 (注意: ch0在低字节, ch1在高字节 )的输出结果是 _。 #include stdio.h union pw int i; char ch2; a; main () a.ch0=13; a.ch1=0; printf(“%d
4、n“, a i); ( A) 13 ( B) 14 ( C) 208 ( D) 209 10 下列程序的输出结果是 _。 #include stdio.h main() int i, j, k, a=3,b=2; i=(-a=b+)?-a; +b; j=a+; k=b; printf(“i=%d, j=%d, k=%dn“,i, j, k); ( A) i=2, j=1, k=3 ( B) i=1, j=1, k=2 ( C) i=4, j=2,k=4 ( D) i=1, j=1, k=3 11 设有如下的变量定义,以下符合 C语言语法的表达式是 _。 int i=8, k,a, b; uns
5、igned long w=5; double x=1, 42, y=5.2; ( A) a+=a-=(b=4)*(a=3); ( B) x%(-3); ( C) a=a*3=2; ( D) y=float(i); 12 设语句 int a=3;,当执行了以下语句后,变量 a的值是 _。 a+=a-=a*a; ( A) 3 ( B) 0 ( C) 9 ( D) -12 13 C语言中运算对象必须是整型的运算符是 _。 ( A) %= ( B) / ( C) = ( D) = 14 若 a为 int类型,且其值为 3,则执行完表达式 a+=a-=a*a后, a的值是_。 ( A) -3 ( B)
6、9 ( C) -12 ( D) 6 15 下列程序的运行结果为 _。 main() int n; for (n=1; n =10; n+) if(n%3=0) continue; printf(“%d“, n); ( A) 12457810 ( B) 369 ( C) 12 ( D) 12345678910 16 用语句 scanf(“%c%c%c“, ,则 x数组的行数为 _。 ( A) 2 ( B) 3 ( C) 4 ( D)无确定值 24 以下能正确进行字符串赋值操作的是 _。 ( A) char *sss;*sss=“hello!“; ( B) char *sss;sss=“hello
7、!“; ( C) char sss8;sss=“hello!“; ( D) char sss8;*sss=“hello!“; 25 若调用一个函数,且此函数中没有 return语句,则以下正确的说法是 _。 ( A)该函数没有返回值 ( B)该函数返回若干个系统默认值 ( C)该函数能返回一个用户所希望的函数值 ( D)该函数返回一个不确定的值 26 若定义 static int a22=1,2,3,4,则 a数组的各数组元素分别为 _。 ( A) a00=1,a01=2,a10=3,a11=4 ( B) a00=1,at01=3,a10=2,a11=4 ( C) a00=4,a01=3,a1
8、0=2,a11=1 ( D) a00=4,a01=2,a10=3,a11=1 27 下列语句中,不正确的是 _。 ( A) static char a=“Jack“; ( B) static char a=“Jack“; ( C) printf(“%s“,a0); ( D) scanf(“%s“,a); 28 给出以下定义: char x=“abcdefg“; char y=a,b,c,d,e,f,g;则正确的叙述为 _。 ( A)数组 x和数组 y等价 ( B)数组 x和数组 y的长度相同 ( C)数组 x的长度大于数组 y的长度 ( D)数组 x的长度小于数组 y的长度 29 已知 p为指
9、针变量, a为数组名, i为整型变量,下列语句中,不正确的是_。 ( A) p= ( B) p=a; ( C) p= ( D) p=10; 30 在 C程序中,可把整型数以二进制形式存放到文件中的函数是 _。 ( A) fprintf 函数 ( B) fread 函数 ( C) fwrite 函数 ( D) fputc 函数 31 以下程序段运行时 _。 char x10,y=“China“; x=y; printf(“%s“,x); ( A)将输出 China ( B)将输出 Ch ( C)将输出 Chi ( D)编译出错 32 下列程序段的输出结果是 _。 void fun(int *x,
10、int *y) printf(“%d %d“,*x,*y);*x=3;*y=4; main() int x=1,y=2; fun( printf(“%d %d“,x,y); ( A) 2 1 4 3 ( B) 1 2 1 2 ( C) 1 2 3 4 ( D) 2 1 1 2 33 以下叙述中不正确的是 _。 ( A) C程序中的预处理命令行都以 #号开始 ( B)宏定义中的宏名可用大写字母或小写字母 ( C)宏替换不占用运行时间,只占用编译时间 ( D)使用带参数的宏时,参数的类型应与宏定义时的一致 34 设有语句: “int a=1,b=2,*p1=”,则使指针 p1指向变量 b的赋值语句
11、是 _。 ( A) p1=*p2 ( B) *p1=p2 ( C) p1=p2 ( D) *p1=*p2 35 以下程序的输出结果是 _。 #include stdio.h main() int k=4,m=1,p; p=func(k,m); printf(“%d,“,p); p=func(k,m); printf(“%dn“,p); func(a,b) int a,b; static int m=0,i=2; i+=m+1;m=i+a+b;return(m); ( A) 8, 17 ( B) 8, 16 ( C) 8, 20 ( D) 8, 8 36 若有以下定义和语句: int a10=1
12、,2,3,4,5,6,7,8,9,10,*p=a;则不能表示 a数组元素的表达式是 _。 ( A) *p ( B) a10 ( C) *a ( D) ap-a 37 以下程序的输出结果是 _。 #define TIMES(X) X*X main() int a=16,k=2,m=1; a/=TIMES (k+m)/TIMES(k+m); printf(“dn“,a); ( A) 16 ( B) 2 ( C) 9 ( D) 1 38 下列程序的输出结果是 _。 main() char a10=1,2,3,4,5,6,7,8,9,0,*p=a+5; printf(“%d“,*-p); ( A)非法
13、 ( B) a4的地址 ( C) 5 ( D) 7 39 以下程序的运行结果为 _。 main() int x,*p,*q; x=10;p=q= printf(“%dn“,*q); ( A) 10 ( B) 9 ( C) 8 ( D) 11 40 下列定义不正确的有 _。 ( A) #define PI 3.141592 ( B) #define S 345; ( C) int max(x, y); int x,y; ( D) int max(int,int); 41 设有结构体类型定义: struct try int one; float two; *str;若要动态开辟一 个结构单元,使指
14、针 str指向其首地址,正确的语句是 _。 ( A) str=(try*)malloc(sizeof(try); ( B) *str=(struct try*)malloc(sizeof(struct try); ( C) str=(strucy try*)malloc(sizeof(struct try); ( D) str=(struc try)malloc(sizeof(struct try); 42 以下对结构体变量 mix中成员 x的正确引用是 _。 struct int t;int x; mix,*p; p= ( A) (*p).mix.x ( B) (*p).x ( C) p-
15、mix.x ( D) p.mix.x 43 设有以下语句: struct stint n;struct st*next; static struct st a3=5, p=则表达式的值是 6的为 _。 ( A) p+- n ( B) p- n+ ( C) (*p).n+ ( D) +p- n 44 以下程序的输出结果是 _。 long fun(int n) long s; if(n=1|n=2) s=2; else s=n-fun(n-1); return s; main() printf(“%1dn“,fun(3); ( A) 1 ( B) 2 ( C) 3 ( D) 4 45 以下对 C语
16、言函数的有关描述中,正确的是 _。 ( A)在 C程序中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 ( B)函数既可以嵌套定义又可以递归调用 ( C)函数必须有返回值,否则不能使用函数 ( D) C程序中有调用关系的所有函数必须放在同一个源程序文件中 46 以下程序的输出结果是 _。 fun(int *s,int p23) *s=p11; main() int a23=1,3,5,7,9,11,*p; p=(int *)malloc(sizeof(int); fun( printf(“%dn“,*p); ( A) 1 ( B) 7 ( C) 9 ( D) 11 47 若有以
17、下定义和语句,则对 w数组元素非法引用的是 _。 int w23,(*pw)3;pw=w; ( A) w0+2 ( B) *(pw+1)2 ( C) pw00 ( D) *(pw1+2) 48 设有以下定义: char *st=“how are you“;下列程序段中正确 的是 _。 ( A) char a11,*p;strcpy(p=a+1, ( B) char a11;strcpy(+a,st); ( C) char a11;strcpy(a,st); ( D) char a,*p;srtcpy(p= 49 以下函数返回 a所指数组中最小的值所在的下标值: fun(int *a,int n
18、) int i,j=0,p; p=j; for(i=j;i n;i+) If(ai ap) _, return(p); 在横线处应填入的是 _。 ( A) i=p ( B) ap=ai ( C) p=j ( D) p=i 50 下面程序的输出结果是 _。 main() int a=1,2,3,4,5,6,7,8,9,0,*p; p=a; printf(“%dn“,*(p+9); ( A) 0 ( B) 1 ( C) 10 ( D) 9 51 一张 3.5英寸软盘大约能存储 140万个 ASC 字符,若存放汉字大约能存放【 】个。 52 一个算法的空间复杂度是指该算法所耗费的【 】。 53 当所
19、有结点的权值都相等时,用这些结点构造的二叉排序树是【 】。 54 软件危机的核心问题是【 】和软件开发效率低。 55 栈满时,再作入栈操作会产生【 】,栈空时,删除操作会产生【 】。 56 程序的运行结果为【 】。 main() char c1=a,c2=b,c3=c; printf(“a%cb%ctc%cn“,c1,c2,c3); 57 执行下面程序段后, k值是【 】。 k=1;n=263; do k*=n%10;n/=10; while(n); 58 函数 mystrlen(char *s)的功能是求字符串 s的长度,请填空。 mystrlen(char *s) char *t: t=s
20、; while(【 】 )t+; return(t-s); 59 在对文件进行操作的过程 中,若要求文件的位置回到文件的开头,应当调用的函数是【 】函数。 60 设有以下定义的语句: int a32=10,20,30,40,50,60,(*p)2; p=a; 则 *(*(P+2)+1)值为【 】。 61 下列程序的输出结果是【 】。 void fun(int *n) while(*n) printf(“%d“,(*n)-); main() int a=10; fun( 62 下面程序是把从终端读入的 20个字符作为字符串放在字符数组中,然后利用指针变量输出上述字符串,请填空。 #include
21、 stdio.h main() int i;char s21,*p; for(i=0;i 20;i+) si=getchar(); si=【 】 ; p=【 】 ; while(*p) putchar(【 】 ); 63 阅读程序,填空补充程序。 #define【 】 30 main() 【 】 ; num=10; total=num*PRICE; printf(“total=%d,num=%dn“,【 】 ); 64 funl函数的调用语句为 funl(。它将 3个整数按由大到小的 JI匣序调整后依次放入 a, b, c三个变量中, a中放最大数,请填空。 void fun2(int *x,
22、int *y) int t; t=*x;*x;*y;*y=t; void funl(int *pa,int *pb,int *pc) if(*pc *pb) fun2(【 】 ); if(*pa *pc) fun2(【 】 ); if(*pa *pb) fun2(【 】 ); 国家二级( C语言)笔试模拟试卷 66答案与解析 1 【正确答案】 C 2 【正确答案】 B 3 【正确答案】 B 4 【正确答案】 D 5 【正确答案】 A 6 【正确答案】 C 7 【正确答案】 C 8 【正确答案】 D 9 【正确答案】 A 10 【正确答案】 D 11 【正确答案】 A 12 【正确答案】 B 1
23、3 【正确答案】 A 14 【正确答案】 C 15 【正确答案】 A 16 【正确答案】 C 17 【正确答案】 A 18 【正确答案】 A 19 【正确答案】 C 20 【正确答案】 B 21 【正确答案】 B 22 【正确答案】 C 【试题解析】 每一个 C语言程序都是由若干个函数构成的。 23 【正确答案】 B 【试 题解析】 计算行数的方法是用数组的元素个数除以列数,尾数为小数直接进一位。 24 【正确答案】 B 25 【正确答案】 D 【试题解析】 函数体可以没有 return语句,程序执行到末尾为 “”时结束,然后返回调用函数,但没有确定的函数值返回。 26 【正确答案】 A 【试
24、题解析】 C语言中二维数组数组元素的排列顺序是按行依次存放的,所以 A是正确选项。 27 【正确答案】 C 【试题解析】 当用 %s格式符输出字符串时, printf中的输出项是字符数组名,不是数组元素名。 28 【正确答案】 C 【试题解析】 在 C语言中,字符串以 0作为结束符,因此数组 x的长度为7+1=8,而数组 y的长度等于 7。 29 【正确答案】 D 【试题解析】 不能把一个整数赋给指针变量,只能将变量已分配的地址赋给指针变量。 30 【正确答案】 C 【试题解析】 fprintf是格式文件格式化输出函数, fread是读文件, fputc输出单个字符到文件。只有 fwrite可
25、以通过参数来设置以二进制形式写文件。 31 【正确答案】 D 【试题解析】 数组名可以认为是一 个存放地址值的指针变量,这个指针变量中的地址值不可改变。因此,可以认为数组名是一个地址常量,所以不能将它随意改变。 32 【正确答案】 A 【试题解析】 实参的个数必须与形参的个数一致,实参可以是表达式,在类型上应按位置与形参一一对应匹配。 33 【正确答案】 D 【试题解析】 宏替换和函数调用有相似之处,但在替换时,对参数没有类型的要求。 34 【正确答案】 D 【试题解析】 对于定义 int *p, *q;,可以通过赋值语句 p=q;,把指针变量 q中的地址值赋给指针变量 p,从而使 这两个指针
26、变量指向同一地址。 35 【正确答案】 A 36 【正确答案】 B 【试题解析】 选项 B越界,因为该数组元素只有 a0 a9。 37 【正确答案】 B 【试题解析】 宏定义的作用是进行字符的替换,应先将赋值语句的右边进行宏替换,即等号右边为: k+m*k+m/k+m*k+m=2+1*2+1/2+1*2+1=2+2+0+2+1=7,然后计算 a/=7,即 a=a/7=16/7=2。 38 【正确答案】 C 【试题解析】 p是一个指向字符的指针,在定义时,指向 a5。执行 -p时, p就指向了 a4,那么 *-p就是 5。 39 【正确答案】 A 【试题解析】 程序中的 p指向变量 x, q被定
27、义为二级指针,即指向指针的指针,其值为指针 p的地址,因此, *q即是 x,打印结果为 10。 40 【正确答案】 C 【试题解析】 定义函数时,函数头后不能加分号。 41 【正确答案】 C 【试题解析】 由于在 ANSI C中 malloc函数返回的地址为 void,故在调用函数时,必须利用强制类型转换将其转换成所需的类型。 42 【正确答案】 B 【试题 解析】 结构体变量中的成员有 3种引用方式: 结构体变量名成员名; 指针变量名 -成员名: (*指针变量名 )成员名。 43 【正确答案】 D 【试题解析】 本题主要考查结构体变量的定义和应用,以及运算符的优先级。 44 【正确答案】 A
28、 【试题解析】 本题两次执行 fun函数,第一次执行得 f(3)=s=n-f(n-1)=3-f(2):第二次执行得 s=2,通过传递返回值 f(2)=2,所以 s=3-2=1,即 f(3)=1。 45 【正确答案】 A 【试题解析】 在 C语言中,提供了许多 库函数供用户使用,因此选项 D错误。 46 【正确答案】 C 47 【正确答案】 B 【试题解析】 选项 A表示元素 w02,选项 C表示元素 w00,选项 D表示元素 w12,而选项 B中 pw+1表示第 2行元素的地址, (pw+1)2相当于(pw+1)+2,表示第 4行元素的地址,显然超出该二维数组的范围。 48 【正确答案】 A
29、【试题解析】 选项 A表示把 st所指串的第 5个字符开始的后面的元素赋值给数组 a的第 2个元素开始的后面元素,形式正确;选项 B中出现对数组名进行自加运 算,因此错误:选项 C中 st所指字符串有 11个字符,再加上 0,有 12个字符,超过数组长度,所以也是错误的;选项 D的情况和选项 C相似,也是形式正确,但超过了数组的长度。 49 【正确答案】 D 【试题解析】 首先, p=0是假设数组的第 1个元素为最小,然后在循环里将数组中的每一个元素 ai与当前最小元素 ap比较,如果前者小,那么就要更新 p的值,使 p=i。 50 【正确答案】 A 【试题解析】 p指向 a0,则 p+9指向
30、 a9, *(p+9)=a9=0。 51 【正确答 案】 70万 52 【正确答案】 存储空间 【试题解析】 空间复杂度是指算法在执行过程中临时占用的存储空间大小,包括: 算法本身所占用的存储空间; 算法的输入输出数据所占用的存储空间; 算法在运行过程中临时占用的存储空间。 53 【正确答案】 右子树 (单支树 ) 【试题解析】 二叉排序树对于任意新结点,若大于等于根结点,则在右子树上建立。 54 【正确答案】 软件质量差 【试题解析】 大约在 20世纪 60年代末人们在计算机软件的开发和维护过程中,遇到了一系列严重问题,从而认识到软件 危机的存在。软件危机的核心问题是软件开发的质量太差和软件
31、系统开发的效率太低。 55 【正确答案】 上溢 下溢 56 【正确答案】 aabb cc 【试题解析】 printf函数先输出 a,遇 %c,接着输出变量 c1的值 a,然后输出bb,遇 %t,从第 9个位置开始输出 cc。 57 【正确答案】 36 【试题解析】 本题循环体共执行了 3次。第一次: k=3, n=26:第二次: k=18,n=2;第三次: k=36, n=0。 58 【正确答案】 *t 【试题解析】 通过 while循环扫描 字符串,遇到字符 0结束,并用 t统计字符串的长度。 59 【正确答案】 rewind()或 fseek() 60 【正确答案】 60 【试题解析】 p
32、是指向整型数组的指针变量, p=a使得 p指向数组 a的第 1行。p+2是数组 a第 3行的地址, *(p+2)是数组 a第 3行 50,60,其实 *(p+2)为数组 a第 3行的首地址, *(p+2)+1为数组 a第 3行第 2个元素的地址,那么 *(*(P+2)+1)就是数组 a第 3行第 2个元素,即 60。 61 【正确答案】 1.09877e+010 62 【正确 答案】 0 s *p+ 【试题解析】 本题先通过 for循环从键盘接收 20个字符,然后在串尾赋一空值0作为串结束标志。再使指针 p指向串的首地址。最后通过 while循环对字符串进行扫描并输出。 63 【正确答案】 PRICE int num, total total, num 【试题解析】 程序中出现了变量 num, total以及宏 PRICE,因此应在相应位置说明它们。 64 【正确答案】 pc, pb或 pb, pc pc, pa或 pa, pc pb, pa或 pa, pb 【试题解析】 本题主要考查形参为指针变量时,形参和实参间的数据传递。系统为 fun2的两个形参开辟了对应的基类为 int型的临时指针变量,并通过空格处的实参把地址传递给形参 x, y。