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

下载本文档

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

文档简介

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

(共9套)

(共543题)

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

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

10分。)

1、下列数据结构中,不是线性结构的是()。

A、线性链表

B、带链的队列

C、带链的栈

D、二叉链表

标准答案:8

知识点解析:线性链表是线性表的链式存储结构,带链的栈与带链的队列分别是栈

与队列的链式存储结构。线性表属于线性结构,栈与队列是特殊的线性表,因此也

属于线性结构。二叉链表是二叉树的链式存储结构,二叉树属于非线性结构。

2、在深度为6的满二叉树中,结点的个数为()。

A、32

B、31

C、16

D、15

标准答案:1

知识点解析:深度为m的二叉树最多有2m-l个结点,满二叉树中叶子结点的个数

为2m-l个。本题中,26-1=25=32。

A

R

3、下图所示的二叉树的先序遍历序列是()。

A、ABDGCEHIF

B、DGBAHEICF

C、GDBHIEFCA

D、ABCDEFGH1

标准答案:1

知识点解析:先序遍历顺序应该为:访问根结点一先序遍历左子树一先序遍历右子

树。按照定义,先序遍历序列是ABDGCEHIF。

4、模块化程序设计主要强调的是()。

A、程序的规模要大

R、对程序进行分解

C、程序的执行效率

D、程序的可移植性

标准答案:2

知识点解析:模块化设计是指把一个大程序按人们能理解的大小规模进行分解。

5、结构化程序设计的主要特点是()。

A、每个控制结构要模块化

B、每个控制结构具有封装性

C、每个控制结构具有独立性

D、每个控制结构只有一个入口和一个出口

标准答案:8

知识点解析:结构化程序设计中,要求把程序结构限制为顺序、选择和循环3种基

本结构,特点是:以控制结构为单位,只有一个入口和一个出口,接口简单,每个

单位容易理解;缩小了程序静态结构与动态执行之间的差异,易于方便、正确地理

解程序功能。

6、下列叙述中错误的是()。

A、测试是程序执行的过程,目的在于发现错误

B、•个好的测试在于能发现至今未发现的错误

C、一个成功的测试是发现了至今未发现的错误

D、上述说法都不对

标准答案:8

知识点解析:选项A、B、C中的说法都正确。测试的目的是设法暴露程序中的错

误和缺陷,它是程序执行的过程,目的在于发现错误;好的测试在于能发现至今未

发现的错误;成功的测试是发现了至今未发现的错误。

7、对于白箱(盒)测试用例的各设计准则,下列叙述中正确的是()。

A、分支覆盖准则比语句覆盖准则严密

B、条件覆盖要比分支覆盖优越。因此,条件覆盖能完全满足分支覆盖

C、组合条件覆盖准则既能满足分支覆盖准则,也能满足条件覆盖准则。因此,组

合条件覆盖准则是一种完全测试

D、上述说法都不对

标准答案:1

知识点解析:白箱(盒)测试是根据对程序内部逻辑结构的分析宋选取测试用例。白

箱(盒)测试用例的设计准则有:语句覆盖、分支覆盖、条件覆盖和组合条件覆盖。

分支覆盖通过足够多的测试用例,使程序中的每个分支至少通过一次。分支覆盖准

则比语句覆盖准则严密一些,选项A正确;条件覆盖通过执行足够多的测试用

例,使每个判定中的每个条件都能取到两种不同的结果(“真"与"假”)。虽然条件覆

盖要比分支覆盖优越,但并不能完全满足分支覆盖,选项B错误;组合条件覆盖

要求通过足够多的测试用例,使每个判定中各条件的各种可能组合至少出现一次,

它则既能满足分支覆盖准则,也能满足条件覆盖准则,但也不是完全测试,选项C

错误。

8、下列叙述中正确的是()。

A、数据库设计是指设计数据库系统

B、数据库设计是指设计数据库管理系统

C、数据库设计是指在已有数据库管理系统的基础上建立数据库

D、以上三种说法都不对

标准答案:4

知识点解析:数据库设计是指,在已有数据库管理系统的基础卜建立数据库的过

程,选项A与B错误,选项C正确。

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

A、排序、索引、统计

B、选择、投影、连接

C、关联、更新、排序

D、显示、打印、制表

标准答案:2

知识点3析:在关系模型的数据语言中,除了常规的集合运算外,还定义了一些专

门的关系运算,如投影、选择、连接等运算。

10、下列数据模型中,具有坚实理论基础的是()。

A、关系模型

B、网状模型

C、层次模型

D、以上三个都是

标准答案:1

知识点解析:在层次模型和网状模型的系统研究和数据库设计中,其性能和质量主

要决定于设计者的经验和技术水平,缺乏一定的理论指导。关系模型有坚实的理论

基础,它以数学理论为基础,从而避免了层次模型和网状模型系统中存在的问题。

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

分。)

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

是()。

A、有零个或多个输入

B、有零个或多个输出

C、有穷性

D、可行性

标准答案:2

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

应当具有以下5个基本特性:有穷性、确定性、可行性、有零个或多个输入、有一

个或多个输出。由此可知选项B不正确,故4个选项中选项B符合题意。

12、C语言中用于结构化程序设计的3种基本结构是()。

A、顺序结构、选择结构、循环结构

B、if、switch、break

C、for、while^do-while

D、if、for^continue

标准答案:1

知识点解析:结构化程序设计是由3种基本结构组成的,它们是顺序结构、选择结

构和循环结构。所以,A选项为所选。

13、在一个C程序中()。

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

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

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

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

标准答案:2

知识点解析:一个完整的C语言程序有且仅有一个主函数(main。函数)。程序总从

main。函数的第一条语句开始执行,到main。函数的最后一条语句结束,其他函数

都是在执行main。函数L寸,通过函数调用或嵌套调用而得以执行的。C语言规定,

main。函数在程序中的位置是任意的,故选项A、选项C和选项D均不正确。所

以,B选项为所选。

14、下列叙述中正确的是()。

A、C语言中既有逻辑类型也有集合类型

B、C语言中没有逻辑类型但有集合类型

C、C语言中有逻辑类型但没有集合类型

D、C语言中既没有逻辑类型也没有集合类型

标准答案:8

知识点解析:在C语言中没有逻辑类型,逻辑类型用整型来表示,故选项A和选

项C不正确:C语言中没有集合类型,故选项B不正确。所以,D选项为所选。

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

A、xl=26.8%3;

B、l+2=x2

C、x3=0x12;

D、x4=1+2=3;

标准答案:4

知识点解析:赋值的一股形式为:变量名:表达式;,赋值的方向为由右向左,即

将:右侧表达式的值赋给:左侧的变量,执行步骤是先计算再赋值。选项A中运

算符%的运算对象必须为整数,而选项A中26.8不为整数,故选项A不正确;选

项B将一个变量赋值给一个常量,这在C语言中是不允许的,故选项B不正确;

选项D中也是将一个常量3赋值给一个常量,故选项D不正确;所以,4个选项

中选项C符合题意。

16、设有以下定义:inia=。;doubleb=1.25;charc='A';#defined2则下面语句中

错误的是()。

A、a++;

B、b++;

C、c++;

D、d++:

标准答案:8

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

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

选项D是个不正确的语句。

17、若有如下定义:inix=6,y=3,z=2;则表达式x=y||y<z&&z==z的值是()。

A、0

B、1

C、4

D、6

标准答案:2

知识点解析:〈优先级高于厂高于&&高于||高于二。首先计算表达式y〈z的值,y

Vz为假,表达式的值为0,则逻辑表达式yVz&&z==z的值也为0,||左侧y的值

为非零值3,所以表达式的值为1,将1赋值给x,赋值表达式的值是1。

18、设有如下程序段:x=2002,y=2003;printf("%d\n",(x,y));则以下叙述中正确的是

()。

A、输出语句中格式说明符的个数少于输出项的个数,不能正确输出

B、运行时产生出错信息

C、输出值为2002

D、输出值为2003

标准答案:8

知识点解析:“x,y”是一个逗号表达式,逗号运算符的结合性为从左到右,逗号表

达式一般形式为“表达式1,表达式2…,表达式n”,整个表达式的值为表达式n

的值,故本题是输出y的值2003。所以,4个选项中选项D符合题意。

19、有以下程序:main(){inta=666,b=888;printfC'%d\n",a,b);}程序运行后的输出

结果是()。

A、错误信息

B、666

C、888

D、666,888

标准答案:2

知识点解析:程序中的prinif()函数的输出格式部分只说明了一个%d,而输出成员

列表却有两个成员a和b,在这里将只输出第一个成员a值为666,所以,4个选项

中选项B符合题意。

20、有以下程序:main(){inti;for(i=0;i<3;i++)switch(i){case0:prinft(,'%d*\i);

Case2:prinft("%d”,i);default:prinft("%d",i);))程序运行后的输出结果是()。

A、22111

B、21021

C、122

D、12

标准答案:4

知识点解析:程序中foi•循环了三次,第一次i=O,执行swilch语句中case。:分

支,直到遇到default语句,退出switch,这里共执行了3个输出语句分别输出0、

0、0,第二次循环i=l,switch语句中没有匹配的分支,故只执行default语句输出

1,退出swilch语句:第三次循环i=2,从switch语句中的case2:开始执行,共执

行了两个输出语句输出2、2o最后输出的结果为030122。所以,4个选项中选项

C符合题意。

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

分。)

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

printf(,%d\n,,s);}程序运行后的输出结果是()。

A、8

B、10

C、7

D、11

标准答案:1

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

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

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

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

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

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

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

5,接着执行语句"s+=a++;”在这条语句中a加I,但表达式a++还是原来的值,故

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

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

“s=s+(a++);"即s=5+3,最后值为8,所以输出的s值为8。故4个选项中A正确。

22、阅读下述程序段:y=-l;if(x!=0)if(x>0)y=l;elsey=0;该程序段所描述的数学

关系是()。

y=<0(x=0)

l(x>0)

l(x<0)

y=0(x=0)

-l(x>0)

0(x<0)

y=-i(x=o)

C、Kx>0)

y='l(x=0)

D、0(x>0)

标准答案:4

知识点解析:y的初值为-1,第一个if语句的判断条件为x!=0,即当x!=0时y的

值变化,x=0时y的值不变,仍为-1。第二个if语句的判断条件为x>0,如果x>

0则y=l,否则y=0,即xVO时,y=Oo4个选项中C符合题意。

23>有如下程序:inain(){intx=23;do{printf("%d".x-);}while(!x);}程序运行

后的输出结果是()。

A、321

B、23

C、不输出任何内容

D^陷入死循环

标准答案:2

知识点解析:本题中使用do-while循环,每执行一次循环体输出x的值后将x减

lo当x=23,执行循环体输出x为23,X=X-1=23-1=22,判断循环条件是否成立,

因为x=22,!x的值为0,终止循环,因此只输出23。

24、要求以下程序的功能是计算s=l+l/2+l/3+…+140main。{intn;floats;

s=1.0;for(n=lO;n>l;n-)s=s+l/n;printf(H%6.4f\nu,s);}程序运行后输出结果错误,

导致错误结果的程序行是()。

A、s=1.0;

B、for(n=lO:n>l;n-)

C^s=s+l/n;

D、printf("%6.4f\n",s);

标准答案:4

知识点解析:程序中由于n为整型,所以1/n的结果始终为0,故程序最后输出的

结果为0,其结果错误,原因为在表达式1/n中I和n均为整型,所以应该将1改

为1.0,这样表达式1.0/n的值不为0,为该数学表达式的值,因此可以知道导致程

序运行后输出结果错误的行为“s=s+l/n广,所以,4个选项中选项C符合题意。

25、有以卜程序:main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=0)continue;k-

(printf("%d,%d\n",k,n);}程序运行后的输出结果是()°

A、1,1

B、2,2

C、3,3

D、4,4

标准答案:4

知识点解析:在本程序的for循环中,用到了一个ccntirme语句.continue语句的

作用是停止本次循环,不执行循环体内continue语句后面的其他语句,继续下次循

环的条件判断。首先在for循环中n自加1(值变为I),然后执行后面的if语句,由

于if语句后面括号的表达式1%3!=0的值为真,程序执行continue语句,回到for

循环的开始部分,并旦判断for循环中的条件表达式(nVk)为真,重复执行“n++;”

语句,如此循环直到n=3时,if语句判定条件中表达式3%3!=0的值为假,程序执

行if语句后面的“k-;”语句,此时k的值为3,不满足nVk,退出for循环。故最后

的k和n的值为3和3,选项C符合题意。

26、有以下程序:floatfun(inix,inty){retum(x+y);}main(){inta=2,b=5,C=8;

printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序运行后的输出结臬是()。

A、编译出错

B、9

C、21

D、9

标准答案:2

知识点解析:fun((int)fun(a+c,b),a-c))是用函数的返回值做实参。第一次调用

fun(a+c,b),x+y=a+c+b=2+5+8=15,由于函数fun()的返回值类型被定义为float型,

返回值为15.000000,在主函数中被强制转换为int型变为15。第二次调用后

fun(15,a-c),x+y=15+a-c=15+2-8=9,返回值为9.000000,输出格式耍求小数位为0

且数据宽度为3,则输巳9。

27、有以2程序: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中,通过调用两次f2()函数,求得a、b、c的最小值并存放到

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

的值为5、4、3。所以C选项为所选。

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",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、5cD

选项为所选。

29、以下选项中,正确运用指针变量的程序段是(),

A、int*i=NULL;

B、float*f=NULL;scanf(n%d",i);*f=10.5;

C、chart='m,,*C=&t;

D、long*L;*C=&t;L='O';

标准答案:8

知识点解析:选项A定义了一个整型变量i,并且初始化让它指向NULL,接着通

过scarnf()函数,改变i指向的存储空间的值,选项A中首先定义了整型指针变量i

并初始化为NULL,即表示指针i不指向任何存储单元,即此时还没有为i在内存

中开辟存储单元,而在scanf()函数中第二个参数是地址参数,显然在这里i不表示

地址,所以下面的scanf(”%d”,i)语句是不正确的,故选项A不正确。选项B定义了

一个实型指针变量f并初始化使它指向NULL,即还没有为f在内存中开辟存储单

元,不能向*f代表的存储单元(不存在)中写数据,故选项B错误;选项C中首先定

义了一个字符变量]并给它赋初值'm:然后定义一个字符型指针c并让它指向了

变量t,这一部分正确,然后接着用了一个语句“*c=&t;”应该将该语句中c前的*去

掉,故选项C运用指针变量不正确。选项D中的是一个转移字符,称作“空

值”,可以给指针变量L赋值。所以,4个选项中选项D符合题意。

30、有以下程序:include<stdio.h>main。{printf("%d\n”,NULL));程序运行后的

输出结果是()。

A、0

B、1

C、-1

D、NULL没定义,出错

标准答案:1

知识点解析:在C语言中NULL的ASCII码值为0,而输出函数要求以整形格式

输出,故最后的输出数为0。所以,4个选项中选项A符合题意。

31、已定义c为字符型变量,则下列语句中正确的是()。

A、c='97';

B、c=“97”;

C>c=97;

D、c=Ma";

标准答案:4

知识点解析:用单引号活起来的一介字符称为字符常量,而选项B和选项D中用

的是双引号,而用双引号括起来的字符为字符串常量,故选项B和选项D不正

确。因为在C语言中,字符常量在存储时,并不是把该字符本身放到内存单元中

去,而是将该字符的相应ASCII代码放到存储单元中,所以C语言使字符型数据

和整形数据之间可以通用,选项C正确。而选项A中,给字符型变量赋值时只能

赋一个字符,9,7作为字符时为两个字符且必须分别为单引号括起来,故选项A

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

32、以下不能正确定义二维数组的选项是()。

A、inta[2][12]={{l),{2();

B.inta[][2]=(l,2,3,4);

C.inta[2][2]={{l},2,3):

D、inta[2][]={{l,2},{3,4}};

标准答案:8

知识点解析:在定义中如果对所有元素赋初值,其第1维的长度可以省略,故选项

B正确;二维数组初始化也可以只对每行或前若干个行的前若干个元素赋初值,故

选项A和选项C正确:在二维数组定义时不能省略第二维的长度,故选项D错

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

33、若有如下程序:main(){chara[3][5]={"name,,,,,age'\',sex,'),n;for(n=0;n<

3;n++)printf("%s\n”,a[n]);}则程序执行后的输出结果是()°

A、nameagesex

B、name

C、name

D、nameagexexgeagesexxsex

标准答案:4''

知识点解析:a[3]⑸是一个二维数组,它也可以看成是一个有3个元素的一维数组

a|Oha|l]、a|2],同时这3个元素也是一维数组,分别保存字符串“name”、

“age”、“sex”。for循环循环3次,输出3个字箱串“name”、"age”、“sex"。所以,C

选项为所选。

34、有以F程序:main(){intm口[3]={1,4,725,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[2][0]、m⑵川和

m[2][2],其值分别为3、6、90所以,C选项为所选。

35、执行卜列程序的结果是()。#defineN5#defineH(x)((N+2)*x)main(){int

a=2,b=3,C;c=H(a+b);printf("%d,r,c);}

A、15

B、17

C、23

D、35

标准答案:2

知识点解析:用a+b替代宏H(x)中的参数x,用5替代N,贝IJ

((N+2)*x)=((5+2)*a=b)=((5+2)*2+3)=17o

36、有以下程序:inaiiiO{uhai5[]-"\II123\\";prifilf(,%d,%d\ir,slrlcii(5),sizuuf(5));}

执行后输出结果是()。

A、赋初值的字符串有错

B、6,7

C、5,6

D、6,6

标准答案:4

知识之解析:本题在定义字符数组时没有定义数组长度,但用字符常量给数组赋了

初值,这时初值的个数即为数组的长度,故数组长度为6(包括)(V)。字符串的长度

为有效字符的个数5。sMen(s)返回值为串中字符的个数(不计最后的'0)则输出

值为5。sizeof(s)计算数组所占的字节数,包含、0、则输出值为6。因此,C选项

正确。

37、阅读以下函数:fun(char*sl,char*s2){inti=0;while(sl[i]==s2[i]&&

s2[i]!=,\0,)i++;retum(sl[i]=&&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[i](两个字符串不相等);第二

个是sl[i]和s2[i]相等均为\0(两个字符串相等)。循环退出后,执行return语句,即

两个字符串相等则返回1,不相等则返回0。所以,C选项为所选。

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

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

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

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

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

标准答案:2

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

数中将不起作用,因此全局变量的作用域并不一定比局部变量的作用域大,故选项

A不正确;静态变量一旦定义,将在整个程序的运行期间都存布,故选项B正

确;函数的形参只在函数调用的时候分配存储空间,在退出函数时收回存储空间,

因此是局部的,故选项C不正确;没有赋值的auto型变量的初值是随机的,没有

赋值的sialic型变量的初值是0,故选项D不正确。所以,B选项为所选。

39、设有如下说明:typedefstruct{intn;charc;doublex;)STD;则以下选项中,能

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

A、STDtt[2]={{1;A*,62},{2;B?,75});

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

C、stmctt[2]={{l,W),{2/B3};

D、structt[2]={{1,HA",62.5),{2,nB",75.0});

标准答案:1

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

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

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

型元素用,括起来,选项A、B、C、D中只有选项A符合条件。所以,A选项为

所选。

40>在下列定义中的共用体所占内存字节数是()。union{chark[6];struct{intm;

floarf;}a;doubled;}b;

A、8

B、14

C、18

D、10

标准答案:

知识之解析:1结构体变量所占的存储空间是各个分量所占空间的总和。共用体变量

中的所有成员占有同一个存储空间,其字节数与成员中占字节数最多的那个成员相

等。m占2个字节,f占4个字节,因此结构体变量a所占的存储空间为6字节。

k|6]占6个字节,d占8个字节。共用体变量b所占的存储空间与占存储空间最多

的d所占存储空间的字节数相同。所以,A选项为所选。

41、若有以下结构体,则正确的定义或引用是()。structTest{intx;inty;)vl;

A、Test.x=IO;

B、Testv2;v2.x=10;

C^structTestv2;v2.x=10:

D、structTest.v2=10;

标准答案:4

知识点解析:定义结构体类型的变量的方式有:①紧跟在结构体类型说明之后进

行定义,如题目中给出的;②在说明对结构成员的引用形式为结构体变量名.成

员名选项A对结构成员的引用的形式是错误的,Test是结构体名,不能用来引用

结构成员。选项B中定义结构体类型的变量的形式是错误的,Test是结构体名,

不能用宋定义结构体类型的变量。选项D中对结构成员的引用的形式是错误的,

对结构成员的引用的形式为:结构体变量名.成员名。4个选项中只有选项C是正

确的定义或引用。

42、有以卜程序:main(){chars[]=uYes\n/Non,*ps=s;puts(ps+4);*(ps+4)=0;

puts(s);)程序运行后的输出结果是(选项D中的第一行是空行)()。

A、n/NoYes/No

B、/NoYes

C、n/NoYes/No

D^/NoYes

标准答案:2

知识点。析:主函数中定义了一个字符数组s并赋初值,一个字符串指针变量ps

并让它指向so程序中p+4的地址为数组第5个元素的地址,而调用put(stjadr)函

数时,将从sljadr这一地址开始,依次输出存储单元中的字符,遇到第一个'。时

结束输出,并自动输出一个换行符。所以put(p+4)将输出n/No,puKs)将从s第一

个元素开始输出到第3个元素结束(因为执行*(p+4)=0语句后s中的第5个元素的

值为0,而s中的第4个元素为\,puis将遇到\0,结束输出),即输出yes。所以,4

个选项中选项B符合题意。

43、有以下程序:voidfun(int*a,inti,intj){intt;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]);)执行后的输出结果是()°

A、654321

B、432156

C、456123

D、123456

标准答案:1

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

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

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

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

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

值,因此输出的值为6、5、4、3、2、1,.所以,A选项为所选。

44、假定下列程序的可执行文件名为filel.exe,在该程序的子目录下输入命令行:

file1ChinaBejingV回车〉main(intargc,char*argv[]){vvhile(argc—>1)

printf(n%s\n",*++argv);)则程序运行后的输出结果是()。

A^filelChinaBejing

B、ChinaBejing

C、China

D、Rejing

标准答案:2

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

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

入的参数字符数。在本例中argc的值为3,argv[0]指向字符串."fHel”,argv[l]指向

参数字符串“China”,argv⑵指向字符串“Bejing”。在main()函数中,while循环执

行了2次。第1次循环,argc=3,3>1为真,argc-l=3-l=2,执行循环体输出

*++argv,argv为字符型的指针数组的数组名,代表数组的首地址,同时也是数组

第1个元素的地址,++argv指向数组的第2个元素,第2个元素是一个指针,它指

向字符串“China”。第2次循环,argc=2,2>1为真,argc-1=2-1=1,执行循环体输

出*++argv,这次循环畔++argv指向数组的第3个元素,第3个元素是一个指针,

它指向字符串“Bejing”。argc=l时,1>1为假,退出循环。所以,4个选项中选项

B符合题意。

45、有如下说明和定义语句:structstudent{intage;charnum{8};);structstudent

stu[3]={{20;'200401M},{21,n200402"),{19,"200403")};structstudent*p=stu;以下选项

中引用结构体变量成员的表达式错误的是()。

A、(p++)->num

B、p->num

C^(*p).num

D、stu[3].age

标准答案:8

知识点解析:结构体变量也有地址,因此可以把它的地址赋值给一个指针变量,然

后通过该指针变量来引用结构体的成员,选项A和选项B就是通过指针变量来引

用结构体的成员,故选项A和选项B都正确,也可以通过结构体数组元素的成员

引用,选项C和选项D属于这种情况,而在选项D中stu[3].age不正确,因为结构

体数组slu共有3个元素,其下标应该为0,1,2。所以,4个选项中选项D符合

题意。

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

确的是()。

typedefSTPchar*s;

B、typcdcfx,charSTP;

C、typedefSTP*char;

D^typedefchar*STP:

标准答案:8

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

看出只有选项D是正确的定义形式。所以,D选项为所选。

47、下面程序的输出结果为()。structst{intx;int*y;}*p;intdt[4]={10,20,30,40);

structstaa[4]={50,&dt[0],60,&dt[l],70,&dt[2],80,&dt[3]};main(){p=aa;

printf("%d\n",++p->x);printf("%d|n",(++p)->x);printf(1,%d\n",++(*p->y));}

A、102020

B、506021

C、516021

D、607031

标准答案:4

知识点解析:第1个输出语句中由于->的优先级高于++,因此先取结构体的分量

x,再对x的值加1,再输出。p的初值为结构体数沮aa的首地址即a[0]的地址,

a[0]的x分量值为50,加I后输出51。第2个输出语句中++p被括号括起来,括号

的优先级与->相同,自左至右结合,因此先对p加1,再取p所指向的元素的x分

量的值。p加1后p指向数组元素a[l],a[l]的x分量的值为60,输出60。第3个

输出语句中括号的优先级高于++,因此先求括号中表达式的值,又由于的优先

级高于*,所以先取p所指向的数组元素的y分量的值,p所指向的元素为a[l],y

分量的值为&出[1]。是一个存储单元的地址,是数组出第2个元素的地址

值,再取该存宿率•元中的值为20,最后对20加1,输出21。选项C为所选。

48、表达式“〜9&9VVl|4”的值为()。

A、0

B、4

C、5

D、22

标准答案:8

知识点解析:优先级由高到低的顺序为〜、<<、&、|o9的二进制形式为

00001001,4的二进制形式为00000100。〜9即11110110。9VVI为00010010,

11110110&00010010=00010010,00010010100000100=10110即22o

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

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

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

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

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

标准答案:8

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

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

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

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

节,所以不适合使用随机读写方式。数据以二进制形式存放,占有的字节数是固定

的,所以可以进行随机读写,当然也可以顺序读写。故D选项为所选。

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

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

nM

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

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

2L*sizeof(int),SEEKEND);fread(&b,sizeof(int)[,fp);/*从文件中读取sizeof(int泞节

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

A、2

B、1

C、4

D、3

标准答案:8

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

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

指向的文件;函数fscanf(FILE*fp,constchar*format[,address,--])的功能是根据

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

中。函数fprintf(FILE*fp,conslchar*format|,argument,--])的功能是把argument歹I」表

中的表达工t值写到fp所指向的文件中;函数fwriteivoid*ptr,intsize,intn,FILE*fp)

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

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

data.dat,直接通过一个for循环,每循环一次调用函数fwrile将数组中的元素a[i]

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

123,然后通过fclose函数关闭fp所指文件。接着通过函数fopcn以rb的方式打开

文件data.dat,通过fseek函数让指针fp从文件末尾向前移动两个血型大小字节,

再通过函数fread从fp所指的文件畔,读取一个in1型大小的数据到变量b中,故

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

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

分。)

51、在一个容量为25的循环队列中,若头指针front=16,尾指针rcar=9,则该循

环队列中共有【】个元素。

标准答案:18

知识点解析:设循环队列的容量为n。若rear>front,则循环队列中的元素个数为

rear-front;若rear<from,则循环队列中的元素个数为n+(rear-front)。题中,

front=16,rear=9,即rearVfront,所以,循环队列中的元素个数为m+(rear-

front)=25+(9-l6)=18。

52、在面向对象方法中,属性与操作相似的一组对象称为【】。

标准答案:类

知识之解析:在面向对象方法中,类描述的是具有相似性质的一组对象。所以,属

性与操作相似的一组对象称为类。

53、在软件开发中,结陶化方法包括结构化分析方法、结构化设计方法和结构化程

序设计方法。详细设计阶段所采用的是【】方法。

标准答案:结构化设计

知识点解析:在软件开发中,结构化方法包括结构化分析方法、结构化设计方法和

结构化程序设计方法。详细设计阶段所采用的是结构化设计方法。

54、在关系模型中,把数据看成一个二维表,每一个二维表称为一个【】。

标准答案:关系

知识点解析:在关系模型中,把数据看成一个二维表,每一个二维表称为一个关

系。

55、实体之间的联系可以归结为一对一的联系,一对多的联系与多对多的联系。如

果一个学校有许多教师,而一个教师只归属于一个学校,则实体集学校与实体集教

师之间的联系属于【】的联系。

标准答案:一对多

知识点解析:实体之间的联系可归结为一对一、一对多与多对多的联系。如一个学

校有许多教师,一个教师只归属于一个学校,则实体集学校与实体集教师之间的联

系属于一对多的联系。

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

56、已知字符A的ACSII码值为65,以下语句的输出结果是【】。charch=,B,;

printf("%c%d\n'r,ch,ch);

标准答案:B66

知识点解析:prinlf函数的功能是按照指定的格式,在标准输出设备上输出数据,

它有两种参数:格式控制参数和输出项参数。本题中,p「intf("%c%d\n”,ch,ch)表示

以字符格式和十进制整数格式输出ch,B的ACSH码值为66,即在计算机中B的

十进制整数格式是66。所以,输出为B66。

57、以下程序段的输出结果是【】。main。{inta=2,b=2,c=4;a*=16+(b++)-(++C);

printf("%d",a);}

标准答案:26

知识点解析:a*=l6+(b++)-(++c)等价于a*=a*(l6+(b++)-(++c))=2*(16+(2-5)=26=

b++是先使用b的值参加运算,再对b加1;++c是先c加1,再使用c的值参加运

算。

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

输出结果是【】。

标准答案:0

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

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

的值为Oo

59^若有以下程序:main。{inta=4,b=3,c==5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)

t=a;a=c;c=t;printf("%d%d%d\n",a,b,C);}执行后输出结果是[]。

标准答案:503

知识点解析:先判断表达式aVh为假,不执行t=a,但执行a的值为

3,b的值为0。再判断表达式aVC,值为真,所以执行后面的3条语句“片a;

a=c;c=f\结果a的值为5,c的值为3,所以最后输出的结果为5、0和3。

60、有以下程序:#include<stdio.h>main(){charchl,ch2;intnl,n2;chl=getchar();

ch2=getchar();nl=chl-'0';n2=nl*10+(ch2-'0');printf(n%d\n",n2);;)程序运行时输入

12〈回车,,执行后输出结果是【】。

标准答案:12

知识点解析:字符类型的数据在内存中以相应的ASCH码存放,在C语言中,字

符数据可以等价为与其相应的ASCII码的整数,还可以作为整数参加运算。在本

题中,nl=chl-,0,=,l-,0,=49-48=1,n2=n1*10+(ch2-,0,)=1*10+('2'-'0'尸10+2=12,

所以,最后输出为12o

61、有以6程序:voidf(inty,int*x){y=y+*x;*x=*x+y;}main(){intx=2,y=4;

f(y,&x);ptimf("%d%d\n",x,y);}执行后输出结果是[】。

标准答案:84

知识点解析:“值传递”指实参将值传递给形参后,实参与形参再无联系。也就是说

对行参的改变将不影响实参;地址传递是指地址或数组名作为形参时的参数传递,

这种情况下对形参的改变将对实参产生影响。函数f(y,*x)的作用是让y的值加上

指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值

的,形参x是传地址的,故调用该函数后,作为实参丫的值将不改变,而实参x的

值将改变,故最后输出的y值为4,而x的值为8。

62、若x、y和z均是int型变量,则执行下面表达式后的x值为【】。

x=(y=4)+(z=3)

标准答案:7

知识点解析:x=(y=4)+(z=3)等价于y=4,z=3,x=y+z=4+3=7o

63>以下程序中,for循环体执行的次数是[]o#defineN2#defineMN+l

#defineKM+l*M/2main(){inti;for(i=l;i<K;i++){...})

标准答案:4

知识点解析:将程序中所有的宏替换掉可得:M=2+l,K=2+1*2+1/2=4,所以for

循环共循环了K-1+1次,即4-1+1共4次。

64、设有如下变量说明,则a+(int)((int)b+c)>>(int)(b-c)的值为[】。inta=5;float

b=7.2,c=3.6;

标准答案:1

知识点解析:在表达式a+(inl)((inl)b+c)>>(inl)(b-c)中圆括号最优先,其次为类型

转换(in。、加法+、减法-、右移运算所以先看两个圆括号((int)b+c)和(b-c),

前者b先被转换为int型7,然后与c相加得10.6,后者结果是3.6,现在表达式为

a+(iol)10.6>>(inl)3.6。C语言中,float型转换为血型是截尾取整,所以表达式

进一步简化为5+10>>3:由于15的二进制为000011112(下标),所以

15>>3的结栗是000000012(下标),即I。

65、

10

以下程序通过函数SunFun求汇八出。这里/小六/<,由F函数实现.请填空,

r-0

main(){printf("Thesum=%d\n",SunFun(lO));}SunFun(intn){intx,s=0;for(x=0;x<

=n;x++)s+=F([]);returns;}F(intx){return(【]);)

标准答案:xx*x+l或l+x*x

知识点解析:题目中要求从x=0开始将f(x)的值累加起来,直到x=10.在

SunFun。函数中用了一个for循环,每循环一次将f(x)累加到s中,所以在本题的第

一个空白处应该填x,然后x+1,共循环10次。F。函数的功能应该是求数学表达

式f(x)的值,所以其返回值应该为x*x+l。

66、若有如下程序:main(){inix=5,y,*t;l=&x;y=++(*l);prinlf("%d,%d",x,y);}则

程序执行后的x值为【】,y的值为【】。

标准答案:66

知识点解析:本题定义两个iht型变量x、y,一个int型指针3并将x初始化为

5,t指向变量X。表达式y=++(*t)的意思是:让t所指地址内容自增1,然后赋给

yo所以执行后I所指的内容(即变量x的值为6)y也为6。故本题的两个空都应该

填6。

67、下面函数用来求两个单精度数之和,并通过形参将结果传回,请填空。void

sub(floatx,floaty,[]z){[]=x+y;)

标准答案:float**z

知识点解析:C程序中可以通过传送地址的方式在被调用函数中直接改变被调用函

数中变量的值,从而达到函数之间数据的传递。

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

温馨提示

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

评论

0/150

提交评论