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

下载本文档

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

文档简介

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

9套)

(共381题)

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

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

1、下列关于算法复杂度叙述正确的是

A、最坏情况下的时间复杂度•定高于平均情况的时间复杂度

B、时间复杂度与所用的计算工具无关

C、对同一个问题,采用不同的算法,则它们的时间复杂度是相同的

D、时间复杂度与采用的算法描述语言有关

标准答案:B

知识点解析:算法的时间复杂度是指执行算法所需要的计算工作量,它与使用的计

算机、程序设计语言以及算法实现过程中的许多细节无关,B选项正确,D选项错

误。最坏情况下的时间复杂度可以与平均情况的时间复杂度相同,A选项错误。不

同的算法时间更杂度一股不相同,C选项错误。

2、设有栈S和队列Q,初始状态均为空。首先依次将A,B,C,D,E,F入栈,然后从

栈中退出三个元素依次入队,再将X,Y,Z入栈后,将栈中所有元素退出并依次入

队,最后将队列中所有元素退出,则退队元素的顺序为

A、DEFXYZABC

B、DEFXYZABC

C、FEDXYZCBA

D、DEFZYXABC

标准答案:B

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

行。队列是指允许在一端进行插入,而在另一端进行删除的线性表。将

A,B,C,D,E,F入栈后,栈中元素为ABCDEF,退出三个元素入队,队列元素为

FED,将X,Y,Z入栈后栈中元素为ABCXYZ,全部入队后,队列元素为

FEDZYXCBA,故B选项正确。

3、下列叙述中正确的是

A、有两个指针域的链表称为二叉链表

B、循环链表是循环队列的链式存储结构

C、带链的栈有栈顶指针和栈底指针,因此又称为双重链表

D、结点中具有多个指针域的链表称为多重链表

标准答案:D

知识点解析:双向链表与二叉链表均是有两个指针域的链表,A选项错误。在单链

表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指

针域的值由NULL改为指向表头结点,这样的链表称为循环链表。循环队列是队

列的一种顺序存储结构。循环链表与循环队列是两种存储结构,B选项错误。双向

链表结点有两个指针域,指向前一个结点的指针和指向后一个结点的指针,而带链

的栈是单链表形式,C选项错误。故正确答案为D选项。

4、某二叉树共有845个结点,其中叶子结点有45个,则度为1的结点数为

A、400

B、754

C、756

D^不确定

标准答案:C

知识点解析:在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点

中最大的度称为树的度。对任何一棵二义树,度为0的结点(即叶子结点)总是比

度为2的结点多一个。二叉树共有845个结点,度为0的结点有45个,度为1的

结点数为nl,度为2的结点数为n2,则845=45+nl+n2,且45=n2+l,则nl=756,

C选项正确。

5、软件需求分析阶段的主要任务是

A、确定软件开发方法

R、确定软件开发T具

C、确定软件开发计划

D、确定软件系统的功能

标准答案:D

知识点解析:需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写

需求规格说明书和需求评审,包括确定软件系统的功能,D选项正确。A、B、C

选项均为开发阶段工作。

6、下面对软件测试描述错误的是

A、严格执行测试计划,排除测试的随意性

B、随机地选取测试数据

C、随机地选取测试数据

D、软件测试是保证软件质量的重耍手段

标准答案:B

知识点解析:在测试之前制定测试计划,并严格执行,测试用例的选择不可随意,

应选择有代表性的,尽可能发现迄今为止尚未发现的错误,A选项叙述正确,B选

项叙述错误。测试根本目的是尽可能多地发现并排除软件中隐藏的错误,C选项叙

述正确。软件测试是保证软件质量、可靠性的关键步骤,D选项叙述正确。故正确

答案为B选项。

7、结构化程序的三种基本控制结构是

A、顺序、选择和重复(循环)

B、过程、子程序和分程序

C、顺序、选择和调用

D、调用、返回和转移

标准答案:A

知识点解析:结构化程序的三种基本控制结构:顺序、选择和重复,故A选项正

确。

8、数据库中对概念模式内容进行说明的语言是

A、数据定义语言

B、数据操纵语言

C、数据控制语言

D、数据宿主型语言

标准答案:A

知识点解析:数据库管理系统为完成主要功能提供了相应的数据语言,它们是:数

据定义语言,该语言负责数据的模式定义与数据的物理存取构建;数据操纵语言,

该语言负责数据的操纵,包括查询与增、删、改等操作;数据控制语言,该语言负

责数据完整性、安全性的定义与检查以及并发控制、故隙恢复等功能。故A选项

正确。

9、某个工厂有若干个仓库,每个仓库存放有不同的零件,相同零件可能放在不同

的仓库中。则实体仓库和零件间的联系是

A、多对多

B、一对多

C、多对一

D、一对一

标准答案:A

知识点解析•:一般来说,实体集之间必须通过联系来建立联接关系,分为三类:

对一联系(1:1)、一对多联系(l:m)、多对多联系(m:n)。每个仓库存放有不

同的零件,相同零件可能放在不同的仓库中,故实体仓库和零件间的联系是多对

多,A选项正确。

RST

ABCABC

a12d32

b21c31□JLO

c31f47

e45

d39

则由关系R和S得到关

系T的操作是

A、交

B、差

C、并

D、选择

标准答案:A

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

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

择,从关系中找出满足给定条件的元组的操作称为选择,题1=1中无给定条件,故D

选项错误。差:R-S结昊是属于R但不属于S的记录组成的集合,T中元组“c32”

同时属于R和S,B选项错误。并:RUS是将S中的记录追加到R后面,T中元组

少于R,故C选项错误。交:RAS结果是既属于R又属于S的记录组成的集合,

与题目中结果相符,故A选项正确。

11、以下叙述正确的是

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

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

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

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

标准答案:A

知识点解析:计算机认设自己的母语-机器语言,即0和1代码组成的二进制指令或

数据,故A选项正确,B选项错误。C语言是一种高级语言,计算机不能直接运行

C源程序和高级语言编写的源程序,C和D选项错误。

12、若有C语言表达式2+3*4+7/3,以下选项中叙述正确的执行顺序是

A、先执行3*4得12,再执行7/3得2.5,最后执行2+12+2.5得16.5

B、先执行3*4得12,再执行2+12得14,再执行7/3得2,最后执行14+2得16

C、先执行7/3得2,再执行3*4得12,再执行12+2得14,最后执行2+14得16

D、先执行2+3得5,再执行5*4得20,再执行20+7得27,最后执行27/3得9

标准答案:B

知识点解析:首先,在C语言中,乘除法优先级要高于加减法,其次,除法运算

符“/“两边参加运算对象都是整数,运算结果要取整,故排除A,D选项;C语言

中,因为运算符“*“和”/"都满足从左到右的运算规贝J,故应先计算3*4=12因此C

排除,答案为B选项。

13、若有定义:charc;intd;程序运行时输入:c=l,d=2V回车>,能把字符1输入

给变量c、整数2输入给变量d的输入语句是

A、scanf(*'c=%dd=%d';&c,&d);

B、scanf("c=%cd=%d'\&c,&d);

C、scant("c=%d,d=%d';&c,&d);

D、scanf(nc=%c,d=%d'\&c,&d);

标准答案:D

知识点解析:scanf()函数中,%d对应的参数是整数型地址,%c对应参数为

char型地址,A,C选项错误;因为程序运行时输入c=l,d=2〈回车>,所以scanf()

函数存在非格式字符c=,d=,所以B选项错误,故答案为D选项。

14、以下选项中,与n=i++完全等价的表达式是

A、n=ij=i+l

B、n+=i+l

C、i=i+l,n=i

D、n=++i

标准答案:A

知识点解析:运算符放在变量后面时二表示变量先参与其他操作,再完成加

1,故表达式口与++运算顺序是先将i赋值给n,再将i+1赋值给i,因此答案为A

选项。

15>设有定义:intn=1234;doublex=3.1415;则语句printf("%3d,%1.3i\n”,n,x);

的输出结果是

A、1234,3.142

B、123,3.142

C、1234,3.141

D、123,3.141

标准答案:A

知识点解析:函数print©中,%md指输出带符号的十进制整数,给定最小宽度为

m位,不足m位左端补空格,超过m位按实际位数输出,%.nf表示以小数形式输

出实数,小数占n位,对应题目,答案为A选项。

16、有以下程序#include<stdio.h>main(){inta,b;for(a=0;a<3;a++)

{scanf("%d",&b);switch(b){default:printf("%d,",++b);case1:printf("%d,M,++b);

case2:printf(n%d,n,++b);))}执行时输入:123V回车>,则输出结果是

A、2,2,344,4,

B、2,3,4,

C、2,3,3,4,56

D、2,3,4,3,44

标准答案:C

知识点解析:程序在执行switch语句时,根据switch后面表达式的值找到匹配的

入口标号,执行对应的case语句,之后不再进行判断,继续执行此case后面的语

句,并且各个case和default的出现次序不影响执行结果,即题目中的default放在

开始位置,与放在最后是一样的结果;运算符”++”放在变量前面时,表示将变量

+1,再参与其他操作。本题,第一次循环输入b=i,执行easel,输出2,再执行

case2,输出3,第二次循环输入b=2,执行ease2输出3,第三次循环,输入b=3,

没有case与其对应,故执行defauli输出b=4,接着执行case1:,输出5,再执行

case2,输出b=6,至此退出for语句。因此,最后输出为2,3,3,4,56,答案为C选

项。

17、设变量m为floal类型,变量n为int类型,则以下能实现将m中的数值保留

小数点后两位,第三位进行四舍五入运算的表达式是

A、m=(m*100+0.5)/100.0

B、n=m*100+0.5,m=n/l00.0

C^n=m/l00+0.5,m=n*l00.0

D、01=111*100+0.5/100.0

标准答案:B

知识点解析:n是整型数,将浮点数赋值给整型变量需要丢弃小数位,所以若要保

留m的小数点后两位,需要将m乘以100,若要将m小数点后第三位四舍五入,

再需要加上0.5,然后赋给整型变量,所以n=m*100+0.5,接下来需要将m还原成

有两位小数的浮点数,除号两边操作数有一个是浮点数时,结果为浮点数,将

n/100.0赋值给m,得到m的值含两位小数,故答案为B选项。

18、有以下程序#include<stdio.h>main(){inta=1,b=I;for(;a—;)b—;

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

A、-1,0

B、0,0

C、-1,-1

D、1,1

标准答案:A

知识点解析:题干中语句for(;a-;),条件a-!=0先判断a!=0成立,则进入循环,

然后a减1,起始a=l不等于0,满足条件进入for循环,然后a自减1为0,b自

减1为0,继续循环;再跳回for语句时,a!=0不成立,不会进入循环,但是a也

要自减1为-1,循环结束;因此最后输出a=-l,b=0.因此答案为A选项。

19、若有定义:chars[30]={0};运行时输入:Thisisastring.V回车〉则以下不能

正确读入整个字符串:Thisisastring.到字符数组s中的语句组是

A、i=0;while((c=getchar())!=,\n,)s[i-H-]=c;

B、gets(s);

C、fbr(i=0;(c=getchar())!='\n';i++)s[i]=c;

D^scanf("%s'*,s);

标准答案:D

知识点解析:在使用格式符“%s”进行字符串的输入时,空格和回车(Enter)会被

读入,并且函数scanf以它们作为分隔符停止一个字符串的输入,因此答案为D选

项。

20、有如下程序#include<stdio.h>main(){inta=0,b=1;if(a++&&b++)

printf("TRUE");elseprintf(HFALSEH);printf(',_OUT:a=%d,b=%d\n,',a,b);}程序运行

后的输出结果是

A、FALSE_OUT:a=l,b=l

B、FALSE_OUT:a=0,b=2

C、TRUE_OUT:a=l,b=2

D、TRUE_OUT:a=0,b=l

标准答案:A

知识点解析:逻辑与运算符遵循“短路求值”策略,即只有在仅靠左操作数的值无法

确定该逻辑表达式的结果时,才会求解右操作数,表达式(a++&&b++)中,左操作

数a++的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b+-不

再求解,进入else分支执行,a的值十I,b不变,因此答案为A选项。

21、有如下程序#include<stdio.h>main(){inti,data;scanf("%d”,&data);for(i=0;

i<5;i++){if(i<data)continue;printf("%d-';i);|)程序运行时,从键盘输入:3<

回车》后,程序输出结果为

A、3-4-

B、1-2-3-

C、0-1-2-

D、0-1-2-3-

标准答案:A

知识点解析:从键盘输入3,即data=3,进入for语句,满足i<3时,运行

continue语句只结束本次循环,而不是终止整个循环的执行,当i加到3时,if条

件不满足,执行printf函数,输出3-,i再加到4,输出4-,i再加1等于5,退出

for循环,程序运行后结果是:“3-4」。因此答案为A选项。

22、有如下程序段for(i=0;i<10;i++)if(i<=5)break;则循环结束后i的值为

A、1

B、0

C、5

D、10

标准答案:B

知识点解析:if(iV=5)break语句,表示如果i<=5,执行break语句,跳出循环

程序,起始i=0满足if语句,则循环结束后i值为0,因此答案为B选项。

23、设有定义:inla=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选项。

24、有如下程序段for(i=0;i<10;i++)if(i>5)break;则循环结束后i的值为

A、10

B、5

C、9

D、6

标准答案:D

知识点解析:if(i>5)break;表示判断i值,如果大于5后,执行break语句,结束

循环程序,这里i=6,循环结束。囚此答案为D选项。

25、有以下程序段intx,i;for(i=l;i<=100;i++){scanf("%d",&x);if(x<0)continue;

printf("%4d\n",x);}下面针对上述程序段的描述正确的是

A、最多可以输出100个非负整数

B、当x<0时结束整个循环

C、当x>=0时没有任何输出

D、printf函数调用语句总是被跳过

标准答案:A

知识点解析:continue语句只结束本次循环,而不是终I卜整个循环的执行,因此R

选项错误;当x>=0时,程序执行printf("%4d\n”,x)语句,因此排除C,D选项,答

案为A选项。

26、关于地址和指针,以下说法正确的是

A、通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量

B、可以取一个常数的地址赋值给同类型的指针变量

C、可以取一个表达式的地址赋值给同类型的指针变量

D、可以取一个指针变量的地址赋值给基类型相同的指针变量

标准答案:A

知识点解析:常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不

可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C语言也不允许这

样做,编译会出错,B选项错误;表达式的值存储在临时变量中,内存中存在专门

用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言不允许这

样做,编译会出错,C选项错误;nJ以取一个指针变量的地址,但是指针变量的地

址属于指针,只能赋值给指针类型的指针变量,D选项错误。故答案为A选项。

27>有以下程序#include<stdio.h>#defineN4voidfun(inta[][N]){inti;for(i=0;i

<N;i++)a|0]|i]+=a|N-l]|N-I-i|;)main(){intx[N][N]={{1,2,3,4},{5,6,7,8),

{9,10,11,12},{13,14,15,16}},i;fun(x);for(i=0;i<N;i++)printf("%d,",x[i][i]);

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

A、4,7,10,13,

B、1,6,11,16,

C、17,6,11,16,

D、5,13,21,29,

标准答案:C

知识点解析:N=4,for(i=0,iVN,i++)printf(x[i皿);此语句输出x[0][0],x[l][l],

x|2]|2|,x[3][3],其中只有x[0][0]的值在fun函数中发生改变,在fun函数中,当

i=0时,x[0][0]=x[0][0]+x[3][3]=17,程序运行后的输出结果是:6。因此

答案为C选项。

28、关于C语言函数说明的位置,以下叙述正确的是

A、在函数说明之后对该函数进行调用,编译时不会出现错误信息

B、函数说明可以出现在源程序的任意位也,在程序的所有位置对该函数的调用,

编译时都不会出现错误信息

C、函数说明只能出现在源程序的开头位置,否则编译时会出现错误信息

D、函数说明只是为了美观和编译时检查参数类型是否一致,可以写也可以不写

标准答案:A

知识点解析:对被调用函数的说明有两种方式:外部说明和内部说明。在调用函数

内对被调函数所作的声明称为内部说明,也称为局部说明;在函数外进行的函数说

明称为外部说明,如果说明在程序最前端,外部声明又称为全局说明,因此B,C

选项错误:函数”说明“是指利用它在程序的编译阶段对调用函数的合法性进行全面

检查,因此D选项错误,答案为A选项。

29、以下叙述正确的是

A、不能在数组说明符的一对方括号中使用表达式

B、charcl,*c2,**c3,c4[2];是C语言的合法语句

C、数组下标的最小值可以是负值

D、若有数组定义intarray[5];则语句printf("%d”,a^•ay[1.23]);是合法的

标准答案:B

知识点解析:在B选项中,cl是字符型变量,c2是字符型指针变量,c3是指向字

符型指针的指针变量,c4[2]是一个一维字符数组,这些都是C语言的合法语句,

因此答案为B选项。

30、有以下程序#include<stdio.h>main(){inta=2,*ptr;plr=&a;*ptr=8;a

(*ptr)++;printf("%d,%d\nn,a,*ptr);(程序运行后的输出结果是

A、9,9

B、8,9

C、2,4

D、0,4

标准答案:A

知识点解析:题手中定义一个指针变晏ptr,再把a的地址值赋给ptr,此时a和*pt]

代表同一内存单元中的值,*plr=8表示把a和*plr的值修改为8,a=(*plr)++表示

把指针ptr对应地址单元里的值赋给a,再将ptr对应地址单元里的值加1,因此*

(ptr)值为9,同时a乜为9,因此答案为A选项。

31、有以3程序#include<stdio.h>main(){inii,*ptr;intarray[41={0J);for

(ptr=array,i=0;i<3;i++,ptr++){if(*ptr==0)putchar(,#5);elseputchar(,M,+*ptr);}

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

A、MO#

B、#F#

C、MMM

D、#N#

标准答案:D

知识点解析:for语句中把array数组首地址值赋给ptr,ptr十十表示每次执行完循环

体后,pu•指向下一数组元素,当指针指向值为0时,输出#,否则,M,再加上指针

对应数组值进行输出,当*ptr=l时,'M,+1=,N"结果输出为#N#,答案为D选

项。

32、有以下程序段:川01[2][3],(*可[3]加=17!;则以下对111数组元素的引用正确的是

A、(p+l)[0]

B、*(*(p+2)+l)

C、*(p[l]+l)

D、p[1]+2

标准答案:C

知识点解析:数组元素可表示为*(a[i]+j),因此,在定义数组m和指针变量p

后,*(p[l]+l)表示指向数组因此答案为C选项。

33、有以卜程序#include<stdio.h>char*a="you";char*b="Welcomeyouto

Beijing!";main(){char*p;p=b;while(*p!=*a)p++;printf("%s\n",p);}程序运行

后的输出结果是

A、youtoBeijing!

B、toBeijing!

C、WelcomeyoutoBeijing!

D、Beijing!

标准答案:A

知识点解析:程序首先定义两个字符串,a,b指针分别指向这两个字符串首地址,

再定义了一个指针P,把b指针指向的地址赋给了p指针后,判断p指针指向地址

的内容是否和a指针指向地址的内容相等,如果不是,则移动指针p+1,当p指向

*b字符串中的,y,时,和*a首地址元素相等,退出while语句,输出剩下字符串内

容,程序运行后的输出结果是“YouToBeiJing!”答案为A选项。

34>有以卜.程序#include<stdio.h>voidf(intx[],intn){if(n>1){printf("%d,",

,,>

x|n-l]);f(x,n-1);printf("%d,",x[n-l]);}elseprintf('%d,>x[0|);}main(){intz|3|=

(1,2,3};f(z,3);pnntf("\n'r);)程序运行后的输出结果是

A、3,1,3,

B、3,2,123,

C、1,2,3,123,

D、123,2』,

标准答案:B

知识点解析:本题考查了函数的递归调用,在main函数中调用f(z,3)后,系统进入

f()函数,随后进入if语句,输出x[2],再进入f()函数,输出x[l],再进入f函

数,输出x[0],随后结束返回输出上一个f()函数,输出程序运行后的

结果是:3,2,1,2,3o答案为B选项。

35有以卜程序#include<stdio.h>inta=2;intf(intk){staticintn;intm;m=n=

0;n++;a++;m++;k++;returnn+m+a+k;}main(){intk;fnr(k=0;kV2;k++)

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

A、6,8,

B、6,9,

C、6,6,

D、6,7,

标准答案:A

知识点解析:static定义一个静态分布变量,变量只会初始化一次,在for循环体内

调用f()函数输出,f()函数首先是将当前n,m,a,k加1后进行累加返回主函数输出,

第二次累加时,重新给m,n定义初始值为0,因此,两次输出分别为6,8,答案为

A选项。

36、有以卜程序#include<stdio.h>intsum(int*anay,intlen){if(len==1)return

array111;elsereturnarrayl1]+sum(array+l,len-1);)main(){intarray|5|={0,9,1,2},

res;res=sum(array,3);pnntf("%d\n,r,res);}程序运行后的输出结果是

A、27

B、11

C、8

D、12

标准答案:D

知识点解析:main函数中先定义一个数组array,调用sum(array,3)函数,形参

array指向数组首地址,形参len的值为3,在sum函数中,array[1]指向数组中元

素9,sum函数调用三次,完成功能是将数组array[I]+array[2]+array[3]累加后返

还给输出,累加后的值为12。因此,答案为D选项。

37、有以卜程序#include<stdio.h>main(){chars[10]="verygood1',*ps=s;ps=

"too";s[4]=”;puts(ps);}程序的运行结果是

A、too

B>verygood

C>very

D、good

标准答案:A

知识点解析:程序中定义指针ps后,将数组s首地址赋给ps初始化后,再使指针

ps指向字符串“too”的首地址,修改s[4](即字符g)不会改变ps的值,所以输出ps

的结果是"。0”,答案为选项A。

38、以下叙述中错误的是

A、函数中的形参属于局部变量

B、在函数内部定义的变量只能在本函数范围内使用

C、在函数外部定义的变量在所有函数中都有效

D、在不同的函数中可以使用相同名字的变量

标准答案:c

知识点露析:全局变量有效范围是从定义的位置开始到所在源文件的结束,在这区

域内的函数才可以调用,如果在定义函数之后,定义的变量,该变量不能被之前的

函数访问所以C选项说法错误,答案为C选项。

39、有以下程序include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,34,5,6},k;

fp=fopen("data.dat","vv+");fprintf(fp,"%d\n'\a[OJ);for(i=i;i<6;i++){rewind(fp);

fprintf(fp,"%d\n",a[i]);)rewind(fp);fscanf(fp,H%d",&k);fclose(fp);printf("%d\n",

k);)程序运行后的输出结果是

A、6

B、21

C、123456

D、654321

标准答案:A

知识点解析:本题首先定义文件指针变量fp和一个数组a[],再打开一个文件

"data.dat%随后先给文件写入数据a[0],由于rewind函数是将文件指针从当前位

置重新指向文件开始位置,所以for循环依次将数组a中的数据写入文件开始位

置,退出循环后,文件中的数据顺序为:654321,重新使指针指向文件开始位置,

将此时fp指向的数据(即文件中第一个数据6)写入变量k中,关闭文件,输出k

值,答案为A选项。

二、程序填空题(本题共1题,每题7.0分,共/分。)

40、下列给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字

符右移到下一个奇数位置,最右边被移池字符串的字符绕回放到第一个奇数位置,

下标为偶数的字符不动(注:字符串的长度大干等于2)。例如,形参8所指字符串

为“abedefgh",执行结果为“ahebedgFL请在程序的下画线处填入正确的内容并将

下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或

册IJ行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(char*s)

{inti,n,k;charc,n=0;for(i=0,s[i]!=t\0\i++》n++;if(n%2==0)

/**********found***********/k=n*[]]•elsek—n2,

for(i=k-2,i>=l;i=i-2)

{S[i+2]=s[i];/**********found***********/s1l]=[3];))main(){char

M,,4M

s[80]=abcdefgh;print^\nTheoriginalstringis:%s\n”,s};fun(s);printf(\

nTheresultis:%S(rT,s);)

标准答案:(l)l(2)s[k]或*(s+k)(3)c

知识点解析:填空1:函数fun中变量n统计字符的长度,假如长度为偶数,则

k=n-1;假如长度为奇数,则k=n—2,使得下标为奇数的最后一个元素有效(不

是、0>填空2:了解变量k的作用后,则将最右边的奇数位置的数赋值给变量

co填空3:将最后一个下标为奇数的元素移到第一个奇数位置。

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

41、下列给定程序中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的

值。从第1项起,斐波拉契数列为:1,1,2,3,5,8,13,21,…例如,若给

n输入7,则该项的斐波拉契数值为13。清改正程序中的错误,使它能得出正确结

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

程序:#include<stdio.h>longfun(intg){/**********found***********/

:1:5*:

switch(g),{case0:return0:/**********fOund*********/casel;case2:return

1;}return(fun(g-1)+fun(g-2));)voidmain(){longfib;intn;printf^€4Input

n:");scarify4%d'\&n),prinlR"n=%d\n",n),fib=fun(n),printf("fib=%d\

n、n”,fib),(

标准答案:(I)去掉分号(2)case1:case2:returnI;

知识点解析:C语言中,swilch语句之后不能有分号,并且case语句常量后应用

的是冒号。

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

42、编写函数fun,其功能是:将s所指字符串中ASCH码值为奇数的字符删除,

剩余字符形成的新串放在t所指数组中。例如,若s所指字符串中的内容为

“ABCDEFG12345",其中字符A的ASCII码值为奇数,字符1的ASCII码值也为

奇数,都应当删除,其池依此类推。最后t所指的数组中的内容应是“BDF24,注

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

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

#include<stdio.h>#inckide<string.h>voidfun(char*S,chart[]){)main()

{chars|100],t|100],Msg[]=t'PleaseenterstringS:printf(Msg);Scanf("%S",

S);fun(S,t);printf(tu\nTheresuitis:%S\n",t);)

标准答案:voidfun(char*s,chart[]){inti,j=0,n»n=strlen(s);/*遍历整个数组

*/for(i=0,iVn;i++)/*如果元素的ASCH码值为偶数*/if(s[i]%2==0){/*将

元素保存到[中*/j++;}t[j]=<\0,;)

知识点解析:要删除ASCII码值为奇数的字符,也就是要保留ASCII码值为偶数

的字符,由于最终是要求出剩余字符形成的新串,所以本题的算法是对原字符串从

头到尾扫描,找出ASCH码值为偶数的字符并依次存入数组。

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

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

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

A、并(U)、差(-)、交(。)、除(+)和笛卡儿积(X)

B、并(U)、差(-)、交⑼、投影(几)和选择(。)

c、并(U)、交(0)、投影(兀)、选择(。)和笛卡儿积(X)

D、并(U)、差(-)、投影位)、选择(。)和笛卡儿积(X)

标准答案:D

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

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

2、在数据库系统的组织结构中,下列()映射把用户数据库与概念数据库联系了起

来。

A、外模式/模式

B、内模式/外模式

C、模式/内模式

D、内模式/模式

标准答案:A

知识点解析:数据库有两层映像,即外模式/模式和模式/内模式映像。模式/内

模式映像定义数据库全局逻辑结构与存储结构之间的对应关系。

3、下列关于线性链表的描述中,正确的是()。I、只含有一个指针域来存放下一

个元素地址n、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或

后件)皿、结点由两部分组成:数据域和指针域。

A、仅I、n

B、仅I、n

c、仅n、m

D、全部

标准答案:D

知识点解析:在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这

样的链表为单链表或线性链表。在链式存储方式中,耍求每个结点由两部分组成:

一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。

其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。

4、下面关于数据库三级模式结构的叙述中,正确的是()。

A、内模式可以有多个,外模式和模式只有一个

B、外模式可以有多个,内模式和模式只有一个

C、内模式只有一个,模式和外模式可以有多个

D、模式只有一个,外模式和内模式可以有多个

标准答案:B

知识点解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。

个数据库可以有多个外模式,但只有一个模式和一个内模式。

5、设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增

的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分

后的结果为()。

A、23,13,51,57,66,26,81,69,76

B、13,23,26,51,57,66,81,76,69

C、23,13,51,57,26,66,81,69,76

D、23,13,51,57,81,26,66,69,76

标准答案:A

知识点解析:快速排序是起泡排序的改进。在快速排序中,任取一个记录,以它为

基准用交换的方法将所有的记录分成两部分,关键码值比它小的在一部分,关键码

值比它大的在另一部分,再分别对两个部分实施卜述过程,一直重复到排序完成.

6、下列哪一条不属于数据库设计的任务?()

A、设计数据库应用结构

B、设计数据库概论结构

C、设计数据库逻辑结构

D、设计数据库物理结构

标准答案:A

知识点解析:数据库设计工作量大而且过程复杂,既是一项数据库工程也是一项庞

大的软件工程。考虑数裾库及其应用系统开发全过程,将数据库设计分为以下6个

阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数

据库的运行和维护。

7、数据库技术的根本E标是()。

A、数据存储

B、数据共享

C、数据查询

D、数据管理

标准答案:B

知识点解析:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集

合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,

并可被各个应用程序所共享,所以数据库技术的根本目标是解决数据共享问题。

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

A、软件开发方法

B、软件开发工具

C、软件开发费用

D、软件系统功能

标准答案:D

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

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

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

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

A、排序、索引、统计

B、选择、投影、连接

C、关联、更新、排序

D、显不、打印、制表

标准答案:B

知识点解析:关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接

运算。

10、数据管理技术发展的三个阶段中,()没有专门的软件对数据进行管理。

I.人工管理阶段n.文件系统阶段m.数据库阶段

A、仅I

B、仅m

c、I和u

D、II和m

标准答案:A

知识点解析:数据管理技术发展的三个阶段中,只有人工管理阶段,没有操作系

统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中

已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一

管理数据的专门软件系统,即数据库管理系统。

11、下面说法正确的是()。

A、一个C程序可以有多个主函数

B、一个C语言的函数中只允许有一对花括号

c、c程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内

D、在对C程序进行编译时,可以发现注释行中的济•写错误

标准答案:C

知识点解析:本题涉及C语言基本的3个知识点:①C语言规定一个程序只允许

有一个主函数,一个函数内可以允许有多个花括号;②C程序的注释部分仅仅是

方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编

译器也就不会发现注释中的错误。

12、下列不合法的用户标识符是()。

A、j2_KEY

B、Double

C、4d

D、_8_

标准答案:C

知识点解析:在c语言程序中,合法标识符的命名规则是:标识符可以由字母、

数字和下划线组成,并且第一个字符必须是字母或下划线。

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

A、{:)

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

C、if(!a);

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

标准答案:D

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

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

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

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

14、设a和b均为im型变量,且a=6、b=ll>c=3,则能使值为3的表达式是()。

A、b%(c%4)

B、b%(c-a%5)

C、b%a-a%5

D、(b%a)-(a%4)

标准答案:D

知识点解析:选项D)括号内的运算分别是b%a=ll%6=5和a%c=6%4=2,最后得

到5-2=3。

15、以下程序的输出结果是()。main(){int]]a=4,b=3,c=2,d=l;printf("%d",a

>b?a:d>c?d:b);}

A、1

B、3

C>2

D、4

标准答案:D

知识点解析:本题首先判断a>b,当a>b时结果等于a。否则等于"d>c?d=b”,

因为a>b+所以直接输tla的值,注:这里"a:d>c?d:b”是用来干扰考生的。

16、阅读以下程序#include〈stdio.h>main(){IntCase;floatprintF;printf("请输

入2个数:");scanf(,"%d%F,&Case,&printF);printf("%d%f\n",Case,

prinlF);}以下说法正确的是()。

A、定义语句出错,Case是关键字,不能用作用户自定义标识符,printF不能用作

用户自定义标识符

B、定义语句出错,Int无法被识别

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

D、定义语句无错,primf不能输出Case的值

标准答案:B

知识点解析:C语言是一种大小写敏感的语言,因此Int应为int,而CaseprinF则

可以使用。

17、若有定义:floatx=l.5;inta=l,b=3,c=2;则正确的switch语句是()。

A、switch(x){case1.0:printf(H*\nu):case2.0:printf(,,5ie*\n"):)

B、switch((int)x);{easel:printf("*\nH);case2:printf("**\n");)

C、switch(a+b){easel:printf(H*\n");case2+1:printf("**\n");!

D、switch(a+b){easel:printf(n*\n");casec:printfC1**\n");}

标准答案:C

知识点解析:在C语言中,switch。后的一对圆括号中可以是整型表达式或字符表

达式。case语句后面的常量表达式的类型必须与switch后圆括号中的表达式类型相

同,各case语句标号的值应该互不相同。选项A)中case后面的常量表达式为实

型。所以不正确:选项D)中case后面出现了变量表达式,所以选项D)错误。

18、有以下程序:main(){intk=33;printf("%d,%o,%x",k,k,k);}执行后

的输出结果是()。

A、33,033,0x21

B、33,033,21

C、33,041,021

D、33,41,21

标准答案:D

知识点解析:本题考查不同进制间的转换。printf输出函数中输出变量的格式,由

输出格式符决定。题中“%。”格式符表示以八进制的形式输出:“%x”格式符表示以

十六进制的形式输出。“33”的八进制和十六进制分别是41和21。

19、当输入为“Fool&Swalow"时,下面程序的执行结果是()。#include<stdio.h>

main(){chare;while(c!='?'){c=getchar();putchar(c);}}

A、Swalow

B、Fool

C、Fool?

D、?Swalow

标准答案:C

知识点解析:本程序是通过gelchar。函数读入字符:并通过putchar。函数将字符逐

个输出,当用户输入“?”时停止输出。

20、卜面程序段的输出结果是()。#include<stdio.h>main(){float

x=l.236547:printf("tha",(int)(x*1000+0.5)/(float)1000);}

A、1.237000

B、输出格式说明与输出项不匹,输出无定值

C、1.236000

D、1.24

标准答案:A

知识点解析:本题中,(int)(x*1000+0.5)的结果为1237,(float)lOOO是将1000强

制转换成flat类型;整个表达式(int)(x次1000+0.5)/(float)1000的结果为

1.237000,再以实数(6位小数)形式输出。

21,若变量都己正确说明,则以下程序段()2#include<stdio.h>main(){int

a=8;intb=6:printf(a>b?"&&&a:%d":"!!!b=%d",a,b);}

A、输出为:&&&a=8

B、输出为:!!!b=8

C、输出为:&&&a=8!!!b=6

D、全部错误

标准答案:A

知识点解析:本题考查printf的输出格式和条件表达式“?:”的使用。①printf函数

输出时,和“!!!%d\n”中的“&&&"和“!!!”都是直接输出:②条件表

达式的基本格式为:a?h:品其运算规则为:当a为非0时,整个表达式的值取h

的值,当a为0时,整个表达式取c的值。prinlf函数中如果在格式说明符之前插

入任何字符都将原样输出。本题中a>b为真,所以返回“&&&a=%d”。

22、语句午日1顿出\帅(泅\、代\夕\\\1)011\11");”的输出结果是()。

A、a\bhow\'are\'y\\bou

B、a\bhow\'are\'y\bou

C^how'are'you

D、ahow'are'y\bou

标准答案:C

知识点解析:“b”格式符表示退格,功能是将它后面的字母把它前面的字母覆盖,

导致“b”格式符前面的字母不能输出:“\川格式符表示输出单引号字符;“\\"格

式符表示输出反斜线字将。

23、卜面程序的运行结果是()。#include<stdio.h>main(){inii;for(i=l;i<

*

=5;i++){if(i%2)printf(1*"):elseprintf("#");))

A、*#*#*

B、#*#*#*

C、*#*#

D、#*#*

标准答案:A

知识点解析:分析程序可知,程序循环5次,然后利用if语句决定每次循环时输

出的字符。当i为奇数时,i%2=Lif(i%2)为真,输出“*”:当j为偶数时,1%

2=0,if(i%2)为假,执行else语句,输出“铲',所以当i取1、3、5值时输出“*”,

当i取2、4值时输出“#工

24、以下关于return语句的叙述中不正确的是()。

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

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

C、如果一个函数有多个return语句,那么不论运行到哪一个return语句,该函数

将结束

D、没有return语句的自定义函数在执行完最后一条语句时返回到调用处

标准答案:A

知识点解析:relum语句主要用于返回函数的值。在一个自定义函数中,可以根据

不同的情况设置多条return语句返回函数的值,也可以不包含return语句。

25、有以下程序:main(){intn=0;do{n++;pnntf(u%d\nn»n);}while(n<

=3);}程序的输出结果是O。

A、112

B、123

C、1234

D、12

标准答案:C

知识点解析:本题考查do…while循环。在do...while构成的循环体中,总是先执

行一次循环体,然后再求表达式的值。当执行完第三次循环时,得到n=3,whik

循环表达式仍然成立,接着执行直到n=4,表达式不成立.跳出循环,结束程序。

26、下面程序的运行结果是()。#include<stdio.h>voiddel(char*s){inti,j;

char*a;a=s;for(i=0,j=0;a[i]!=,\0,;i++){if(a[i]>=,0,&&a[i]<

=,9,){s[j]=a[i];j++;}s[j]='\O';})main(){chars[]=Haa89gggh";del(s);printf(n

\n%s",s);)

A、aa

B、89

C、gggh

D、aa89gggh

标准答案:B

知识点解析:本题中dd(char*s)函数实现的功能是:逐个读入s数组中的字符,如

果遇到数字,则将其重新存在s中,遇到非数字字符则跳过。所以最后输出的应该

是字符串s中的所有数字。

27、下列说法不正确的是()。

A、int*fun();----fun是一个返回int指针的函数

B>int(*fun)();一fun是一个返回int指针的函数

C、int(*array[5])0;--array是一个有5个元素的数组,每一个元素都是一个函数

指针,指向一个返回ini的函数

D、int(叶un(int))(int

温馨提示

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

最新文档

评论

0/150

提交评论