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

下载本文档

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

文档简介

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

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

10分。)

1、下面叙述不正确的是

A、算法的执行效率与数据的存储结构有关

B、算法的空间复杂度是指执行这个算法所需要的内存空间

C、算法的有穷性是指算法必须能在执行有限个步骤之后终止

D、算法的时间复杂度是指执行这个算法所需要的时间

标准答案:8

知识点解析:算法的时间复杂度是指执行算法所需要的计算工作量,故D选项不

正确。

2、下列关于栈的叙述中正确的是

A、在栈中只能插入数据

B、在栈中只能删除数据

C、栈足先进先出的线性表

D、栈是先进后出的线性表

标准答案:8

知识点解析:对栈可进行插入和删除数据的操作,但必须牢记插入和删除数据都只

能在栈顶,是一种特殊的线性表.所以栈是先进后出的线性表。

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

A、ABCDEF

B、BDAECF

C、ABDCEF

D、DBEFCA

标准答案:

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

历,其遍历顺序应该为:访问根结点一,先序遍历左于树,先序遍历右子树。按照

定义,先序遍历序列是ABDCEP,故答案为C。

4、下面对对象概念描述错误的是

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

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

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

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

标准答案:1

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

继承的目的,所以A选项的说法错误,为所选。

5、信息隐蔽的概念与下述哪一种概念直接相关?

A、软件结构定义

B、模块独立性

C、模块类型划分

D、模块耦合度

标准答案:2

知识点解析:采用信息隐蔽的1=1的就是为了确保每个模块的独立性。

6、软件详细设计的主要仟务是确定每个模块的

A、算法和使用的数据结构

B、外部接口

C、功能

D、编程

标准答案:1

知识点解析:从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,

需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰

的表达。详细设计的任务就是要决定各个模块的实现算法,并精确表达出这些算

法。

7、对长度为n的线性表进行顺序查找,在最坏情况下,所需耍的比较次数为

A、log2n

B、n/2

C、n

D、n+1

标准答案:4

知识点解析:在长度为n的线性表中进行顺序查找,最坏情况下需要比较n次.选

项C正确。

8、利用E-R模型进行数据库的概念设计,可以分成三步:首先设计局部E・R模

型,然后把各个局部E-R模型综合成一个全局的模型,最后对全局E-R模型进行

,得到最终的E-R模型。

A、简化

B、结构化

C>最小化

D、优化

标准答案:8

知识点解析:在概念设计中按照模块的划分画出各个模块的E-R图,然后把这些

图合成一张E-R图作为全局模型,最后应该对全局E・R图进行优化,看看是否有

重复和不合理的地方。不能只进行简单的合并。

9、概要设计是软件系统结构的总体设计,以下选项中不属于概要设计的是

A、把软件划分成模块

B、确定模块之间的调用关系

C、确定各个模块的功能

D、设计每个模块的伪代码

标准答案:8

知识点解析:概要设计是数据库的总体设“,其目的就是要按照需求规格说明书把

软件按照功能划分为多个模块,然后确定每个模块要实现的功能,最后确定模块之

间的调用关系,而设计每个模块的伪代码则属于详细设计。所以D选项不属于概

要设计。

10、以下叙述正确的是

A、C语言比其他语言高级

B、C语言可以不用编译就能被计算机识别执行

C、C语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D、「语言出现的最晚、具有其他语言的一切优点

标准答案:4

知识点解析:C语言是一种高级语言,必须编译成目标代码才能执行,故选项B错

误;与其他语言相比C语言更接近于硬件,更“低级”:程序语言是不断发展的,

不断有新的语言出现,C语言不是出现最晚的,故选项A和选项D错误;高级语

言类似于人类的自然语言和数学语言。所以,c选项为所选。

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

分。)

11、以下叙述中正确的是()。

A、C语言比其他语言高级

B、C语言可以不用编译就被计算机识别并执行

C、C语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D、C语言出现最晚,具有其他语言的一切优点

标准答案:4

知识之解析:计算机语言分为低级语言和高级语言,C语言属于高级语言,但并非

比其他语言高级,选项A)错误;除了机器语言外,其他各种语言都必须编译成能

被计算机识别的机器代码才能执行,选项B)错误;C语言出现于1972年至1973

年,并不是出现最晚的语言,选项D)错误。

12、在一个C语言程序中,()。

A、main函数必须出现在所有函数之前

B、main函数可以在任何地方出现

C、main函数必须出现在所有函数之后

D、main函数必须出现在固定位置

标准答案:2

知识点解析:C语言规定,main函数在程序中的位置是任意的。

13、C语言中最简单的数据类型包括()。

A、整型、实型、逻辑型

B、整型、实型、字符型

C、整型、字符型、逻辑型

D、字符型、实型、逻辑型

标准答案:2

知识点解析:选项A)中包含一个不合法的运算符选项C)应改为

(int)18.5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,因为C语言规定

赋值号的左边只能是单个变量,不能是表达式或常量等,所以a+7=c+b是错的。

因此,正确答案是选项B),它相当于a=(b=c+2),可分解为两个表达式:b=c+2

和a=bo

14、若变量已正确定义并赋值,以下符合C语言语法的表达式是()。

A^a:=b+l

B、a=b=c+2

C、inl18.5%3

D^a=a+7=c+b

标准答案:2

知识点解析:选项A)中包含一个不合法的运算符选项C)应改为

(int)18.5%3;选项D)可理解为两个表达式:a+7=c+t^Ha=a+7,因为C语言规定

赋值号的左边只能是单个变量,不能是表达式或常量等,所以a+7=c+b是错的。

因此,正确答案是选项B),它相当于a=(b=c+2),可分解为两个表达式:b=c+2

和a=bo

15、下列可用于C语言用户标识符的一组是.()。

A、void,define,WORD

B、a3b3,123,Car

C、For,-abc,IFCase

D^2a,DO,sizeof

标准答案:2

知识点解析:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一

个字符必须为字母或下划线,排除选项C)和D);C语言还规定标识符不能为C

语言的关键字,选项A)中void为关键字,故排除选项A)。

16、C语言中运算对象必须是整型的运算符是()。

A、%=

B、/

C、=

D、<=

标准答案:1

知识点解析:C语言规定:取余运算符的运算对象必须是整型,复合运算符"%=”

中包含取余运算,它的运算对象也必须是整型。

17、若变量a,i已正确定义,月.i已正确赋值,下面合法的语句是()。

A、a==l

B、

C、a=a++=5;

D、a=int(i);

标准答案:2

知识点解析:选项A)缺少分号,是一个表达式,而不是语句;选项。包含一个

不合法的运算符“++=”;选项D)应改为a=(im)i;。

18、已知intt=O;while(t=l){…}则以下叙述正确的是()。

A、循环控制表达式的值为0

B、循环控制表达式的值为1

C、循环控制表达式不合法

D、以上说法都不对

标准答案:2

知识点解析:这里要注意“=”与"==”的用法,t=l是将t赋值为1,所以循环控制表

达式的值为1。

19、若变量已正确说明为float型,要通过scan(T%f%f%「,&a,&b,&c);给a

赋值10.0,b赋值22.0,c赋值33.0,下列不正确的输入形式是()。

A、10V回车>22V回车>33V回车〉

B、10.0,22.0,33.0<回车,

C、C.0V回车>22>33.0V回车〉

D、1022V回车>33V回车,

标准答案:2

知识点解析:在scanf(”%f%f%f,&a,&b,&c);中,格式描述为“%f%佻f,当输

入数据时,数据之间可用空格、制表符和回车符作为间隔符,而逗号不是合法的间

隔符。

20、有如下程序:#include<stdio.h>main(){intx=l,a=0,b=0;switch(x))case

0:b++;case1:a++;case2:a++;b++;)printf("a=%d,b=%d\n",a,b);)

该程序的输出结果是()c

A、a=2,b=l

B、a=l,b=l

C、a=l,b=0

D、a=2,b=2

标准答案:1

知识点解析:该程序的关键是要搞清楚程序执行的路线。由于x的值等于1,所以

在switch语句中,程序从case1后面的语句开始执行。由于case1后面没有break

语句,所以程序顺序执行case2后面的语句。程序共执行了三条语句:a++;

a++;b++;所以,变量a和b最后的值分别为2和1。选项A)正确。

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

分。)

21、有以下程序main。{intp[7]={1l,13J4,15,16,17J8),i=0,k=0;while(i<

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

A、58

B、56

C、45

D、24

标准答案:8

知识点解析:本题考核的知识点是while循环语句的程序分析。在主函数中首先定

义了一个数组p并初始化,在while后面括号里的表达式中,i初值为0,当p[i]为

偶数时,p[i]%2等于0,根据“&&”运算符的规则,其表达式为假退出循环,显然

当i=2时,p[i]=14为偶数,此时while后面括号里的毒达式的值为假,退出循环,

此时K=p[0]+p[l],即k=ll+13。所以最后输出k为24。所以,D选项为所选。

22>有以下程序main(){inti=0,s=0;for(;;){if(i==3IIi==5)continue;if(i==6)

break;i++;s+=i};printf("%d\n”,s)}程序运行后的输出结果是

A、10

B、13

C、21

D、程序进入死循环

标准答案:8

知识点解析:本题考核的知识点是for循环,conlinue语句和break语句的运用。程

序中for循环中省略了判断退出循环的表达式,for循环将由里面的break语句控制

是否结束循环,第一次循环,第一条if语句后面括号里的表达式的值为假,所以

该if语句不被执行,执行下面的第二条语句,此时该if语句表达式的值为假,所

以该if语句也不执行,执行下面的语句,i++、s+=i,执行完毕后i的值为1,s的

值为1,如此循环,直到第三次之后i,s的值都为3,继续第四次循环,显然这时

满足第一条if语句的,执行后面的conlinue;该次循环结束从头开始下次循环,而

i的值为3一直没有改变,所以第一条语句始终要执行,因此for循环将一直循环

下去,所以,4个选项中选项D符合题意。

23、若变量已正确定义,要求程序段完成求51的i-算,不能完成此操作的程序段

A、for(i=l,p=l;i<=5;i+4-)p*=i;

B、for(i=l;i<=5;i++){p=l;p*=i;}

C、i=l;p=l;while(i<=5){p*=i;i++;)

Di=1;p=1;do{p*=i;i++;)while(i<=5)

标准答羹:2

知识点3析:本题考核的知识点是C语言在生活中的简单应用。选项B中for循环

了5次,而每次循环的时候,都将p的值重新赋值为1后,再乘以当前数字i,最

后的结果为5,显然不是51的值,同样的分析可知选项A、选项C和选项D计算

的都是5!。所以,4个选项中选项B符合题意。

24、以下程序的输出结果是main(){inta=0,i;for(i=l;i<5i++){switch(i)(case0:

case3:a+=2;case1:case2:a+=3;default:a+=5;}printf("%d\nH,A);}

A、31

B、13

C、10

D、20

标准答案:1

知识点解析:本题考核的知识点是for语句与switch语句地综合运用。switch语句

的执行过程是:在switch后面的表达式的值和case后面常量表达式的值吻合时,

就执行该case分支的语句。如果在该语句的后面没有break语句,则按顺序继续执

行下一个case分支,直到遇到break语句或switch多分支语句结束,在switch语句

中,break语句的作用是使流程跳出switch结构,终止switch语句的执行.在本题

中,因为每个case语句后面都没有break语句,所以,第一轮循环(i==l)执行过后

a的值为8,第2轮(i==2)执行过后a的值为16,第3轮(i=3)执行过后a的值为

26,第4轮(i=4)执行过后a的值为31,然后执行“i++”语句,这时循环条件为假,

循环结束.所以,4个选项中A为所选。

25、有以2程序;charfun(charx,chary){if(x<y)returnx;returny;}main(){int

a=g,b=8,c=7;printf("%c\n”,fun(fun(a,B),fun(b,C)));)程序的执行结果是

A、函数调用出错

B、8

C、9

D、7

标准答案:8

知识点解析:本题考核的知识点是函数的返回值以及返回值作为函数的参数。经过

分析得出函数fun()的功能是比较形参x和形参y的大小,返回较小的一个.函数

fun()有两个参数.本题中,首先定义了三个整型变量a、b和c,分别赋初值为9、

8和7.然后执行函数fun(fun(a,b),fun(b,c))o在该函数中分别将fun(a,b)和fun(b,

。函数的返回值作为该函数的两个实参。在函数fun(a,b)中,由于a>b,故返回

较小值b即8,在函数fun(b,C)中,由于bVc,故返回较小值c即为7,因此调

用函数fun(fun(a,b),fim(b,C))相当于执行函数fun(8,7),返回较小值即7。所

以,4个选项中选项D符合题意。

26、有以卜程序intf(intA){returna%2;}main(){ints[8]={l,3»5,2,4,6),i,d=0;for

(i=0;f(s[i];i++)d+=s[i];printf("%d\nM,D);}程序运行后的输出结果是

A、9

B、11

C、19

D、21

标准答案:I

知识点解析:本题考核的知识点是一维数组的定义,初始化和数组中元素的引用。

函数f()的作用是形参a为偶数的时候返回0,主函数中首先定义了一个长度为8的

一维数组,然后给它赋初值使得s[0]=l、a[l]=3>s⑵=5、s[3]=2、s[4]=4.

s[5]=6.其他没有赋值的数组元素将自动赋值为0。for循环中,当s[l]不为偶数的

时,将s[i]相加,即当i=3时,s[i]=2为偶数,退出循环,此时d的值为

d=s101+s[l]+s[2]=l+3+5=9,因此最后输出的d的值为9。所以,4个选项中选项A

符合题意。

27、有以卜程序:voidf(intv,intw){intt;t=v;v=v/;w=t;)main(){intx=l,y=3,z=2;

if(x>y)f(x,y);elseif(y>z)f(y,z);elsef(x,z);printf(”%d,%d,%d\n”,x,y,z);}执行后输

出结果是

A、1,2,3

B、3,1,2

C、1,3,2

D、2,3,1

标准答案:4

知识点解析:本题考核的知识点是函数的调用和if-else语句的应用。C语言规定

else总是和离它最近的if语句配对。分析可以知道,函数f()作用是让形参v和形

参w的值交换。在i函数中首先定义了三个变量x。y和z。然后再执行下面的if-

else语句.由程序可以看出第一个else和第一个订搭配,第二个else和第二个if搭

配。由于调用函数时是进行值传递的。即将实参x,y,z传给形参v和w,以后行

参和实参再无联系,故通过if语句调用2函数后,x、y和z的值并没有改变。故

最后输出的x、v和z的值为1、3和2,所以,4个选项中选项C符合题意。

28>有以下程序main(){inta,b,d=25;a=d/10%9;b=a&&(-1);printf

(”%d,%d\n”,a,B);(程序运行后的输出结果是

A、6,1

B、2,1

C、6,0

D、2,0

标准答案:2

知识点解析:本题主要考查的是C语言中的整除、求余以及逻辑值的概念。在C

语言中,/号的两边如果都是整数的话,返回的结果也是整数,如果除不净则舍去

小数部分。%是求余运算,它的运算对象只能是整型,运算结果是两数相除后所得

的余数,当运算量为负数时,结果的符号与被除数相同。因此,执行语句

a=d/10%9;后,a=25/10%9=2%9=2oC语言中没有专门的逻辑值,而是用整型值

来代替。当整型值作逻辑值使用时,非零即表示“真”,零表示“假”,而逻辑值当整

型值使用时,“真”等于1,“假”等于0。因此,执行语句b=a&&(・l);后b=2&&(.

1尸嗔”&&"真”="真”=1。所以,4个选项中选项B符合题意。

29、以下程序段的输出结果是chars[]=n\\141\141abc\t";printf("%d\n",strlcn(s));

A、9

B、12

C、13

D、14

标准答案:1

知识点解析:本题考核的知识点是字符串的长度。字符数组中可以存放字符串,但

字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中存放的有效字

符个数.即,,\(r之前的字符数.字符数组*中依次存放的字符

是:NT4Tl41“a“b“c”\r和最后一个字符串结束标记故字符串的长度是

9o所以,4个选项中A为所选。

30、有以下程序:voidswapl(intc[]){intt;t=c[O];c[0]=c[l];c[l]=t;)voidswap2{int

cO,intcl){intt;t=cO;c0=cl;cl=t;)main(){inta[2]={3,5),b[2]=(3,5);swap!(A);

swap2(b[O],b[l]);printfC%d%d%d%d\n",a|0],a|1],b|O],b|11);)其输出结果是

A、5353

B、5335

C、3535

D、3553

标准答案:2

知识点解析:本题考核的知识点是函数调用中值传递和地址传递。函数间的参数的

传递有两种情况,第1种情况变量作为形参时的参数传递,变量作为形参时,要求

对应的实参应为变量或表达式,变量作为函数的参数其传递方式是“值传递”,该种

情况下,形参被赋值为实参的值,然后实参与形参再无联系。也就是说对行参的改

变将不再影响实参:第2种情况是地址或数组名作为形参时的参数传递,该种情况

下对形参的改变将对实参产生影响。本题中函数swapl()是传递的地址。所以对该

形参c的改变将影响实参,分析可知该函数的作用,是使数组c的第一个元素和第

二个元素的值互换。主函数中调用该函数将a作为实参传递给形参c,故执行该函

数后a的第一个元素和第二个元素的值将交换。分别为5和2.函数swap2()是值

传递的,所以该函数执行后对数组b将没有任何改变,此时该数组的第一个和第二

个元素依然为3和5,因此最后的输出为5、3,3和5,所以,4个选项中选项B

符合题意。

31、有以下程序:voidsum(int*A){a|0]=a|I];)main(){int

aa[10]={1,2,3,4,5,6,7,8,9.10},i;for(i=2;i>=0;i—)sum(&aa[i]);printf

("%d\nn,aa[0]);}执行后的输出结果是

A、4

B、3

C、2

D、1

标准答案:1

知识点解析:本题考核的知识点是数组的定义、赋初值以及函数调用的组合应

用.本题中函数sum(im*A)的作用是:将形参a所指的数组中的第二个元素的值

a[l]赋给第一个元素a[0]°主函数中定义一个长度为10的整型数组并赋初值,接着

执行一个for循环,该循环共执行了3次.当上2时,调用函数sum(&aa[2]),主函

数中将&aa⑵作为实参传给行参a,所以此时形参a所指的数组的第一个元素和第

二个元素分别为aa⑵和aa[3],故执行完该函数后将aa⑶的值赋给aa[2],即

aa[l]=aa[3]=4,当i=l时,调用函数sum(&aa[l]),主函数中将&aa[I]作为实参传给

行参a,所以此时形参a所指的数组的第一个元素和第二个元素分别为aa[l]和

aa[2],故执行完该函数后将aa⑵的值赋给IPaa[l]=aa[2]=4;当i=0时;调

用函数sum(&aa|0|),,主函数中将&aa[0]作为实参传给行参a,所以此时形参a所

指的数组的第一个元素和第二个元素分别为aa[0]和aa[l],故执行完该函数后将

aa[l]的值赋给aa[0],即aa[0]=aa[l]=4;故最后输出的aa[0]的值为4,所以,4个

选项中选项A符合题意。

32、有以下程序main(){intm[][3]={1,4,7,2,5,8,3,6,91;inti,j,k=2;for(i=0;i<3;i+4-)

{printf(H%dn,m[k][i]);})执行后输出结果是

A、456

B、258

C、369

D、789

标准答案:4

知识点解析:本题考核的知识点是二维数组的定义,赋值及数组元素的引用。变量

k的初值为2,循环执行了3次,分别输出m[2H0]、m⑵⑴和m⑵⑵,其值分别

为3,6,9o所以,C选项为所选。

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

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

入的是

A、x+i

B、&x[i+l]

C、x+(i++)

D、&x[++i]

标准答案:4

知识点解析:本题考核的知识点是scarf。函数的输入格式。在staHf()函数中有两个

参数,其中第一个参数为输入格式字符串,第二个参数是地址字符串.根据

scanf()的定义,故应该在空白处填入一地址,4个选项中只有B和D符合,又由题

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

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

出循环,因此选项B错误。所以,C选项为所选。

34、已定义以下函数:fun(int*p){return*p;}该函数的返回值是

A、不确定的值

B、形参p中存放的值

C、形参p所指存储单元中的值

D、形参P的地址值

标准答案:4

知识点解析:本题考核的知识点是函数的返回值.函数的返回值应该为return后面

的表达式的值,在本题中的表达式为*p,*p指的是形参p所指存储单元中的值,

所以,4个选项中选项C符合题意。

35、在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函

数funA,则

A、称为函数的直接涕归调用

B、称为函数的间接递归调用

C、称为函数的循环调用

D、C语言上不允许这样的递归调用

标准答案:2

知识点解析:本题考核的知识点是函数递归调用的基本概念。在C语言中所谓函

数的递归是在指在调用一个函数的过程中,乂出现了直接或间接地调用该函数本

身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归

调用.显然题目中所说得函数调用为函数的间接递归调用。所以,4个选项中选项

B符合题意。

36、有以卜程序#include<stdio.h>main(){FILE*fp;>nti=20,j=30,k,n;

ip=fopen(',dl.dat',,,,w");iprintf(fp,,,%d\nn,i);^printf(fp,,%d\n',j);fclose(fp);

fp=fopen("dl.dat",nrn);fp=fscanf(fp;'%d%d';&k,&n);printf("%d%d\n",k,n);

fclose(fp);}程序运行后而输出结果是

A、2030

B、2050

C、3050

D、3020

标准答案:1

知识点解析:本题考查的知识点是文件的综应用。本题首先以创建方式打开文件

“dl.dat”,两次调用fprintf()JEi和i的值写到文件“dl.dar”中,文件“dl.dat的内容为

20〈回车>30V回车,后把该文件关闭再以读的方式打开,文件位置指针指向文件

头,在通过fscanf()函数从中读取两个整数到k和n中,由于格式符无间隔,因此

输入数据可以用回车隔开,故输入的k值为20,n的值为30.所以4个选项中A

正确。

37、若有定义:intx=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是

A、随机值

B、0

C、x的地址

D、p的地址

标准答案:2

知火点解析:本题考查的是指制的运用。语句imx=O,叩二&x;定义7一个皿型

变量x并初始化为0,同时还定义了一个int型指针p指向变量X。语句

ptintf("%d\n",*p):是按十进制整数格式输出指针p所指向的内容,即x的值0。

故本题应该选择B。

38、设有定义语句:charcl=92,c2=92;,则以下表达式中值为零的是

A、clc2

B、cl&c2

C^~c2

D,cl|c2

标准答案:1

知识点解析:本题考核的知识点是位运算的应用。选项A为异或运算符,如果参

加运算的两个位相同,结果为O,否则为1。显然选项A中参加运算cl和c2相

同,故其值位0;选项B为位与运算,如果参加运算的两位都为1,则结果为1,

否则结果为0,选项B中参加运算的cl和c2都为真,所该结果为1;选项C为取

反运算,用来对一个二进制取反,显然c2取反后不为0,选项D为位或运算,参

加运算的两位只要有一个为1,那么运算结果为1,显然参加运算的cl和c2都不

为0,故运算结果不为0。所以,4个选项中选项A符合题意。

39若有定义:imaa[8]则以下表达式中不能代表数组元aa[l]的地址的是

A、&aa[0]+I

B、&aa[l]

C>&aa[0]++

D、aa+1

标准答案:4

知识点解析:本题考核的知识点是数组中元素地址的表示方法。在C语言中:数

组的地址和数组中的第一个元素的地址相同。数组中第一个元素地址的表示方法为

&aa|O],与其等价的有&aa[O]++,所以选项C不正确的;选项A为数组的第1个

元素的地址下移一位即是第二个元素aa[l]的地址;B也为数组的第二个元素的地

址,选项D中aa表示数组的地址,加1表示数组首地址后移一位,即代表数组元

索中的第二个元素aa[l]的地址。所以,4个选项中C为所选。

40、有以下程序inta=3:main(){ints=0;{inta=5;s+=a++;}

s+=a++;pnntt("%d\n';s);}程序运行后的输出结果是

A、8

B、10

C、7

D、11

标准答案:1

知识点解析:本题中定义一个全局变量a和一个局部变量a。局部变量和全局变量

的不同在于,局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合

语句)时生成,退出其所在的函数体(或复合语句)时消失,而全局变量是在函数外部

任意位置上定义的变量,它的作用域从变量定义的位置开始,到整个源文件结束为

止。若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏

蔽,在该函数内,起作用的将是局部变量,与同名的全局变量不发生任何关系。在

程序中首先定义了变量s并赋值为0,接着在嵌套的复合语句{}中定义了变量a并

赋初值为5,接着执行语句s+=a+a;在这条语句中a加1,但表达式a++还是原来

的值,故$=$+5,s为5,程序执行到外层,此时{}内定义的变量a不再有效,此时

的变量a为{}之前定义的且初值为3,接着执行{}后面的语句s+=a++;相当于执行

语句s=s+(++);即s=5+3,最后值为8,所以最后输出的s值为8。所以4个选项

中A正确。

41、有以卜程序:voidsort(inta|],intn){intfor(i=0;i<n-l;i+=2)for(j=i+2;j<

n;j+=2)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){int

aa[10]={1,2,3,4,5,6,7,8,9,10),i;sort(aa,10);for(i=0;i<10;i++)printf("%d",aa[i]);

printfCVn**);)其输出结果是

A、1,2,3,4,5,6,7,8,9,10,

B、10,9,8,7,6,5,4,3,2,1,

C、9,2,7,4,5,6,3,8,1,10,

D、1,10,3,8,5,6,7,4,9,2,

标准答案:4

知识点解析:本题考核的知识点是程序中算法的基本分析。sorl()函数作用是将数

组aa中的下标为偶数的元素按大到小排序.主函数中首先定义了一个长度为10的

数组并赋值,然后调用sort。函数,将数组aa中奇数个元素的值按大到小排序,因

此执行完该函数后,数组中奇数个元素的值为9,7、5、3和1,故主函数中最后

通过一个for循环输出数组aa中各元素的值为9、2、7、4、5、6、3、8、1和

10,所以,4个选项中选项C符合题意。

42>有以下程序structSTU{charnum[10];floatscore[3];(;main(){structSTU

s[3]=({"20021-,90,95,85},{"20022",95,80,75),("20023",100,95,90}),*p=s;inti;float

sum=0;for(i-0;i<3,i++)sum=sum+p->score|i|;printf("%6.2fAn",sum};)程序运行后

的输出结果是

A、260

B、270

C、280

D、285

标准答案:2

知识点解析:本题考查的知识点是结构体数组元素的成员元素的引用。程序中首先

定义了一个结构体,其成员为一字符数组和一浮点型数组。在main()首先定义了一

个结构体数组并初始化,接下来在for循环中遍历了结构体数组中的第一个元素中

数组成员即("20021”,90,95,85”}循环结果为90+95+85=270最后sum为270,又输出

格式为“%6.2f\n”要求保留两位小数故最后输出为270.00。所以4个选项中B正

确。

43、以下程序的输出结果是#include<stdio.h>#include<string,h>main(){char

b118|="abcdefg",b2[8],*pb=b1+3;while(-pb>=bl)strcpy(b2,pB);

printf("%d\rT,strlen(b2));}

A、8

B、3

C、1

D、7

标准答案:8

知识点解析:本题考核的知识点是指针变量的运算及字符函数strcpy()的应用。

strepy()函数的作用是把第二个参数代表的字符串,复制到第一个参数指向得数组

中.首先定义了两个字符数组bl和b2,并用一个字符串给bl赋初值,然后定义

了一个字符型指针变量pb,通过赋初值使它指向bl[3]。接着执行while循环,该

循环执行了3次;第一次判断条件“--pb>=bl",使pb的值为“bl+2”,执行

ustrcpy(b2,pB);“后,b2中的内容为“cde鬼”;第二次判断条件”・・pb>=bl”,使

pb的值为“bl+1”,执行“strcpy(b2,pB);”后b2的内容为“bcdefg”第三次判断条件

“—pb>=bl”使Pb的值为“bl”,执行“strcpy(b2,pB);”后b2的内容为“abcdefg”。

最后输出b2数组中存放的字符串长度,显然是九(这里还有一个关键点:就是每

当执行一次while循环判断条件,就执行一次“-Pb”,他使得指针pb自减1,即前

移一位)所以,4个选项中D为所选。

44、有以下程序#include(string.h)main(){charp[]={'a',‘b,'c'},

q[10]={,a\,b,,,c,};printf(H%d%d\n",strlen(p),strlen(q));)以下叙述中正确的是

A、在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为

3

B、由于p数组中没有字符申结束符,长度不能确定:但q数组中字符串长度为3

C、由于q数组中没有字符串结束符,长度不能确定:但p数组中字符串长度为3

D、由于p和q数组中都没有字符串结束符,故长度都不能确定

标准答案:2

知识点解析:本题考查了对字符数组赋初值.使用初始化列表对字符数组赋初值,

系统不会自动为其添加字符串结束符,使用字符串初始化时才会自动添加,所以选

项A是错的。数组长度在未指定的情况下由初始化列表项中数据的个数决定,若

已指定且初始化项数不足时,多出部分会自动初始化为0,0等价于字符串结束

符'\0'。所以选项B是正确的,C和D都是错误的。本题应该选B。

45、有以下程序main(){chars[]="159H,*p;p=s;printf("%c,',*p++);

pritnf("%c",*p++);)程序运行后的输出结果是

A、15

B、16

C、12

D、59

标准答案;1

知识点解析:本题首先定义了一个字符数组并用字符串“159”初始化之,然后用一

个字符型指针p指向该数组的第一个元素,最后两次输出表达式*p++的值,所以

本题的关键在于求解表达式*P++的值。*和++的优先级相同,但结合性是“从右至

左,,,Bp.P++ffl^^*(p++),由于子表达式p++的值是p自增之前的值,所以第一

次输出的是数组的第一个元素的值」"到第二条输出语句时p已自增1次,所以

第:次输出的是第二个元素'5,。故应该选择选项A。

46、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(中)的

值为

A、0

B、1

C、-1

D、一个非0值

标准答案:1

知识点解析:读取文件时,当文件中的数据全部读完后,文件位置指针将位于文件

的结尾。此时如果读数据,将会出现错误。为了保证读写数据的正确性,需要进行

文件尾测试,文件尾测试使用函数feof(),它的功能测试fp指向的文件是否到达文

件尾.若到达文件尾,返回值为非0,否则返回值为0。在本题中fP指向的某文件

还没有到了文件尾,因此返回0,所以,4个选项中选项A符合题意。

47、以下程序的输出的结果是果x=3;main。{inti:for(i=l;i<x;i++)incre();)

incre(){staicintx=l;x*=x+l;printf("%d",x);}

A、33

B、22

C、26

D、25

标准答案:4

知识点解析:本题首先定义一个全局变量x并赋初值为3,主函数中使用这个全局

变量控制循环次数,循环执行了2次,调用两次tncre()函数。第一次调用incre。,

定义一个静态变量x并赋初值1,然后执行“x*=x+l”,使x的值变为2;第二次调

用incre()函数时,静态变量将保留上一次退出时的值即2,执行语句“x*=x+l”后,

x的值变成6,输出x的值为6。所以,4个选项中C为所选。

48、有以卜程序#include<string.h>structSTU{charname|10|;intnum;);void

f(char*name,intnum){structSTUs|2|={{"SunDan,'.20044),{,'Penghua,,,20045J};

num=s|0].num;strcpy(name,s[O].name);)main(){structSTU

s[2]={{nYangSan",20041},{"LiSiGuo",20042}},*p;p=&s[l];f(p->name,p->num);

printf("%s%d\n",p->name,p->num);)程序运行后的输出结果是

A^SunDan20042

B、SunDan20044

C、LiSiGuo20042

D、YangSan20041

标准答案:1

知识点解析:题目中定义的函数f()包含两个参数,一个字符指针,一个整型变

量。当修改参数指针所指向的内容的时候,实参所指的内容也被修改,即传址调

用;但只是修改参数变量的内容,则实奉不受影响,即传值调用。因此,主函数

调用f()函数后,第1个参数被修改成函数中s[0|的name成员,第2个参数不受影

响,还是主函数中s[l]的num成员。故最终输出SunDan20042。应该选择A。

49、以下对结构体类型变量td的定义中,错误的是

A、typedefstructaa{intn;floatm;}AA;AAtd;

B、stmetaa{intnifloatm;)td;stmctaatd;

C、struct{intn;floatm:)aa;structaard;

D、struct{intn;floatm;}td;

标准答案:4

知识点解析:选项A使用typedef语句给结构体aa定义了一个新的名称AA,因此

使用AA直接声明结构体变量id是正确的。选项B中,前面一句是定义结构体同

时声明了结构体变量id.后一句是使用结构体名sa声明结构体变量td,都是正确

的写法。选项C的第1条语句和选项D使用的是无名结构体直接声明变量的语

法,是正确的,但是选项C的第2条语句使用已经声明的结构体变量aa来声明Id

是错误的.故应该选择C。

50、有以下程序(提示:程序中fseek(fp-2L*sizeof(int),SEEK_END);语句的作用是

使位置指针从文件末尾向前移2*sizeof(ing)字节)#include<stdio.h>main(){FILE

*fp;inti,a[4]={l,2,3,4|,b;fp=fopen(',data.dat',,''wb");for(i=0;i<4;i++)

fwrite(&a[i],sizeof(int),1Jp);fclose(fp);fp=fopcn("data.dat","rb");fseek(fp,-

2L*sizeof(int),SEEK_END);fread(&b,sizeof(int),l,初;正从文件中读取sizeof(int)字

节的数据到变量b甫*/fclose(fp);printf("%d\n",B);)执行后输出结果是

A、2

B、1

C、4

D、3

标准答案:8

知识点解析:函数fopen(constchar*filename,constchar*mode)的功能是以mode指定

的模式打开filename藉定的磁盘文件:fclosc(FILE*fp)的功能是关闭文件指针fp指

向的文件;函数fscanf(FILE*fp,constchat'*fbrmatl,address,--])的功能是根据

format中的格式从中指向的文件中读取数据,并存入到相应的address指向的变量

中.函数fprintf(FILE*fp,constchar-fbirnatLargumentT)的功能是把argument列表中

的表达式底写到fp所指向的文件中;函数fwfite(void*ptr,intsize,intn,FILE*fp)的

功能是把ptr指向的缓冲区中的sizexn个字节写到文件指针fp指向的文件中。本题

中首先定义了一个文件有针fp,然后通过函数fopen以可“wb”的方式打开文件

ndata.daff,直接通过一个for循环,每循环一次调用函数fwrile将数组中的元素

a[i]的值写进fp所指的文件中,该循环共循环4次,循环完后fp所指文件的内容为

123,然后通过fclose函数关闭fp所指文件.接着通过困数fopen以“rb”的方式打

开文件"dala.dal",通过fseek函薪让指针中从文件末尾向前移动2个ini型大小字节

的,然后通过函数fread从中所指的文件中读取一个int型大小的数据到变量b中,

故此时b的值为3,因此最后输出的,b的值为3,所以,4个选项中选项D符合

题意。

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

分。)

51、解题方案的准确而完整的描述称为。

标准答案:算法

知识点解析:算法是指对解题方案的准确而完整的描述。

52、在数据结构中,顺序存储结构的数据元素所占的存储空间是_____的。

标准答案:连续

知识点解析:顺序存储结构具有两个特点:1)数据元素所占空间是连续的;2)数据

元素在存储空间中是按逻辑顺序依次存放的。

53、诊断和改正程序中错误的工作通常称为。

标准答案:调试或程序调试或软件调试或Debug或debug或调试程序或调试软件

知识点解析:调试也称排错,调试的目的是发现错误的位置,并改正错误。一般的

调试过程分为错误侦查,错误诊断和改正错误。

54、数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。其中,

给出了数据库物理存储结构与物理存取方法。

标准答案:内模式

知识点解析:内模式又祢为物理模式,它给出?数据库物理存储结构与物理存取方

法。

55、关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、和

自定义完整性。

标准答案:参照完整性

知识点解析:黄系模型的完整性规则包括实体完整性、参照完整性和自定义完整

性。

五、填空题(本题共72题,每题1.0分,共12分。)

56、以下程序运行时若从键盘输入:102030〈回车输出结果是______。

#include<stdio.h>main(){inti=0,j=0,k=0;scanf("%d%*d%d",&i,&j,&k);

printf("%d%d%d\n';i,j,k);}

标准答案:10300

知识点解析:scanf()函数的第一个参数为控制字符串,由它决定应该接受多少个什

么类型的输入数据,其中以字符,%'开头的是控制字符。"%d”表示接收一个十进制

整数,而“%*d”表示跳过一个输入的十进制整数。因此,本题的scaaf()函数要求用

户输入三个十进制整数,但只接受第一和第三个到函数的第二和第三个参数所指的

内存地址中。所以本题的输出为:10300。

57、以卜程序的输出结果是omain(){inta=177;printf("%o\n",a);

标准答案:261

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

代表的八进制数是261,所以该空格处应该填写261。

58、有以下程序main(){intt=l,i=5;for(;i>=0;i-)t*=i;printf("%d\n",t);}执行后

输出结果是_____。

标准答案:0

知识点解析:本题中的for循环共执行了6次,每执行一次将相应i的值相乘,最

后当i=1时停止循环.该for循环执行完后t的值为5*4*3*2*1*00,故最后输出I

的值为0«

59、以下程序运行后的输出结果是______。main(){intx=15;while(x>10&&x<

50){x++;if(x/3){x++;break;)elsecontinue;}printf("%d\n'\x);}

标准答案:17

知识点解析:break语句只能在循环体和switch语句体内使用,当break出现在循

环体中的switch语句体内时,其作用只是跳出该swilch语句体。当break出现在循

环体中,但不在switch语句体内时,则在执行break后,跳出本层循环体。而

continue语句的作用时结束本次循环,即跳过本次循环中余下尚未执行的语句,接

着再一次进行循环的条件判定。本题中首先定义了一个变量x并赋初值15,然后

判断循环条件“x>5&&xV50",即"x>5&&xV5(F,为真,执行循环体.语句

“x++;”执行后,x的值变为16,“X/3”的值为5为真,执行其后的语句“x++;”,x

的值变为17,执行语句“break”,退出循环,输出。x的值为17。

60、若有以下程序main(){inta[4][4]={{1,2;-3,-4},{0,-12,-13,14),{21,23,0,-24),{-

31,32,-33;0}};inti,j,s=O;for(i=0;i<4;i++){for(j=0;j<4;j++)if(a(i]|j|<0)continue;

if(a[i][j]==O)break;s+=a[i][j];)pnntf("%d\nn,s);}执行后输出结果是。

标准答案:58

知识点解析:本题中处理二维数组元素用了两重循环,外循环变量i表示数组的

行,内层循环变量j表示数组的列。在第二重循环中首先判断数组元素的值是否小

于0,若是则处理该行的下一个元素:若不是则判断田的值是否等于0,

若等于0则退出内层循环开始处理下一行;其他情况下,把的值加到变量s

中。所以本程序段的功能是把每行值为0的元素前面的所有大于。的元素值加到变

量s中。

61、已知字符A的ASCH代码值为65,以下程序运行时若从键盘输入:B33<回车

>v则输出结果是_____v#include<stdio,h>main(){chara,b;a=geCchar();

scanf("%d“,&b);a=a-'A'+'O';b=b*2;printf(;%c%c\nH,a,b);}

标准答案:1B

知识点解析:在C语古中,字符型变量可以看作整型变量来对待,与整型所不同

的是字符型变量在内存中只占1个字节,而整型是2个字节.字符型变量中所有的

数值是它所表示字符的ASCII码值.ASCII码中的一些相关字符是顺序排列的,

如,(T,的ASCH码值为48,为49以此类推一直到,夕;的ASCII码值为

65,'B,为66以此类推一直到2、本题程序首先定义了两个字符型变量a和b,然

后分别使用getchar。和scanf()函数读取输入的字符E和十进制整数33到a和b

中,因为a-'A'+'O'等于,'B'-'A'+'0'=T+'0'=T,而b*2等于

33*2=66,A,+1=,B\所以最终输出的结果是:1B。

62、有以卜程序intsub(intn){retnm(n/10+n%10);}main(){intx,y;scanf("%dH,&x);

y=sub(sub(sub(x)));printf("%d\nn,y);}若运行时输入:1234V回车〉,程序的输出结

果是。

标准答案:10

知识点解析:本题程序中定义了一个函数sub(),用来计算一个整数整除10的商和

余数的和。在主函数中,首先用scanf()函数读入一个十进制整数1234,然后对

1234三次嵌套调用函数svb。。首先看最里层的调用,应该返回的值是

123+4=127;然后中间一层调用应该返回的是12+7=19:所以最外层调用返回

1+9=10。故最后输出10o

63、设有如下定义#defineMYSWAP(z,x,y){z=x;

温馨提示

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

评论

0/150

提交评论