1、国家二级( C语言)笔试模拟试卷 14及答案与解析 1 下列叙述中正确的是 ( )。 ( A)一个算法的空间复杂度大,则其时间复杂度必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一个算法的时间复杂度大,则其空间复杂度必定小 ( D)上述三种说法都不对 2 下列叙述中正确的是 ( )。 ( A)一个逻辑数据结构只能有一种存储结构 ( B)逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率 ( D)一个 逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 3 对长度为 n的线性表进行顺序
2、查找,在最坏的情况下需要比较的次数为 ( )。 ( A) 125 ( B) n/2 ( C) n ( D) n+1 4 简单的交换排序方法是 ( )。 ( A)快速排序 ( B)选择排序 ( C)堆排序 ( D)冒泡排序 5 设计程序时,应采纳的原则之一是 ( )。 ( A)程序的结构应有助于读者的理解 ( B)限制 GOTO语句的使用 ( C)减少或取消注释行 ( D)程序越短越好 6 关于结 构化程序设计原则和方法的描述错误的是 ( )。 ( A)选用的结构只准许有一个入口和一个出口 ( B)复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现 ( C)不允许使用 GOTO语句 ( D)语言
3、中所没有的控制结构,应该采用前后一致的方法来模拟 7 下列特征中不是面向对象方法的主要特征的是 ( )。 ( A)多态性 ( B)继承 ( C)封装性 ( D)模块化 8 在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送 ( )。 ( A)调用语句 ( B)命令 ( C)口令 ( D)消息 9 下列描述错误的是 ( )。 ( A)继承分为多重继承和单继承 ( B)对象之间的通信靠传递消息来实现 ( C)在外面看不到对象的内部特征是基于对象的 “模块独立性好 ”这个特征 ( D)类是具有共同属性、共同方法的对象的集合 10 下列叙述中正确的是 ( )。 ( A)软件交付使用后还需
4、要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期就结束 ( D)软件维护是指修复程序中被破坏的指令 11 下列程序的输出结果是 _。 int i=010, j=10; printf (“%d, %dn“, +i, j-); ( A) 11, 10 ( B) 9, 10 ( C) 010, 9 ( D) 10, 9 12 标有 /* * /的语句的执行次数是 _。 int y,i; for(i=0 ; i 20 ; i+) if (i%2=0) continue; y+=i; /*/ ( A) 20 ( B) 19 ( C) 10 ( D) 9 13 下列
5、程序的输出结果是 _。 #include stdio. h main ( ) int a,b,c=246; a=c/100%9; b=(-1) printf (“%d, %dn“, a,b); ( A) 2,1 ( B) 3,2 ( C) 4,3 ( D) 2,-1 14 下列程序的输 出结果是 _。 main () int m=5; if (m+ 5) printf (“%dn“,m); else printf (“%dn“,m-); ( A) 7 ( B) 6 ( C) 5 ( D) 4 15 下列程序执行后的输出结果是 _。 main () char x=0xFFFF; printf(“
6、%d n“,x-); ( A) -32767 ( B) FFFE ( C) -1 ( D) -32768 16 下列程序的输出结果为 _。 main ( ) unsigned int a=65535; int b=-2; printf ( “na=%d, %u;b=%d, %u, a, a,b,b); ( A) -1,65535;-2,65534 ( B) 65535,65535;-2,65534 ( C) 65535,65535;65534,65534 ( D) -1,65535;65534,65534 17 下列语句中,不正确的是 _。 ( A) static char a=“China“
7、; ( B) static char a=“China“; ( C) printf(“%s“,a0); ( D) scanf(“%s“,a); 18 给出发下定义 : char x=“abcdefg“; char y=a, b, c, d, e, f, g ;则正确的叙述为 _。 ( A)数组 x和数组 y等价 ( B)数组 x和数组 y的长度相同 ( C)数组 x的长度大于数组 y的长度 ( D)数组 x的长度小于数组 y的长度 19 当调用函数时,实参是一个数组名,则向函数传送的是 _。 ( A)数组的长度 ( B)数组的首地址 ( C)数组中每一个元素的地址 ( D)数组每个元素中的值
8、20 下列程序的输出结果是 _。 main() unsigned short a=65536; int b; printf(“%dn“, b:a); ( A) 0 ( B) 1 ( C) 2 ( D) 3 21 以下叙述中正确的是 ( )。 ( A)调用 pfintf函数时,必须要有输出项 ( B)使用 putchar函数时,必须在之前包含头文件 stdio.h ( C)在 C语言中,整数可以以十二进制、八进制或十六进制的形式输出 ( D)调用 getchar函数读入字符时,可以从键盘上输入字符所对应的 ASCII码 22 有以下程序段: typedef struct NODE int num
9、; struct NODE * nex; OLD; 以下叙述中正确的是 ( )。 ( A)以上的说明形式非法 ( B) NODE是一个结构体类型 ( C) OLD是一个结构体类型 ( D) OLD是一个结构体变量 23 设有定义: int a=2, b=3, c=4;则以下选项中值为 0的表达式是 ( )。 ( A) (! a=1) for(i=1; i n; i+)f*=i; ( B) f=1; for(i=1; i n; i+)f*=i; ( C) f=1; for(i=n; i 1; i+)f*=i; ( D) f=1; for(i=n; i =2; i-)f*=i; 28 设有定义:
10、int n1=0, n2, *p= p = for(x=1;x 3;x+)y+ =px; printf( “% d n“ , y); 程序运行后的输出结果是 ( )。 ( A) 10 ( B) 11 ( C) 14 ( D) 15 33 有以下程序 :#include stdio, h #include string, h struet STU int nam; float TotalSeore;void f( strnct STU p) struct STU s2 = 20044,550 ,20045,537 ; p.num = s 1. num; p.TotalScore = s 1. T
11、otalScore;main( ) struct STU s2 = 20041,703 ,20042,580; f(s0 ); printf( “%d %3.Ofn“ ,s0.num,s0.TotalSeore); 程序运行后的输出结果是 ( )。 ( A) 20045 537 ( B) 20044 550 ( C) 20042 580 ( D) 20041 703 34 有以下程序 :#include stdio, h #define f(x) (x * x)main ( ) int i1 ,i2; i1 = f(8)/f(4) ;i2 =f(4 +4)/f(2 +2); printf(“%
12、 d,% dn“ ,i1 ,i2); ( A) 64,28 ( B) 4,4 ( C) 4,3 ( D) 64,64 35 有以下程序 :#include stdio.h main( ) char P = a,b,c ,q: “abc“; printf( “% d % d n“, sizeof(p), sizeof(q) );程序运行后的输出结果是 ( )。 ( A) 44 ( B) 33 ( C) 34 ( D) 43 36 有以下程序 :#include stdio, h main( ) char a1 =M,a2 =m; printf(“%cn“,(a1,a2); 以下叙述中正确的是 (
13、 )。 ( A)程序输出大写字母 M ( B)程序输出小写字母 m ( C)格式说明符不足,编译出错 ( D)程序运行时产生出错信息 37 有以下程序段: int n, t=1, s=0; scanf(“%“, t=t-2; while(t!=n); 为使此程序段不陷入死循环,从键盘输入的数据应该是 ( )。 ( A)任意正 奇数 ( B)任意负偶数 ( C)任意正偶数 ( D)任意负奇数 38 有以下程序: #include stdio, h void swap1 (int c0,int e1 ) int t; t = c00; c00: c1 0 ; c1 0 = t;void swap2
14、(int * c0,int * c1) int t; t= *c0; *c0= *c1; * c1 =t;main( ) inta2=3.5.b2=3,5; swapl(a,a+1) ;swap2( printf(“% d %a %d %d n“ ,a0 ,a1 ,b0 ,b1 ); 程序运行后的车出结果是 ( )。 ( A) 3 5 5 3 ( B) 5 3 3 5 ( C) 3 5 3 5 ( D) 5 3 5 3 39 有以下程序,其中函数 f的功能是将多个字符串按字典顺序排序 :#include stdio, h #inelude string, h void f(char * p ,
15、int n) char * t;int i,j; for(i=0;i n-1;i+) for(j=i+1 ;j n;j + ) if(strcmp(pi, pj) 0) t =pi;pi =pj ;pj =t;main( ) char * p 5 = “abe“.“ aabdfg“.“ abbd“,“ dcdbe“,“ cd“ ; f(P,5 ); printf(“% dn“, strlen(p1) );程序运行后的输出 结果是 ( )。 ( A) 2 ( B) 3 ( C) 60 ( D) 4 40 有以下程序 :#include stdio, h main( ) char c1=1, c2
16、=2; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); 当运行时输入: a回车后,以下叙述正确的是 ( )。 ( A)变量 c1被赋予字符 a, c2被赋予回车符 ( B)程序将等待用户输入第二个字符 ( C)变量 c1被赋予字符 a, c2中仍是原有字符 2 ( D)变量 c1被赋予字符 a, c2中将无确定值 41 有以下程序: #include stdio, h void sort(int a ,int n) int i,j,t; for(i=0;i n;i + ) for(j =i+ 1;j n;j + ) if(ai aj)
17、 t=a1 ;ai=aj ;aj =t; main( ) int aa10 = 1,2,3,4,5,6,7,8,9,10 ,i; sort(aa +2, 5); for(i =0;i 10;i+) prinff(“%d,“ ,aai); prinff(“n“);程序运行后的输出结果是 ( )。 ( A) 1,2,3,4,5,6,7,8,9,10, ( B) 1,2,7,6,3,4,5,8,9,10, ( C) 1,2,7,6,5,4,3,8,9,10, ( D) 1,2,9,8,7,6,5,4,3,10, 42 以下程序的功能是:给 r输入数据后计算半径为 r的圆面积 s。 #include
18、stdio, h main( )/* Beginning */ int r; float s; scanf(“% d“, s = * r*r;printf(“s =%fn“,s); 程序在编译时出错,出错的原因是 ( )。 ( A)注释语句书写位置错误 ( B)存放圆半径的变量 r不应该定义为整型 ( C)输出语句中格式描述符非法 ( D)计算圆面积的赋值语句中使用了非法变量 43 有以下程序: #include stdio.h #include string.h void f(char * s,char*t) char k; k=*s; *s=*t; *t=k; s+; t-; if( *
19、s) f(s,t);main( ) char str10 :“abedefg“, * p; p = str + strlen(str)/2+1; f(p,p -2); printf( “% s n“ ,str);程序运行后的输出结果是 ( )。 ( A) abcdefg ( B) gfedcba ( C) gbcdefa ( D) abedcfg 44 有以下程序 :#include stdio.h float f1 (float n ) return n*n;float f2 ( float n) return 2 * n;main( ) float ( * p1)(float),( * p
20、2)(float),(*t)(float) ,y1,y2; p1 = f1;p2 = f2; y1 = p2(p1(2.0) ); t =p1;p1 = p2;p2 =t; y2=p2(p1(2.0); prinff(“% 3.0f, %3.Ofn“ ,y1,y2);程序运行后的输出结果是 ( )。 ( A) 8,16 ( B) 8,8 ( C) 16,16 ( D) 4,8 45 以下叙述中错误的是 ( )。 ( A) C语言中对二进制文件的访问速度比文本文件快 ( B) C语言中,随机文件以二进制代码形式存储数据 ( C)语句 PILE fp;定义了一个名为 fp的文件指针 ( D) C语
21、言中的文本文件以 ASCII码形式存储数据 46 有以下程序: #include stdio.h #include string.h main( ) char p = a,b,c ,q10 = a,h,c prinff( “% d % dn“ , strlen (p) , strlen (q) );以下叙述中正确的是 ( )。 ( A)在给 p和 q数组赋初值时,系统会自动添加字符串结束符,故输出的长度都为 3 ( B)由于 P数组中没有字符串结束符,长度不能确定; q数组中字符串长度为 3 ( C)由于 q数组 中没有字符串结束符,长度不能确定; p数组中字符长度为 3 ( D)由于 p和
22、q数组中没有字符串结束符,故长度都不能确定 47 有以下程序: #include stdio.h #include strine.h struct STU char name10; int hum;void f(char * name,iht num) struct STU s2 = “SunDan“ ,20044 , “ Penghua“ ,20045; num= s0. nnm; strepy(name,s0, name);main( ) struct STU s2 = “YangSan“ ,20041 , “LiSiGao“ ,20042, * P; p = f(p- name,p- h
23、um); printf(“% s %d n“ ,p- name,p- num);程序运行后的输出结果是 ( )。 ( A) SunDan 20042 ( B) SunDan 20044 ( C) LiSiGuo 20042 ( D) YangSan 20041 48 有以下程序 :#include stdio.h struet STU charname10; int num; float TotalSeore; ;void f(struet STU * p) struet STU s 2 = “SunDan“ ,20044,550 , “Penghua“ ,20045,537 , * q =
24、s; +p; +q; *p= *q;main( ) struct STU s3 = “YangSan“ ,20041,703 , “LiSiGuo“ ,20042,580 ; f(s) ;printf(“% s % d % 3.Ofn“ ,s 1. name, s 1. num ,s 1. TotalScore);程序运行后的输出结果是 ( )。 ( A) SunDan 20044 550 ( B) Penghua 20045 537 ( C) LiSiGuo 20042 580 ( D) SunDan 20041 703 49 以下 程序的功能是进行位运算 :#include stdio.h
25、 main( ) unsigned char a,b; a =7 3; b = 4 printf(“% d %d n“ ,a,b);程序运行后的输出结果是 ( )。 ( A) 4 3 ( B) 7 3 ( C) 7 0 ( D) 4 0 50 有以下程序 :#include stdlo.h main( ) FILE * fp; int i,k,n; fp = fopen( “data. dat“ ,“w +“ ) for(i = 1 ;i 6;i + ) fprintf(fp.“% d“,i); if(i%3 =0)fprintf(fp,“ n“); rewind(fp); fscanf(fp
26、.“ % d% d“ ,printf(“ % d%d n“ ,k,n); fclose(fp); ( A) 0 0 ( B) 123 45 ( C) 1 4 ( D) 1 51 某二叉树中度为 2的结点有 18个,则该二叉树中有【 】个叶子结点 。 52 在面向对象方法中,类的实例称为【 】。 53 问题处理方案的正确而完整的描述称为【 】。 54 在关系数据库中把数据表示成二维表,每一个二维表称为【 】。 55 诊断和改正程序中错误的工作通常称为【 】。 56 有以下程序: #include stdio.h void f(int y,int *x) y=y+ *x; *x=*x+y; mai
27、n() int x=2,y=4; f(y, printf(“%d%dn“,x,Y); 执行后的输出结果【 】。 57 以下程序给指针 p分配三个 double型动态内存单元,请填空。 #include stdio.h #include stdlib.h main() double *p; p=(double *)malloc(【 】 ); p0=1.5;p1=2.5;P2=3.5; printf(“%f%f%fn“,p0,p1,p2); 58 有以下程序: #include stdio.h main() int t=1,i=5; for(;i =0;i-) t*=i; printf(“%dn“
28、,t); 执行后的输出结果是【 】。 59 有以下程序: #include stdio.h main() char ch1,ch2;int n1,n2; ch1=getchar();ch2=getehar(); n1=ch1-0; n2=n1*10+(ch2-0); printf(“%dn“,n2); 程序运行时输入: 12回车,执行后的输出结果是【 】。 60 有以下程序: #include stdio.h main() int n=0,m=1,x=2; if(! n)x-=1; if(m) x-=2; if(x) x-=3; printf(“%dn“,x); 执行后的输出结果是【 】。 6
29、1 以下 sum函数的功能是计算下列级数之和: 请给函数中的各变量正确赋初值。 double sum(douLle x,int n) int i; double a,b,s; 【 】 for(i=1;i =n;i+) a=a*x;b=b*i;s=s+a/b; return s; 62 函数 fun的功能是计算 xn。 double fun(double x,int n) int i; double y=1; for(i=1;i =n;i+) y=y*x; return y; 主函数中已经正确定义变量 m, a, b并赋值,要调用函数 fun计算: m=a4+b4-(a+b)3。实现这一计算的函
30、数调用语句为【 】。 63 以下 sstrcpy()函数实现字符串复制,即将 t所指字符串复制到 s所指内存空间中,形成一个新字符串 s。请填空。 void sstrcpy(char *s,char *t) while( *s+=【 】 ); main() char strl100,str2=“abcdefgh“; sstrcpy(str1,str2); printf(“%sn“,str1); 64 以下程序的运行结果是:【 】。 #include stdio.h #include string.h char *ss(char *s) return s+strlen(s)/2; main()
31、char *p,*str=“abcdefgh“; p=ss(str);printf(“%sn“,p); 65 有以下语句段: int n1=10,n2=20; printf(“【 】 “,n1,n2); 要求按以下格式输出 n1和 n2的值: n1=10 n2=20 每个输出行从第一列开始,请填空。 66 已知字符 A的 ASCII码值为 65,以下语句的输出结果是【 】。 char ch=B; printf(“%c%dn“,ch,ch); 67 以下程序的运行结果是【 】。 #include stdio.h #include string.h typcdef struct student c
32、har name10; long sno; float score; STU; main() STU a=“Zhangsan“,2001,95,b=“Shangxian“,2002,90, c=“Anhua“,2003,95,d,*p= d=a; if(strcmp(a.name,b.name) 0) d=b; if(strcmp(c. name, d. name) 0)d=c; printf(“%1d%sn“,d.sno,p- name); 68 下面程序的运行结果是【 】。 #inelude stdio.h int f(int a,int n) if(n 1) return a0+f( e
33、lse return a0; main() int aa3=1,2,3,s; s=f( printf(“% dn“,s); 69 下面 rotate函数的功能是:将 n行 n列的矩阵 A转置未 AT,例如: 请填空 #define N 4 void rotate(int a) int i,j,t; for(i=0;i N;i+) for(j=0;【 】 ;j+) t=aij;【 】 ; aji=t; 国家二级( C语言)笔试模拟试卷 14答案与解析 1 【正确答案】 D 【试题解析】 算法的时间复杂度和算法的空间复杂度是从不同的角度来衡量算法的执行情况,它们之间没有内在联系。 2 【正确答案】
34、 D 【试题解析】 数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。采用不同的存储结构,其处理的效率是不同的。 3 【正确答案】 C 【试题解析】 对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相 符,查找到所要找的元素为止在最坏的情况下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为 n。 4 【正确答案】 D 【试题解析】 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方
35、法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。 5 【正确答案】 A 【试题解析】 程序设计的风格主要强调程序的简单、清晰和可理解性,以便读者理解。程序滥用 GOTO语句将 使程序流程无规律,可读性差;添加注释行有利于对程序的理解,不应减少或取消,程序的长短要依据实际的需要而定,并不是越短越好。 6 【正确答案】 C 【试题解析】 限制使用 GOTO语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用 GOTO语句。其他三项为结构化程序设计的原则。 7 【正确答案】 D 【试题解析】 面向对象设计方法与面向过程设计方法有本质的
36、不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:分类性、多态性、封装性、模块独立性、继承和多态性 等。模块化是结构化程序设计的特点。 8 【正确答案】 D 【试题解析】 在面向对象方法中,对象之间通过消息进行通信。消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎么完成这些处理,接受者独立决定采用什么方式完成所需的处理。 9 【正确答案】 C 【试题解析】 对象的封装性是指从外面看只能看到对象的外部特性;而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。 10 【正确答案】 A 【试题解析】 软件生命周期一般可以分为
37、软件定义,软件开 发及软件运行维护 3个阶段。软件交付并投入运行后,需要不断地进行维护,并根据新提出的需求进行必要而且可能的扩展和删改。 11 【正确答案】 B 12 【正确答案】 C 13 【正确答案】 A 14 【正确答案】 B 15 【正确答案】 C 16 【正确答案】 A 17 【正确答案】 C 18 【正确答案】 C 19 【正确答案】 B 20 【正确答案】 A 21 【正确答案】 B 【试题解析】 在使用标准输入输出库函数前,必须要用预编译命令 “#include”将头文件 “stdio.h“包括到用户源文件中。 22 【正确答案】 C 【试题解析】 typedef关键字用于声明
38、一个新的类型名代替已有的类型名。本题中如果没有用 typedef进行定义的话,则 struct NODE为结构体类型,而用typedef定义后,相当于用 OLD代表了 struet NODE这一结构体类型,故 OLD为结构体类型。 23 【正确答案】 A 【试题解析】 逻辑运算符的优先级由高到低运算次序如下: !(非 ) 【试题解析】 函数 fun的功能是计算 x的 n次方, a的 4次方的调用函数为fun(a,4), b的 4次方的调用函数为 fun(b,4), (a+b)的 3次方的调用函数为fun(a+b),3),计算 m=a4+b4-(a+b)3的函数调用语句为: fun(a,4)+f
39、un(b,4)-fun(a+b),3); 63 【正确答案】 *t+ 【试题解析】 要使 sstrcpy函数实现字符串复制,必须将 t字符串中的每个字符逐个复制到 s字符串中,可以使用 *s=*t;s+;t+,也可以写成 *s+=*t+,因此空格处填 *t+。 64 【正确答案】 efgh 【试题解析】 函数 *ss的作用是使字符串指针往后移 strlen(s)/2个位置。形参指针 a指向字符串 “abcdefeh“,调用函数 *ss后,指针指向 e,所以输出为 efgh。 65 【正确答案】 n1=%dnn2=%d 【试题解析】 根据输出结果,可以确定 “格式控制 ”为 n1=%dnn2=%d,其中,“n1=”和 “n2 =”是按原样输出的字符, “%d”是按十进制整数输出, “n”是转义字符,用于输出回车换行。