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

下载本文档

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

文档简介

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

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

1、深度为5的完全二叉树的结点数不可能是()。

A、15

B、16

C、17

D、18

标准答案:A

知识点解析:对于满二叉树,叶子结点的数目等于2nLn为深度,这里就是

24=16O

2、需求分析阶段的任务是()。

A、软件开发方法

B、软件开发工具

C、软件开发费用

D、软件系统功能

标准答案:D

知识点解析:需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调

查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然

后在这些基础上确定新系统的功能c

3、请阅读以下程序:^include<stdiO-h>#include<string.h>voidfun(intb[])

main(){staticinti=0;{intk,a[5]={1,3,5,4,9};Do{b[i]+=b[i+l];

fun(a);}while(++i<2);}for(k=0;k<5;k++)primf("%d",a[k]);}上面程序的

输出是()。

A、13579

B、48579

C、48549

D、48999

标准答案:C

知识点解析:本题考查的是for循环以及while循环。fun函数中定义了静态变量

i=0,fun(a)使得a[0]=a⑼+a[l]=4,a[l]=a[l]+a[2]=8,此时i的值变为1,++i<2不

成立,所以do-while循环结束,输出数组a的各元素即得到48549。

4、在学校中,“班级”与“学生”两个实体集之间的联系属于()关系。

A、一对一

B、一对多

C、多对一

D、多对多

标准答案:B

知识点解析:一个班可以有多名学生,而一名学生只能属于一个班级,所以“班级”

与“学生,,两个实体集之间的联系属于一对多关系。

5、有三个关系R、S和T如下:

得到关系T,则所使用的运算为()。

A、笛卡尔积

B、交

C、并

D、自然连接

标准答案:

知识看解析D:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量

必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的

有序组可知R与S进行的是自然连接操作。

6、若有以下程序段:intr=8;printf("%d\n",r>>I);输出结果是0。

A、16

B、8

C、4

D、2

标准答案:C

知识点解析:C语言中是对二进制的右移运算符,右移相当于将原数做除二

操作,它将原数右移相应位数,并将移出的位信息舍去,在高位补0,将所得的结

果再赋值给变量。本题中8的二进制为00001000,右移•位得到00000100,所以

是4。

7、在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有

若干个键,它们称为该表的()。

A、连接码

B、关系码

C、外码

D、候选码

标准答案:D

知识点解析:在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表

中可能有若干个键,它们称为该表的候选码或候选键。从二维表的所有候选键中选

取一个作为用户使用的键称为主键或主码。

8、下列选项中,不能作为合法常量的是()。

A、1.234eO4

B、I.234e0.4

C>1.234e+4

D、1.234e。

标准答案:B

知识点解析:用指数形式表示的实型常量需注意两点:①e或E后面的指数必须是

整数:②指数必须是不超过数据表示范围的正负整数,并且在e或E前必须有数

字。

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

A、计算机只接收由。和1代码组成的二进制指令或数据

B、计算机只接收由0和1代码组成的十进制指令或数据

C,计算机可直接接收并运行C源程序

D、计算机可直接接收并运行任意高级语言编写的源程序

标准答案:A

知识点解析:二进制数中只有两个字符。和1,表示具有两个不同稳定状态的元器

件。例如,电路中有无电流,有电流用1表示,无电流用0表示。类似的还比如电

路中电压的高低,晶体管的导通和截止等。二进制数运算简单,大大简化了计算中

运算部件的结构,故选顷A正确。

10、以下非法的字符常量是()。

A、

B.Aior

C、’\x21,

D、,\(r

标准答案:A

知识点解析:C语言允许使用一些以特殊形式出现的字符常量,使用,\n,来表示

换行,'\"实际上是一个字符,它的ASCII码值为10,不存在、\n,用法。

11、有以下程序:#include<stdio.h>main(){intc[6]={10,20,30,40,50,

60},*p,*s;p=c;s=&c[5];printf(H%d\n",s-p);}程序运行后的输出结果是

()。

A、5

B、50

C、6

D、60

知识点解析:在C语言中,函数定义是平行的,函数不能嵌套定义,即函数之间

没有从属关系。虽然函数之间可以相互调用,但main。函数不能被调用,选项A

错误;C程序从main。函数开始执行,当main。函数执行完毕时,整个程序就结束

了。C程序的执行必须从main。函数开始,选项C选项错误;函数不能嵌套定义,

选项D错误。

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

A、只能在循环体内和switch语句体内使用break语句

B、contiune语句的作用是结束整个循环的执行

C、在循环体内使用break语句或continue语句的作用相同

D、从多层循环嵌套中退出时,只能使用goi。语句

标准答案:A

知识点解析:本题考查循环的4个知识点:①break语句可以出现在循环体内及

switch语句体内,不能用于其他的语句;②conlinue语句的作用是结束本次循环,

即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确

定下一次循环是否继续执行,也就是说执行contiune语句不会使整个循环终止:

③在循环体内使用break语句会使循环提前终止;④从多层循环嵌套中退出时,

可以使用goto语句或者break语句。

17、有以下程序:#include<stdio.h>#include<string.h>typedefstruct{char

name[9];charsex;floatscore[2];}STU;voidf(STUa){STUb={"Zhao,',

85.0,90.0|;inti;strcpy(a.name,b.name):a.sex=b.sex;for(i=0;i<

2;i++)a.score[i]=b.score[i];)main(){STUc={"QianH,f,95.0,92.0):

f(c);printf("%s,%c,%2.Of,%2.Of\nM,c.name,c.sex,c.score[0],

c.score[1]);}程序运行后的输出结果是()。

A、Zhao,m,85,90

B、Qian,m,85,90

C、Zhao.f.95.92

D、Qian,f,95,92

标准答案:D

知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函

数后,会生成参数c的一个副本,而不会改变c的值,所以c值维持原值,选项D

正确。

18、有以下程序#include<stdio.h>main(){int

s[12]={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=1;i<5;

i++)printf("%dn,c[i]);printf("\n");}程序的运行结果是

A、2344

B、4332

C、1234

D、1123

标准答案:B

知识点解析:在for(i=0;iV⑵i++)c回i“++中,数组元素s[i|的值作为数组c的

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

确。

19、若有定义语句: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

知识点解析:不能将变量或常量赋给一个表达式,所以A选项中(b=4)=3是错浜

的。

20、设数据元素的集合D=(1,2,3,4,5),则满足下列关系R的数据结构中为

线性结构的是()。

A、R=((l,2),(3,4),(5,1))

B、R={(1,3),(4,i),(3,2),(5,4)}

C、R={(1,2),(2,3),(4,5)}

D,R={(L3),(2,4),(3,5))

标准答案:B

知识点解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;

每一个结点最多有一个前件,也最多有一个后件,称为线性结构。A项中有两个根

结点3和5,错误;B项根结点为5,之后的结点除最后一个结点外都只有一个前

件和后件,正确;C项有两个根结点1和4,错误;D项有两个根结点1和2,错

误。

21、以下不属于C语言整型常量的是()。

A、0L

B、-018

C、OXa

D、200U

标准答案:B

知识点解析:C语言中,整数可以有八进制、十进制和十六进制3种表示形式,十

进制的数码取值为。〜9,没有前缀;八进制的数码取值为0—7,必须以0开头,

作为八进制数的前缀;十六进制的数码取值为:。〜9,A〜F或a〜f,前缀为OX

或Ox。另外,对于长整型数,使用后缀L或1来表示,无符号数使用后缀U或u

来表示;0L表示十进制长整型数0,故选项A正确;OXa表示十六进制数a,即

十进制数值10,故选项C正确;200U表示十进制无符号整型数200,故选项D正

确;负数一般使用二进制补码形式保存在内存中,按照八进制显示时,前缀0在最

前面,后面的数值由二进制补码转换成八进制,无负数符号,在C程序中,只有

十进制数可以是负数,而八进制和十六进制数只能是整数。因此答案为B。

22、有以下程序:#include#defineN4voidfun(inta|]|N],intb|]))inti;for(i=0;

i

A、一3,—*1,1,3,

B、一12,一3,0,0,

C、0,1,2,3,

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

标准答案:A

知识点解析:分析程序结构,可知程序在main函数中初始化一个4x4的二维数

组,然后调用fun()函数用二维数组x为一维数组y赋值,最后将数组y打印出

来,所以重点是分析fun()函数中如何使用实参x给实参y赋值。在fun()函数中,

每次使用a[i][N-1—i]为b的第i个元素赋值,由于for循环中i的取值

分别为0、1、2、3,所以b的4个元素赋值分别为:a[0][0]-a[0][3],a[l][l]-

a[l][2J,a[2][2]—a[3][3]—a[3][0],对应的赋值为:1—4,6—7,II-

10,16—13,b的4个元素值为:一3、一1、1、3。答案选A。(注:仔细观察

a[i][i].a[川N—1一i]可以发现,它们分别对应4x4矩阵的对角线元素和反对角线

元素)

23、下列关于线性链表的叙述中,正确的是()。

A、各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致

B、各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续

C、进行插入与删除时,不需要移动表中的元素

D、以上说法均不正确

标准答案:c

知识点。析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不

连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数

据的插入和删除都不需要移动表中的元索,只需改变结点的指针域即可。

24、设有定义:intx,y,z;,且各变量已赋正整数值,则以下能正确表示代数式

1

“打不的C语言表达式是()。

A、1.0/x/y/z

I/x*y*z

C>1/(x*y*z)

D、1/x/y/(dlouble)z

标准答案:A

知识点解析:代数表达式l/(x.y.z)是小数,转为C语言的表达式必须是小数。

A选项由于1.0为浮点数,计算结果自动转换为浮点数,故A选项正确。选项

B,C,D的表达式均为0。答案为A选项。

25>有以下程序:#includefloatf(floatx);voidmain(){floata=0;for(inti=2;i<

5;i++)a+=f((float)i);printf(''%3.Of\n'',A);|floatf(floatx){returnx*x+l;)

程序运行后的输出结果是()。

A、32

B、29

C、33

D、28

标准答案:A

知识点解析:子函数的功能是平方之后加1,循环体共执行3次,执行子函数时的

形参分别是2,3,4,求和后的结果是(2*2+1)+(3*3+1)+(4*4+1)=32。

26、以下选项中,能正确进行字符串赋值的是

A、char*s="ABCDE";

B、chars[5]={'A','B','C','D','E'};

C>chars[4][5]={"ABCDE");

D>char*s;gcts(s);

标准答案:A

知识点解析:本题考查字符数组的初始化,B选项中字符数组没有字符串的结束标

志所以错误。C选项中字符串包含6个字符,所以不能赋值在左边只能放5个字符

的字符串数组中。D选项的指针s没有赋初值,不能使用。所以选项A正确。

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

A、可以给指针变量赋一个整数作为地址值

B、函数可以返回地址值

C、改变函数形参的值,不会改变对应实参的值

D、当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL

标准答案:A

知识点解析:不能将一个整数直接赋给指针变量作为地址,所以A是错误的。函

数的返回值可以是地址。即指针。函数调用中行参的变化不会传递给实参。

28、请阅读以下程序:#include<stdio.h>#include<string.h>voidfun(intb[])

fstaticinti=O;dO{b[i]+=b[i+l];}while(++i<2);)main(){intk,a[5]={1»3,5,

,,,,

4,9);fun(a);for(k=0;k<5;k++)printf(%dta|k]);}上面程序的输出是

()o

A、13579

B、48579

C、48549

D、48999

标准答案:C

知识点解析:本题考查的是for循环以及while循环。fun函数中定义了静态变量

i=0,fun(a)使得a[0]=a[0]+a[l]=4,a[l]=a[l]+a[2]=8,此时i的值变为1,++iV2不

成立,所以do.wbile循环结束,输出数组a的各元素即得到48549。

RST

ABCABcABC

a12a12c31

b21b21

c31

则由关系R和S得到关系T的操作是()。

A、自然连接

B、并

C、除

D、差

标准答案:D

知识点解析:S+T=R,所以T=S—R。

30、以下选项中,合法的一组C语言数值常量是()。

A、0.28.5e-3-Oxf

B、12OXa234.5e0

C、.1774cl.50abc

D、0x8A10,0003.e5

标准答案:B

知识点解析:八进制数开头必须是数字''0",其数字包括。〜7,而在选项A中,

028是错误的。浮点数据的指数形式表示常量中,C语言规定字*。或£之前必须要

有数字,且e或E之后的指数必须为整数,而选项C中4el.5是错误的。在选项

D中,整型数据10,000的表示形式是错误的。所以本题的答案为选项B。

31、在下列选项中,没有构成死循环的是()。

A、inti=100:while(l)(i-iO+1;if(i>100)break;}

B、for();

C、intk=10000;do{k++;)while(k>10000);

D、ints=36:while(S)-s:

标准答案:D

知识点解析:选项D中,首先定义的变量s的值为36,因为语句所以当s=0时

循环会结束:;选项A由于while(l)永远成立,循环构成死循环;选项B中for循环

没有使循环结束的限定条件,也构成死循环:选项C中由于k永远大于10000,所

以循环无法停止。

32、C语言程序中,运算对象必须是整型数的运算符是

A、&&

B、/

C、%

D、*

标准答案:C

知识点解析:%取余运算是二目运算符,且要求运算对象必须为整数,所以选Co

33、有以卜程序:#include#includevoidmain(){int*a,*b,*c;

a=b=c=malloc(sizeof(int));a=0;*b=l;*c=2:a=b;printf(''%d,%d,%d\

n”,*a,*b,*c);)程序运行后的输出结果是()。

A、出错

B、2,2,3

C、1,2,3

D、2,2,2

标准答案:D

知识点解析:malloc(sizeof)将分配一块存放整型数据的内存地址,a,b,c三个整

型指针同时指向这个地址;a=0是让a指针指向地比为1的内存空间(0x1),*b=l是

指将b指针指向的这个内存空间的数值写成1,水c=2是指将c指针指向的这个内

存空间的值写成2,因为b和c指向的是同一个内存空间。因此,它们指向的这个

空间的值将会是2;a=b是将a指针也指向b指针指向的这个内存空间,所以a,

b,c又都指向了开始分配的这个内存空间,其值为2,所以答案为D。

34、有三个关系R、S和T如下:

RST

ABCEE

a12FJ

b21l±jLD£J&J

c31

则由关系R和S得到关系T的操

作是

A、选择

B、差

C、交

D、并

标准答案:B

知识点解析:关系T是关系R的一部分,并且是关系R去掉R和S相同的元素,

符合差操作。

35、有以卜程序#include<stdio.h>#include<string.h>main(){inti;char

a[]=MHowareyou!";fbr(i=0;a[i];i++)if(a[i]=,')strcpy(a,&a[i+l]);

printf("%s\n",a);}程序的运行结果是

A、areyou!

Howareyou!

C、areyou!

D、areyou!

标准答案:A

知识点解析:复制字符串函数strcpy(strl,str2),将市2完整的(包括”\0“)复制到

strl中,strl中原有的内容被覆盖。程序执行过程为:在a[i]不等于“\0"的情况下,

判断当前元素是否为空格,若为空格将下一个元素以及之后的所有字符复制到a数

组中。当i=3时,if条件成立,a中元素为“areyou!t(T,之后的元素中在“\0”前没有

空格出现,输出areyou!,A选项正确。

36、下列C语言语句能正确定义二维数组的是()。

A、floata[][2]:{{1,4)};

B、floataL2JLJ={l,2,3);

C、floata|][2]={);

D、fkx^2][3]={{l.0},{2.0),{3.0,4.0}};

标准答案:A

知识点解析:二维数组在定义时,第一维的长度可以不指定,但必须在定义的同时

需要完成初始化,另外,第二维长度必须指定,所以选项B、C错误;二维数组

a[2]⑶中定义了两行,但初始化的数值中有三行,所以选项D错误。

37、下面对类.对象主要特征描述正确的是

A,对象唯一性

B、对象无关性

C、类的单一性

D、类的依赖性

标准答案:A

知识点解析:对象的基本特点是:标识唯一性、分类性、多态性、封装性、模块独

立性好。类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反

映属于该对象类型的所有对象的性质。对象具有的性质,类也具有。故A选项正

确。

38、有语句:k=x<y,(y<z,1:0):0;,以下选项中,与此语句功能相同的是

A、if(x<y||y<z)k=I;elsek=0;

B、if(x<y)k=0;elseif(y<z)k=l;

CNif(x<y)if(y<z)k=l;elsek=0;

D、if(x<y&&y<z)k=l;elsek=0;

标准答案:D

知识点解析•:表达式1:表达式2:表达式3,若表达式1为真,则执行表达式2,

表达式2的值就作为整个条件表达式的值,否则执行表达式3,,表达式3的值就作

为整个条件表达式的值。题中,k=x<y,(y<z?l:0):0,执行顺序为先判断x<y是

否为真,为真时执行(y〈z,1:0),再判断yVz是否为真,为真时,k=l否则k=0。

因此判断,答案为D选项。

39、有以下程序:#include<stdio.h>voidfun(inta,inib){intt;t=a;a=b;

b=t;)main(){intc[10]={l,2.3.45,6,7,8,9,0},i;for(i=0:i<10;

i+=2)fun(c|i],c[i+l]);for(i=0;i<10;i++)printff"",c|i]);prinlf("\

II\

n);程序运行的结果是()。

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

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

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

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

标准答案:A

知识点解析:在C语言中,函数参数传递的作用是“传值”,形参和实参是两个没有

关系的变量。函数fun交换了参数值,但只是交换了形参的值,结果并不会传递给

实参。所以数组c没有发生变化,原样输出。

二、程序填空题(本题共7题,每题7.0分,共[分0)

40、给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0

的个数,用变量c来统计小于0的个数,当输入0时结束输入,并通过形参pa和

pb把统计的数据传回主函数进行输出。请在程序的下画线处填入正确的内容并把

下画线删除,使程序得出正确的结果。注意:源程序存放在BLANK1.C中。不

得增行或删行.也不得更改程序的结构!试题程序:#inchide<stdio.h>void

fun(int*px,int*py)(/**********found**********/int[1];scanf("%d",

&k);/**********found**********/while[2]{if(k>0)a++;if(k<O)b++;

/**********,。3^**********/【3】:*px=a;*py=b;}main()(intx,y;

fun(&x,&y);printf("x=%dy=%d\nH,x,y);}

标准答案:(l)a=0,b=0,k(2)(k!=0)(3)scanf(u%d,\&k)

知识点解析:填空1:下面的scanf函数用到变量k,需要提前定义,在while循环

中使用了临时存放正、负数个数的变量a,b,因此也要提前定义。填空2:根据

题意,输入0时结束程序,因此当k!=0时进入循环记录正负数的个数。填空3:

需要不断从终端输入整数,因此在循环体内添加输入操作。

三、程序修改题(本题共I题,每题1.0分,共/分0)

41、下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值。

t=l+l/2+1/3+1/4+...+1/m例如,若输入5,则应输出2.283333。请改正程

序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删

行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h

>#include<stdio.h>doublefun(intm){doublet=l.0;inti;for(i=2;i<=m;

i++)/******found******/t+=1.Ok:|******found******/returni;)

voidmain(){intm;system。'CLS"):printf("Pleaseenter1integer

number:");scanf(n%d”,&m);printf("Theresultis%1f\n",fun(m));}

标准答案:(1)t+=1.0/i;(2)returnt;

知识点解析:本题考查:for循环语句的循环条件;函数返回值。该题目考查分母

成等差数列递增的一个数学公式,先看循环条件for(i=2:i<=m;i++),i从2开始

递增到m,所以t的值应该是由I.0/i的值逐步循环叠加后的结果,而不是

t+=l.0/k;。returni考查对程序的解读能力,当循环结束后(由输入m的值决

定),函数返回当前I的值。

四、程序设计题(本题共7题,每题1.0分,共7分。)

42、规定输入的字符串中只包含字母和*号.请编'可函数fun,其功能是:使字符

串的前导*号不得多于n个,若多于n个,则删除多余的*号;若少于或等r个,则

不做处理,字符串中间和尾部的*号不删除。例如,字符串中的内容为:

*******A*BC*DEF*G***,若n的值为4,删除后,字符串中的内容应当是:

****A*BC*DEF*G***—;若n的值为8,则字符串中的内容仍为:

*******A*BC*DEF*G****。r的值在主函数中输入。在编写函数时,不得使用C

语言提供的字符串函数。注意:请勿改动主函数main和其他函数中的任何内容,

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

>voidfun(char*a,inn){}main(){chars[81];intn;、aidNONOO;prinlf("

Enterasiring:\n"):gets(s):printf("Entern:"):scanf("%d".&n):

fun(s,n):printf("Thestringafterdeleted:\n");puts(s);NONOO:)void

NONOO{/*本函数用于打歼文件,输入数据,调用函数。输出数据,关闭文件。*

/FILELn,*Out:inti,n;chars[81];in=fopen("in.dat">nr"):

out=fopen('*Out.dat","w"):for(i=0;i<10:i++)fscanf(in,"%s">s):

fscanf(in,"%d",&n):fun(s,n);fprintf(out,"%s\n",s);fclose(in):

fclose(out);}

标准答案:voidfun(char*a,intn){inti=0;intk=0;p=t=a;/*开始时,p与I

同时指向数组的首地址x/while(*t=='*'){k++;t++;}/*用k来统计前部星号

的个数*/if(k>n)/*如果k大于n,则使p的前剖保留n个星号,其后的字符依

次存入数组a中*/{while(*p){a[i]=*(p+k—n);i++;p++;}a[i]=,\0,;/*

在字符串最后加上结束标识位*/))

知识点解析•:本题考查:循环判断语句;字符串的操作。字符串中前导*号不能多

于n个,多余的删除。首先需要通过while循环统计字符书前导*号的个数,然后

通过if条件语句完成前导*号的个数和n的比较,如果前导*号多于n个,需要把n

个*号和其余字符重新保留。

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

一、程序填空题(本题共1题,每题1.0分,共7分0)

1、使用VC++2010打开考生文件夹下bkmkl中的解决方案。此解决方案的项目中

包含一个源程序文件blankl.c。在此程序的主函数中,已给出由结构体构成的链

表节点a、b、c,各节点的数据域中均存入字符,函数fun()的作用是:将a、b、c

三个节点链接成一个单向链表,并输出链表节点中的数据。请在程序的下划线处

填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在

考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!试题

程序:#include<stdio.h>typedefstructlist{chardata;structlist*next;)Q;

voidfun(Q*pa,Q*pb,Q*pc)(Q*p;/*********found*********/pa->next=

[1];pb->next=pc;p=pa;while(p){/*********found*********/prinlf("%

c",[2]):/*********found*********/p=[3];)printf("\n");)main()

{Qa,b,c;a.data=,E,;b.data='F';c.data=,G,;c.next=NULL;fun(&

a,&b,&c);}

标准答案:(1)pb(2)p->data(3)p->next

知识点解析:填空1:将三个节点连接起来,即将pa的指针域指向pb,pb的指针

域指向pc。填空2:输出链表节点中的数据,表示为p->data。填空3:指针后

移,指向下一个节点,即p=p->next»

二、程序修改题(本题共I题,每题1.0分,共1分0)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modi1.c。在此程序中,函数fun()的功能是统计s所指一维

数组中0的个数(存在变量zero中)和1的个数(存在变量one中),并输出结果。请

改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main

函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h

>voidfun(inl*s,inin){/*********R)und*********/inli,one=0,zero;

for(i=0;iVn:i++)/*********found*********/switch(s[i]):{/

*********found*********/case0:zero++;case1:one++;)printf("one:%d

zero:%d\n”,one,zero);)main(){inta[20]={1»1,1,0,1,0,0,0,1,

0,0,1,1,0,0,1,0,1,0,0),n=20:fun(a,n);}

标准答案:(l)inli,one=0>zero=0;(2)switch(s|i])(3)case0:zero++;break;

知识点解析:(1)变量zero用来统计数字0的个数,应将其初始化为0。(2)语法错

误,switch语句后不加分号。(3)当数字为0时,变量zero加1,此时应使用break

语句跳出switch语句,进行下一次循环,否则会继续执行easel语句,使程序不能

得出正确结果。

三、程序设计题(本题共7题,每题7.0分,共1分。)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.c。在此程序中,请编写函数fun,其功能是将形参s

所指字符串放入形参a所指的字符数组中,使a中存放同样的字符串。说明:不得

使用系统提供的字符串函数。注意:部分源程序存在PROG1.C中,请勿改动主

函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干

语句。试题程序:#includc<stdio.h>#dcfincN20voidNONO();voidfun(char

*a,char*s){}main(){charsi[N],*s2="abcdefghijk";fun(sl,s2);printf("%s\

n",si);printf("%s\n",s2);NONO();}voidNONO(){/*本函数用于打开文

件,输入薮据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;char

si[256],s2[256];fp=fopen("in.dat",Mr");wf=fopen("out.dat","w");

for(i=0;i<10;i++){fgets(s2,255,fp);fun(sl,s2);fprintf(wf,"%s",si);}

fclose(fp);fclose(wf):}

标准答案:voidfun(char*a,char*s){while(*s!=,\0*){*a=*s;a++;s++;}*a=>

\0':}

知识点解析:要将s所指的字符串存入a所指的字符串中,程序要求不能使用系统

提供的字符串函数,本题可以使用循环语句,依次取出a所指字符串中的元素,将

其存入s所指的字符串中,最后为s所指的字符串添加结束标识、(V。

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

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

1、有以下程序:#include<stdio.h>tnain(){inti,j:for(i-3:i>=1:i—)

{for(j=l;j<=2;j++)printf("%d",i+j);printf(H\n");}}程序运行后的输出结果

是()。

A、432543

B、453423

C、233445

D、233423

标准答案:B

知识点解析:第一次执行外循环,i的值为3,第一次执行内循环j的值为1,

=2条件成立,打印i+j的值,即4;第二次执行内循环j的值为2,j<=2条件成

立,打印i+j的值,即5;再判断条件不成立,打印回车换行符,跳出内循环。第

二次执行外循环,i的值为2,内循环的执行同第一次一样,所以打印3和4,打印

回车换行,结束内循环。第三次执行外循环i的值为1,同理内循环中打印2和

3,打印回车换行符,结束内循环。

2、设有定义:charp[]={,T,2,3},*q=p;以下不能计算出一个char型数据

所占字节数的表达式是()。

A、sizeof(*q)

B、sizeof(char)

C、sizeof(p)

D^sizeof(p[0])

标准答案:c

知识点》析:数组名表示该数组的首地址,是一个地址常量,所以sizeof(p)求得的

是一个地址占用的字节数,即4个字节,答案选C。

3、对图书进行编目时,图书有如下属性:ISBN书号,书名,作者,出版社,出版

日期。能作为关键字的是()。

A、ISBN书号

B、书名

C、作者,出版社

D、出版社,出版日期

标准答案:A

知识点解析:关键字是指能惟一标识元组的属性或属性集合。书号可以惟一标识一

本图书,本题中,书名、作者、出版社、出版日期等字段都不能惟一标识一本图

书。

4、有以下程序:#include<stdio.h>main(){inta[]={2,3,5,4),i;for(i=0;

i<4;i++)switch(i%2)[cascO:switch(a[i]%2){cascO:a[i]++;break;case1:

a[i]—;)break;case1:a[i|=0;}fbr(i=O;i<4;i-+)printf("%d",a|i]);printfC,

\n**);)程序运行后的输出结果是()。

A、3344

B、2050

「、3040

D、0304

标准答案:C

知识点解析:main函数的函数体是一个for循环语句,for循环中包含一个switch

语句,如果判断条件为0,则进入第二个switch语句,如果判断语句为1,则执行

“a[i]=(F,最后将数组按顺序输出。所以程序功能是将数组的偶数项设为0,奇数

项如果为奇数则减1,为偶数就加1,最后得到结果。

5、有以下程序:#includemain(){intk=10;printf("%4d,%o,%x\n",k,k,

k);}程序的运行结果是()。(口代表一个空格)

A、10,12,a

B、UU10,012,a

C、010,12,a

D、口口10,12,a

标准答案:D

知识点解析:%4d表示输出占4个字符的十进制,故先输出2个空格,然后输出

10;%。表示输出八进制,所以输出10的八进制为12;%x表示输出十六进制,

即a。

6、已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是

()o

A、一个整型变量,代表要读入的数据项总数

B、一个文件指针,指向要读的文件

C、一个指针,是指向的输入数据放在内存中的起始位置

D、一个存储区,存放要读的数据项

标准答案:C

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

fp)。fread函数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存

放地址;“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据

项;“fp”是指文件型指针。

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

A、循环队列有队头和队尾两个指针,因此,循环队列是非线性结构

B、在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

C、在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

D、循环队列中元素的个数是由队头指针和队尾指针共同决定的

标准答案:D

知识点解析:循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所

以A错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素

的动态变化情况,所以B与C错误。

8、在软件开发中,需求分析阶段可以使用的工具是()。

A、N—S图

B、DFD图

C、PAD图

D、程序流程图

标准答案:B

知识点解析:在需求分析阶段可以使用的工具有数据流图(DFD图),数据字典

(D),判定树与判定表,所以选择B。

9、若函数中有定义语句:inta:,则()。

A、系统将自动给a赋初值0

B、这时a中的值是和随机数

C、系统将自动给a赋初值-1

D、这a中无任何值

标准答案:B

知识点解析:本题考查变量赋值基本概念。在声明一个变量后,如果未显式的对其

进行赋值,则它的值是一个随机值。

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

A、

B、’\0201'

C、'\xAA'

D、,0'

标准答案:B

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

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

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

II、以下不能将s所指字符串正确复制到t所指存储空间的是()

A、do{*t++=*s++;)while(*s);

B、for(i=0;t[i]=s[i];i++);

C、while(*t=*s){t++;s++}

D、for(i=0,j=0;i[i++]=s[j++];);

标准答案:A

知识点解析:do{*t++=*s++;}while(*s);不能因为当*s=,\0'时,while(次s)跳

出循环,这样字符串结束标志'\0'没有复制给*1,造成九不完整。注意,*l++=*s

++是先执行t=*s,然后才进行t=t+l,s=s+l。B),C),D)都能将、(T复制过

去。

12、软件需求分析阶段的工作,可以分为四个方面:需求获取、编写需求规格说明

书、需求评审和()。

A、阶段性报告

B、需求分析

C、需求总结

D、都不正确

标准答案:B

知识点解析•:软件需求分析阶段的工作,可以概括为四个方面:需求获取、需求分

析、编写需求规格说明书和需求评审。需求获取的目的是确定对目标系统的各方面

需求。涉及到的主要任务是建立获取用户需求的方法框架,并支持和监控需求获取

的过程。需求分析是对获取的需求进行分析和综合,最终给出系统的解决方案和目

标系统的逻辑模型。编写需求规格说明书作为需求分析的阶段成果,可以为用户、

分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又

可以作为控制软件开发进程的依据。需求评审是对需求分析阶段的工作进行复审,

验证需求文档的一致性、可行性、完整性和有效性。

13、设有定义:intk=0:以下选项的四个表达式中与其他三个表达式的值不相同

的是()。

A、++k

B、k+=l

C、k++

D、k+1

标准答案:c

知识点解析:++k,先使k的值自增1后再使用,k++是先取得k的值再将k的值

自增1,所以C选项中表达式的值为0,而其他三个表达式的值均为1,所以选择

14、当a=4,b=5»c=7,d=6时,执行下面一段程序:it(a<b)it(c<d)x=l;else

if(a<c)if(b<c)x=2;elsex=3;elsex=4:elsex=5;程序执行后,X的值为()。

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:本题考查ifelse语句。第一个if语句,先判断条件,aVb成立,则

执行下面的语句;第二个if语句,先判断条件,cVd不成立,则执行其对应的

else语句;笫三个if语句,先判断条件,a〈c成立,执行其后语句;笫四个if语

句,先判断条件,b<c成立,执行语句x=2。

15、计算机软件包括(),

A、算法和数据

B、程序和数据

C、程序和文档

D、程序、数据及相关义档

标准答案:D

知识点解析:计算机软件由两部分组成:①机器可执行的程序和数据:②机搭不

可执行的,与软件开发、运行、维护、使用等有关的文档。

16、数据库系统在其内部具有3级模式,用来描述数据库中全体数据的全局逻辑结

构和特性的是()。

A、外模式

B、概念模式

C、内模式

D、存储模式

标准答案:B

知识点解析:概念模式,也称逻辑模式,是对数据库系统中全局数据逻辑结构的描

述,是全体用户应用公共数据视图。它不涉及具体的硬件环境与平台,与具体的软

件环境也无关。

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

A、a=a+7;

a=7+b+c,a++

C、int(12.3%4)

D、a=a+7=c+b

标准答案:B

知识点解析:选项A)是一个C语句,不是表达式;选项B)是利用一个逗号表达式

给a赋值;选项C)中的“%”求余运算符要求两个运算对象都必须是整型;选项D)

中,不能用表达式给表达式赋值,但是变量可以给自身赋值,例如:a=a+lo

18、以下不能输出字符A的语句是()。(注:字符A的.ASCII码值为65,字符a

的ASCII码值为97)

A、printR"%c\n",'a'—32);

B、prinffo("%d\n",,A>

C、printPT'%c\n",65);

D、13rinffT%c\n",,B'—1):

标准答案:B

知识点解析:B选项输出的格式为%d,即为整型格式,所以输出字符A的ASCH

码值65,而不是字符A。由于大写字母比与其对应的小写字母的ASCII码值小

32,所以A正确。字符A的ASCH码值就是65,所以以%c格式输出可以输出字

符A,所以C正确。由于字符A的ASCII码值比字符B的小I,所以D正确。

19^有以下程序:#include<stdio.h>main(){inta[]={1,2,3,4},y,

*p=&a[3];-p:y=*p;primf(''y=%d\rT,y);}程序的运行结果是()。

A、y=0

B、y=l

C>y=2

D、y=3

标准答案:D

知识点解析:程序首先定义了一个一维数组和指针,接着将数组第4个元素的地址

赋给“*P",进行-p使指针p指向了数组的第3个元素;通过“y=*p",将数组第3个

元素的值3赋给了y,所以选项D正确。

20、有以下程序:#include<stdio.h>main(){inty=10;while(y—);printf("y=%

d\n",y);}程序执行后的输出结果是()。

A、y=-l

B、y=0

C、y=l

D、while构成无限循环

标准答案:A

知识点解析:y-表示y使用后再自减1,所以最后一次y的值为0.条件不成立但

仍要执行自减操作,y的值为-1,跳出循环,打印y的值-1。

21、软件调试的目的是()。

A、发现错误

B、改善软件的性能

C、改正错误

D、验证软件的正确性

标准答案:C

知识点解析:在对程序进行了成功的测试之后将进入程序调试,程序调试的任务是

诊断和改正程序中的错误。

22、有以下程序:#includemain()(inta=l»b=2;tor(;a<8;a++)(b+=a;a+:

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

A、9,18

B、8,11

C、7,II

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选项。

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

case3:printf(H%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

知识点解析:当产生的随机数为4时,对5取余结果为4,执行case4后面语句,见到

continue结束本次循环,而非结束程序运行,所以B选项错误,当

温馨提示

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

评论

0/150

提交评论