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

下载本文档

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

文档简介

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

(共9套)

(共343题)

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

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

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

A、一对一

B、一对多

C、多对一

D、多对多

标准答案:B

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

多对多(m:n)o本题中,一间宿舍对应多个学生,那么宿舍和学生之间的联系是

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

2、对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-l)/2的排序方法

是()。

A、快速排序

B、冒泡排序

C、直接插入排序

D、堆排序

标准答案:D

知识点解析:除了堆排序算法的比较次数是O(nlog2,n),其他的都是,n(n-l)/

2。

3、以下4个选项,不能看作一条语句的是()。

A>{;)

B、intx=0,y=l»z=0;

C>if(la);

D、if(b=O)m=l;n=2;

标准答案:D

知识点解析:if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决

定执行给出的两种操作之一。在if和else后面可以只含一个内嵌的操作语句,也

可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。选

项D中没有将两个操作语句括起来,不能看作一条语句。

4、运行下面程序时,从键盘输入字母A,则输出结果是()。#include<stdio.h>

main(){charch;ch=getchar();switch(ch){case'A':printf(',AAAA\n’‘);

,,,,,,

cascB:pnntf(BBBBkn);default:prmtf(''CCCC\n'');))

A、AAAA

B、AAAABBBB

C、AAAABBBBCCCC

D、AAAACCCC

标准答案:C

知识点解析:本题考查“switch”语句。因为“ch=A”,所以第一个switch语句,执行

“case",”后面的语句,瑜出AAAA,没有遇到break语句,所以接着再执行

“case'B'"和default,分别输出BBBB和CCCC。

5、请阅读以下程序:include#includcvoidfun(intb[])main(){staticinti=0;{int

k,a[5]={L3,5,4,9);Do{b[i]+=b[i+l];fun(a);}while(++i<2);}for(k=0;

k<5;k++)printf("%d",a[k]);}上面程序的输出是()。

A、13579

B、48579

C>48549

D、48999

标准答案:C

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

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

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

6、下列各选项中,不属于序言性注释的是()。

A、程序标题

B、程序设计者

C、主要算法

D、数据状态

标准答案:D

知识点解析:注释一般为序言性注释和功能性注释。序言性注释常位于程序开头部

分,它包括程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简

历、程序设计者、复审者、复审日期及修改日期等。功能性注释一般嵌在源程序体

之中,用于描述其后的语句或程序的主要功能。

R

操作中正确的是()。

A、T=RAS

B、T=RUS

C、T=RxS

D、T=R-S

标准答案:D

知识点解析:图中关系R比关系s多一行T中的元组,故由关系R和S得到关系

T的操作是差。

8、有以下程序:#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,

1,2),i,j,t=l;for(i=0;i<3;i++)for(j=i;j<=i;j++)t+=b[i][b[j][i]];

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

A、3

B、4

C、1

D、9

标准答案:B

知识点解析:每次内循环只循环一次就结束,第一次外循环时

t=t+b[0][b[0][o]]=1+b[0][0]=1+0=1;第二次外循环时

t=t+b[l][b[l][l]]=l+b[l][l]=l+l=2;第三次外循环时

l=l+b⑵[b[21⑵]=2+b⑵⑵=2+2=4。

9、有以下程序:#include<stdio.h>voidfun(intp){intd=2;p=d++;printf(M%

d",p);)main(){inta=l:fun(a);printf(',%d\n,1,a);}程序运行后的输出结

果是()。

A、32

B、12

C、21

D、22

标准答案:C

知识点。析:C语言中函数参数传递满足“单向传递”,实现传递值的功能,实参能

传给形参,形参却不能々回给实参。fun函数体内输出p的值为2,并不影响到fun

函数外a的值,a的值在main函数内依然为1。

10、设有如下函数定义:#include<stdio.h>intfun(intk){if(k<l)return0;else

if(k==l)returnl;elsere:urnfun(k-l)+l;)若执行调用语句"n=fun(3);”,则函数

fun总共被调用的次数是()。

A、2

B、4

C、4

D、5

标准答案:B

知识点解析:首先n=fun(3),3被当作参数传递进去,这就进行了一次调用,3被

当做参数传进去后,程序会执行这句elserelumOm(k-l)+l;这就调用了第二次,

而参数是3-1也就是2。2被当做参数传进去后,程序会执行这句elseretunifun(k-

1)+1;这就调用了第三次,而参数是2-1也就是1。1被当做参数传进去后,程序

会执行这句elseif(k==l)returnl;不再递归调用,所以最终结果为3次。

11、交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。

A、&

B、八

C、II

D、〜

标准答案:B

知识点解析:按逻辑位运算的特定作用主要有3点:①用按位与运算将特定位清0

或保留特定位;②用按位或运算将特定的位置设置为1;③用按位异或运算将某

个变量的特定位翻转或交换两个变量的值。

12、运行下列程序时,若输入数据为“321”,则输出结果是()。main(){intnum,

i,j,k,s;scanf(“%d",&num);if(num>99)s=3:elseif(num>9)s=2:elses=l:

i=num/100;j=(num一i*100)/10;k=(num-i*100-j*10);swilch(s){case3:

printf("%d%d%d\n”,k,j,i):break:case2:printf("%d%d\n”.k,j):case1:

printf("%d\n",k);))

A、123

B、1,2,3

C、321

D、3,2,I

标准答案:A

知识点解析:本题考查if-else语句和switch语句。scanf函数通过键盘读入num的

值。因为num=321>99,所以s=3,i=3,i=2,k=lo因为s=3,所以执行case3,

输出k,i,i的值,然后通过break结束程序。

13、有以卜程序#inc1udeVsidio.h>#defineS1(z)4*z+4*(z)#defineS2(x,

y)4*(x)*(y)+y*xmain(){inta=l,b=2;printf("%d,n,Sl(a+b));printf("%d,”,

S2(a,b)+Sl(3));printf("%d”,S2(3+a,b+3));程序执行后的输出结果是()。

A、A,34,100

B、24,34,92

C、24,34,100

D、18,34,92

标准答案:D

知识点解析:程序中SI和S2都是宏定义,所以Sl(a+b)宏展开后的表达式为:

4*a+b+4*(a+b),即4*1=1+2+4*(1+2),结果为18;S2(a,b)宏展开的表达式为:

4*(a)*(b)+b*a,即4*(1)*(2)+2*1,结果为10;S1⑶宏展开后的表达式为:

4*3+4*(3),结果为24;S2(3+a,b+3)宏展开的表达式为:

4*(3+a)*(b+3)+b+3*3+a,即4*(3+1)*(2+3)+2+3*3+1,结果为92,本题输出:18,

34,92,答案为D。

14、设p是指针变量,语句p=NULL;等价于()。

A、p=0;

B、p=";

C、p”;

D、p='0';

标准答案:A

知识点露析:本题考查指向指针的指针。i是int类型的变量,p为基本类型为int

的指针变量,r为二级指针,指向的是指车Ip的地址,囚此,“p就优表i;〃*r就代

表*p,也等价于i。二级指针作为函数参数,形参和实参指向同一个地址空间,两

者的改变保持同步。函数fun()的功能是将r指向的存有变量i的地址的指针变量改

为指向存有变量k的地址的指针变量,*p的值发生了改变。函数f()中语句“int

*1二&k;*s=l;”同样使得**s、*t、k等价,所以刚开始输出3个7,函数调用结束之后

*p与**r的值均为7,i不变,答案选A)。

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

A、C语句必须以分号结束

R、复合语句在语法上被看作一条语句

C、空语句出现在任何位置都不会影响程序运行

D、赋值表达式末尾加分号就构成赋值语句

标准答案:C

知识点解析:C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语

句的必要组成部分。复合语句也称为“语句块”,其形式如下:{语句1;语句

2:……语句n:},即月一对大括号把若干语句括起来构成一个语句组。一个复合

语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的

最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它

什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分

号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需

要慎用。

16、交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。

A、&

B、A

C、II

D、~

标准答案:B

知识点解析:按逻辑位运算的特定作用主要有3点:①用按位与运算将特定位清0

或保留特定位;②用按位或运算将特定的位置设置为1;③用按位异或运算将某

个变量的特定位翻转或交换两个变量的值。

17、某系统总体结构图如下图所示:该系统总体

结构图的深度是()o

A、7

B、6

C、3

D、2

标准答案:C

知识点解析:根据总体结构图可以看出该树的深度为3,比如:XY系统-----功

能2-------------功能2.1,就是最深的度数的一个表现。

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

A、有一个以上根结点的数据结构不一定是非线性结构

B、只有一个根结点的数据结构不一定是线性结构

C、循环链表是非线性结构

D、双向链表是非线性结构

标准答案:B

知识点解析:线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,

也最多有一个后件,所以B正确。所以有一个以上根结点的数据结构一定是非线

性结构,所以A错误。循环链表和双向链表都是线性结构的数据结构。

19、下列选项中属于面向对象设计方法主要特征的是()。

A、继承

B、自顶向下

C、模块化

D、逐步求精

标准答案:A

知识点解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态

性,所以选择A。

20、若输入“abcdeF、"abdeF',以下程序的输出结果为()。includeinclude

main(){intn;charsi[20],s2[20],*pl,*p2;scanf("%s”,si);scanR“%s”,

s2):p1=s1;p2=s2;n=strcmp(pl,p2);printf("%d\n",n);}

A、-1

B、0

C、“abcdef

D、“abdeF'

标准答案:A

知识点解析:本题考查两个知识点:①字符串比较函数strcmp(sl,s2),若

sl>s2,则返回1;若sl=s2,则返回0;若si

21、以下选项中,合法的是()。

A、charstr3[]={,d\'e:'b',A','g','0'};

B、charstr4;str4="helloworld',;

C、charname[10]:name=,china";

D、charstd[5]="pass",str2[6];str2=std;

标准答案:A

知识点解析:选项B不能把一个字符串赋值给一个字符变量,选项C和D犯了同

样的错误是把字符串赋给了数组名。

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

A、N-S图

B、DFD图

C、PAD图

D、程序流程图

标准答案:B

知识点解析:结构化解析方法是结构化程序设计理论在软件需求解析阶段的运用,

数据流图(DataFlewDiagram,DFD))是结构化解析常用的T具之一,数据字典、判

定树和判定表也是常用的结构化分析工具。程序流程图、NS图、PAD图等图形工

具用于详细设计的过程中。

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

RST

BCDBCD

a0kl□匚a0kl

b1nl□2J

M

2JEJ

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

A、并

B、自然连接

C、笛卡尔积

D、交

标准答案:D

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

必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B)错误。笛卡尔

积是用R集合中元素为第一元素,S集合中元素为第二元素构成的有序对,所以

C)错误。根据关系T可以很明显的看出是从关系R与关系S中取得相同的关系组

所以取得是交运算,选择D)。

24、若有代数式,由s呢近(其中e仅代表自然对数的底数,不是变量),则以卜能

够正确表示该代数式的c语言表达式是()。

A、sqrt(fabs(pow(n,x)+exp(x)))

sqrt(fabs(pow(n,x)+pow(x,e)))

C>sqrt(abs(nAx+eAx))

D、sqrt(fabs(pow(x,n)+exp(x)))

标准答案:A

知识点解析:B选项中,函数pow(x,e)错误,应该直接使用cxp(x)函数。C选项

中,函数abs(n-x+e-x)错误,应该使用fabs()返回浮点数的绝对值。D选项中,

pow(x,n)参数顺序错误。

25>有以下程序:#include<stdio.h>main(){inta=l>}1=2;for(;a<8;

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

()o

A、9,18

B、8,11

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

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

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

A、scanf(n%s",s);

B、while((s[i++]=getchar())!=,\n,);s[i]=>\O,;

C>gets(s);

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

标准答案:A

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

答案选A)。

27、若有以下程序:#include#defineS(x)(x)*(x)#defineT(x)S(x)/S(x)+1main()

{intk=3j=2;printf("%d,%d\n”,S(k+j),T(k+j));}则程序的输出结果是()。

A、11,2

B、25,2

C、11,12

D、25,26

标准答案:D

知识点解析:本题考查宏定义。宏定义只是做简单的替换,执行语句

s(k+j)=(k+j)*(k+j)=25,T(k+j)=S(k+j)/S(k+j)+l=(k+j)*(k+j)/(k+j)*(k+j)+l=26,因

此选项D正确。

28、以下程序段中的变量已正确定义folr(i=0;iV4;i++,i++)for(k=l;k<3;

k++);printf("*");该程序段的输出结果是()。

A、*

B、****

C、**

D、********

标准答案:A

知识点解析:C语言约定分号为一条语句的结束。因此for(i=0;iV4;i++,

i++)for(k=l;k<3;k++);是完整的语句,对print®;没有任何影响,最后

printfC'*"),执行一次。因此答案为A选项。

29、以下选项中不属于C语言标识符的是

A、常量

B、用户标识符

C、关键字

D、预定义标识符

标准答案:A

知识点解析:常量是指在程序运行过程中其值不能被改变的量,如5、1.0、字符宣

等。C语言的标识符分为3类:关键字、预定义标识符和用户标识符,常量不属于

标识符,所以选择A。

30、有以下函数:intfun(char*s){char*c=s;while(*c+4-);return。一s);}该函

数的功能是()。

A、计算s所指字符串占用内存字节的个数

B、比较两个字符串的大小

C、计算s所指字符串的长度

D、将s所指字符串复制到字符串c中

标准答案:C

知识点解析:while(*cc-+)的结果是将c移动到字符串的结尾,即当c=,\(T时,循

环结束。此时s依然指向的是字符串的首字符,因此,返回值c-s是字符串的长

度,答案C正确。

31、下列叙述中正确的是

A、空字符串不占用内存,其内存空间大小是0

B、两个连续的单引号(-)是合法的字符常量

C、可以对字符串进行关系运算

D、两个连续的双引号("”)是合法的字符串常量

标准答案:D

知识点解析:字符串常量是由一对双引号括起的字符序列。A选项描述不正确。B

选项描述的不够完善;字符常量占一个字节的内存空间。D选项正确;字符常量是

用单引号括起来的一个字符。C语言字符串比较不能直接用关系运算符进行正确比

较。可以用字符串比较函数strcmp来实现,C选项是错误的;字符串常量占的内

存字节数等于字符串中字节数加1。因此D选项正确。

32、设x=02Ly=012,则z=xIy的值是()。

A、1

B、0

C、00011011

D、l.le+007

标准答案:C

知识点解析:本题主要考查按位或运算。按位或是对两个运算对象相应的位进行逻

辑或运算,其运算规则和逻辑或相同,两个运算对象只要有一个是1,则结果为

lo

33、以下选项中,合法的C语言常量是

A、1.234

B、'C++'

C、”\2.0

D、2Kb

标准答案:A

知识看解析:整型常量:用不带小数点的数字表示。实型常量:用带小数点的数字

表示。字符型常量:用带有单引号的字符表示。字符串常量:用一对双引号括起来

的一串字符。1.234为实型常量,A选项正确。C++,不合法,若改成“C++”则为字

符串常量,B选项错误。”\2.0不合法,不是任何类型常量,C选项错误。2Kb不合

法,若加上双引号”2Kb"为字符串常量,D选项错误。

34、设有定义:inta=O,b=l;,以下表达式中,会产生“短路”现象,致使变量b的值

不变的是

A、a++&&b++

B、a++||++b

C、++a&&b++

D^+a||++b

标准答案:A

知识点解析:运算符“++”放在变量前面时,表示将变量+1,再参与其他操作,a++

&&b++时,由于a值是0直接判定与运算结果为0,忽视b++的值,因此b值不发

生改变,答案为A选项。

35、下列各序列中不是难的是

A、(91,85,53,36,47,30,24,12)

B、(91,85,53,47,36,30,24,12)

C、(47,91,53,85,30,12,24,36)

D、(91,85,53,47,30,12,24,36)

标准答案:C

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

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

堆,所有结点的值小于或等于左右子结点的值。A、B、D选项属于大根堆,C选

项由于47<91,判断属于小根堆,但91>85,不满足条件,不是堆,故正确答案

为C选项。

36、关于C语言标识符,以下叙述错误的是

A、标识符可全部由数字组成

B、标识符可全部由下划线组成

C、标识符可全部由小写字母组成

D、标识符可全部由大写字母组成

标准答案:A

知识点解析:标识符只能由字母、数字、下划线组成,且标识符的第一个字符只能

是字母或下划线。所以,B,C,D选项正确,答案为A选项。

37、数据库的数据模型分为

A、层次、关系和网状

B、网状、环状和链状

C、大型、中型和小型

D、线性和非线性

标准答案:A

知识点解析:数据库的数据模型分为层次、关系和网状三种。其中:用树形垢构

表示实体及其之间联系的模型称为层次模型,模型中结点是实体,树枝是联系,从

上到下是一对多的关系。用网状结构表示实体及其之间联系的模型称为网状模

型,它是层次模型的扩展,表示多个从属关系的层次结构,呈现一种交叉关系。

关系模型的数据结构非常单一,在关系模型中,现实世界的实体以及实体间的各种

联系均用关系来表示。故本题选A选项。

38、以下叙述正确的是

A、C程序由函数组成,可以不包含main函数

B、每个C程序文件中的main函数都应当放在最前面

C、每个C程序文件都应当包含一个main函数

D、每个C程序都只能有一个main函数

标准答案:D

知识点解析:虽然一个C程序可以包含多个文件,但是有且只有一个文件中包含

main函数,因此,选项A,C错误。main函数可以放在程序的任意位置。因此,选

项B错误。答案为D选项。

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

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

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

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

D、以上三种说法都不对

标准答案:C

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

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

据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可。故C选

项正确。

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

40、给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文

件myfile4.ixt中,用作为字符串输入结束的标志。然后将文件的内容读出显示

在屏幕上。文件的读写分别由自定义函数ReadTexi和WriteText实现。请在程序

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

序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的

结构!#include<stdio.h>#include<string.h>#include<stdlib.h>void

WriteText(FILE*);voidReadText(FlLE*);main(){FILE*fp;

if((fp=fopen("myfile4.txt",,'w,'))==NULL){printf("openfail!!\nM);exit(O);)

WriteText(fp);fclose(fp):if((fp=fopen(',myfile4.txt","r,,))==NULL)(printf("open

fail!!\n");exit(O);)ReadText(fp);fclose(fp);)/**********fOund**********

/voidWriteText(FILE__1___){charstr[81];printf("\nEnterstringwith-1to

end:\n");gets(str);while(strcmp(str,""l")!=0)|/*********木fbund**********

/fputs(2,fW);fputs("\n",fw);gets(str);))voidReadText(FILE*fr)

{charstr[81];printf(H\nhaReadfileandoutputtoscreen:\n");fgets(str,81,

fr);while(!feof(fr)){/**********founcj**********/3);

fgets(str,81,fr);)}

标准答案:(l)*fw⑵str⑶str

知识点解析:第一空:此处是补充函数参数名,参数类型已知是FILE文件指针,

fbuts("\n",fw)是将字符“\n”写入文件,可知fw是文件指针名,因此第一空处应

该是voidWriteText(FILE*fw);第二空:while(sircmp(str"・l")!=O)循环的结束标志

是str字符串等于“・1”时循环退出,如果sir不等于“-1”,执行循环体内容:用fbuts

函数将str字符串写入文件。fputs函数的调用形式是:fputs(s,fp),其中s是指向

字符串的指针或字符串数组名,fp是指向将要被写入的文件的文件指针,因此第

:处应该是fputs($tr.fw)。第三空:while(!feof(fr))循环的作用是不断读取文件直

到到达文件尾,每次最多读81个,将读到的数据放在str字符串里,并用primf输

出到屏幕,因此第三处应该是prinlf("%s"slr)。

三、程序修改题(本题共7题,每题分,共7分。)

41、由N个有序整数组成的数列已放在一维数组中,给定程序M0DI1.C中函数

fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下

标值;反之,返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的

范围:low和high(10whigh,查找结束。请改正程序中的错误,使它能得出正确结

果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include(JdefincN10/*****«*«****found************/voidfun(inta[],intm)

{intlow=0,high=N一1,mid;while(low<=high){mid=(low+high)/2;

if(ma[mid])low=mid+1•ekereturn(mid):)return(一1):}main(){inti.

a[N]={-3,4,7,9,13,45,67,89,100,180),k,m;printf("数组中的数

据如F:");for(i=0;i=0)printf("m=%d,index=%d\n",m,k);else

printf("Notbefound!\n");)

标准答案:(l)intfiin(inta[]»intm)(2)elseif(m>a[mid])

知识点解析:(1)根据主函数中“k=「un(a,m);”,知道函数fun应该是返回im型的

函数,所以第一个标识下面定义的“voidfun(inta[],intm)”应该改为“intfun(int

a[],intm)Mo(2)第二个标识下的“elseIf(m>a[mid])”是判断m是否比a[mid]大,在

while循环中采用的是if-elseif-else语句,显然“elseIF'当中"IF应当小写,故第二标

识下“else1flm>a[mid])”应改为“elseif(m>a[mid]),\

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

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

1算法的有穷性是指()。

A、算法程序的运行时间是有限的

B、算法程序所处理的数据量是有限的

C、算法程序的长度是有限的

D、算法在执行过程中所需要的临时工作单元数

标准答案:A

知识点解析:算法原则上能够精确地运行,而且人们用纸笔做有限次运算后即可完

成。有穷性是指算法程序的运行时间是有限的。

2、一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入

栈,然后再依次出栈,则元素出栈的顺序是()。

A、12345ABCDE

B、EDCBA54321

C、ABCDE12345

D、54321EDCBA

标准答案:B

知识点解析:栈是按照“先进后出”的原则组织数据的,入栈的顺序为

12345ABCDE,则出栈的顺序应为其逆序,即EDCBA54321。

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

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

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

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

D、以上三种说法都不对

标准答案:c

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

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

据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可。故C选

项正确。

4、在长度为n的有序线性表中进行二分查找,最切情况下需要比较的次数是()。

A、0(n)

B、O(n2)

C、O(log2n)

D、O(nlog2n)

标准答案:C

知识点解析:二分查找的最坏情况是不断的二分直至无法再分时,仍然没有查找成

功。对于有序的线性表,二分查找法只需比较log2n次。

5、假定已建立以下数据链表结构,且指针p和q已指向如下图所示的结点:

HatMnext

MI二kl—TTLI~GU

•Plq则以下选项中可将q所指结点从链

表中删除并释放该结点的语句是()。

A、(*)p.next=(*q).next;free(p)

B、b=q->next;free(q)

C>p=q;free(q)

D、p=>next=q->next;free(q)

标准答案:D

知识点解析:要删除结点q,应首先由q的上一个结点p的指针域指向q的指针域

所指向的结点,即p—>next=q—>ncxt;,然后才能释放结点q,即free(q)。

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

A、N-S图

B、DFD图

C、PAD图

D、程序流程图

标准答案:B

知识点解析:结构化分析方法是结构化程序设计理论在软件需求解析阶段的运用,

数据流图(DataFlowDiagram,DFD)是结构化分析常用的工具之一,数据字典、判

定树和判定表也是常用的结构化分析工具。程序流程图、NS图、PAD图等图形工

具用于详细设计的过程中。

7、在面向方法中,不属于“对象”基本特点的是().

A、一致性

B、分类性

C、多态性

D、标识唯一性

标准答案:A

知识点。析:对象的基本特点有:①标识唯一性,是指对象是可区分的;②分类

性,是指可将具有相同属性和操作的对象抽象成类;③多态性,是指同一个操作

可以是不同对象的行为;④封装性,是指对象的内部对外不可见,在外面不可直

接使用对象的处理能力.也不能直接修改对象的内部状态:⑤模块独立性,是指

模块内部各部分及模块间的关系的一种衡量标准,由内聚和耦合来度量。

8、在数据管理技术发展的三个阶段中,数据共享最好的是()。

A、人工管理阶段

B、文件系统阶段

C、数据库系统阶段

D、三个阶段相同

标准答案:c

知识点。析:数据库系统阶段实现了数据共享,具有数据的集成性.这使得数据可

被多个应用所共享,还可以极大地减少数据冗余性。A项。在人工管理阶段,数据

不保存,没有对数据进行管理的软件,数据不能共享;B项,文件系统阶段是数据

库系统发展的初级阶段,它提供了简单的数据共享与数据管理能力,但是这种能力

十分有限。从人工管理阶段到文件系统阶段再到数据库系统阶段,对数据共享的能

力在不断增强。

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

A、一对一

B>一对多

C、多对一

D、多对多

标准答案:B

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

多对多(m:n)o本题中,一间宿舍对应多个学生,那么宿舍和学生之间的联系是一

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

、有三个关系、和如下:"2已」

10RSTsI由关系R和

S通过进行运算得到关系T,则所使用的运算为()。

A、笛卡尔积

B、交

C、并

D、自然连接

标准答案:D

知识点解析:交和并运算要求关系R和S具有相同的属性,BC两项错误。R与S

的笛卡儿积是一个4元关系,有4个元素,A项错误。R与S有公共的属性B,可

通过公共属性的相等值进行连接,这种连接称之为自然连接。

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

A、C程序的基本组成单位是语句

B、C程序中的每一行只能写一条语句

C、简单C语句必须以分号结束

D、C语言必须在一行内写完

标准答案:c

知识点。析:C程序的基本组成单位是函数,A项错误;C程序以分号作为每个语

句结尾,一行能写多条语句,也可以将一条语句分儿行书写,BD两项错误;而简

单C语言语句必须以分号结束,所以C项正确。

12、C源程序中不能表示的数制是()。

A、二进制

B、八进制

C、十六进制

D、十六进制

标准答案:A

知识点解析:C语言中整型常量可以用十进制数、八进制数、十六进制数来表示。

虽然计算机只能识别二进制数,但二进制不能用来表示整型常量。

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

A、用户定义的函数中可以没有return语句

B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值

C、用户定义的函数中若没有return语句,则应当定义函数为voie类型

D、函数的return语句中可以没有表达式

标准答案:B

知识点解析:用户定义的函数有两种:①void函数,可以没有relum语句,如果

有return语句,也不可以返回任何表达式;②指定返回类型函数,至少有一个返

同语句。在一个函数内,可以根据需要在多处出现return语句,但无论有多少个

relurn语句,relum语句只会被执行一次,然后退出函数,并且只能返回一个函数

值。

14、以下选项中不能作为C语言合法常量的足()。

A、'cd,

0.le+6

C、uaH

D、'\)ir

标准答案:A

知识点解析:常量包括整型常量、实型常,量、字符常量和字符串常量等。单引号表

示字符常量,但不能包含字符串。表达字符串常量时需用双引号。

15、如有表达式(w)?(—x):(++y)。则其中与w等价的表达式是()。

A、w==l

B、w==0

C、w!=l

D>W!=0

标准答案:D

知识点解析:表达式形式为V表达式1>?V表达式2>:V表达式3>c当表

达式1的值为真,则结果为表达式2的值;当表达式1的值为假,则结果为表达式

3的值。可见表达式w等价于w!=0。

16、以下选项中正确的定义语句是()。

A、doublea:b:

B、doublea=b=7:

C>doublea=7.b=7:

D、double,a,b:

标准答案:c

知识点解晶:同一类型变量的定义时,不同变量之间需要用“,”分隔;定义变量时

初始化赋值时不能用等号连接;变量类型说明后面不能用逗号,而是用空格分离。

17、若变量已正确定义为ini型,要通过语句scanf("%d,%d,%d”,&a,&b,

&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(u代表一个

空格)()。

A、1,2,3V回车,

B、lu2113V回车〉

C、1,uu2,uuV回车>3V回车>

D、uul.2,3V回车,

标准答案:B

知识点解析:scanf函数要求除格式控制符以外的字符都要原样输入。逗号是车格

式符,所以需要原样输入,否则就不能正确读入数据。B项前两个数据后面没有紧

跟一个逗号,格式不匹配,所以输入形式错误。

18、执行以下程序段后,w的值为()。intw='A',x=14,y=15;w=((x|y)&&

(wV'a'));

A、一1

B、NULL

C、1

D、0

标准答案:C

知识点解析:因为x=14,y=15都是非零整数,因此x|y二L叉因为'A'+32='

a',知wV'a'也为真,因此(x|y)&&(wV‘a')的值为1。

19、有以下程序:#include<stdio.h>main()chara=4:printf(H%d\n",=a<

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

A、40

B、16

C、8

D、4

标准答案:C

知识点解析:左移一位相当于原数乘以2,右移一位相当于除以2。aVVI结果为

4*2=8,没有超过char类型的范围。

20、有以下程序段:intb,c;a=10;b=50;c=30;if(a>b)a=b»b=c;c=a;

printf("a=%db=%dc=%d",a,b,c);程序的输出结果是()。

A、a=10b=50C=10

B、a=10b=50C=30

C、a=10b=30c=10

D、a=10b=30c=50

标准答案:A

知识点解析:因为a=10,b=50,所以aVb,if语句判断条件不成立,于是执行

c=a,得到c=10,a和b的值不变。

21、有以卜程序:#include<stdio.h>main(){intx=Ly=2,z=3;if(x>y)if(y

<z)printf('*%d",++z);elseprintf("%d",++y);printf("%d\n",

x++);}程序运行的结果是()。

A、331

B、41

C、2

D、I

标准答案:D

知识点解析:else子句总是与最前面最近的不带else的if相结合,与书写格式无

关,所以本题中的else语句与第二个if语句配对,且if和else都在第一个i「的控

制范围内。首先判断x>y不成立,直接退出第一个if语句,执行prin【f("%d\

nH,x++)。(x++)的值是x加之前的值,所以输出结果为1。

22、有以下程序:#include<stdio.h>main(){ini=5:do{if(i%3==l)if(i%5==2)

{printfC*%^,i);break;)i++:(while(i!=O):printf("n'))程序运行的结果是

()o

A、*7

B、*3*5

C、*5

D^*2*6

标准答案:A

知识点解析:在dowhile循环中,总是先执行后判断,所以循环体至少会被执行一

次。在循环中,如果满足(i%3==l)&&(i%5==2),那么输出i的值,退出循环,否

则i++,印果i==0则跳出循环。

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

{forg=l;j<=2;j++)printf(M%d",i+j);printf('*\nn);))程序运行的结果

是()c

A、234345

B、43254345

C、233423

D、4534

标准答案:D

知识点解析:外层主循环i从3减到1执行了3次(最后一次循环条件不成立,不执

行),嵌套的循环j从1噌到2,每轮执行2次。每次输出i+j的值,就可以得到如

D选项的输出结果。每次换行发生在外循环完成一次循环之后。

?,5,

24、若有定义语句:chars[10]=1234567\0\0;,则strlen(s)的值是()。

A、7

B、8

C、9

D、10

标准答案:A

知识点解析:C语言规定以字符'\0’作为字符串结束的标识符。stHen函数返回

的是字符串的长度,“1234567\0\0”与“1234567”等效,所以字符串长度是7。

25、若有定义语句:intm|]={5,4,3,2,I},i=4;,则卜.面对m数组元素的引

用中错误的是()。

A、m[----i]

B、m[2*2]

C、m[m[O]]

D、

标准答案:C

知识点解析::数组的下标从零开始,数组m中有5个元素,所以数组m即为

m[0]=5,m[l]=4,m[2]=3,m[3]=2,m[4]=loC项,m[0]=5,引用数组元素为

m|51,但是数组下标范围是0-4,所以m[5]溢出,引用错误。

26有以下程序:#include<stdio.h>voidfun(inta[],intn){inti.t:for(i=0;

i<n/2;i++){t=a[i]:a[i]=a[n-1-i];a[n—1-i]=t;})main(){int

k[10]={l,2,3,4,5,6,7,8,9,10),i;fun(k,5):for(i=2;i<8;i++)

printf("%d",k[i]);printf("\n");)程序运行的结果是().

A、3456787

B、876543

C、1098765

D、321678

标准答案:D

知识点解析:由于数组名本身是一个地址,所以在用数组名作为实参传递时,对应

的形参相当于一个指针变量,在函数中可以通过指针变量来引用数组元素,从而改

变元素的值。本题中函数fun的作用是将数组A的前n个元素进行逆转,fun(k,5)

的结果是数组k的前五个元素1、2,3、4,5变为5、4、3、2、L逆转后,输出

数组中第3个至第8个元素。

27、有以下程序:#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]);fbr(i=O;i<10;i++)printf("%d»",c[i]);printf(M\

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没有发生变化,原样输出。

28有以下程序:#include<stdio.h>#defineN4voidfun(inta||[N|,intb|])int

i:for(i=0:i<N;i++)b[i]=a[i][i];main()intx[][N]={{1,2,3),{4},{5,6,

7,8),{9,10};,y[N],i;fun(x,y);for(i=0:i<N;i++)printf(-%d”,

y|i]);printf("\nH):)程序运行的结果是()。

A、1234

B、1070

C、1459

D、3480

标准答案:B

知识点解析:数组x有4列。「un函数中for循环的作用是将二维数组前4行的对

角线元素分别赋给b[0],b[l],b[2],b[3]o在主函数中,二维数组初始化为{1,

2,3),{4},{5,6,7,8),{9,10),所以可以看出对角线元素为1070。

29、若有定义语们:doublex|5]={1.0,2,3,4,5.0),*p=x,则错误引用X数

组元素的是()。

A、*p

B、x[5]

C、*(P+1)

D、*X

标准答案:B

知识点。析•:引用一维数组元素有多种方式。直接引用的表达式为:数组名[下

标]。数组大小为n时,下标的取值范围为。〜(n—l),所以本题中x的下标为。〜

4,x[5]溢出,B项错误。此外还可以通过指针引用一维数组元素。指针p指向该数

组,所以*p表示x[0],A项正确;指针p+1指向数组x的第二个元素的地址,

*(p+l)表示引用x的第二个元素,C项正确;x为x数组元素的首地址,*x表示对

x[0]的引用,D项正确。

30、下面的函数渊刚语句中.func函数的实参个数是()cfunc(f2(vl.v2).(v3.

v4,v5),(v6,max(v7,v8)))

A、3

B、4

C、5

D、8

标准答案:A

知识点解析:函数调用中,实参有多个时,它们之间应该用逗号分隔。本题中的实

参有3个,为f2(vl,v2)、(v3,v4,v5)、(v6,max(v7,v8))o其中f2(vLv2)是

函数做参数,(v3,v4,v5)是逗号表达式做参数,(v6,max(v7,v8))是逗号与函数

相结合做参数。

31、有以下程序:#include<stdio.h>intfun(inta,intb){if(b==O)returna:else

return(fun(----a,-----b));}main(){printf("%d\nM,fun(4,2));}程序运行

的结果是()。

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:fun函数是一个递归函数,其功能是:当b的值为零时,返回此时a

的值;否则,返回fun(-----a,------b),即将a和b的值分别减1后返回fun(a,

b)o当b不断递减时,a也不断递减,直到b为零。执行过程为:执行fun(4,2),

b=2,返回f(3,1),此时b=l,返回f(2,0),b=0,返回a的值2。

32、有以下程序:#include<stdio.h>intfun(int(*s)[4],intn,intk){intm,i;

m=s[0][k];for(i=l;i<n:i++)if(s[i][k]>m)m=s[i][k]:returnm:}main(){int

a[4][4]={{l,2,3,4),{11,12,13,14),{21,22,23,24),131,32,33,

34});printfC%d\nM,fun(a,4,0));}程序运行的结果是()。

A、4

B、34

C、31

D、32

标准答案:C

知识点解析:函数fun通过数组指针引用二维数组,其作用是遍历〜s[n—

l][k],找出数组中最大的元素。

33、有以下程序:#include<stdio.h>#include<stdlib.h>intfun(intn)

{int*P:P=(int*)malloc(sizeof(int)):*p=n;retum*P;)main(){inta;

a=fun(10):printfC1%d\n",a+fun(10));}程序运行的结果是()。

A、0

B、10

C、20

D、出错

标准答案:C

知识点解析:fun函数的功能是申请一个指针p,把p指向的存储空间赋值为n,并

返回p指向的空间的值,即为n。fun(10)的返回值为I0,所以a二fun(】O)后a的值

为IOa+fun(l0)=20o

34、以下关于宏的叙述中正确的是()。

A、宏名必须用大写字母表示

B、宏定义必须位于源程序中所有语句之间

C、宏替换没有数据类型限制

D、宏调用比函数调用耗费时间

标准答案:C

知识点解析:A项错误,宏名标识符习惯用大写字母表示,但宏名可以是任何合法

的C语言标识符,没有对大小写的强制性要求;B项错误.宏定义可以根据需要写

在任何位置;D项错误,宏调用在编译前由编译预处理程序完成,不占用运行的时

间。

35、以下程序段中完全正确的是()。

A>int*P;scanf('*%dn,&p);

B、int*P;scanf('*%d",p);

C>intk»*p=&k:scanf(n%d",p)

D^intk,*P;*p=&k;scanf(n%d",p)

标准答案:C

知识点解析:选项A错在没有对指针进行初始化,是无效指针,并且在scanty%

d",&p)中无需再进行取地址操作;选项B没有对指针

温馨提示

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

最新文档

评论

0/150

提交评论