国家二级(C语言)笔试模拟试卷12_第1页
国家二级(C语言)笔试模拟试卷12_第2页
国家二级(C语言)笔试模拟试卷12_第3页
国家二级(C语言)笔试模拟试卷12_第4页
国家二级(C语言)笔试模拟试卷12_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

家二级(C语言)笔试模拟试卷第1

一、公共基础选择题(本题共10题,每题1.0分,共

io分。)

1、算法中的每一个步骤都必须是有明确意义的,不允许有模棱两可的解释,也不

允许有多义性,这个性质称为

A、可行性

B、有穷性

C、正确性

D、确定性

标准答案:8

知识点解析:算法中的每一个步骤都必须是有明确意义的,不允许有多义性。算法

的这个性质即为算法的确定性。

2、以下数据结构中,属于线性数据结构的是

A、集合

B、线性表

C、二叉树

D、图

标准答案:2

知识点解析:所谓的线性结构:如果一个#空的数据结构满足下列两个条件,即

1)有且只有一个根结点;2)每一个结点最多有一个前件,也最多有一个后件。同时

满足两个条件的只有线性表,而其他三种数据结构的结点可能存在多个前件或后

件,所以不是线性结构。

3、设有下列二叉树:对此二叉树先序遍历的结果是

A、ABCDEF

B、BDAECF

C、ABDCEF

D、DBEFCA

标准答案:4

知识点解析:二叉树的遍历分为先序、中序、后序三种不同方式。本题要求先序遍

历,遍历顺序应该为:访问根结点->先序遍历左子树->先序遍历右子树。按照定

义,先序遍历序列是ABDCEF。

4、下面对对象概念描述,不正确的是

A、任何对象都必须有继承性

B、对象是属性和方法的封装体

C、对象间的通讯靠消息传递

D、操作是对象的动态属性

标准答案:1

知识点解析•:有时为了保护某些特有的对象,可以通过定义其为私有属性达到不被

继承的目的。

5、对建立良好的程序设计风格,描述正确的是

A、程序应简单、清晰、可读性好

B、符号名的命名只要符合语法即可

C、充分考虑程序的执行效率

D、程序的注释可有可无

标准答案:1

知识点解析:符号名应该能反映出它所代表的实际东西,应有一定的意义,不是简

单的符合语法就可以。应该在保证程序正确的情况下再考虑程序的执行效率。程序

的注释有益于对程序的理解和维护,好的程序必不可少。

6、检查软件产品是否符合需求定义的过程称为

A、确认测试

B、集成测试

C、验证测试

D、验收测试

标准答案:1

知识点解析:确认测试是要检查已实现的软件是否满足了需求规格说明书中确定了

的各种需求,以及软件配置是否完全正确。软件需求规格说明书是软件确认测试的

基础。

7、在结构化程序设计方法中,下面哪种内聚性最弱?

A、逻辑内聚

B、时间内聚

C、偶然内聚

D、过程内聚

标准答案:4

知识点解析:内聚有很多种类,其中内聚性由弱到强的顺序为:偶然内聚、逻辑内

聚、时间内聚、过程内聚。

8、在数据库管理系统提供的数据语言中,负责数据的完整性、安全性的定义与检

查以及并发控制、故障恢复等功能的是

A、数据定义语言

B、数据转换语言

C、数据操纵语言

D、数据控制语言

标准答案:8

知识点解析:在数据库管理系统提供的数据语言中,数据控制语言负责数据的完整

性、安全性的定义与检查以及并发控制、故障恢复等功能。

9、数据库系统可分为三级模式,下列选项中不属于数据库三级模式的是

A、抽象模式

B、外模式

C、概念模式

D、内模式

标准答案:1

知识点解析:数据库的三级模式是指概念模式、内模式和外模式。其中外模式又叫

子模式,内模式乂叫物理模式。

10、在关系数据库中,用来表示实体之间联系的是

A、树形结构

B、网状结构

C、线性表

D、二维表

标准答案:8

知识点解析:数据库中的关系模型是采用二维表来表示实体与实体之间的联系。

二、选择题(1分)(本题共70题,每题7.0分,共70

分。)

11、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的

A、有零个或多个输入

B、有零个或多个输出

C、有穷性

D、可行性

标准答案:2

知识点解析:算法是为解决某个特定问题而采取的确定的且有限的步骤,一个算法

应当具有以下5个基本特性:1)有穷性,就是指一个算法应当包含有限个操作步

骤。2)确定性,就是说算法中每一条指令必须有确切的含义,不能有二义性,对

于相同的输入必能得出相同的执行结果。3)有零个或多个输入。4)可行性,就是

说算法中指定的操作,都可以通过已经实现的基本运算执行有限次实现。5)有一

个或多个输出。

12、以下叙述中正确的是

A、C语言的源程序不必通过编译就可以直接运行

B、C语言中的每条可执行语句最终都将被转换成二进制的机器指令

C、C源程序经编译形成的二进制代码可以直接运行

D、C语言中的函数不可以单独进行编译

标准答案:2

知识点解析:C语言采用编译方式将源程序转换为二进制的目标代码,编写好一个

C程序到完成运行一般经过以下几个步骤:1)编译,就是将已经编辑好的源程序翻

译成二进制的目标代码,经编译后得到的二进制代码还不能直接执行,因为每一个

模块往往是单独编译的,必须把经过编译的各个模块的目标代码与系统提供的标准

模块连接后才能运行:2)连接,将各模块的二进制目标代码与系统标准模块经连

接处理后,得到具有绝时地址的可执行文件,它是计算机能直接执行的文件;3)

执行,执行一个经过编译和连接的可执行的目标文件。

13、以下符合C语言语法的实型常量是

A、1.2E0.5

B、3.14159E

C、5.OOE-O3

D、E15

标准答案:4

知识点解析:实型常量只能用十进制形式表示,不能用八进制或十六进制形式表

示,实型常量可以用小数形式或指数形式表示,在c语言中,可以用指数形式将实

型常量表示为数值和指数两部分,数值部分不能为空,指数部分只能为整数表示。

选项A中1.2和0.5都不是整数,选项B中3.14159也不是整数。

14、以下4组用户定义标识符中,全部合法的一组是

A、_mainencludesin

If_maxturbo

C、txtREAL3C0M

D、intk_2_001

标准答£1

知识点解析:标识符是以字母或下划线开头,由字母、数字或下划线组成的字符序

列(例如,-max含非法字符.),并且用户标识符不能与C语言中的32个关键字同名

(例如,int是关键字,不是合法的用户标识符)。选项B中-max不是字母、数字或

下划线组成的字符序列;选项C中3coM不是由字母或下划线开头;选项D中血

为C语言中的关键字;选项A中全部为合法的标识符。

15、若以下选项中的变量已正确定义,则正确的赋值语句是

A、xl=26.8%3;

B、l+2=x2;

C^x3=0xl2;

D、x4=1+2=3;

标准答案:4

知识点解析:赋值操作由赋值运算符,、="来完成,一般形式为变量;表达式,赋值

的方向为由右向左,即将右侧表达式的值赋给左侧的变量,执行步骤是先计

算再赋值。选项A中运算符"%”的运算对象必须为整数,而选项A中26.8不为整

数;选项B将一个变量赋值给一个表达式,这在C语言中是不允许的;选项D中

也是将一个常量3赋值给一个表达式。

16^设有以下定义inta=0:doubleb=1.25:charec=,A\#defined2则下面语句

中错误的是

A、a++;

B、b++;

C、c++;

D、d++;

标准答案:8

知识点解析:自加运算对象可以是整型变量也可以是实型变量,但不能是表达式和

常量。本题中,#defined2定义了d为常数2,不能再对d进行自加运算。

1

17、设有定义:floata=2,b=4,h=3;以下C语言表达式中与代数式T(a+b)h计算

结果不相符的是

A、(a+b)*h/2

B、(l/2)*(a+b)*h

C、(a+b)*h*l/2

D、h/2*(a+b)

标准答案:2

知识点解析:将简单的数学表达式表示成合法的C程序的语句。选项B中由于1

和2都是整型,其1/2的运算结果为0,故整个表达式的值为0,所以它的结果和

题目中要求的代数式的计算结果不相符。

18、有以下程序main(){intx=102,y=012;printf("%2d,%2d\n',,x,y);}执行后输

出结果是

A、10,01

B、02,12

C、102J0

D、02,10

标准答案:4

知识点解析:本题中,pfintf("%2d,%2d\n,\x,y]表示输出形式是十进制整数,

域宽是2,而在C语言中规定:当域宽小于实际宽度时域宽不起作用,按实际宽度

输出因此最后的输出值为102和10o

19、以下4个选项中,不能看作一条语句的是

A、{;}

B、a=0,b=0,c=0:

C、it(a>0);

D、if(b==0)m=1;n=2;

标准答案:8

知识点解析:C语言是一种表达式语言,所有的操作运算都通过表达式来实现,由

表达式组成的语句称为表达式语句,它由一个表达式后接一个分号组成。本题中,

选项D中if(b==0)m=l;n=2;是两个表达式语句。

20、设有定义:inta,*pa=&a;以下scanf语句中能正确为变量a读入数据的是

A、scant("%d",pa);

B、scant(,'%d,',a);

C、scanf("%d”,&pa);

D、scanf("%d",*pa);

标准答案:1

知识点解析:scanf()函数的功能是进行输入数据,它是按格式参数的要求从终端上

把数据传送到地址参数所指定的内存空间中,C语言允许程序员间接地使用内存地

址,这个地址是通过对变量名“求地址”运算得到的,求地址的运算符是&,得到的

地址是一种符号地址。本题中定义了整型变量a和一个指向整型数据的指针变量

pa,并定义pa是一个存放a的地址的变量。选项B中应该将a改为&a;选项C应

该将&pa改龙pa.因为pa已经表示存放a的地址:选项D中*pa表示的是指针pa

所指向存储空间的变量的值,而不是一个地址。

三、选择题(2分)(本题共30题,每题7.0分,共30

分。)

21、有以下程序main。{inti=l,j=l,k=2;if((j++IIk++)&&i++)

printf("%d,%d,%d\n",i,j,k);)执行后输出结果是

A、1,1,2

B、2,2,1

C、2,2,2

D、2,2,3

标准答案:4

知识点解析:首先计算if语句后面的表达式值,先计算运算符&&前面括号里的

运算。在运算中先计算j++,值为l(j的值为2),为真,后面的k++将不再计

算,k的值依旧为2。计算&&后面的表达式i++,值为l(i的值变为2)。整个表达

式的值为真,所以执行后面的输出语句,最后输出的i、j和k的值为2、2和2。

22、有以下程序main。{inta=5,b=4,c=3,d=2;if(a>b>C)printf("%d\n",d);

elseif((c-l>=D)==1)printf("%d\n",d+l);elseprintf("%d\n'^,d+2);}执行后输

出结果是

A、2

B、3

C、4

D、编译时有错,无结果

标准答案:2

知识点解析:C语言规定else总是和离它最近的if语句配对。故第一个else和第一

个if配对,第二个else和第二个if配对。首先计算第一个if后面的表达式“a>b>

c”,表达式“a>b”是为1,表达式为0,所以执行else后面的语句。先执行if

后面的表达式,为真,值为1。"1==1”为真,执行primf语句。

23、有以下程序main。{intp[7]={l1,13,14,15,16,17,18},i=0,k=0;while(i<

7&&p[i]%2){k=k+p[i];i++;)printf("%d\nM,k);)执行后输出结果是

A、58

B、56

C>45

D、24

标准答案:8

知识点解析:在主函数中首先定义了一个数组p并初始化,在while后面括号里的

表达式中,i初值为0,当p[i]为偶数时,P[i]%2等于0,根据运算符的规

则.其表达式为假退出循环,显然当i=2时,p[i]=l4为偶数,此时while后面括号

里的表达式的值为假,退出循环,此时k=p[0]+p[l],即k=ll+13。所以最后输出k

为24o

24、有以下程序main(){inti=0,s=0;do{if(i%2){i++;continue;}i++;

s+=i;)while(i<7);printf(u%d\nu,s);)执行后输出结果是

A、16

B、12

C、28

D、21

标准答案:1

知识点解析:do循环与cominue语句,在循环体中有一条if语句,其后面表达式

为“i%2”,当i的值为奇数时,其值为真,执行其后面的语句,i的值加1,重新开

始循环,当i的值为偶数时,“i%2”为假,执行“i++;s+=i”。在循环中i为偶数时

的值分别为0、2、4、6,加1过后的值分别为1、3、5、7,s中存放的是它们的

和,值为16o

25、有以下程序main(){inti:10,j=l;printf("%d,%d\n",i-,++j);)执行后输出结果

A、9,2

B、10,2

C、9,1,

D、10,1

标准答案:2

知识点解析:++、■•运算符在变量之前是先使变量的值加1或减1,然后再使用变

量的值;如果在变量之后则先使用变量之前的值,再把变量的值加1或减1。显

然,程序中表达式“i--的值为10,“++j”的值为2,所以最后输出的值为10和2。

26>有以卜程序main。{chara,b,c,*d;a='\';b='\xbc';c=*\Oxab,;d="\0127";

pfintf("%c%c%c%c\n",a,b,c,*d);)编译时出现错误,以下叙述中正确的是

A、程序中只有a=';语句不正确

B、b='\xbc<语句不正确

C、d="\0127”;语句不正确

D、a=,V;和c=,‘Oxab';语句都不正确

标准答案:8

知识点解析:给字符变量赋值只能赋一个字符,包括转义字符,语句是错误

的,因为是转义字符,应该用“\\”来表示,语句小=、加,;”是正确的,它是将

一个用十六进制表示的转义字符赋给一个字符型变量;语句"c=\Oxab;”是正确

的,反斜线后的十六进制只可由小写x开头,不能用Ox。语句气="\0127“;”是正

确的,可以给字符型指针变量赋一个字符串,其作用是让该指针变量指向该字符

串。

27、有以下程序intfl(intx,inty){returnx>y?x:y;}intf2(intx,inty){returnx>

y?y:x;)main(){inta=4,b=3,c=5,d,e,f;d=fl(a,b);d=fl(d,c);e=f2(a,b);

e=f2(e,c);f=a+b+c-d-e;printf("%d,%d,%d\n”,d,f,e);)执行后输出结果是

A、3,4,5

B、5,3,4

C、5,4,3

D、3,5,4

标准答案:4

知识点解析:函数fl()的作用是返回形参x和y的较大值,函数f2()的作用是返回

形参x和y的较小值,在main。函数中通过调用两次fl()函数,求得a、b、c的最

大值并存放在变量d中,通过调用两次(2()函数,求得a、b、c的最小值并存放到

变量e中。由程序可知d值为5,f的值为4,e的值为3,因此最后输出的d、f、e

的值为5、4、3o

28、有以卜.程序voidf(intx,inty){intt;if(x<y){t=x;x=y;y=t;}}main(){int

a=4,b=3,c=5;f(a,b);f(a,c);f(b,c);printf("%d,%d,%d\n,1,a,b,c);}执行后输出结果

A、3,4,5

B、5,3,4

C、5,4,3

D、4,3,5

标准答案:8

知识点解析:C语言规定,在函数调用时变量作为参数传递是传值的,在函数体中

对形参变量的修改不能影响到对应的实参变量。本题定义了一个函数f(),用变量

作为形参,在main()函数中调用了3次f()函数,由于变量作为参数进行传递,所

以对应的实参的值并没有被交换。所以输出的a、b>c依旧是原来的值4、3、50

29、若有以下定义和语句#include〈stdio.h>inta=4,b=3,*p,*q,*w;

p=&a;q=&b;w=q;q=NULL:则以下选项中错误的语句是

A、*q=0;

B>w=p;

C、*p=a;

D^=*w;

标准答案:1

知识点解析:本题中定义了3个指向整型的指针变量p、q、w,并让P指向a,让

q指向b,通过将q的值赋给w,使w也指向b,最后将NULL赋值给q。由整型

变量指针的定义可知,可以给整型指针指向的变量赋一个常数值(表达式);可以给

指针变量赋一个同种类型的指针变量(或地址值):选项A因为q不指向任何变量,

给一个空指针指向的单元赋值是错误的。

30、有以下程序int*f(int*x,int*y){if(*x<*y)returnx;elsereturny;}main()

{inta=7,h:8,*p,*q,*r:p=&a:q=&b:r=f(p,q):

printf("%d,%d,%d\n",*p,*q,*r);)执行后输出结果是

A、7,8,8

B、7,8,7

C、8,7,7

D、8,7,8

标准答案:2

知识点解析:本题定义了一个返回值为指针的函数2,此函数有两个指针型的形

参x和y,该函数的功能,是返回x和y指向的变量中值较小的那个指针变量。主

函数中定义了两个指针变量P和q,井让它们指向了变量a和b,调用函数f(),返

回指向的变量值较小的由针变量,「的值为指针变量p的值(变量a的地址),因此

最后输出的*p、*q和*1•的值是7、8和7。

31、有以下程序main(){char*s[]=("one","two","three"),*p;p=s[l];

printf("%c,%s\n';*(p+l),s|O|);)执行后输出结果是

A、n,two

3one

C^w,one

D、O,two

标准答案:4

知识点解析:本题首先定义了一个有3个元素的指针数组s,并通过赋值使s[0]指

向字符串“one”,s[l]指向字符串“two”,s[2]指向字符串“three”,然后通过赋值语句

“P=S[1『,使P指向了字符串“two”,故“*(p+l)”就是字符“W”。

32、有以下程序main。{intx[X]=[8,7,6,5,0,0},*9;s=x+3;

printf("%d\n",s[2]);}执行后输出结果是

A、随机值

B、0

C、5

D、6

标准答案:2

知识点解析:指向一维数组的指针变量,通过赋值语句“s=x+3”,使指针变量s指

向数组元素x[3],输出语句中的s⑵等价于*(s+2),即x[5]值为0。

33、以下能正确定义数组并正确赋初值的语句是

A、intN=5,b|N][N];

B、inta[lM2]={{l},{3}};

C>intc[2][l]=((l,2),3,4));

D、intd[3H2]={{l,2},{34}};

标准答案:8

知识点解析:选项A中,数组的长度使用了变量N,而在C中是不能用变量来定

义数组的的长度的。在C语言中,给二维数组赋初值时,行数不能超过定义的行

数.每行的初值个数不能超过定义时的列数.选项「数组的第二维下标缺省.而

在C语言中,数组的第二维下标不能缺省。

34、有以下程序main(){inlmH[3]={l,4,7,2,5,8,3,6,9);inti,j,

k=2;for(i=0;i<3;i++)(printf("%d”,m[k][i]);))执行后输出结果是

A、456

B、258

C、369

D、789

标准答案:4

知识点解析:变量k的初值为2,循环执行了3次,分别输出m⑵川和

m|2][2],其值分别为3,6,9o

35、以F函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#define

N10voidarrin(intx[N])(inti=0;while(i<N)seanf("%d",);)在下划线处应

填入的是

A、x+i

B、&x[i+l]

C、x+(i++)

D、&x[++i]

标准答案:4

知识点解析:在scanf()函数中有两个参数,其中第一个参数为输入格式字符串,

第二个参数是地址字符串。根据scanl()的定义,故应该在空白处填入一地址,又由

题意要给数组的每个成员赋值,i表示数组的下标,那么i必须每循环一次加1,即

指向下一个数组元素,当i=7时循环体执行了7次,数组的每个成员都被赋值了,

退出循环。

36、有以下程序main。{chars[]="\nl23\\";printf("%d,%d\nn,strlen(s),sizeof(s));}

执行后输出结果是

A、赋初值的字符串有错

B、6,7

C、5,6

D、6,6

标准答案:4

知识点解析:本题在定义字符数组时没有定义数组长度,但是给数组赋了初值,这

时初值的个数即为数组的长度,故数组长度为6(包括)0》字符串的长度为有效字

符的个数5。因此printf语句中输出的结果为5,6。

37、阅读以下函数函n(char*sl,char*s2){inti=0;

while(sl[i]=s2[i]&&s2[i]!=,\0,)i++;retum(sl[i]==,\0,&&s2[i]=,\0,);}此函数的

功能是

A、将s2所指字符串赋给si

B、比较si和s2所指字符串的大小,若si比s2的大,函数值为1,否则函数值为

0

C、比较si和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

D、比较si和s2所指字符串的长度,若si比s2的长,函数值为1,否则函数值为

0

标准答案:4

知识点解析:在函数fun()中有两个字符型指针变量si和s2,在函数中程序执行

while循环,该循环退出条件有两个:一个是sl[i]!=s2[l](两个字符串不相等):第

二个是sl[l]和s2[i]相等均为“、0”(两个字符串相等)。循环退出后,执行return语

句,即两个字符串相等则返回1,不相等则返回0。

38、以下叙述中正确的是

A、全局变量的作用域一定比局部变量的作用域范围大

B、静态(slalic)类型变量的生存期贯穿于整个程序的运行期间

C、函数的形参都属于全局变量

D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值

标准答案:2

知识点解析:若在函数中定义与全局变量名字相同局部变量,则全局变量在该函数

中将不起作用,因此全局变量的作用域并不一定比局部变量的作用域大;静态变量

一旦定义,将在整个程序的运行期间都存在;函数的形参只在函数调用的时候分配

存储空间,在退出函数时收回存储空间,因此是局部的;没有赋值的auto型变量

的初值是随机的,没有赋值的static型变量的初值是0。

39、设有如下说明lypedefstruct{intn;charc;doublex;}STD;则以下选项中,能正

确定义结构体数组并赋初值的语句是

A、STDtt[2]={{l,,A,,62},{2;B,,75});

B、STDtt[2]={l;'A,',62.2;'B';75);

C、streetn[2]={{l,,A,}J2,,B,});

D、structtt[2]={{1,"A",62.5},{2,"B",75.0)};

标准答案:1

知识点解析:本题定义了一个结构体类型并自定义类型名为STD,用户自定义类

型后,就可以利用它进行变量与数组的定义。定义的方法,与C语言中其他类型

的定义完全一样,定义结构型数组并赋初值时,每个元素用一对和”}”括起来,

字符型元素用括起来。

40、有以下程序main。{union{unsignedintn;unsignedcharc;)ul;ul.C=,A,;

pfintf("%c\n';ul.n);}执行后输出结果是

A、产生语法错

B、随机值

C、A

D、65

标准答案:4

知识点解析:在定义共用体的同时,定义了一个共用体型变量ul,共占两个字

节,有两个成员n和c,两个成员的首地址是相同的。因此给ul,c赋一个“A”,

其实就是给无符号整型成员ul.n的低字节赋一个,A”,输出ul,n的时候是以字

符型的形式输出,只输出它的低地址的一个字节,因此为“A”。

41、有以下程序main。{charatr[]="xyz",*ps=str;while(*ps)ps++;for(ps—;ps-str>

=O;ps--)puts(ps);}执行后输出结果是

A、yzxyz

xyz

C、zyzxyz

D、xxyxyz

标准答案:4

知识点解析:执行while循环,使指针变量ps指向字符串“xyz”的字符串结束标

志,然后执行for循环,先执行“ps-”,使ps指向字符“z",故puts(ps)输出结果为

“z”;再次执行“ps—”,使ps指向字符“y",故puts(ps)输出结果为“yz”;再次执行

“ps--",使ps指向字符“x",故puls(ps)输出结果为“xyz”,退出循环。

42、有以下程序main(){inta[][3]={{L2,3},{4,5,0}},(*pA)[3],i;pa=a;for(i=0;i

<3;i++)if(i<2)Pa[l][i]=pa[l][i]-l;elsepa[l][i]=l;

Hn

printf(%d\n,a[O][l]+a[l][l]+a[l][2]);)执行后输出结果是

A、7

B、6

C、8

D、无确定值

标准答案:1

知识点解析:本题定义了一个指向由3个元素组成的一维数组的指针变量pa,通

过赋值让它指向具有2行3列的数组a;此时用指针变量pa,表示数组元素

的形式是for循环执行了3次:第一次i值为0,ftIfpa[l][0]=pa[l][0]-

1,执行后a[l]⑼的值变为3;第二次i值为I,执行执行后

的值为4;第三次i值为2,执行pa[l][2]=l,执行后a⑴⑵的值变为1。故

primf语句输入的值为2+4+1=7o

43、有以卜程序voidfun(int*a,inti,intj){int;if(i<j){t=a[i];a[i]=a[j];a[j]=t;

fun(a,++i,-j);))main(){inta[]={1,2,3,4,5,6),i;fun(a,0,5);for(i=0;i

<6;i++)printf("%d",a[i]H|执行后输出结果是

A、654321

B、432156

C>456123

D、123456

标准答案:1

知识点解析:函数fun()中有3个参数,参数。为一个指针变量,接收的实参可以

是数组名,参数i和J分别表示数组元素的下标,当下标i小于下标j时,a[i]和a[j]

交换,然后对自身进行调用,可见这是一个递归函数。其实现的功能是把数组a,

从下标为i的元素到下标为j的元素之间的所有元素反序存放。在主函数中调用

fun()函数,把a数组从a[0]到a[5]之间的所有元素反序存放,最后输出从a[l]到

a[5]的值,因此输出的值为6、5、4、3、2、1。

44、有以卜程序main(intargc,char*argv[]){intn,i=0;while(argv[1][i]!=,\0,)

{n=fun();i++;}printf(H%d\n",n*argc);)intfun(){staticints=0:s=-l;return

s;}假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行

exam123V回车,则运行结果为

A、6

B、8

C、3

D、4

标准答案:1

知识之解析:主函数的第一个参数argc为整型参数,记下从命令行输入的参数的

个数:第二个参数argv是一个字符型的指针数组,它的每一个元素指向命令行输

入的参数字符数。在本例中argc的值为2,argv[O]指向字符串“exam",argv[l]指向

参数字符串“123”。在main。函数中,while循环执行了3次,调用了3次fun()函

数:第一次调用fun()函数时,定义了一个静态变量s并赋初值0,加1后作为函

数值返回,n伪值为1;第二次调用fun()函数时,静态变量s的值将保留上一次退

出时的值1,再加1为2,作为函数值返回,n的值为2;同理第三次调用返回后,

n的值为3。输出n*argc的值为6。

45、以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个

合法的整型单元的是(

A、main(){int*p;fun(p);\}intfun(int*p){ints;p=&s;}

B、main(){int*p;fun(&p);:}intfun(int**p){ints;*p=&s;}

C、#includc<stdlib.h>main(){int*p;fun(&p);;)int

fun(int**p){*p=(int*)malloc(2);}

D^#include<stdlib.h>main(){int*P:fun(p);;)intfun(int*p)

{p=(int,1,)malloc(sizeof(iiit));)

标准答案:4

知识点解析:在选项A中,main。函数中定义了一个指针变量P,调用fun()函数时

把p传给形参P,在函数中让p指向局部变量s,由于函数调用返回后,局部变量s

将被释放,因此无法实现让实参p指向一个整型单元。选项B中实现的也是让实

参p指向一个在函数fun()定义的局部变量s;选项C在函数fun()中分配了两个字

节的内存单元并把首地址赋值给形参p指向的变量,即main。函数的指针变量p

中,由于整型变量占两个字节;选项D在主函数中定义了一个指针地址变量p,并

把指针变量的值传给形参变量p,在fun。函数分配了一个整型单元并把首地址赋值

给形参指针变量P,由于C语言中变量作为参数是传值的,所以并没有改变对应实

参指针变量的值。

46、若要说明一个类型名STP,使得定义语句STPs;等价于chads;以下选项中

正确的是

A、typedefSTPchar*s

B、typedef*charSTP:

C、typedefSTP*char;

D、typedefchar*STP:

标准答案:8

知识点解析:指针类型的自定义的形式如下:lypedef类型说明符*用户类型名。不

难看出只有选项D是正确的定义形式。

47>设有如下定义structss{charname[10];intage;charsex;}std[3],*p=std;

下面各输入语句中错误的是

A、scanf("%d",&(*p).age);

B、scant(,"%s",&);

C、scanf("%c'\&std[O].sex):

D、scanf("%c",&(p->sex));

标准答案:2

知识点解析:选项A中“&(*p).age”代表的是etd[O].age的地址,是正确的,选项

C也是正确的,选项D先用指针变量引用结构型的成员sex,然后取它的地址,也

是正确的,选项B中的“std.name”是错误的引用,因为std是数组名,代表的是数

组的首地址,地址没有成员"name”。

48、设char型变量x中的值为10100111,则表达式(2+x)(0的值是

A、10101001

B、10101000

C、11111101

D、1010101

标准答案:8

知识点解析:表达式(2+x)二进制表示为“10101001”,(-3)即把3按位取反得到二进

制值为“11111100”,再把这两个二进制按位加(异或),得到结果位“01010101”。

49、以下叙述中不正确的是

A、C语言中的文本文件以ASCH码形式存储数据

B、C语言中对二进制文件的访问速度比文本文件快

C、C语言中,随机读写方式不适用于文本文件

D、C语言中,顺序读写方式不适用于二进制文件

标准答案:8

知识点解析:在C语言中文本文件是以ASCII码形式存放的,每个字符占一个字

节。由于数据在计算机中是以二进制形式存放的,因此二进制文件中的数据可以直

接读出,而不需要像文本文件那样把ASCII码转换成二进制,因此速度较快。在

文本文件中,数据以ASCII码形式存放的,用户很难判定一个数据到底占几个字

节,所以不适合使用随机读写方式。

50、以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端

读入字符#号时结束输入和输出操作,但程序有错。#include<stdio.h>main()

{FILE*fout;charch;fbur=fbpen(,abc.txt,,,w,);ch=fgetc(stdin);while(ch!='#')

(fputc(ch,fout):ch=fgetc(stdin);}felose(fout);}出错的原因是

A、函数fopen调用形式错误

B、输入文件没有关闭

C、函数fsetc调用形式错误

D、文件指针stdin没有定义

标准答案:1

知识点解析:stdin是标准输入设备的文件指针,不需定义直接可以使用,它随系

统的启动而打开,随系统的关闭而关闭,fgctc。函数的作用是从某个文件中读取一

个数据,其参数为要读取文件的文件指针。fopen()函数有两个参数,第一个参数是

打开的文件名,第二个参数是文件打开模式,两个参数都是字符串,本例中

“fbur=fbpen(,abc.txt',w>”语句的fopen()函数参数是错误的,应该用双引号

“w”,正确的应改为fout=fbpen("abc.tx","w");’

四、公共基础填空题(本题共5题,每题7.0分,共5

分。)

51、算法执行过程中,所需要的基本运算次数称为算法的【】。

标准答案:时间复杂度

知识点解析:算法在执行过程中所执行的基本运算的次数,也就是执行算法所需要

的计算工作量,称为算法的时间复杂度。

52、在一棵二又树上第6层的结点个数最多是【】。

标准答案:32

知识点解析:根据二叉树的性质,在二叉树的第k层上,最多有2的k-1次方个结

点。所以,第6层的结点数最多为32。

53、软件是程序、数据和【】的集合。

标准答案:文档

知识点解析:计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程

序、数据以及相关文档的完整集合。

54、实体一联系模型是一种常用的高级概念数据模型,而【】是实体—模型中的

核心。

标准答案:实体-联系图(E-R图)

知识点解析:实体-联系图(E-R图)是实体联系模型中的核心。由于E-R图描述的是

数据流图中数据存储及其之间的关系,因此它是数据库概念设计的最常用的工具。

55、在数据库理论中,数据库总体逻辑结构的改变,如修改数据模式、增加新的数

据类型、改变数据间联系等,不需要修改相应的应用程序,称为【】。

标准答案:逻辑独立性

知识点解析:数据库总体逻辑结构改变,而不需要相应修改应用程序叫做逻辑独立

性。

五、填空题(本题共73题,每题1.0分,共13分。)

56、若从键盘输入58,则以下程序的输出结果是【】。main(){inta;

scanf("%d”,&A);if(a>50)printf("%d”,A);if(a>40)prin氓"%d”,A);if(a>

30)printf("%d",A);}

标准答案:585858

知识点解析:在程序中,执行scanf()语句后,a被赋值为58。接着执行第一个if语

句,因为,a=58>50,执行第一个if语句后面的输出语句,输出58;接着执行第

二个if语句,因为,a=58>40,执行第二个if语句后面的输出语句,输出58;接

着执行第三个if语句,因为,a=58>30,执行第三个if语句后面的输出语句,输

出58,所以最后的输出为585858。

57>以下程序的输出结果是[]。main()(inta=177;printf("%o\n",A);}

标准答案:261

知识点解析:在控制格式符中代表的是将数据按八进制数输出,十进制数的

177代表的八进制数是261o

58、以F程序的输出结果是【】omain(){inta=0;a+=(a=8);printf("%d\n”,

A);)

标准答案:16

知识点解析:在程序中首先将•8赋值给变量a,然后再进行复合赋值运算。即

a=a+a=8+8=16,所以该空格处应该填16。

59、以下程序的输出结果是[]。main(){inta=5,b=4,c=3,d;d=(a>b>

C);printfT%d\n",D);!

标准答案:0

知识点解析:关系运算符的结合方式是从左向右的,所以在本题中的表达式a

>b=c;从左向右开始计算,a>b的结果为“1”,接着1和c比较假,该空格处应

该填0。

60、以下定义的结构体类型包含两个成员,其中成员变量inf。用来存放整型数

据;成员变量link是指向自身结构体的指针。请将定义补充完整。structnode{int

info;[]Link;};

标准答案:structnode*

知识点解析:link是指向结构体自身的指针,因此link是指针,指向slriclnode类

型的数据,可定义成“stmctnode*link”。

61、以下程序的输出结果是【】。main(){ints,i;for(s=0,i=l;i<3;i++>

s+=i;printf(<<%d\n,\s);}

标准答案:5

知识点解析:此程序中,for循环语句后面直接跟了一个";“,表明循环体为空。输

出语句不在for循环体内,所以在循环执行完毕后才输出s的值。s、i的初值分别

为0和1,判断循环条件,表达式“1V3”成立,执行“i++,s+=i”后,i和s的值分别

为2和1,继续判断循环条件,表达式“2<3”成立,执行“计+,s+-i”后,i和s的值

分别为3,再次判断循环条件,表达式“3〈3”不成立,循环结束。

62、以下程序的输出结果是【】。main。{char*p="abodefgh”,*r;long*q;

q=(long*)p;q++;r=(char*)q;printff'%s\n",r);}

标准答案:efgh

知识点解析:本题定义了一个字符型指针变量P并通过赋初值让它指向了一个字符

串,定义了另一个字符型指针变量r和一个长整型指针变量q。首先通过语句

“q=(long*)p;”把P的地址值强制转换为长整型地址值并赋值给q,然后执行

“q++;”,地址值增加了4,执行语句“L(char*)q;1把长整型指针变量q的值再强制

转换成字符型地址值并赋给3的值应为字符串中字符“e”的地址,最后输出,指向

的字符中,是“efgh”。

<,,,

63、以下程序的输出结果是[]Qmain(){chars[]-abcdef;s[3]=\0;

printf(u%s\n,\s);}

标准答案:abc

知识点解析:字符串的结束标记、(T,当输出一个存放在字符数组中的字符串时,

只需输出到、(T为止,而不管其后有什么数据。本题给字符数组s的元素s[3]赋值

为、(T,故只能输出3个字符“abc”。

64、以卜程序的输出结果是【】。main(){intx=0;sub(&x,8,1);

printf(u%d\n,\x);)sub(int*a,intn,intk){if(k<=n)sub(a,n/2,2*k):

*a+=k;)

标准答案:7

知识点解析:在主函数中定义了一个变量x并赋初值0,然后执行函数调用语句,

该语句的执行过程为sub(&x,8,l)调用sub(&a,4,2),sub(&a,4,2)调用sub(&a,2,4),

sub(&a,2,4)中由于2V4,所以if后面括号里的判断为假,递归结束,执行其后的

*a+=k;语句此时x=x+k=0+4=4,回退到上一层调用函数sub(&x,4,2)中,执行后面

的语句,x=x+k=4+2=6,再回推到最上一层调用函数sub(&x,8,1)执行后面的语

句,x=x+k=6+l=7,所以最后输出7<>

65、设有如下宏定义#defineMYSWAP(z,x,y)[z=x;x=Y;Y=z;}以下程序段

通过宏调用实现变量a、b内容的交换,请填空。floata=5,b=16,c;

MYSWAP([],a,b);

标准答案:c

知识点解析:本题关键在考生是不是了解宏的基本运用,在使用宏的时候明显少了

-个实参。在定义宏的时候变量Z是用来做中间变量的,题目中缺的变量就是一个

中间变量C。

66、以下程序用来统计文件中字符的个数。请填空。#includc“stadio.h”main()

{FILE*fp;longnum=0L;iR(m=fbpen("fhame.dat","r"))==NULL);

{print^Openerror\n,,)jexit(O);)while([]){fsetc(fp);num++;)

printf("num=%ld\n”,num-1);fclose(fp);}

标准答案:!feof(fP)

知识点解析:统计文件中字符个数的算法可描述如下:首先判断文件位置指针是否

指向了文件尾,如果不是则读出一个字符,同时字符的个数加1,再判断文件位置

指针是否位于文件尾,如此循环,直到文件位置指针位于文件尾为止。本题首先以

读文件的方式打开了文件'fname.dar”,如果打开成功则把返回的文件型指针赋值给

fp,然后通过循环求文件中的字符数。首先判断文件位置指针是否位于文件尾,如

果不是则循环读取字符,每次字符数加1。所以下划处应填循环条件,文件位置指

针不是指向文件尾,即“!fcof(fp)”。

67、以下程序中,selec[函数的功能是:在N行M列的二维数组中,选出一个最大

值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。#defineN3

#defineM3select(inta[N][M],int*n){inti,j»ro\v=1,colum=l;for(i=0;i<

N;i++)for(j=0;j<M;j++)if(a[i](j]>a[row][colum]){row=i;colum=j;)*n=

[];return([]);)main(){inta[N][M]={9,11,23,6,1,15,9,17,

20),max,n;max=selcct(a,&n);pnntf(fc*max=%d,line=%d\n,\max,n);}

标准答案:rowa|row]|colum]

知识点解析:指针变量祚为函数参数及二维数组的一个典型算法——求最大值及其

下标。通过对题意的分析,在select。函数中,变量row的作用是用来记录最大元

素的行下标,colum的作用是用来记录最大元素的列下标。程序中通过一个循环求

得数组元素中最大值的行列下标,分别存放在变量row和colum中,根据题意,应

该把行下标赋值给形参指针变量n指向的变量,把最大值a[row][colum]作为函数

值返回。

68、mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回.请填

空。intmystrlcn(char*str){inti;for(i=0;[]!='\0';i++);rcturn([));)

标准答案:*(str+i)或str|i]]i

知识点解析:求str指向的字符串长度的算法是:用一个变量i表示字符串中字符

的位置,一开始赋值为0,取出i位置的字符,判断是否为“\0”,若不是则i的值加

1,如此循环直到取出的字符是“\0”为止,此时i的值就是字符串的长度。由此可

知,第一个空处应填第i位置上的字符*(str+i);第二个空格应该填字符串的长度

国家二级(C语言)笔试模拟试卷第2

一、公共基础选择题(本题共70题,每题7.0分,共

70分。)

1、算法的空间复杂度是指()

A、算法程序的长度

B、算法程序中的指令条数

C、算法程序所占的存储空间

D、算法执行过程中所需要的存储空间

标准答案:D

知识点解析:一个算法的空间复杂度,一般是指执行这个算法所需的存储空间。

个算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存

储空间及算法执行过程中所需要的额外空间。

2、数据的存储结构是指()

A、数据所占的存储空间

B、数据的逻辑结构在计算机中的存放形式

C、数据在计算机中的顺序存储方式

D、存储在计算机外存中的数据

标准答案:B

知识点解析:数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算

机中的存放形式。数据的存储结构有顺序结构、链式结构、散列结构和索引结构

等。

3、有下列二叉树,对此二叉树前序遍历的结果为()

A、ACFHIBEDG

B、ABCDEFGHI

C、ABDEGCFHI

D、ABCDEFHGI

标准答案:C

知识点解析:对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访

问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子

树。

4、下列描述中正确的是()

A、程序就是软件

B、软件开发不受计算机系统的限制

C、软件既是逻辑实体,又是物理实体

D、软件是程序、数据和相关文档的集合

标准答案:D

知识点解析:软件是运行在计算机硬件之上的逻辑实体,包括程序、数据和相关的

文档。软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制。

5、两个或两个以上模块之间联系的紧密程度称为()

A、耦合性

B、内聚性

c官奉性

D:数需传输特性

标准答案:A

知识点解析:耦合性是模块间互相连接的紧密程度的度量,取决于各个模块之间接

口的复杂度、调用方式以及哪些信息通过接口。

6、数据库技术的根本目标是要解决数据的()

A、存储问题

B、共享问题

C、安全问题

D、保护问题

标准答案:B

知识点解析:在数据库系统中,需要对数据进行集中、统一的管理,以达到被多个

应用程序共享的目标。

7、下列不属于软件工程的3个要素的是()

A、工具

B、过程

C、方法

D、环境

标准答案.口

知识,23析:软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程

项目的技术手段;工具支持软件的开发、管理和文档生成:过程支持软件开发的各

个环节的控制、管理。

8、关系数据库管理系统能实现的专门关系运算包括()

A、排序、索引、统计

B、选择、投影、连接

C、关联、更新、排序

D、显示、打印、制表

标准答案:B

知识点解析:关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接

运算。

9、将E-R图转换到关系模式时,实体与实体间的联系可以表示成()

A、属性

B、关系

C、键

D、域

标准答案:B

知识点解析:将E-R图转换成指定RDBMS中的关系模式是数据库逻辑设计的主

要工作。从E-R图到关系模式的转换是比较直接的,实体和联系都可以表示成关

系。

10、设计数据库的存储结构属于()

A、需求分析

B、概念设计

C、逻辑设计

D、物理设计

标准答案:D

知识点解析:物理设计阶段主要解决选择文件存储结构和确定文件存取方法的问

题,包括选择存储结构、确定存取方法、选择存取路径、确定数据的存放位置。

二、选择题(2分)(本题共30题,每题1.0分,共30

分。)

11、C语言规定,在一个源程序中,main函数的位置

A、必须在坡开始

B、必须在系统调用的废函数的后面

C、可以任意

D、必须在坡后

标准答案:C

知识点解析:不论main函数在整个过程中的位置如何,一个C程序总是从main

函数开始执行的。

12、以下叙述中错误的是

A、计算机不能直接执行用C语言编写的源程序

B、C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件

C、后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件

D、后缀为.obj和.exe的二进制文件都可以直接运行

标准答案:D

知识点解析:一个C语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个

汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程

序(后缀名为.obj),目标程序不可以直接运行,它要和库函数或其他目标程序连接

成可执行文件(后缀名为.exe)后方可运行。

13、下列选项可以正确表示字符型常量的是

A、'\r'

B、a

C、\897

D、296

标准答案:A

知识点解析:C语言中,一个字符常量代表ASCH字符集中的一个字符,在程序中

用单引号括起来作为字符常量,字符常量的的范围是0~127。由于字符常量用单

引号括起来,所以选项B),C)错误,选项D)超过了字符常量的表示范围。

14、以下.叙述中正确的是

A、构成C程序的基本单位是函数

B、可以在一个函数中定义另

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论