1、国家二级(C 语言)笔试-试卷 3 及答案解析(总分:134.00,做题时间:90 分钟)一、选择题(总题数:51,分数:102.00)1.选择题(1-10、21-40 每题,11-20 每题)下列各题 A、B、C、D 四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。(分数:2.00)_2.可以作为 Windows 外壳程序的是 ( )(分数:2.00)A.程序管理器B.文件管理C.程序管理器和文件管理器D.主群组3.与十进制数 96 等值的二进制是 ( )(分数:2.00)A.1100000B.10010110C.1100001D.11000114.对存储器按字节进行编
2、址,若某存储器芯片共有 10 根地址线的引脚,则该存储器芯片的存储容量为 ( )(分数:2.00)A.512 BB.1 KBC.2 KBD.4 KB5.在软件研制过程中,CASE 是指 ( )(分数:2.00)A.计算机辅助软件工程B.计算机产生的例子C.实验室使用的工具D.计算机辅助系统工程6.下列软件中,属于应用软件的是 ( )(分数:2.00)A.UNIXB.人事管理系统C.数据库管理系统D.SYSTEM7.现代计算机之所以能自动地连续进行数据处理,主要是因为 ( )(分数:2.00)A.采用了开关电路B.采用了半导体器件C.具有存储程序的功能D.采用了二进制8.软盘上第( )磁道最重要
3、,一旦损坏,该盘就不能使用了。(分数:2.00)A.0B.40C.1D.809.在下列四条叙述中,错误的一条是 ( )(分数:2.00)A.内存是主机的组成部分B.对于种类不同的计算机,其机器指令系统都是相同的C.CPU 由运算器和控制器组成D.十六进制微型机的含义是:这种机器能同时处理十六位二进制数10.十进制数 124 转换成二进制数是 ( )(分数:2.00)A.111l010B.1111100C.1011111D.111101111.数字字符“2”的 ASCII 码为十进制数 50,数字字符“5”的 ASCII 码为十进制数( )(分数:2.00)A.52B.55C.54D.5312.
4、若要用下面的程序片段使指针变量 p 指向一个存储字符型变量的动态存储单元,则应填入; char * p;p= ( ) malloc (sizeof (char);(分数:2.00)A.charB.char *C.(* char)D.(char *)13.能够对计算机的硬件设备进行管理,并使应用软件能够方便、高效地使用这些设备的是 ( )(分数:2.00)A.数据库存系统B.操作系统C.编辑软件D.应用软件14.对于个非空的数据结构,如果它有且只有个根结点,并且每一个结点最多有一个前件,也最多有个后件,那么 ( )(分数:2.00)A.肯定是一个线形结构B.肯定是一个非线性结构C.还不足以证明是
5、一个线形结构D.很可能是一个非线形结构15.在 C 语言中,可以把整数以二进制形式存放到文件中的函数是 ( )(分数:2.00)A.fprintf ( ) 函数B.fread ( ) 函数C.fwrite ( ) 函数D.fputc( )函数16.有程序段: int al,a2; Char cl,c2; scanf(“%d%c%d%c“,printf(“%d,%d”n“,* p,* * pp); 则输出结果是(分数:2.00)A.10, 10B.10,20C.20,10D.20,2030.若有以下定义和语句 ( )int u010,vOx10,w10;printf(“%d,%d%d/n“,u,
6、v,w);则输出结果是(分数:2.00)A.8,16,10B.10,10,10C.8,8,10D.8,10,1031.若有以下定义和语句 char c1=b,c2eprintf(“%d,%c/n“,c2-c1,c2-a+A); 则输出结果 ( )(分数:2.00)A.2,MB.3,EC.2,ED.输出项与对应的格式控制不一致,输出结果不确定32.若有定义:int a34,( )不能表示数组元素 a11。(分数:2.00)A.* (a1+1)B.* (j4;j+ +)(分数:2.00)A.20B.24C.25D.3034.若有以下定义语句: char * sl“12345“, * s2“1234
7、“; printf(“%d“n“,strlen(strcpy(s1,s2); 则输出结果是 ( )(分数:2.00)A.4B.5C.9D.1035.若有以下定义和语句:int a101,2,3,4,5,6,7,8,9,10,* pa 则不能表示 a 数组元素的表达式是 ( )(分数:2.00)A.* pB.a10C.* aD.ap-a36.下面程序的输出结果是 ( ) maint( ) char * s“121“; int k0,a0,b0; do k + +; if (k%20) aa + sk-0;continue; bb + sk-0;aa + sk-0 wnile(sk+1);prin
8、tf(“k%d a%d b%d/n“,k,a,b); (分数:2.00)A.k3 a2 b3B.k3 a3 b2C.k2 a3 b3D.k2 a2 b337.下面程序的输出结果 ( ) main( ) unsigned a32768; printf(“a%d/n“,a);(分数:2.00)A.a32768B.a32767C.a-32768D.a-138.执行下面语句后的输出结果为 ( ) int i-1; if(i0)print(“* * * */n“); else printf(“% % % %/n“);(分数:2.00)A.* * * *B.% % % % %C.% % % %cD.有语法
9、错误,不能正确执行39.对于条件表达式(M)?(a+ +):(a- -),其中的表达式 M 等于 ( )(分数:2.00)A.M0B.M1C.M!0D.M!140.下述程序段的输出结果是 ( ) int x=10; int yx+ +; printf(“%d,%d“,(x+ +,y),y+ +);(分数:2.00)A.11,10B.11,11C.10,10D.10,1141.若有以下定义: int a 1,2,3,4,5,6,7,8,9,10,* pa; 则值为 3 的表达式是 ( )(分数:2.00)A.p+2,* (pd+ +)B.p+2,* + +pC.p+3,* p+ +D.p +2,
10、+ + * p42.假定所有变量均已正确说明,下列是程序段运行后 x 的值是 ( ) abCO;x35; if(! a)x- -; else if(b); if(c)x3; else x4;(分数:2.00)A.34B.4C.35D.343.在以下一组运算中,优先级最高的运算符是 ( )(分数:2.00)A.B.C.%D. 程序运行后,输出结果是 1 。(分数:2.00)填空项 1:_61.下面程序的输出走 1。 main() enum em em1=3,em2=1,em3; char*aa=“AA“,“BB“,“CC“,“DD“; printf(“%s%s%s/n“,aaem1,aaem2,
11、aaem3); (分数:2.00)填空项 1:_62.若想通过以下输入语句使 a=5.0,b=4,c=3,则输入数据的形式应该是 1。 int b,c;float a; scanf(“%f,%d,c=%d“, dp=x*x-y*y; main() int a=4,b=3,c=5,d=6; t(a,b,c,d) ; printf(“%d/n“,c,d) ; (分数:2.00)填空项 1:_64.下面程序的输出结果是 1。 char b=“ABCD“; main() char b30; strcpy( printf(“%s/n“,b) ; (分数:2.00)填空项 1:_65.有以下定义和语句,则
12、 sizeof(a) 的值是 1,而 sizeof(a.share)的值是 2。 struct datc int day; int mouth; int year: union int share1; float share2: share; a;(分数:2.00)填空项 1:_填空项 1:_66.下述函数用于统计一行字符中的单词个数,单词之间用空格分隔。 word num (str) char str; int i,num=0,word=0; for(i=0;stri!= 1;i+) if( 2=)word=0; else if(word=0) word=1; 3; return(num);
13、 (分数:2.00)填空项 1:_67.有一个已排好序的数组,今输入一个数,要求按原来的顺序规律将它插入到数组中。算法是:假设排序顺序是从小到大,对输入的数,检查它在数组中哪个数之后,然后将比这个数大的数顺序后移一个位置,在空出的位置上将该数插入。请在程序中的空白处填上一条语句或一个表达式。 #define N 100 main() float aN+1,x; int i,p; for(i=0;iN;i+) scanf(“%f“, scanf(“%f“, for(i=0,p=N;iN;i+) if(xai) 1; break; for(i=N-1; 2;i-) ai+1=ai; ap=x; f
14、or(i=0; 3;i+) printf(“%8.2f“,ai); if(i% 5=0) printf(“/n“); (分数:2.00)填空项 1:_国家二级(C 语言)笔试-试卷 3 答案解析(总分:134.00,做题时间:90 分钟)一、选择题(总题数:51,分数:102.00)1.选择题(1-10、21-40 每题,11-20 每题)下列各题 A、B、C、D 四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。(分数:2.00)_解析:2.可以作为 Windows 外壳程序的是 ( )(分数:2.00)A.程序管理器B.文件管理C.程序管理器和文件管理器 D.主群组解析
15、:3.与十进制数 96 等值的二进制是 ( )(分数:2.00)A.1100000 B.10010110C.1100001D.1100011解析:4.对存储器按字节进行编址,若某存储器芯片共有 10 根地址线的引脚,则该存储器芯片的存储容量为 ( )(分数:2.00)A.512 BB.1 KB C.2 KBD.4 KB解析:5.在软件研制过程中,CASE 是指 ( )(分数:2.00)A.计算机辅助软件工程 B.计算机产生的例子C.实验室使用的工具D.计算机辅助系统工程解析:6.下列软件中,属于应用软件的是 ( )(分数:2.00)A.UNIXB.人事管理系统 C.数据库管理系统D.SYSTE
16、M解析:7.现代计算机之所以能自动地连续进行数据处理,主要是因为 ( )(分数:2.00)A.采用了开关电路B.采用了半导体器件C.具有存储程序的功能 D.采用了二进制解析:8.软盘上第( )磁道最重要,一旦损坏,该盘就不能使用了。(分数:2.00)A.0 B.40C.1D.80解析:9.在下列四条叙述中,错误的一条是 ( )(分数:2.00)A.内存是主机的组成部分B.对于种类不同的计算机,其机器指令系统都是相同的 C.CPU 由运算器和控制器组成D.十六进制微型机的含义是:这种机器能同时处理十六位二进制数解析:10.十进制数 124 转换成二进制数是 ( )(分数:2.00)A.111l0
17、10B.1111100 C.1011111D.1111011解析:11.数字字符“2”的 ASCII 码为十进制数 50,数字字符“5”的 ASCII 码为十进制数( )(分数:2.00)A.52B.55C.54D.53 解析:12.若要用下面的程序片段使指针变量 p 指向一个存储字符型变量的动态存储单元,则应填入; char * p;p= ( ) malloc (sizeof (char);(分数:2.00)A.charB.char *C.(* char)D.(char *) 解析:13.能够对计算机的硬件设备进行管理,并使应用软件能够方便、高效地使用这些设备的是 ( )(分数:2.00)A
18、.数据库存系统B.操作系统 C.编辑软件D.应用软件解析:14.对于个非空的数据结构,如果它有且只有个根结点,并且每一个结点最多有一个前件,也最多有个后件,那么 ( )(分数:2.00)A.肯定是一个线形结构 B.肯定是一个非线性结构C.还不足以证明是一个线形结构D.很可能是一个非线形结构解析:15.在 C 语言中,可以把整数以二进制形式存放到文件中的函数是 ( )(分数:2.00)A.fprintf ( ) 函数B.fread ( ) 函数C.fwrite ( ) 函数 D.fputc( )函数解析:16.有程序段: int al,a2; Char cl,c2; scanf(“%d%c%d%
19、c“,printf(“%d,%d”n“,* p,* * pp); 则输出结果是(分数:2.00)A.10, 10B.10,20C.20,10D.20,20 解析:30.若有以下定义和语句 ( )int u010,vOx10,w10;printf(“%d,%d%d/n“,u,v,w);则输出结果是(分数:2.00)A.8,16,10 B.10,10,10C.8,8,10D.8,10,10解析:31.若有以下定义和语句 char c1=b,c2eprintf(“%d,%c/n“,c2-c1,c2-a+A); 则输出结果 ( )(分数:2.00)A.2,MB.3,E C.2,ED.输出项与对应的格式
20、控制不一致,输出结果不确定解析:32.若有定义:int a34,( )不能表示数组元素 a11。(分数:2.00)A.* (a1+1)B.* (j4;j+ +)(分数:2.00)A.20 B.24C.25D.30解析:34.若有以下定义语句: char * sl“12345“, * s2“1234“; printf(“%d“n“,strlen(strcpy(s1,s2); 则输出结果是 ( )(分数:2.00)A.4 B.5C.9D.10解析:35.若有以下定义和语句:int a101,2,3,4,5,6,7,8,9,10,* pa 则不能表示 a 数组元素的表达式是 ( )(分数:2.00)
21、A.* pB.a10 C.* aD.ap-a解析:36.下面程序的输出结果是 ( ) maint( ) char * s“121“; int k0,a0,b0; do k + +; if (k%20) aa + sk-0;continue; bb + sk-0;aa + sk-0 wnile(sk+1);printf(“k%d a%d b%d/n“,k,a,b); (分数:2.00)A.k3 a2 b3B.k3 a3 b2C.k2 a3 b3 D.k2 a2 b3解析:37.下面程序的输出结果 ( ) main( ) unsigned a32768; printf(“a%d/n“,a);(分数
22、:2.00)A.a32768B.a32767C.a-32768 D.a-1解析:38.执行下面语句后的输出结果为 ( ) int i-1; if(i0)print(“* * * */n“); else printf(“% % % %/n“);(分数:2.00)A.* * * *B.% % % % %C.% % % %cD.有语法错误,不能正确执行 解析:39.对于条件表达式(M)?(a+ +):(a- -),其中的表达式 M 等于 ( )(分数:2.00)A.M0B.M1C.M!0 D.M!1解析:40.下述程序段的输出结果是 ( ) int x=10; int yx+ +; printf(“
23、%d,%d“,(x+ +,y),y+ +);(分数:2.00)A.11,10 B.11,11C.10,10D.10,11解析:41.若有以下定义: int a 1,2,3,4,5,6,7,8,9,10,* pa; 则值为 3 的表达式是 ( )(分数:2.00)A.p+2,* (pd+ +) B.p+2,* + +pC.p+3,* p+ +D.p +2,+ + * p解析:42.假定所有变量均已正确说明,下列是程序段运行后 x 的值是 ( ) abCO;x35; if(! a)x- -; else if(b); if(c)x3; else x4;(分数:2.00)A.34B.4 C.35D.3
24、解析:43.在以下一组运算中,优先级最高的运算符是 ( )(分数:2.00)A.B.C.% D. i=3:k=6+arr3+3 即 k=12;59.若 a=10,b=20,则表达式!(ab) 的值是 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:0)解析:解析:已知 a=10,b=20,所以逻辑表达式 ab 的值为 true,即为 1,在这个表达式前面有一个逻辑运算符!,表示反操作,所以整个语句的值应当为 false,即为 0。60.有以下程序: int fa(int x)return x*x; int fb(int x)return x*x*x; int f(int(*f1)(
25、),int(*f2)(),int x) return f2(x)-f1(x); main() int i:i=f(fa,fb,2);printf(“%d/n“,i); 程序运行后,输出结果是 1 。(分数:2.00)填空项 1:_ (正确答案:正确答案:4)解析:解析:在主函数中调用函数 f,函数 f 有三个参数,形参 f1 与 f2 分别是两个指向函数的指针。在f 中执行 f2(x)-f1(x),实际上是执行了 fb(2)-fa(2),故执行 i=(fa,fb,2)后 i 的值为 2 3 -2 2 =4。61.下面程序的输出走 1。 main() enum em em1=3,em2=1,em
26、3; char*aa=“AA“,“BB“,“CC“,“DD“; printf(“%s%s%s/n“,aaem1,aaem2,aaem3); (分数:2.00)填空项 1:_ (正确答案:正确答案:DDBBCC)解析:解析:C 语言对枚举的定义规定:在枚举中声明的各个枚举元素,如果没有明确指出某个枚举元素的值,它的上一个元素存在并有明确值的情况下,这个枚举元素的值为其上一个元素的值+1。在本题中,没有明确说明枚举元素 em3 的值,则 em3=em2+1=1+1=2,进而可知,在 printf()打印函数中,要打印的数组元素是 aa3、aa1、aa2,因此最后的打印结果应当为“DDBBCC”。6
27、2.若想通过以下输入语句使 a=5.0,b=4,c=3,则输入数据的形式应该是 1。 int b,c;float a; scanf(“%f,%d,c=%d“, dp=x*x-y*y; main() int a=4,b=3,c=5,d=6; t(a,b,c,d) ; printf(“%d/n“,c,d) ; (分数:2.00)填空项 1:_ (正确答案:正确答案:56)解析:解析:本题中 a,b,c,d 是实参,x, y, cp,dp 是形参。C 语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。
28、在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参中元仍保留并维持原值。因此,程序的输出结果是 56。64.下面程序的输出结果是 1。 char b=“ABCD“; main() char b30; strcpy( printf(“%s/n“,b) ; (分数:2.00)填空项 1:_ (正确答案:正确答案:GGGH)解析:解析:由于在函数 main 中定义了数组变量 b,其将屏蔽全局变量 b。对于一维数组变量,其值为一常数,等于数组首元素地址。strcpy( float share2: share; a;(分数:2.00)填空项 1:_ (正确答案
29、:正确答案:10)填空项 1:_ (正确答案:4)解析:解析:结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。int 占 2 个字节,float 占 4 个字节,共用体变量所占的内存长度等于最长的成员的长度。所以,sizeof(a.share)的值是 4,sizeof(A) 的值是 2+2+2+4=10。66.下述函数用于统计一行字符中的单词个数,单词之间用空格分隔。 word num (str) char str; int i,num=0,word=0; for(i=0;stri!= 1;i+) if( 2=)word=0; else if(word=0)
30、word=1; 3; return(num); (分数:2.00)填空项 1:_ (正确答案:正确答案:/0 或 0 或 NULL stri num+ 或 num=num+1 或 num+=1)解析:解析:观察题目要求,可以知道以下几点: for 循环的结束条件应当是:stri已是字符串的最后一个字符; stri代表字符串 sb 中的第 i+1 个字符: 整型变量 num 的值是要记录的单词的个数。 C 语言中规定字符串的最后一个字符是一个隐含的字符串结束符“/0”,所以在题中第一个空中应填写“/0”;题中第二个空应填写“stri”,以判断当前位置的字符是否为空格;题中第二个空中应当填写“nu
31、m+”,通过变量 num 的加 1 累加得到字符串中的单词个数。67.有一个已排好序的数组,今输入一个数,要求按原来的顺序规律将它插入到数组中。算法是:假设排序顺序是从小到大,对输入的数,检查它在数组中哪个数之后,然后将比这个数大的数顺序后移一个位置,在空出的位置上将该数插入。请在程序中的空白处填上一条语句或一个表达式。 #define N 100 main() float aN+1,x; int i,p; for(i=0;iN;i+) scanf(“%f“, scanf(“%f“, for(i=0,p=N;iN;i+) if(xai) 1; break; for(i=N-1; 2;i-) a
32、i+1=ai; ap=x; for(i=0; 3;i+) printf(“%8.2f“,ai); if(i% 5=0) printf(“/n“); (分数:2.00)填空项 1:_ (正确答案:正确答案:p=i; i=p i=N)解析:解析:本题主要考查了插入排序。由于程序中的数组在开始已经按从小到大的顺序排好。在插入时,首先要查到第一个大于待插入数的数组下标,即当待插入元素小于数组中当前元素时,记下数组的当前下标 p,并结束循环。故第一空目的是为了记下数组下标,应填 p=i;插入排序的第二部是将大于待插入元素的所有元素都向后移动一位,故在循环时,要从最后一个元素到第 p 个元素都要后移一位,因此第二空应填 i=p。最后一个循环是将 N+1 个元素都输出,战最后一空应为 i=N。 (注:本题有多种答案,以上仅提供一种)
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1