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

下载本文档

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

文档简介

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

一、选择题(本题共38题,每题1.0分,共38分。)

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

A、程序执行的效率与数据的存储结构密切相关

B、程序执行的效率只取决于程序的控制结构

C、程序执行的效率只取决于所处理的数据量

D、以上说法均错误

标准答案:A

知识点解析:程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结

构、所处理的数据量等有关。

2、有以下程序:#includemain(){inti,j,k,a=5,b=6:i=(a==b)?++a:-b;

j=a++;k=b;printf("%d,%d,%d\n",i,j,k);}程序的运行结果是()。

A、7,6,5

B、5,5,5

C、7,5,5

D、5,6,5

标准答案:B

知识点解析:条件表达式i=(a==b)?++a:-b;中先执行a==b,值为假,根据三元

运算符语法规则,执行--b,此时b为5,赋给i,i=5;j=a++,将a=5先赋给j,再

进行a++,j=5,a=6,k=b=5,故最后输出的是5,5,5。

3、以下关于relurn语句的叙述中正确的是()。

A、一个自定义函数中必须有一条return语句

B、一个自定义函数中可以根据不同情况设置多条return语句

C、定义成void类型的函数中可以有带返回值的return语句

D、没有relum语句的自定义函数在执行结束时不能返回到调用处

标准答案:B

知识点解析:在函数中允许有多个return语句,但每次调用只能有一个return涪句

被执行,因此只能返回一个函数值。定义成void类型的函数.不允许从该函数取

得返回值,也不允许使用return语句,C选项描述错误。没有return语句的函数在

执行到函数的最后一条语句后会自动返回到调用处,A、D选项描述错误。因此B

选项正确。

4、有以下程序:#includetypedefstruct{intb,P;jA;voidf(AC)/*注意:C是

结构变量名*/{intj;c.b+=l;e.p+=2;)main(){inti;Aa={1,2);f(a):

printf("%d,%d\n”,a.b,a.P);)程序运行后的输出结果是()°

A、2,4

B、1,2

C、1,4

D、2,3

标准答案:B

知识点解析:结构体变量可以作为函数的参数和返同值。作为函数的实参时,可以

实现函数的传值调用。当使用结构体变量作为函数的形参时,实参也应该是结构体

变量名以实现传值调用,实参将拷贝副本给形参,在被调用函数中改变形参值对于

调用函数中的实参没有影响。所以选择B。

5、开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做()。

A、软件矛盾

B、软件危机

C、软件耦合

D、软件产生

标准答案:B

知识点解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期

显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了

入门难以控制软件发展的局面,即所谓的“软件危机”。

6、有以下定义语句,编译时会出现编译错误的是()。

A、chara=,a,

B、chara=,\n\

C、chara=,aa,;

D、chara=,\x2d,

标准答案:C

知识点解析:本题中a为一个字符型变量,只能为其赋值一个字符常量。C项

中'aa,不是字符常量,所以会编译错误。BD两项为转义字符,编译可以通过。

7、if语句的基本形式为:if(表达式)语句,其中“表达式”()。

A、可以是任意合法的表达式

B、必须是逻辑表达式

C、必须是逻辑表达式或关系表达式

D、必须是关系表达式

标准答案:A

知识点解析:本题考查if表达式。if(表达式)中的表达式可以为任何合法的表达

式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(==)误写为赋值号

(二)时不会报错的,但是其值恒为1。

8、若有定义语句:inta=3,b=2,c=l;,以卜.选项中错误的赋值表达式是()。

A^a=(b=4)=3;

B、a=b=c+l;

C、a=(b=4)+c;

D、a=l+(b=c=4);

标准答案:A

知识点解析:这道题目主要考察赋值表达式,对于赋值表达式来说,赋值号"=''的

左边一定为变量名,右边为一个C语言合法的表达式。

9、已知一个文件中存放若干工人档案记录,其数据结构如下:structa(char

number[IOO];intage;floatp[6];};定义一个数组.:structanumber[10];假定

文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。

A、fread(b,sizeof(structa),10,fp);

B、for(i=0;i<10;i++)fread(b|i),sizeof(slructa),1,fp);

C、for(i=0;i<10;i++)fread(b+i,sizeof(structa),1,fp);

D、for(i=0;i<5;i+=2)fread(b+i,sezeof(structa),2,fp);

标准答案:B

知识点解析:数据块输入/输出函数的调用形式为:fread(buffer,size,count,

fp)ofread函.数参数说明:“buffer'、是一个指针,对fread来说,它是读入数据的

存放地址。对fwrile来说,是要输出数据的地址。“size”是耍读写的字节数;

“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。选项B)中

b[i]是一个数组,不是指针,需改为注意:完成一次读操作(frcad())后,如

果没有关闭流(felose。),则指针(FILE*fp)自动向后移动前一次读写的长度,不关闭

流则继续下一次读操作,接着上次的输出继续输出。

10、下列一维数组说明中,不正确的是()。

A、intN;scanfT%d",&N);intb[N];

R、floata[]={1,6,6.0,2):

C、#defineS10inta|S];

D、#defineS10inta[S+5];

标准答案:A

知识点解析:本题考查一维数组的赋值。一维数组的一般定义格式为:类型说明符

数组名[常量表达式]。其中,“口”中的内容可以是整型常量,也可以是整型表达

式。选项A)中的N是一个变量,所以错误。

11、已知char**s,下面正确的语句是()。

A、s="ABCDEFn:

B、*s="ABCDEF";

C、**s="ABCDEF";

D、*s='A';

标准答案:C

知识点解析:“S”是代表数组首地址的地址常量,不是变量,“=”左边不能出现常

量,因此s="ABCDEF”语法错误。"**s”和“s”一样;“*s”是指变量地址,不能给其

赋字符串。

12、某二叉树中度为2的结点有10个,则该二叉树中有()个叶子结点。

A、9

B、10

C、II

D、12

标准答案:C

知识点解析:根据二叉树的性质3:对任何一棵二叉树,度为0的结点(即叶子结

点)总是比度为2的结点多一个。

13、有以下程序段:inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n)(case

1:case3:primf("%d\n",n);break;case2:case4:printf("%d\n",n);

continue:case0:exit(O);}printf("%d\n",n);}以下关于程序段执行情况的叙

述,正确的是()

A、for循环语句固定执行8次

B、当产生的随机数n为4时结束循环操作

C、当产生的随机数n为1和2时不做任何操作

D、当产生的随机数n为0时结束程序运行

标准答案:D

知识点解析:当产生的随机数n为。时,执行case。:exit(O)这条语句,结束程序

的运行。

14、设有定义:chars[81];inti=0;以下不能将一行(不超过80个字符)带有空格

的字符串正确读入的语句或语句组是()。

A、gets(s);

B、while((s[i-H-]=getchar())!=?\n');s[i]=,\O';

C、scanf("%s",s);

D、do{scanf("%cH,&s[i]);}while(s[i++]!八n>s[i]=,\0,;

标准答案:C

知识点解析:函数scanf()输入字符串时默认空格为间隔符,所以不能输入空格,

答案选C。

15、对关系S和关系R进行集合运算,结果中既包含关系S中的所有元组也包含

关系R中的所有元组,这样的集合运算称为()。

A、并运算

B、交运算

C、差运算

D、除运算

标准答案:A

知识点解析:关系的并运算是指,由结构相同的两个关系合并,形成一个新的关

系,其中包含两个关系中的所有元组。

16>以下程序的输出结果是()。#includemain(){inta=l,b=3;if((++a<0)&&!(b-

<=0))printf("%d,%d\n”,a,b);elseprintf(4t%d,%d\n”,b,a);)

A、2.2

B、1,3

C、3,2

D、3.1

标准答案:C

知识点解析:解答本题的关键在于if语句条件中的表达式。初始时a=l,b=3,所

以++a=2>0,因此++a<0为假:因为是进行逻辑与(&&)运算,在&&的一个运算对

象为假的前提下不用判断第二个运算对象的真假,就可以直接得出整个表达式的值

为逻辑0,所以执行else语句。

17、以下不合法的数值常量是()。

A、8.0E0.5

B、lei

C、011

D、Oxabcd

标准答案:A

知识点解析:A选项中E后面的指数必须为整型数据,所以A错误。C选项中011

表示的是八进制常量,Oxabcd表示的是十六进制常量。

18、若有以下定义和语句:#inciude<stdio.h>chars1[10]="abcd!H,*s2=H\nl23

\\":printfC%d%d\n",strlen(sl),strlen(s2));则输出结果是()。

A、107

B、105

C、55

D、58

标准答案:C

知识点解析:strlen函数返回字符串的长度,求字符串长度时,遇到结束标志、(T

为止,但是长度不包括结束标识。字符数组si的后5个元素没有赋值,都为、

0',即“abed!”后为'(T.所以strlen(sl)的值为5。字符指针s2所指向的字符串

中,\n为转义字符换行符,表示1个字符,\\也为转义字符,代表也是1

个字符,其后为字符串结束标识'0';所以sWen(s2)的值也为5。因此C选项正

确。

19、有以下程序:#include#includemain(){charstr[][zo]={"One*World1',

"One*Dream!"J,*P=str[l];prinlf("%d,",strlen(P));printf("%s\n'*,P);程序

运行后的输出结果是()c

A、10,One*Dream!

B>9,One*Dream!

C、9,One*Wodd

D、10,One*World

标准答案:A

知识点解析:p是指向二维字符数组第二行“One*Dream!”的数组指针,所以长度是

10,打印输出的也是该字符串。

20、有以下程序:#include<stdio.h>intf(intk){staticinin=0;intm=0;n++;

m++;k++;returnn+m+k;}main(){intk;for(k=0;k<2;k++)printf("%d,",

t(k));printt("\n");)程序运行后的输出结果是()。

A、3,5,

B、3,6,

C、3,7,

D、0,3,

标准答案:A

知识点解析:static静态变量只在声明时初始化一次。因此,第一次调用函数

f(k=O),此时n=m=k=0,经过自增操作n=l,m=I,k=l,返回值为3,第二次调用

函数f(k=l),此时n=l,k=l,m=0,经过自增操作,n=2,k=2»m=L返回值为

5。故最终结果为3,5。故答案为A选项。

21、有以下程序:#include<stdio.h>main()(ehars[][6]={"abcd","abc",

W);inti;for(i=0;i<3;i++)puts(s[i]);}执行后的输出结果是()°

A、babcdabcab

B、aaa

C^abedbedcd

D>abC

标准答案:A

知识点解析:程序初始化一个二维数组.其中每个元素都是一个字符数组,f。「循

环中使用字符串输出函数puts。打印二维数组侦破那个的每个元素,puts。接受字符

数组名当做参数,将该字符数组存储的字符串打印出来,程序中s[0]存储的字符串

是“abecd",s[l]存储的字符串是“abc",s[2]存储的字符串是“ab",所以程序输出

为:abed、abc、ab,答案选A。

22、以下选项中正确的语句组是()。

,,,,

A、chads:s={BOOK!}:

B、charts;s=''BOOK!'';

,,,,

C、chars[10];s=BOOK!:

D、chars口;s=''BOOK!”;

标准答案:B

知识点解析:A选项去掉大括号就正确了;C选项和D选项应在定义时赋初值。因

此B选项正确。

23、有以卜.程序:#includemain(){inta=7;while(a-----);printR''%d\n'‘,

++a);}程序运行后的输出结果是()。

A、0

B、一1

C、1

D、7

标准答案:A

知识点解析:注意到while后面的分号是一个空语句,且a——是先用表达式,再

减1,所以while循环结束后a的值是一1,在打印语句中++a是先加1再使用表达

式,所以输出结果是0。

24、若要求定义具有10个float型元素的一维数组a,则以下定义语句中错误的是

()。

A、floata[5+5];

floatn=10,a[n];

C、#definen5floata|2*n|;

D、#defineN10floata[N];

标准答案:B

知识点解析:注意定义数组时,元索个数可以是宏定义常量,但不能是变显。囚此

选项B错。

25、以下fun函数返回数组中最大值的下标#inckide<stdio.h>intfun(int*s,intn)

{inti,k;for(i=0,k=i;i<n;i++)if(s[i]>s[k]);return(k);)在横线

处应填入的内容是

A、++k

B、i=k

C、k++

D、k=i

标准答案:D

知识点解析:fun函数的功能是返回数组中最大值的下标。通过for循环语句,每

次将最大的数给匕即卜与。因此D选项正确。

26、有以下程序:#includemain(){intx=l;for(;x<8;x++){if(x%3)

{printf("%d,",x++);continue;}printf(''%d,",++x);}}程序运行后的输

出结果是()。

A、1,4,5,7

B、1,3,5,7

C、2,4,5,8

D、8,5,4,2

标准答案:A

知识点解析:注意循环变量在循环体中有个加1的运算,所以循环变量x=l,3,

5,7;当x是3的整数倍时,输出++x,当x不是3的整数倍时输出x++,所以结

果是1,4,5,7o

27、设y为整型变量,a=6,am地址为E2000,b=l4,b的地址为E2001;执行语

句b=&a;y=&a;后y的值为()。

A、E2000

B、E2001

C、6

D、14

标准答案:B

知识点解析:本题考查函数调用时的参数传递。函数reverse将数组b进行了逆

置,此时b[10]={10,9,8,7,6,5,4,3,2,1),后面此r语句的功能是将b中的后3

个数累加,并将结果放在s中,最后将s输出,结果s=l+2+3=6。

28、下面不属于软件需求分析阶段主要工作的是

A、需求变更申请

B、需求分析

C、需求评审

D、需求获取

标准答案:A

知识点解析•:需求分析阶段的工作可概括为4个方面:①需求获取。②需求分

析。③编写需求规格说明书。④需求审评。

29、以下选项中合法的常量是

A、999

B、2.7e

C、OXab

D、123E0.2

标准答案:c

知识点常析:A选项中含有非法的空格,所以错误。C语言中十六进制常量以Ox开

头,所以C正确,实型常量中e的前后必须均有数据,且其后必须为整数,所以B和D

错误。

30、若有定义和语句:inta,b;scanf(”%d,%d,",&a,&b);以下选项中的输入数据,不

能把值3赋给变量a、5赋给变量b的是

A、3,5,4

B、3,5

C、3,5,

D、3,5

标准答案:D

知识点解析:scanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在

输入时必须输入这些字符,以保证匹配,所以在3和5之间必须输入逗号,不能有其

他符号,才能保证a和b的正确赋值,所以选择D。

31、有以下程序:#includemain(){intx,a=l,b=l;while⑴{scanf(''%d'',

&x);if(x>0){a*=x;break;}if(x<0){b*=x;continue;}printf(''%d,%d\n‘‘,

a,b);}}程序运行时输入:一2—3045<回车>,则输出结果是()。

A、1,6

B、1,61,6

C、一1,一6

D、一2,6

标准答案:B

知识点解析:循环体中的break语句将立即退出循环,而continue将直接执行下一

次循环。当输入一2和一3时,执行b*=x语句,且不会打印,结果是

3=6,当输入。时,前两个if语句并未执行,直接打印出a,b的值,此时a=l,

b=6,当输入4时执行break语句,直接退出循环。

32、有以下程序:#include#defineN4voidfun(inta[][N]int,b[]){inti;for(i=0;i

<N;i++)b[i]=a[i][N-1-i]—a[i][i];)main()(intx[N][N]={{1,2,3,4).

{5,6,7,8},{9,10,11,12},{13,14,15,16}},y|N|,i;fun(x,y);

,,,,

for(i=0;iVN;i++)printf("%d,",y[i]);printf(\n);}程序运行后的输出结

果是()。

A、一3,—i,1,3

B、一12,一3,0,0

C、3,1,—1,一3

D、一3,—3,—3,一3

标准答案:C

知识点解析:仔细分析子函数的功能是以数组反对角线卜的元素减去同行卜对角线

上的元素。

33、以下程序拟读取一个学生结构体中的人名,查找其年龄并输出:#include

#include#includestructstu{charname[10];intage:):structstu

team[6]={**zhang!i,,18,''wangtao'',20,19,''zhaodong'',

18,,,,liuxiu,\19},*P;main(){inti,flag=0;p=(structstu

*)malloc(sizeof(structstu));gets(&p->name):for(i=0;i<6;i++)if((strcmp(p—

>name,team|i].name)==0)){pfintf(''%d\n”,team|i|.age);flag=l;}

if(fiag==0)printf(,,Nofind!\n");}程序有语法错误,出错的是()。

A^pfintf(''%d\n",team[i].age)

B、p=(structstu*)malloc(sizeof(structstu))

C、if((strcmp(p->name,team[i].name)==0))

D、gets(&p->name);

标准答案:D

知识点解析:gets的参数应该是成员变量name数组的首地址,而&p—>name是

首先获取数组name的首地址,然后再对首地址取地址符,所以这是错误的,正确

参数应该是:gets(p->name)o

34、下述语句中,在字符串si和s2相等时显示“theyareEqua『的是()。

A、if(*sl==*s2)puts("theyareEqual'1);

BNif(!strcmp(sl*s2))puts("theyareEqual"):

C、if(sl==s2)puts("theyareEqual");

D、if(strcmp(sl,s2))puts("theyareEqual'1);

标准答案:B

知识点解析:字符串比较不能用“要用slrcmp(sl,s2)函数,字符串si和s2

相等时返回值为0,故!strcmp(sl,s2)==l,条件成立执型后面的语句,输出they

arcEqualo

35、已知一个文件中存放若干工人档案记录,其数据结构如下:structa{char

number[100];intage;floatp[6];};定义一个数组:structab[10];假定文件己

正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。

A、fread(b,sizeof(structa),10,fp);

B、for(i=0;i<10;i++)fread(b[i],sizeof(structa),1,fp):

C、for(i=0;i<10;i++)fread(b+i,sizeof(structa),1,fp);

D、for(i=0;i<5;i+=2)ffead(b+i,sezeof(structa),2,fp);

标准答案:B

知识点解析:数据块输入/输出函数的调用格式为:fread(buffcr,size,count,

fp),其中,“buffer”是一个指针,对于fread来说,它是读入数据的存放地址。

“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是

指文件型指针。选项B)中b[i]是一个数组,不是指针,需改为&b[i]。

36、以下选项中非法的字符常量是()。

A、

B>A0201,

C、'\xAA'

D、'O'

标准答案:B

知识点解析:选项A)表示的是反斜杠字符;一般可以用1〜3位八进制数表示的字

符,而选项B)中“,\020厂”有4位八进制数,所以错误;选项C)是用两位十六进

制数AA表示的ASCH码字符:选项D)表示的是字符0对应的ASCII码值。

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

A、循环队列中的元素个数随队头指针与队尾指针的变化而动态变化

B、循环队列中的元素个数随队头指针的变化而动态变化

C、循环队列中的元素个数随队尾指针的变化而动态变化

D、以上说法都不对

标准答案:A

知识点解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指

针front指向队头元素的前一个位置。因此,从队头指针front指向的后一个位置直

到队尾指针rear指向的位巴之间,所有的元素均为队列中的元素。所以循环队列

中的元素个数随队头指针和队尾指针的变化而变化。故A选项正确。

38、有以下程序:#include<stdio.h>intk=5:voidf(int*s){s=&k:)main()

{intm=3,*p=&m;f(P):print[("%d%d\n"m.*p);}程序的运行结果是

()。

A、33

B、55

C、35

D>53

标准答案:A

知识点解析•:考查函数,专参。C语言中.数据只能从实参单向传递给形参,指针作

为函数参数时,形参仍然作为实参的副本被赋值。形参指针变量的指向改变不能影

响实参指针变量的指向,结果不变,答案选A。

二、程序填空题(本题共/题,每题1.0分,共/分0)

39、请补充fun函数,该函数的功能是:按O到9统计一个字符串中的奇数数字

字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。

例如,输入*1123.456+0.909*bcM,结果为:1=2,3=1,5=1,7=0,9=2。注

意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入

所编写的若干表达式或语句。【试题源程序】#include#include#defineN20

fun(char*tt»intnum|]){inti,j;intbb|10];char*p=tt;for(i=0;i<10;i++)

{hum[i]=0;bb[i]=0;)while([11){if(*p>=,0,&&*p<=,9,)p++;)

for(i=l,j=0;i<10;i=i+2,j++)[3];|main(){charstr[N];intnum[10],k:

printf("\nPleaseenterastring:");gets(str);printf("\n*******Theoriginal

string*******\n");puts(str);fun(str,num);printf("\n*******Thenumberof

letter*******n");for(k=0:k<5;k++){printf("\nn);printfC%d=%d",

2*k+l,nun[k]);}printf("\rT);return;)

标准答案:[1]*p[2]bb[*p-,0,]++[3]num|j]=bb[i]

知识点解析:①先把数组num的各元素清0;②遍历字符串,利用数字字符

在.ASCII码中的连续规律,使用(数字字符」(T)作数组的下标,个数作数组元素的

值。填空【1】:此处月临时指针p遍历字符串sir,所以应填*p。填空【2】:因

为10个数字字符在ASCII何中是连续的,将它们和字符U作差刚好用来作为数组

的下标。所以此处应该填bb[*p「0']++。

三、程序修改题(本题共[题,每题7.0分,共7分0)

40、下列给定程序中函数fun的功能是:将m(lgm0O)个字符串连接起来,组成一

个新串,放入pt所指存储区中。例如:把三个串“abc”、“CD”、“EF”连接起来,结

果是“abcCDEF”。请改正程序中的错误,使它能得出正确的结果。注意:不要改

动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<

stdio.h>#include<string.h>voidfun(charsir[][10],intin,char*pt){/

*********tound*********/TTntk,q.for(k=0;k<m;k++)

{q=strlen(sir[k]);for(i=Oji

标准答案:⑴intk,q,i;(2)pt[i]=str[k][i];

知识点解析:本题考查:C语言的书写和语法性错误,这类错误比较简单,只要编

译程序,根据错误提示修改即可。(1)关键字书写错误,定义整型变量的关键字应

使用int,而非Int。(2)数组元素表示错误,表示二维数组元素,应使用方括号将

行坐标和列坐标分别括起来,即str[k,i]应改为:str[k"i]。

四、程序设计题(本题共I题,每题7.0分,共[分0)

41、下列程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数

fun(inta[][N]),该函数的功能是:将数组左下半三用元素中的值全部置成0。例如

a数组中的值为:19723X456则返I可主程序后a数组中的值应为:0970080

00注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,

仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h

>#include<stdio.h>#include<stdlib.h>#defineN5voidfun(inta[][N]){]

voidmain(){inta|N][N],i,j;system("CLS");printf(H****Thearray****\n");

for(i=0;i<N;i++)/*产生一个随机的5*5矩阵*/{for(j=0;j<N;j++)

{a[i][i]=rand()%10:printf("%4d",a[i][j]):}prirnff\nH);)fun(a);

printf("THERESULT\nH);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%

n

4d”,a[i皿);printf("\n);}}

标准答案:voidfun(intanfNl){inti,j;for(i=0;i<N;i++)for(j=0;j<=i;j++)

a[i||j|=O;/*将数组左下半三角元素中的值全部置成0*/)

知识点解析:对于NxN二维数组,如何表示其左下半三角元素,可以通过以下语

句实现。for(i=0;i<n:i++)for(j=0:j<=i;j++)外层循环用来控制矩阵的行下

标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元

素,所以j的范围是0〜i。

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

一、选择题(本题共40题,每题1.0分,共40分。)

1、有以下程序#inchidemain(){intb[3][3]={0,1,2,0,I,2,0,1,2),i,j,

t=0:for(*i=0;i<3;i++)for(j=2|j>=i;j-)t+=b[i][j]:printf("%d\n”,t);}程序运

行后的输出结果是()。

A、4

B、3

C、8

D、9

标准答案:C

知识点解析:这道题主要考查的是二维数组的有关知识。在两层for循环语句中,

累加上三角元素,所以程序执行的过程为

t=b[0][0]+b[0][l]+b[0][2]+b[l][l]+b[l][2]+b[2][2]=8a

2、若有定义语句:char*sl=',GOODH,*s2=,'good";以下选项中,能够输出

“GOOD”语句是()。

A、if(strcmp(sl,s2)!=0)puts(s2);

B、if(strcmp(sl>s2)!=0)puts(sl);

C、if(strcmp(sl,s2)==l)puts(sl);

D、if(strcmp(s1,s2)==0)puts(sl);

标准答案:B

知识点解析:strcmp(sl,s2)是字符串比较函数,比较方式是两个字符串从左自右

逐个字符进行比价(按照ASCII码值大小),以第一个不相同字符的大小作为比较结

果。由于大写字母的ASCH码值小于小写字母的ASCII码值,所以比较后的结果

为负值,故只有B选项符合题意。

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

A、工具

B、过程

C、方法

D、环境

标准答案:D

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

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

个环节的控制、管理。

4、关系表中的每一行记录称为一个()。

A、字段

B、元组

C、属性

D、关键码

标准答案:B

知识点解析:在关系表中,每一列称为一个属性,对应表中的一个字段;每一行称

为一个元组,对应表中的一条记录。

5、以下叙述错误的是()。

A、C语言区分大小写

B、C程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需

要随时修改

C、整数和实数都能用C语言准确无误地表示出来

D、在C程序中,正整数可以用十进制、八进制和十六进制的形式来表示

标准答案:C

知识点解析:本题涉及C语言最基本的3个概念:①C语言是区分大小写的,q和

Q是两个不同的变量;②变量的实质就是在内存中占据一定的存储单元,存储单

元里存放的是该变量的值,变量的值可以根据需要进行修改;③整数在允许的范

围内可以准确的表示出来,但不可能表示无限度的实数。正整数可用二进制、十进

制、八进制和十六进制表示。

6、下面的程序在编译时产生错误,其出错原因是()。#include<stdio.h>main()

{int1case;floatprintF:printf(”请输入2个数:");scanf("%d%F,&l_case,

&printF);printf("%d%f\n",l_case,printF);}

A、定义语句出错,1case不能作为变量名

B、定义语句出错,printF不能用作用户自定义标识符

C、定义语句无错,scanf不能作为输入函数使用

D、定义语句无错,printf不能输出1case的值

标准答案:A

知识点解析:C语言变量名可由数字,字母,下划线构成,但首字符不能为数字。

7、有以下程序:#include<stdio.h>main(){intsum=0,x=5;do{sum+=x;}

while(!--x);printf("%d\n'\sum);}程序的运行结果是()。

A、0

B、5

C、14

D、15

标准答案:B

知识点解析:先执行do中的表达式sum+=x,则sum=sum+x=O+5=5,再执行while

中的表达式,结果为0,退出循环,所以运行结果是5。

8、下列程序的运行结果是()。#include<stdio.h>voidsub(int*s,int*y){static

intm=4;*y=s[0]:m++:)voidmain(){inta[]={1,2,3,4,5},k;intx;

printf(''\n'');for(k=0:k<=4;k++){sub(a,&x);printf(''%d,,',x);}}

A、1,1,1,1,1,

B、1,2,3,4,5,

C、0,0,0,0,0,

D、4,4,4,4,4,

标准答案:A

知识点解析:本题中sub(int*s,inl*y)函数的参数是两个指针型变量,在函数体内将

数组s的第一个元素赋给y。主程序内,首先定义了一维数组并赋初值,然后通过

for循环,5次调用sub(a,&x)函数,每一次调用都是将数组a的第一个元素1赋给

x,并输出。

9、uniondt{inta;charb:doublec;}data;以下叙述中错误的是

A、data的每个成员起始地址都相同

B、变量data所占内存字节数与成员c所占字节数相等

C、程序段:data.a=5;printf("%f\n",data,c):输出结果为5.000000

D、data可以作为函数的实参

标准答案:C

知识点解析:输出不会是5.00000的,因为单精度浮点数和双精度浮点数在内存

中的存储形式不一样。

10、uniondt{inta;charb;doublec;}data;以下叙述中错误的是

A、data的每个成员起始地址都相同

B、变量data所占内存字节数与成员c所占字节数相等

C、程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000

D、data可以作为函数的实参

标准答案:C

知识点解析:输出不会是5.00000的,因为单精度浮点数和双精度浮点数在内存

中的存储形式不一样。

II、在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的

阶段是()。

A、需求分析

B、详细设计

C、软件设计

D、概要设计

标准答案:A

知识点解析:软件生命周期的主要活动阶段为:可行性研究和计划制定、需求分

析、软件设计、软件实现、软件测试、运行和维护。其中需求分析是对开发软件提

出的需求进行分析并给出详细定义,即准确地确定软件系统的功能,编写软件规格

说明书及初步的用户手册,提交评审。

12、在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的

阶段是()。

A、需求分析

B、详细设计

C、软件设计

D、概要设计

标准答案:A

知识点解析:软件生命周期的主要活动阶段为:可行性研究和计划制定、需求分

析・、软件设计、软件实现、软件测试、运行和维护。其中需求分析是对开发软件提

出的需求进行分析并给出详细定义,即准确地确定软件系统的功能,编写软件规格

说明书及初步的用户手册,提交评审。

13、若实体A和B是一对多的联系,实体B和c是一对一的联系,则实体A和C

的联系是()。

A、一对一

B、一对多

C、多对一

D、多对多

标准答案:B

知识点解析:A和B为一对多的联系,则对于A中的每一个实体,B中有多个实

体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中至多有一

个实体与之联系,则可奉出对于A中的每一个实体,C中有多个实体与之联系,

所以为一对多联系。

14、设有定义:structcomplex{inireal,unreal;datal={1,8},data2;则以下赋

值语句中错误的是()。

A、data2=(2,6);

B、data2=datal:

C^data2=real=datal.real;

D、data2.real=datal.unreal;

标准答案:A

知识点解析:A选项中可以在声明变量的同事为data2赋值,但是data2=(2,6);

应写作data2={2,6}<>所以选择A。

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

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

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

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

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

标准答案:D

知识点解析:C源程序经过程序编译之后生成一个后缀为obi”的二进制文件(称

为目标文件),然后由称为“连接程序”的软件包文件与C语言提供的各种库函数连

接起来生成一个后缀为".exe”的可运行文件。

16、以下选项中,能够正确利用随机函数rand(),产生一个英文字母的表:^式是

()。

A、rand()%2==0?rand()%5A,:rand()%'a'

B、mnd()%26+'A'”and()%26+'a'

C^rand()%26+'A'&&rand()%26+'a'

D、rand()%2==0?rand()%26+,A,:rand()%26+'a'

标准答案:D

知识点解析:rand()函数是产生随机数的函数,它可以生成0〜RAND_MAx之间的

一个随机数,其中RAND_MAx是stdlib.h中定义的一个整数。通常如果我们需

要随机0〜N-1之间的一个随机数,需要使用rand。的结果对N求模即可。选项A

中,rand()%2只有两个值。或1,所以当rand()%2的结果为。时,整个表达式的值

是rand()%,A:这里,A,要转换成ASCH码值65,所以结果为。〜64之间的一个随

机数,当rand()%2的结果为1时,整个表达式的值是rand。%3的ASCII码

值为97,所以结果是0〜96之间的一个随机数,可见选项A错误;逻辑或运算符||

或逻辑与运算符&&的结果都只能是0或非0,所以选项B、C也是错误的;选项

D中,如果rand()%2的结果为0,那么整个表达式的值为mnd()%26+,A10-25

之间任一个数与'A,的和都是一个大写字母;如果rand()%2的值为1,整个表达式

的值为rand()%26+W,0〜25之间任一个数与3的和都是一个小写字母,所以选

项D正确;本题答案为D。

17、数据结构中,与所使用的计算机无关的是数据的()。

A、存储结构

B、物理结构

C、逻辑结构

D、线性结构

标准答案:C

知识点解析:数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机

无关。

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

A、耦合度

B、内聚度

「、复:杂度

D、连接度

标准答案:A

知识点解析:耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部

各个元素间彼此结合的紧密程度的度量。

19、对于现实世界中事物的特征,在实体-联系模型中使用()。

A、属性描述

B、关键字描述

C、二维表格描述

D、实体描述

标准答案:A

知识点解析:在实体一联系模型中,用属性来描述现实世界中对象的属性所表示的

对象的性质、特征和行为。

20、算术运算符和圆括号有不同的运算优先级,对于表达式:a+b+c*(d+e),关于

执行顺序,以下说法正确的是()。

A、先执行(d+e)得己,再执行c*己得r3,再执行a+b得rl,最后执行rl+r3得表

达式最后结果

B、先执行a+b得rL再执行(d+e)得r2,再执行c*r2得>3,最后执行rl+r3得表达

式最后结果

C、先执行(d+e)得r2,再执行c木己得「3,再执行b+r3得14,最后执行a+14得

表达式最后结果

D、先执行a+b得rl,再执行rl+c得r5,再执行(d+e)得r2,最后执行r5*r2得表

达式最后结果

标准答案:B

知识点解析:题意表达式中,圆括号的优先级最高,乘法运算符次之,加法运算符

最低,同优先级中,加法运算符的结合性从左向右结合,所以题意中的表达式执行

顺序是:先执行a+b得rl,再执行(d+e)得「2,再执行c*己得r3,最后执行rl+r3

得表达式最后结果,本题答案为B。

21、若a、b、C、d都是int型变量且都已经正确赋初值,则以下不正确的赋值语

句是()。

A、a+d:

B、a++;

C、a=b=c=d=100;

D、a=(b=3)+(d=5);

标准答案:A

知识点解析•:C语言规定,赋值号的右边可以是一个赋值表达式,因此选项C)、

选项D)正确;在选项B)中,a++是一个自加1的表达式,a被重新赋值,因此它是

一个合法的赋值表达式;选项A)中,a+d是一个算术表达式,虽然最后有一个分

号,但这个表达式中没有赋值操作,因此它不是一条赋值语句。

22、下列队列的描述中,正确的是()。

A、队列属于非线性表

B、队列在队尾删除数据

C、队列按“先进后出”进行数据操作

D、队列按“先进先出”进行数据操作

标准答案:D

知识点解析:队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端

叫做队头,允许插入的一端叫做队尾。队列的操作数是依据先进先出的原则进行

的。因此队列亦称作先进先出的线性表,或后进后出的线性表。

23、一间宿舍可住多个学生,则实体宿舍和学生之间的联系是()。

A、一对一

B、一对多

C、多对一

D、多对多

标准答案:B

知识点解析:实体间的联系有如下情况:①一对一(1:1);②一对多(1:m);③

多对多(m:n)。本题中,一间宿舍对应多个学生,而一个学生能住在一间宿舍,那

么宿舍和学生之间的联系是一对多,学生和宿舍的联系是多对一。

24、若有以下程序:#includemain。{ints口2]={1,2,3,4,4,3,2,1,1,1,

2,3},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=l;i<5;i++)printf("%

d",c[i]);printfCAn");}则程序的运行结果是()0

A、2344

B、4332

C、1234

D、1123

标准答案:B

知识点解析:在for(i=0;iV12;i++)c[s[i]]++;语句中,数组元素s[i]的值作为数

组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2o因此B

选项正确。

25、以下关于结构化程序设计的叙述中正确的是()“

A、在C语言中,程序的模块化是利用函数实现的

B、结构化程序使用got。语句会很便捷

C、一个结构化程序必须同时由顺序、分支、循环三种结构组成

D、由三种基本结构构成的程序只能解决小规模的问题

标准答案:A

知识点解析:暂无解析

26>有以下程序#include<stdio.h>main(){inta=l,b=2;for(;a<8;a++){b+=a;

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

A、9,18

B、8/1

C、7,11

D、10,14

标准答案:D

知识点解析:第一次循环a的值为1,满足条件,执行b+=a,与a+=2,则b的值变为3,a

的值变为3,执行a++,a的值为4,满足条件进入第二次循环,执行完循环体后b的值

为7,a的值为6,执行a++,a的值为7,满足条件进入第三次循环,执行完循环体后b

的值为14,a的值为9,执行a++,a的值变为10,所以选择D选项。

27、设栈的存储空间为S(l:50),初始状态为top=51。现经过一系列正常的入栈

与退栈操作后,top=20,则栈中的元素个数为()。

A、31

B、30

C、21

D、20

标准答案:A

知识点解析:栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进

行。入栈运算即在栈顶位置插入一个新元素,退栈运算即取出栈顶元素赋予指定变

量。栈为空时,栈顶指针top=0,经过入栈和退栈运算,指针始终指向栈顶元素。

初始状态为lop=51,当top=20时,元素依次存储在单元20:50中,个数为50—

19=31,故A选项正确。

28、在最坏情况下,堆排序的时间复杂度是()。

A、O(lgO2n)

B、O(nlog2n)

C、O(n2)

D、O(nh5)

标准答案:B

知识点解析:若有n个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当

满足下列条件时称为堆,大根堆是指所有结点的值大于或等于左右子结点的值;小

根堆是指所有结点的值小于或等于左右子结点的侑。在调整建堆的过程中,总是将

根结点值与左、右子树的根结点进行比较,若不满足堆的条件,则将左、右子树根

结点值中的大者与根结点值进行交换。堆排序最坏情况需要O(Mog2n)次比较,所

以时间复杂度是O(nlog2n),B选项正确。

29、若有以下程序#include<stdio.h>main(){intc;c=10A5;printf(,'%d\nM,c);}则

程序的输出结果是

A、5

B、15

C、10000

D、105

标准答案:B

知识点解析:本题考查位运算中按位异或运算符,异或运算只有在两个比较的位不

同时其结果是1,否则结果为0,10用二进制表示为00001010,5用二进制表示为

00000101,异或后00001111,即15,选项B正确。

30、若有以下程序#include<stdio.h>main(){charw|20]="dogs",

a[5][10]=("abcdef',"ghijkl","mnopq","rstuv","wxyz.");inti,j,k;for(i=0;w|i];i++)

{for(j=0;j<5;j++){for(k=0;a[j][k];k++)if(w[i]==a[j][k])break;if(w[i]==a[j][k])

break;)prinif("%d,%d,”,j,k);}(则程序的输出结果是

A、0,322,1,0,3/,

B、1,4,3,321,4,2,

C、5,6,5,6,5,6,5,6,

D、676,7,6,7,6,7,

标准答案:A

知识点解析:本题考查二维字符数组的运用,题目中首先定义了一个一维字符数

组,从三层for循环可以看出要找的是w数组中每个字符在二维数组中的位置,比

如d字母,在a数组中就是0,3其他字符类似,所以本题答案为A。

31、下列关于二叉树的叙述中,正确的是()。

A、叶子节点总是比度为2的节点多1个

B、叶子节点总是比度为2的节点多2个

C、叶子节点数是度为2的节点数的两倍

D、度为2的节点数是度为1的节点数的两倍

标准答案:A

知识点露析:二叉树中的叶子节点总比度为2的节点多1个。

32、关于C语言语句的叙述中正确的是()。

A、C语言的数值常量中夹带空格不影响常量值的正确表示

B、C语言中的变量可以在使用之前的任何位置进行定义

C、在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致

D、C语言中的注释不可以夹在变量名或关键字的口间

标准答案:D

知识点解析:C语言的常量中不能夹带空格,C语言的变量必须是先定义才能使

用,C语言的表达式两边可以是不同的类型,在运算时会进行强制转换成数度较高

的类型。

33、关于程序设计结构的叙述中错误的是()。

A、结构化程序设计提倡模块化的设计方法

B、结构化程序由顺序、分支、循环三种基本结构组成

C、C语言是一种结构化程序设计语言

D、使用三种基本结构构成的程序只能解决简单问题

标准答案:D

知识点解析:顺序、分支和循环三种基本结构不仅可以解决简单问题,也可以解决

非常复杂的问题,所以D错误,其他选项叙述正确。

34、下列合法的标识符是()。

A、123

B、#256

C、a.55

D、abhjl_2_3

标准答案:D

知识点解析:C语言规定,标识符是由字母、数字或下划线组成,并且它的第一个

字符必须是字母或者下划线。不允许出现在标识符中。

35、下列叙述中正确的是

A、链表结点中具有两个指针域的数据结构可以是线性结构,也可以是非线性结构

B、线性表的链式存储结构中,每个结点必须有指向前件和指向后件的两个指纤

C、线性表的链式存储结构中,每个结点只能有一个指向后件的指针

D、线性表的链式存储结构中,叶子结点的指针只能是空

标准答案:A

知识点解析:双向链表与树形结构的节点均可以包含两个指针域,但前者为线性结

构后者为非线性结构,A选项正确。双向链表含有指向前件和指向后件的两个指

针,C选项错误。线性链表,就是指线性表的链式存储结构。由于这种链表中,每

个节点只有一个指针域,故又称为单链表,B选项错误。二叉树为非线结构,叶子

节点没有后件但是可以有指向前件的指针,D选项错•误。

36、有以下程序段charstr[4][12]={"aaa",,,bbb",',ccc";'ddd"},*p[4];inti;for(i=0;i

<4;i++)p[i]=str[i];以下选项中不能正确引用字符串的是

A、*p|3]

B、p[3]

C、str[2]

D、*p

标准答案:A

知识点解析:*p[3]p[3][0]是一个字符,不是字符串,选项A错误。p[3]和sir⑵和

*p分别代表了ddd,ccc,aaa0答案为A选项。

37、若有定义:doublea=22;inti=0,k=18;,则不符合C语言规定的赋值语

句是()

A、i=(a+k)<=(i+k):

B、i=a%ll;

C^a=a++,i++

D、i=!a;

标准答案:B

知识点解析:取模运算符“%”,二元运算符,具有左结合性,参与运算的量均为整

型。选项B中的a变量是double实型,所以B)不符合规定。

38^有以下程序#include<stdio.h>#include<string.h>structcomputer{char

CPU[10];);main(){structcomput

温馨提示

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

评论

0/150

提交评论