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

下载本文档

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

文档简介

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

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

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

m=3,*p=&m;f(p);printf("Md%d\n",m,*p);}程序的运行结果是()。

A、33

B、55

C、35

D、53

标准答案:A

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

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

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

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

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

A、gets(s);

B、while((s[i++]=getehar())!=,\n*);s[i]=,\0,;

C、seanf("%s",s):

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

标准答案:C

知识点解析:字符串的输入不能使用scanf("%s”,s):而应该使用gets(s)。

3、以下不正确的转义字符是()。

A、3

B、,\d,

C、

D、'088'

标准答案:D

知识点解析:是反斜线符,是整型变量转义字符,'\s,是字符串型转义字

符,C语言中没有规定,088,为转义字符。

4、若在定义语句:inta,b,c,*p=&c;之后,接着执行以下选项中的语句,则能

正确执行的语句是()。

A、scanf("%d”,a,b,c);

B、scanf("%d%d%d”,a,b,c);

C、scanfi[”%d”,p);

D、scanf("%dH,&p);

标准答案:C

知识点解析:程序语句“inta,b,c,*p=&c:”定义了3个整型变量a,b,c和一

个整型指针变量p,并且把变量c的地址赋给p。scanf函数的一般形式为“scanff格

式控制字符串”,地址列表)“,其中的地址列表应当是存放输入数据变量的地址。

5、有以下程序:#inelude<stdio.h>#defineX5+6main(){inta=2,c;c=X*2:

pnntfC%(T,c);)程序运行后的输出结果是()。

A、17

B、22

C、16

D、11

标准答案:A

知识点解析:define语句仅进行简单替换,因此c=5+6*2=17。

6、数据库应用系统中的核心问题是()。

A、数据库设计

B、数据库系统设计

C、数据库维护

D、数据库管理员培训

标准答案:A

知识点解析:数据库应用系统中的核心问题是数据库的设计。

7^设有以下函数:voidfun(intn,char*s){.......}则下面对函数指针的定义和赋值

均正确的是()。

A、void(*pf)(int,char);pf=&fun;

B、void*pf():pf=fun;

C、void*of();*pf=fun;

D、void(*pf)(int,char*);pf=fun;

标准答案:D

知识点解析:函数的参数可以是指针类型。它的作用是将一个变量的地址传送到另

一个函数中。函数名代表函数的入口地址,指向函数的指针应该定义为

void(*pf)()o如果定义为void*pf(),则表示函数pf返回值为一个基类型为void的指

针。因此D选项正确。

8、以下程序运行后的输出结果是()。^includemain()voidreverse(inta[],intn)

{intb[10]={10,9,8,7,6,5,4,3,2,1);inti,s=0:{inti,t;reverse(b,

10);for(i=0;i

A、27

B、6c)25

C、30

标准答案:B

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

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

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

9、在源程序的开始处加上#includeVstdio.h>进行文件引用的原因,以下叙述正

确的是()。

A、stdio.h文件中包含标准输入/输出函数的函数说明,通过引用此文件以便能

正确使用pnntt>scanf等函数

B、将stdio.h中标准输入/输出函数链接到编译生成的可执行文件中,以便能正

确运行

C、将stdio.h中标准输入/输出函数的源程序插入到引用处,以便进行编译链接

D、将sidio.h中标准输入/输出函数的二进制代码插入到引用处,以便进行编译

链接

标准答案:A

知识点解析:stdio.h包含标准库函数头文件,很多库函数的声明都在sidio.h这

个文件中,包含之后就可以用其中的库函数,例如printf函数,scanf函数等。

10、以下有关宏的描述不正确的是()。

A、宏定义不做语法检查

B、双引号中出现的宏名不进行替换

C、宏名无类型

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

标准答案:D

知识点解析:本题考查宏的使用规则:①字符替换格式:#define标识符字符串,

标识符称为宏名,无类型;②双引号中出现的宏名不替换;③宏名的定义通常用

大写字母,但不是必须用大写:④宏定义不是赋值语句,不做语法检查C

11、设有下面的定义:structst{inta;floatb:}d;int*p;要使p指向结构变量

d中的a成员,正确的赋值语句是()。

*p=d.a:

B、p=&a;

C、p=d.a;

D^p=&d.a;

标准答案:D

知识点解析:本题主要考查按结构数组元素方式引用结构成员。结构体变量的成员

引用方法有3种:①结构体变量名.成员名;②指针变量名,成员名;③产指针

变量名).成员名。因为p是指针变量,所以应该将地址值赋给p。

12、时于循环队列,下列叙述中正确的是()。

A、队头指针是固定不变的

B、队头指针一定大于队尾指针

C、队头指针一定小于队尾指针

D、队头指针可以大于队尾指针,也可以小于队尾指针

标准答案:D

知识点解析:循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作

要进行变化。因为是循环利用的队列结构,所以队头指针有时可能大于队尾指针,

有时也可能小于队尾指针。

13、下面描述中正确的是()。

A、好的软件设计应是高内聚低耦合

B、内聚性和耦合性无关

C、内聚性是指多个模块间相互连接的紧密程度

D、耦合性是指一个模块内部各部分彼此结合的紧密程度

标准答案:A

知识点解析•:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适

当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合

理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块

之间的耦合应尽可能的低,模块的内聚度应尽可能的高。故本题答案为A选项。

14、有以下程序段charch;intk:ch='a';k=12;printf("%c»%d,",ch,ch,

k);prinlf("k二%d\n",k);已知字符a的ASCH十进制代码为97,则执行上述程

序段后输出结果是()。

A、因变量类型与格式描述符的类型不匹配输出无定值

B、输出项与格式描述符个数不符,输出为零值或不定值

C、a,97,12k=12

D、a,97,k=12

标准答案:D

知识点解析:在用基本输出函数printf时,格式说明与输出项的个数应该相同。如

果格式说明的个数少于输出项的个数,多余的输出项不予输出;如果格式说明个数

多于输出项个数,则对于多余的格式项输出不定值或O。

15、判断char型变量cl是否为小写字母的正确表达式为()。

A、'a'V=clv='z'

B、(c1>=a)&&(c1<=z)

C、(/>=clII(NVtcl)

D、(cl>=,a,)&&(cl<=,z,)

标准答案:D

知识点解析:C语言规定,字符常量在程序中要用单引号括起来。首先判断cl是

否为小写字母的主要条件cl>=匕,和cl<=,/是逻辑与关系,其次选项A)的这种

形式C语言中没有,所以选项D)正确。

16>若有以下定义:intx[10],*pt=x;则对x数组元素的正确引用是()。

A、pt+3

B、*&x[10]

C、*(pt+10)

D、*(x+3)

标准答案:D

知识点解析:没有A选项的引用形式。*与&放在一起作用抵消,所以B选项借

误,最大只能引用到x[9|。*(pl+i)表示引用指针pl所指元素后的第i个元素,所以

c选项错误,最大只能为*(pt+9)。因此D选项正购。

17、C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的

外部指的是()。

A^冠以关键字extern

B、位置在函数体外部

C、作用范围是全程的

D、位置在函数的外部

标准答案:D

知识点解析:C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识

符的特征。

18、以下关于typedef的叙述错误的是

A、用typedef可以增加新类型

B、typedef只是将已存在的类型用一个新的名字来代表

C、用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名

D、用typedef为类型说明一个新名,通常可以增加程序的可读性

标准答案:A

知识点解析:typedef并不是增加了新类型,而是用一个新名字替代已存在的类

型,不能为变量说明一个新名,使用lypedef可以增强移植性。所以A选项错误。

19>有以下定义:inta;longb:doublex,y;则以下选项中正确的表达式是

()o

A、a=x<>Y

a%(int)(x-y)

C、(a*y)%b

D、Y=x+y=x

标准答案:B

知识点解析:c语言中没有运算符,所以A选项错误。“%”运算符的两个操作

值必须为整型数据,所以B选项正确。a*y的结果为double型,所以C选项错

误。不能将值赋给像x+y这样的表达式,所以D选项错误。

20、在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是(),

A、逻辑设计

B、需求分析

C、详细设计

D、物理设计

标准答案:B

知识点解析:软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个

阶段。其中需求分析阶段常用的工具是数据流图和数据字典。

21>已定义以下函数:intfiin(int*p){retum*p;}fun函数的返回值是()。

A、一个整数

B、不确定的值

C、形参p中存放的值

D、形参p的地址值

标准答案:A

知识点解析:返回值为指针变量指向的数据,该数据已被定义为整型。因此A选

项正确。

22、有以下程序#includeVstdio.h>voidmain。{intn=2,k=l;while(!(k>

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

A、02

B、13

C、57

D、12

标准答案:D

知识点解析:在程序中整型变量n的初始值等于2,整型变量k的初始值等于1,

在执行while语句时,由于表达式k的值大于0为真,所以不再需要判断n++是否

为真,(k>0lln++)表达式的值为真。!(k>0lln++)表达式的值为假,所以while语

句中的条件不满足,循环语句不会执行,变量n的值也不会加I,所在输出变量k

和n的值是1和2o

23>设有某函数的说明为int*func(inta[10],intn);则下列叙述中,正确的是()。

A、说明中的a[10|写成@[]或*@效果完全一样

B、形参a对应的实参只能是数组名

C、func的函数体中不能对a进行移动指针(如a+-)的操作

D、只有指向10个整数内存单元的指针,才能作为实参传给a

标准答案:A

知识点解析:考查数组名作为函数参数。数组名作为函数参数时,只传递数组的首

地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数

组和实参数组长度也可以不同,选项D)错;a[10|.a[]、*a做形参都是接受实参

数组首地址,效果一样,A)正确。传递给形参的实参可以是数组名,还可以是指

向该数组的指针变量,选项B)错。数组名可以看做一个指针常量,对其进行自加

自减运算相当于指针变量的自加自减,选项C)错,答案选A)。

T

24、有二三个关系R、S和T如下:I-$

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

A、自然连接

B、交

C、投影

D、)[-

标准答案:A

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

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

以判断R和S做的是自然连接操作。

25有以下程序:#include<stdio.h>intfun(intx){intp;if(x==O||x==l)

return3;P=x-fun(x-2);rcturn(p);)main(){printf("%d\n",fun(9));}程序运

行后的输出结果是()。

A、4

B、5

C、9

D、7

标准答案:D

知识点解析:本题考查函数的递归调用。执行fun(9)后,fun(9)=9-(7(・5・(3・

f(l))))=7,故D选项正确。

26、以下选项中叙述错误的是()。

A、C程序函数中定义的自动变量,系统不自动赋确定的初值

B、在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语

句内

C、C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值

D、C程序函数的形参不可以说明为static型变量

标准答案:C

知识点解析:A选项描述正确,自动变量未赋初值,为随机值;B选项描述正确,

变量定义除在函数开始位置外,在复合语句开始也可以;C选项描述是错误的,函

数内的静态变量,只在第一次调用时候赋值,以后调用保留上次值;D选项描述也

正确,形参属于局部变量,占用动态存储区,而staljc型变量占用静态存储区c因

此C选项正确。

27、数据库设计中,描述数据间内在语义联系得到E-R图的过程属于()。

A、逻辑设计阶段

B、需求分析阶段

C、概念设计阶段

D、物理设计阶段

标准答案:C

知识点解析:数据库设计主要有需求分析、概念设计、逻辑设计和物理没汁四个阶

段。概念设计阶段使用E-R模型,将现实世界的信息结构统一由实体、属性以及

实体之间的联系来描述。

28、有如下程序:#include#includemain(){prmtf(u%d\n",strlen("O\t\nAOl1

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

A、8

B、9

C、7

D、10

标准答案:A

知识点解析:strlen是求字符串长度的函数,不包含字符串结束标志、(T,"0\t\

nA011\l”是一个长度为8的字符串,其中\t、\n、\1均为转义字符,长度是

1,因此输出结果是8。

29,有以下程序:#inchde<stdio.h>main(){chara=3,b=6,c;c=(aAb)<<2:

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

A、5

B、1

C、20

D、18

标准答案:C

知识点解析:八运算符为按位异或运算符,即0人1=1,1人0=1,”1=0,0八9二0,因此

a^bTOl在进行VV操伶,变为101002=2010,因此答案为C选项。

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

A、当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失

B、打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖

C、在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能

读到第1个数据

D、C语言中的文件是流式文件,因此只能顺序存取数据

标准答案:A

知识点解析:文件一旦使用完毕,应该使用关闭文件函数把文件关闭,以避免出现

文件数据丢失等错误,所以选项A正确;若使用fopen打开文件函数打开文件时,

指定打开方式为七1则可以向文件追加信息,而不是覆盖原文件内容,故B选项

错误;在文件被打开后,使用文件定位函数rewind或fseek函数,可以将文件指针

移到文件的任何位置,所以在写操作完成后,可以直接将文件指针定位到文件首,

接着读数据,而不需要先关闭文件,再打开读取,故C选项错误;使用文件定位

函数可以随机读写文件,故D选项错误。所以本题答案为A。

ABCAB

a15a1

b0r■b0

c43c4

31、有两个关系R、S如下:由关

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

A、并

B、投影

C、插入

D、自然连接

标准答案:B

知识点解析:投影运算是指对于关系内的域指定可引入新的运算。S是在原有关系

R的内部进行的,是由R中原有的那些域的列所组成的关系。

32、假如下列选项中的变量已正确定义并成功赋值,其中正确的表达式是()。

A、int(22.1%2)

B、n=y+m+5,++y

C^x=y*3=x+k

D、x=21%7.0

标准答案:B

知识点解析:求余运算符的左右两个数字都必须是整数,所以选项A和D错误,

另外,进行整型强制转化时正确的表达式是(int)x,而不是inl(x);选项C中不能将

x+k的值赋给y*3,所以选项C错误。选项B中涉及逗号运算符,它的级别最低,

因此,选项B表达式的执行过程是先将y+m+5的值赋给n,y值自加一次。

33、关丁C语言的输出语句:产,1001)的叙述中正确的是()。

A、程序运行时输出1001

B、程序运行时输出001

C、程序运行时输出100

D、指定的输出宽度不够,编译出错

标准答案:A

知识点解析:prinlf在输出时按照格式来输出,%3d表示输出3位整数,这里的3

是最小位数,即最少输出3位,但如果多于3位,则按照实际位数输出。

34、在关系代数运算中,有5种基本运算,它们是])。

A、并(U)、差(一)、交①)、除(?和笛卡儿积(x)

B、并(U)、差(一)、交①)、投影(九)和选择(o)

C、并(U)、交⑺)、投影(兀)、选择(o)和笛卡儿积(X)

D、并(U)、差(一)、投影(兀)、选择(")和笛卡儿积(X)

标准答案:D

知识点解析:并、差、笛卡儿积、投影和选择是5种基本的运算,其他运算即交、

连接和除,均可以通过5种基本的运算来表达。

35、下列程序的输出结果是()。#include<stdio.h>main(){structst{inty,x»

z;);union{longi;intj;chark;)un;printf("%d,%d\n",sizeof(structst),

sizeof(un));}

A、6,2

B、6,4

C、8,4

D、X,6

标准答案:B

知识点解析:本题考查的是结构和数组元素所占的字节数。题目中定义的结构st

因为包含x、y、z这3个元素,所以size(scmctst)=2+2+2=6;而联合体所占的字节

数,由于最后存入的元素会把前面存入的元素覆盖掉,所以联合体所占的字节数就

是占据最多存储单元的元素所占的字节数,sizeof(un)=sizeof(long)=4。

36、有两个关系R与S如下,由关系R和S得到关系T,则所使用的操作为

T

AAlBBlB2

a0f3k2

a0n2xl

b1f3k2

b1n2xl

A、并

B、自然连接

C、笛卡尔积

D、交

标准答案:C

知识点解析:用于查询的3个操作无法用传统的集合运算表示,引入的运算为投影

运算、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及自然连接等。并:

RS是将S中的记录追加到R后面。交:RS结果是既属于R又属于S的记录组成

的集合。上述两种操作中,关系R与S要求有相同的结构,故A、D选项错误。

自然连接:去掉重复属性的等值连接。自然连接要求两个关系中进行,比较的是相

同的属性,并且进行等值连接,本题中结果T应为空,B选项错误。若T为笛卡尔

积,结果为5元关系,元组个数为4,且计算结果与题目相符,C选项正确。

37、有如下程序#include<stdio.h>main(){charch='M';while(ch!='K'){ch—:

putchar(ch);)printf(',\nH);}程序运行后的输出结果是

A、MN

B、LK

C、0P

D、MM

标准答案:B

知识点解析:字符之间做加减法,是用其ASCII码进行加减,但是不能超过范围

0-255,否则不是合法的字符。while循环语句一般形式为:while(表达式)(循环

体},执行过程为,首先判断表达式,成立(非0)则执行循环体,不成立(0)则

退出循环。程序执行过程为:定义字符变量ch=,M1判断ch!=1C成立,

ch='L',输出L;判断ch!=1C成立,ch='K',输出K;判断ch!=K,不成立,退

出循环。程序运行后的输出结果是LK,B选项正确。

38、软件生命周期是指

A、软件产品从提出、实现、使用、维护到停止使用退役的过程

B、软件的需求分析、设计与实现

C、软件的开发与管理

D、软件的实现和维护

标准答案:A

知识点解析•:通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程

称为软件生命周期,A选项正确。

39、某循环队列的存储空间为Q(l:m),初始状态为front二rear=m。现经过一系列的

入队操作和退队操作后,front=m-l,rear=m,则该循环队列中的元素个数为

A、m-1

B、1

C^m

D、0

标准答案:B

知识点解析:循环队列长度为m,由初始状态为front=rear=m可知此时循环队列为

空。入队运算时,首先队尾指针(rear)进1(即rear-1),然后在rear指针指向的位

置插入新元素。特别的,当队尾指针rear=m+1时,置rear=l。退队运算时,持头

指针(front)进1(即front+1),然后删除front指针指向的位置卜的元素,当排头

指针front=m+1时,置fronts。从排头指针front指向的后一个位置直到队尾指针

rear指向的位置之间所有的元素均为队列中的元素,则该循环队列中的元素个数为

o故选择A选项.

40、一名演员可以出演多部电影,则实体演员和电影之间的联系是

A、多对多

B、一对一

C、多对一

D、一对多

标准答案:A

知识点解析:实体集之间通过联系来建立联接关系分为三类:一对一联系

(1:1)>一对多联系(l:m)、多对多联系(m:n)。由于一名演员可以出演多部

电影,而一部电影必定有多个演员参演,则实体演员和电影之间的联系属于多对

多。故选A选项.

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

41、函数fun的功能是进行数字字符转换。若形参ch中是数字字符U〜,夕,则,0,

转换成‘夕,’厂转换成,8、’2,转换成,7、……,’夕转换成XT;若是其他字符则保

持不变;并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内

容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下

的BLANK1.C中。不得增行或删行,也不得更改程序的结构!include/

1fun(charch){/

**********found*****本****/jf(ch>=,0,&&2)/**********fbund**********

/return'9'-(ch-3);returnch;msin(){charcl,c2;Printf("\nThe

result:\n");cl='2';c2=fun(cl);printf(Hcl=%cc2=%c\n",cl,c2);

cl='8‘;c2=fun(cl);printf("cl=%cc2=%c\n",cl,c2);cl='a';c2=fun(cl):

printf("cl=%cc2=%c\n",cl,c2);)

标准答案:(l)char(2)ch<=,9,(3)90f

知识点解析:第一空:由主函数内fun函数的调用加1=2;c2=fun(cl):",而cl

和c2是char变量,可知fun函数的返回值类型是char,故第一空处补充返回值类

型应为“char”。第二空:数字字符是U〜,夕,因此数字字符必须ch>=,(T.且

chv=W,故第一空处应为chv=W0第三空:数字字符转换规则是:U转换

成'9',T转换成’8',2转换成7,……,,9'转换成'0',即返回值为9・(ch-,0'),

故第三空处应为“‘0'”。

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

42、下列给定程序中函数fun的功能是:将p所指字符串中的所有字符复制到b

中,要求每复制三个字符之后插入一个空格。例如,若给a输入字符串:

ABCDEFGKHIJK,调用函数后,字符数组b中的内容为:ABCDEFGHIJKo请

改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件

M0DI1.C中,不得增行或删行,也不得更改程序的结构。#include<stdio.h>

voidfun(char*p,char*b){inti,k=0;while(*p){i=l;while(i<=3&&*p){/

**********found**********/b[k]=p;k++;P++;i++;)if(*p){/

**********found**********/b[k++]="“;}}b[k]=>\0,:)main(){chara[80],

b|80|;printf("Enterastring:");gets(a);printf("Tlieoriginalstring:");puts(a);

fun(a,b);printf(u\nThestringafterinsertspace:');puts(b);printf("\n\n");}

标准答案:⑴b[k]=*p;(2)b[k尸,;k++;o

知识点解析:本题考查:指针类型变量作为函数的参数,函数的参数不仅可以是整

型、实型、字符型等数据类型,还可以是指针类型。它的作用是将一个变量的地址

传送到另一个函数中。C语言中为了表示指针变量和它所指向的变量之间的关

系,在程序中用"”符号表示“指向”,例如,pointer代表指针变量,而*pointer是

pointer所指向的变量。

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

43、N名学生的成绩己在主函数中放入一个带头节点的链表结构中,h指向链表的

头节点。请编写函数fun,其功能是:求出平均分,并由函数值返回。例如,若学

生的成绩是:8576698591726487,则平均分应当是:78.625。注意:部分源程序

在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数

fun的花括号中填入你编写的若干语句。#include<stdio.h>#include<stdlib.h

>#defineN8structslisl{doubles;structslist*next:);typedefstructslist

STREC;doublefun(STREC*h){)5TREC*creat(double*s){STREC*h,*p,*q;int

i=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;while(i<N)

{q=(STREC*)malloc(sizeof(STREC));q->s=s[i];i++;p->next=q;p=q;)p->

next=0:returnh:)outlist(STREC*h){STREC*p;p=h->next:printf("head"):do

{printf("->%4.IF,p->s);p=p->next;)while(p!=0);printfC\n\n'r);)

main(){doubles[N]={85,76,69,85,91,72,64,87},ave;voidNONO();

STREC*h;h=creat(s);outlist(h);ave=fun(h):printf(Have=%6.3f\n",ave);

NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出

数据,关闭文件。*/FILE*in,*=out;inti,j;doubles[N],ave;STREC*h;

in=fopen("in.dat",nr"):out=fopen("out.dat","w"):for(i=0:i<10:i++)

{for(j=0;j<N;j++)fscanf(in,"%If,",&s|j]);h=ereat(s);ave=fun(h);

fprinff(out,"%6.31f\n",ave);)fclose(in);fclose(out);}

标准答案:doublefun(STREC*h){doubleave=0.0:STREC*p=h->next:

while(p!=NULL){ave=avej+p->s;p=p->next;Jreturnave/N:}

知识点解析:本题考查:链表的操作,对链表的主要操作有以下几种:建立链表、

结构的查找与输出、插入一个结点、删除一个结点。解析题目要求求链表中数据域

的甲均值,应首先使用循环语句遍历链表,求各结点数据域中数值的和,再对和求

平均分。遍历链表时应定义一个指向结点的指针p,因为“头结点”中没有数值,所

以程序中让p直接指向“头结点''的下一个结点,使用语句STREC*p=h->nexto

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

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

1>有以下程序:#include<stdio.h>main(){intj;for(i=3;i>l;i------)

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

()。

A、234345

B、43254345

C、233423

D、4534

标准答案:D

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

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

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

2、为了使模块尽可能独立,要求()。

A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强

B、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱

C、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱

D、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强

标准答案:B

知识点解析:系统设计的质量主要反映在模块的独立性上。评价模块独立性的主要

标准有两个:一是模块之间的耦合,它表明两个模块之间互相独立的程度;二是模

块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地

弱,即模块尽可能独立,而要求模块的内聚程度尽量地高。

3、对于循环队列,下列叙述中正确的是()。

A、队头指针是固定不变的

B、队头指针一定大于队尾指针

C、队头指针一定小于队尾指针

D、队头指针可以大于队尾指针,也可以小于队尾指针

标准答案:D

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

针(from)指向队头元素的前一个位置。在循环队列中,一般情况下rear>fronl,当

存储空间的最后一个位置被使用,而新元素要入队时.如果存储空间的第一个位置

空闲,便可将元素插入到第一个位置,此时存储空间的第一个位置作为队尾,便有

front>rearo

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

A、工具

B、过程

C、方法

D、环境

标准答案:D

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

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

个环节的控制、管理。

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

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

a=b=c+l;

C>a=(b=4)+c:

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

标准答案:A

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

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

6、定义结构体数组structStu{intnum;charname[20];x[5]={l,"ZHAO",2,

"QIAN",3,"SUN",4,"LEE",5,"ZHOU"J;for(i=l;i<5;i++)pnntf("%d%

c",x|i].num,x|i].name⑵);程序执行后的输出结果是()。

A、2A3N4E5O

B、1H213U4E

C、IA2N3E4O

D、1A2N3E4O

标准答案:A

知识点解析:本题主要考查结构体数组。x[i].num是结构体x[i]中的num成员,

x[i].name[2]是结构体x[i]中name成员的第3个元素。第一次循环,i=l»输出

x[l].num,x[“.name[2]的值,即2A;笫二次循环,i=2,输出x[2].num,

x[2|.name⑵的值,即3N;第三次循环,i=3,输出x[3].num,x|3|.name⑵的

值,即4E:第四次循环,i=4,输出x[4].num,x|4].name⑵的值,即50。

7、在软件生产过程中,需求信息的来源是()。

A、程序员

B、项目经理

C、设计人员

D、软件用户

标准答案:D

知识点解析:软件需求是指用户对目标软件系统在功能、性能、设计约束等方面的

要求,是由用户提出的。

8、数据库管理系统是

A、操作系统的一部分

B、在操作系统支持下的系统软件

C、一种编译系统

D、一种操作系统

标准答案:B

知识点解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中

的数据组织、数据操纵、数据维护、控制及保护和提供数据服务等,是一种在操作

系统支持下的系统软件,因此本题答案为B。

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

A、123

B、#256

C^a.55

D、abhjl_2_3

标准答案:D

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

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

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

A、intN;scant(u%d",&N);intb[NJ;

B>floata|]={1,6,6,0,2);

C、#defineS10inta[S];

D、#defincS10inta[S+5];

标准答案:A

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

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

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

11、以下程序的输出结果是()□#include<stdio.h>intm=13;intfun(intx,int

y){intm=2;rcturn(x*y-m);)main(){inta=7,b=6;printfV'%d'',fun(a,b)/

m);)

A、1

B、3

C、7

D、10

标准答案:B

知识点解析:本题考查的是函数调用时的参数的作用域。在函数调用时,当全局变

量和局部变量的名称相同时,在局部变量的作用域内.局部变量起作用.因而在

fim函数内m的应该等于2,main中的m为13,所以返回值为7x6-2=40,而

fun(a,b)/m值为40/13=3。

12^有以下程序段:intm=33,n=66;m=m'n;n=n'm;m=m'n;执行上述

语句后,m和n的值分别是()。

A、m=66,n=33

m=33,n=66

C、m=66»n=66

D、m=33,n=33

标准答案:A

知识点解析:m=m>1;n=n-m;m=m"n;语句实现了m和n的交换。故答案为

Ao

13、若已定义:inta[]={O,l,2,3,4,5,678,9},*p=a,i;其中OS区9,则对a数组

元素不正确的引用是()。

A、a[p-a]

B、*(&a|i|)

C、p[i]

D、a[10]

标准答案:D

知识点解析:此题考查对一维数组的引用。对于己定义的数组a[M],数组元素的

正确引用必须满足下标小于M且为正整数。选项D中下标值出现溢出。

14、下列关于栈和队列的描述中,正确的是()。

A、栈是先进先出

B、队列是先进后出

C、队列允许在队头删除元素

D、栈在栈顶删除元素

标准答案:D

知识点解析:栈实际也是线性表,只不过是一种特殊的线性表。栈是只能在表的一

端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈

底。队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队

头,允许插入的一端叫做队尾。

15^若有以下语句:typedefstructS{intg;charh;}T:以下叙述中正确的是

()。

A、可用s定义结构体变量

B、可用T定义结构体变量

C、S是struct类型的变量

D、T是slruclS类型的变量

标准答案:R

知识点解析:本题考查typcdcf重新声明一种结构体类型,那么T为结构体类型,

而不是结构体变量,所以B选项正确。

16、下列选项中,不属于模块间耦合的是()。

A、内容耦合

B、异构耦合

C、控制耦合

D、数据耦合

标准答案:B

知识点解析:耦合可以分为下列几种,它们之间的耦合度由高到低排列:内容耦

合一一若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。公共

耦合一一若一组模块都访问同一全局数据结构,则称为公共耦合。外部耦合一一

若一组模块都访问同一全局数据项,则称为外部耦合。控制耦合一一若一模块明

显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦

合。标记耦合一一若两个以上的模块都需要其余某一数据结构的子结构时,不使

用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。数

据耦合一一若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参

数,则这两个模块为数据耦合。非直接耦合一一若两个模块没有直接关系,它们

之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦

合,这样的耦合独立性最强。

[石(«>0)

17、有以下计算公式若程序前面已在命令行中包含math,h文

件,不能够正确计算上述公式的程序段是()。

A、if(x>=O)y=sqrt(x);if(x<O)y=sqrt(-x);

B、if(x>=O)y=sqrt(x):elsey=sqrt(-x);

C>y=sqrt(x);if(x<O)y=sqrt(-x);

D、y=sqrt(x>=O?x:-x);

标准答案:C

知识点解析:本题重点考查的知识点是:sqrt()函数。sqrt()函数的作用是计算平方

根,要求输出的参数x必须大于等于0。题目公式的要求是无论x大于等于0还是

小于0,y的值都为x绝对值的开方。选项C中调用了sqrt(x)函数,而没有判断x

的正负,则y=sqrt(x)会出错。

18、在下列选项中,没有构成死循环的程序段是(),

A、inti=100;for(;;){i=i%10+l;iffi>10)break:)

while(l);

C>intk=0;do{++k;)while(k<=10);

D^ints=12;while(s);—s;

标准答案:C

知识点解析:本题考查死循环的知识。选项A中,for循环没有任何控制语句就会

一直执行下去,所以不可能通过控制表达式的值结束循环。循环体内,i=i%10+l

这个表达式的值永远不会大于10,所以永远不会跳出循环,是死循环;选项B

中,while中表达式永远是非0,不会结束循环;选项C中,当k>10时,结束循

环;选项D中,while(s);后面没有任何表达式而是直接加了一个分号,会一直执

行,形成死循环。

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

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

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

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

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

标准答案:A

知识点解析:暂无解析

20、有以下程序段:charnanae|20];intnum;scanf{"name=%shum=%d”,

name,&num);当执行上述程序段,并从键盘输入:name=lilinum=1001〈回车,后

name的值为()。

A、name=Lilihum=1001

B、name=Li!i

C^Lilinum=

D、Lili

标准答案:D

知识点解析:在输入格式控制"namc=%num=%d”中,普通字符"namc=num="在输

入时要原样输入,而格式控制符%5和%(1对应各自的输入项,将输入的数据赋给

相应的输入项。本题中输入“皿1^・二口1加1^=1001<回车>”后,将字符串Lili赋给字

符数组name,整数1001赋给变量num。因此D选项正确。

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

a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1)},i,k,t;for(i=0;i<3;i++)for(k=i+l;

k<4;k++)if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}for(i=0;i<4;

i++)printf("%d;*,a[0][i]);}程序运行后的输出结果是

A、1,126,

B、6,2,1,1,

C、64,3,2,

D^2,3,4,6,

标准答案:C

知识点解析:首先对二维数组进行赋值操作,a[0]⑼、a|0][l]...........a[3][2]>

a[3][3]的值为1、4........6、1。通过for嵌套循环语句和if条件语句,对二维数组

对角线元素进行由大到小的排序操作,程序最后通过for语句输出二维数组第1行

的4个元素。因此C选项正确。

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

A、chars[];s="HELLO!”;

B、charts;s={"HELLO!”};

C、chars[10];s=:"HELLO!

D、charts;s=nHELLO!";

标准答案:D

知识点解析:本题考查数组和字符串的赋值。选项A)中数组s没有明确其大小就

赋值是错误的。选项B)中不能有大括号,选项C)中的写法应该为

23、有以下程序:#include<stdio.h>intnew_div(doublea,doubleb){returna/

b+0.5;)main(){printfC%d%new_div(7.8,3.1));}程序运行后的输出结果

是()。

A、1

B、2

C、3

D、0

标准答案:C

知识点解析:new_div()的返回值是ini类型,因此,a/b+O.5(其中a,b均为

double类型)的小薮部分被将被截断。经计算,7.8/

3.1+0.5=2.516+0.5=3.016,故打印的结果为3。故答案为C选项。

24、有以下程序:#include<stdio.h>intf(intn);main(){inta=3,s;S=f(a);

s=s+f(a);printf("%d\n'*,s);)intf(intn){statieinta=l;n+=a++:returnn;)

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

A、7

B、8

C、9

D、10

标准答案:C

知识点解析:首先main函数中的局部变量a和f()函数中的静态局部变量a的作用

域都只限在其所在的函数中,相互之间不影响,看作两个小同的变量即可。另外,

f()函数中的静态局部变量a只在第一次调用f()函数时初始化一次,其他调用都会

保留,一次渊用结束时的值。分析main函数可知,笫一次调用时将f(a)的返回值

赋给s,所以语句可以改写为:s=f(a)+f(a),即main函数中调用两次f(a),传入的

参数a取值都为3,第一次调用时,静态局部变量初始化为1,所以n=4并返回,a

自增为2;第二次调用时静态局部变量a取上一次调用结束时的值2,所以n=5并

返回,a自增为3,所以在main。函数中,s=4+5=9,所以函数执行完输出结果为

9,答案为C。

25、以下程序拟读取一个姓氏,查找其对应的年龄并输出:#include<stdio.h>

#include<siring.h>#include<stdlib.h>structperson{charname[10|;int

age:):sfnietpersongroup[6]={"zhang",18,"wang".20,"li",19."zhao",

18,"liu".19),*p;main。{inti,flag=0;p=(structpcrson*)malloc(sizcof(struct

person));gets(&p->name);for(i=0;i<6;i++)if((stremp(p->name,

group[i].name)==0)){printf("%d\n",group[i].age);flag=l;)

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

A、gets(&p->name);

p=(struetperson*)malloc(sizeof(struetperson))

C、if((stremp(p->name.group[i].name)==0))

D、printf(H%d\n",group[i].age)

标准答案:A-:

知识点解析:语句gcts(&p->name)中,gets的参数应该是成员变量name数组的首

地址,而&p->name是首先获取数组name的首地让,然后再对首地址取地址符,

所以这是错误的,正确参数应该是:gets(p->namc):,故答案选A。

26、下面不属于软件测试实施步骤的是

A、集成测试

B、回归测试

C、确认测试

D、单元测试

标准答案:B

知识点解析:软件测试主要包括单元测试、集成测试、确认测试和系统测试。

27、设有以下函数:inifun(intn,chads){……}则下面对函数指针的定义和赋值

均正确的是()。

A、mt(*pf)(int,char);pt=&tun;

B、int*pf();pf=fun;

C、int*pf();*pf=fun:

D>int(*pf)(int,char*);pf=fun;

标准答案:D

知识点解析:函数的参数可以是指针类型。它的定义形式为void(*pf)(),原函数定

义的形参变量是一个整数型和一个字符指针型,所以答案D正确。

28、以下叙述中正确的是

A、数组下标的下限是1

B、数组下标的下限由数组中第一个非零元素的位置决定

C、数组下标的下限由数组中第一个被赋值元素的位置决定

D、charcl,c2,*c3,c4[40];是合法的变量定义语句

标准答案:D

知识点解析:数组下标的下限是0。因此D选项正确。

29、以下叙述中正确的是

A、逻辑”或“(即运算符||)的运算级别比算术运算要高

B、C语言的关系表达式:0<*<10完全等价于:(0<乂)&&(乂<10)

C、逻辑“非"(即运算符!)的运算级别是最低的

D、由&&构成的逻辑表达式与由||构成的逻辑表达式都有“短路”现象

标准答案:D

知识点解析:B选项中,条件是x>0并且xV10,表达式(x>0)&&(xV10)的值是

1或0。但是OVxVIO的执行顺序:先执行OVx是否为真,返回值为0或1,再

执行y<10,表达式的结果为1;C选项中,逻辑“非"(即运算符!)的运算级别是

最高的;A选项中,算术运算符优先级较高,关系和逻辑运算符优先级较低。因此

D选项正确。

30、若有inta=2,b=l,c;则c=a八(bVV2);语句执行后c的值为()。

A、6

B、7

C、8

D、9

标准答案:A

知识点解析:<<的位操作,1的二进制码是00000001,向左移动2位后是

00000100,与2进行异或操作,结果是6。

31、若有说明和语句:charstr[]="Hello",*p;p=str;,则此时*(p+5)中的值为

A、\(r

B、

C、'o'的地址

D、不确定的值

标准答案:A

知识点解析:定义字符数组并为其初始化,sir数组前5个元素为Hello,第六个元

素自动赋值为“\0"。定义指针使等于字符串首地址,p+5指向字符串第六个元素。

A选项正确。

32、软件工程的三要素是

A、方法、工具和过程

B、建模、方法和工具

C、建模、方法和过程

D、定义、方法和过程

标准答案:A

知识点解析:软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工

具、文档、实践标准和工序。软件工程包含3个要素:方法、工具和过程。A选项

正确。

33、某棵树的度为4,且度为4、3、2、I的结点数分别为1、2、3

温馨提示

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

评论

0/150

提交评论