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

下载本文档

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

文档简介

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

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

1、有以下程序:#include<stdio.h>#defincN4voidfun(inta[][N],intb[]){int

i;for(i=0;i<N;i++)b[0]=a[i][i];}main(){intx[][N]={{l,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("n");}程序运行的结果是()°

A、1234

B、1070

C、1459

D、3480

标准答案:B

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

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

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

2、设有如下三个关系表:下列操作中正确的是()。

A、T=RAS

B、T=RUS

C、T=RxS

D、T=R/S

标准答案:B

知识点解析:两个相同结构关系的“并”是由属于这两个关系的元组组成的集合。

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

A、预处理命令通常位于函数体外面,但也可以位于函数体中间

13、C语言中的变量定义须在其他语句之前

C、在C语言程序的书写中,一个语句必须单占一行

D、一个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的

main函数

标准答案:A

知识点解析•:源程序中可以有预处理命令(include命令仅为其中的一种)。C语言中

的变量可以在使用之前的任何位汽进行定义。C语言程序的书写中,多个语句可以

位于一行,但为了增强可读性,一般每行只有一条语句。一个C语言源程序可以

由一个或多个源文件组成,但仅可以有一个main函数。

4、以下选项中不合法的标识符是()o

A、&a

B、FOR

C、print

D、0

标准答案:A

知识点解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下

划线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B)选项中

的“FOR”可以作为标识符来用.A)选项中含有非法字符&,所以选择Ac

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

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

A^gets(s);

B、while((s[i++]=getchar())!=,\n');s[i]=t\0,;

C>seanfi("%s”,s);

D、d0{seanf("%c“,&s[i]);}while(s[i++]!=<Xn5);s[i]=t\0,;

标准答案:C

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

6、有以下程序:#include<stdio.h>structst{intx:inty;}a[2]={5>7,2,

9);main(){printf("%d\n",a[0|.y*a[l].x);}程序运行后的输出结果是()。

A、10

B、18

C、14

D、63

标准答案:C

知识点解析:首先是定义结构体si,si中共有两个整型成员x,y。然后定义一个st

类型的数组a,a的长度为2,即数组中含有两个st类型的元素,分别是a[0]和

a[l]o对a进行初始化,此题是按照存储顺序进行初始化,即将5赋给a[0]中的

x(即a⑼.x=5),将7赋给a⑼中的y(即a[0].y=7),将2赋给a⑴中的x(即

a[l].x=2),将9赋给中的y(即a[l].y=9)o执行main函数,输出表达式

a[0].y*a[l].x的值,即7*2的值14。

7、若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是()。

A、函数的实参和其对应的形参共占同一存储单元

B、形参只是形式上的存在,不占用具体存储单元

C、同名的实参和形参占同一存储单元

D、函数的形参和实参分别占用不同的存储单元

标准答案:D

知识点解析:在C语言中,函数的实参单元与形参单元在内存中分配不同的存储

单元。在调用函数时,给形参分配临时存储单元,并将实参对应的值传递给形参,

在被调用函数中对形参存储单元中的值进行运算,最后通过reiurn语句把函数值返

回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。

8、下列关于逻辑运算符两侧运算对象的叙述中正确的是()。

A、只能是整数。或1

B、只能是整数0或非0整数

C、可以是结构体类型的数据

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

标准答案:D

知识点解析:逻辑运算符两侧的运算对象可以是任意合法的表达式°逻辑表达式的

运算结果或者为1(“真”),或者为0(“假,

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

值语句中错误的是()。

A、data2={datal.real,datal.unreal);

B、data2=(2,6);

C^data2.real=datal.real;

D、data2->real=datal.unreal;

标准答案:C

知识点解析:本题主要考查结构体变量的定义与初始化。题目中定义了complex类

型的结构体变量datal和data2,并对datal进行了初始化。可以用一个结构体变量

的成员对另一个结构体变量的成员赋值。

10、计算机软件包括(卜

A、算法和数据

B、程序和数据

C、程序和文档

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

标准答案:D

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

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

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

A、X.0E0.5

B、lei

C、Oil

D、Oxabcd

标准答案:A

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

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

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

A、一个C语言程序只能实现一种算法

B、C程序可以由多个程序文件组成

C、C程序可以由一个或多个函数组成

D、一个C函数可以单独作为一个C程序文件存在

标准答案:A

知识点解析:一个C程序可以有一个或多个程序文件,所以也可以有一个或多个

函数,选项A)正确;除了main函数不能被其他函数调用之外,用户自定义函数

可以调用其他任意函数,选项B)错误;函数是一个独立的模块,不同函数之间的

定义相互没有影响,所以标识符可以相同,选项C)错误;函数体内部只可以调用

但是不可以定义其他函数,选项D)错误:答案选A).

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

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

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

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

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

标准答案:C

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

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

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

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

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

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

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

要慎用。

14、在三级模式之间引入两层映像,其主要功能之一是()。

A、使数据与程序具有较高的独立性

B、使系统具有较高的通道能力

C、保持数据与程序的一致性

D、提高存储空间的利用率

标准答案:A

知识点解析:数据库管理系统在数据库的二级模式之间提供了两层映像,保证了数

据库中数据的较高的逻辑独立性和物理独立性。

15、下面的for语句的循环次数为()。for(x=l,y=0;(y!=l9)&&(x<6);x++);

A、是无限循环

B、循环次数不定

C、最多执行6次

D、最多执行5次

标准答案:D

知识点解析:木题考查for循环.只考虑x的取值变化,x从1取到5,可以循环5

次,但是并不知道y是如何变化的,有可能出现广19提前跳出循环的情况,所以

是最多执行/5次。

16、有以下程序:#includemain(){intal,a2:charc1»c2;scanf("%d%c%d%

c",&al,&cl,&a2,&c2);printf("%d,%c,%d,%e",al,cl,a2,c2):)

若想通过键盘输入,使得al的值为12,a2的值为34,cl的值为a,c2的值为b,

程序输出结果是:12,a,34,b,则正确的输人格式是(以下一代表空格,代表回

车)()。

A、12a34b

B、12_a_34_b

C、12,a,34,b

D、12_a34_b

标准答案:A

知识点解析:根据scanf函数中的格式说明字符串,各个输入之间没有任何符号,

所以键盘输入也应该没有符号。

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

A、在C语言中,逻辑真值和假值分别对应1和0

B、关系运算符两边的运算对象可以是C语言中任意合法的表iA式

C、对于浮点变量x和y,表达式:x==y是非法的,会出编译错误

D、分支结构是根据算术表达式的结果来判断流程走向的

标准答案:B

知识点解析:A选项中,在C语言中,逻辑真值对应非0;C选项中,表达式:

X==y是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是

算数表达式的值。因此B选项正确。

18、以卜程序:#include<stdio.h>main(){charstr|IO];scanfV'%s'',&slr);

printf(,,%s\n,\str);}运行上面的程序,输入字符串“howareyou”,则程序的执

行结果是()。

A、how

B、howareyou

C、h

D、howareyou

标准答案:A

知识点解析:当从键盘瑜入“howareyou”时,由于scanf输入函数的特点是遇到空

格时结束读入字符,因此,该程序只将how这3个字符送到了字符数组sir中,并

在其后自动加上结束符“\0”。

19、设R是一个2元关系,有3个元组,S是一个3元关系,有3个元组。如

T=RxS,则T的元组的个数为()。

A、6

B、8

C、9

D、12

标准答案:C

知识点解析:R为n元关系,有p个元组s为m元关系,有q个元组。两个关系笛

卡儿积是一个n+m元的关系,元组个数是qxp。所以T的元组的个数为9个。

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

A、变量的作用域取决于变量定义语句的位置

B、全局变量可以在函数以外的任何部位进行定义

C、局部变量的作用域可用于其他函数的调用

D、一个变量说明为sialic存储类型是为了限制其他编译单元的引用

标准答案:D

知识点解析:本题考查函数调用的变量作用域。全局变量不在任何函数体内定义,

作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数;sialic类型

是静态变量,为了方便其他编译单元的引用,不能随意改变。一个函数包含两部

分:函数首和函数体,函数体包括花括号内的所有语句。

21、若以下选项中的变量全部为整型变量,且已正确定义并赋值,则语法正确的

switch语句是()。

A、switch(a+9){casecl:y=a-b;casec2:y=a+b;)

B、switcha*b{case10:x=a+b;default:y=a-b;}

C^switch(a+b){easel:case3:y=a+b;break;caseO:case4:y=a-b;}

D、switch(a*a+b*b){default:break;case3:y=a+b;break;cage2:y=a-b;

break:}

标准答案:D

知识点解析:选项A,当cl和c2相等时,不成立;选项B,a*b要用括号括起

来;选项c,case与后面的数字用空格隔开。

22>下面函数的功能是()。sss(s»t)char*s,*t;|while(*s);while(*t)

*(s++)=*(t++);returns;)

A、将字符串s复制到字符串t中

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

C、求字符串的长度

D、将字符串t续接到字符串s中

标准答案:D

知识点解析:本题考查指针变量的运用。本题中的函数实质上是将字符串t续接到

字符串s中。

23、下列关于C语言文件的叙述中正确的是()。

A、文件由一系列数据依次排列组成,只能构成二进制文件

B、义件由结构序列组成,可以构成二进制文件或文木文件

C、文件由数据序列组成,可以构成二进制义件或文本文件

D、文件由字符序列组成,其类型只能是文本文件

标准答案:C

知识点解析:本题考查文件的慨念,文件是由数据序列组成,可以构成二进制文件

或文本文件,所以答案为C选项。

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

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

A、自然连接

B、并

C、交

D、差

标准答案:D

知识点解析:关系T中的元组是关系R中有而关系S中没有的元组的集合,即从

关系R中除去与关系S中相同元组后得到的关系To所以做的是差运算。

25、结构化程序所要求的基本结构不包括()。

A、顺序结构

B、GOTO跳转

C、选择(分支)结构

D、重复(循环)结构

标准答案:B

知识点解析:1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择

和重复三种基本控制结阂就足以表达出各种其他形式结构的程序设计方法。

26>有以下程序:#includevoidf(int*q){inti=0:for(;i<5:i++)(*q)++;)main()

{inta[5]={l,2,3,4,5},i;f(a);for(i=0;i<5;i++)prinffp%d,",a[i]);}

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

A、6,2,3,4,5,

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

C、1,2,3,4,5,

D、2,3,4,5,6,

标准答案:A

知识点解析•:本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,

然后取首个数组元素值进行加1运算,循环5次。因此A选项正确。

27、设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返

回值为()。

A、0

B、、(r

C、非0值

D、NULL

标准答案:C

知识点解析:本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到

达文件末尾(遇文件结束符),eof函数值为非零值,否则为所以选项C正确。

28、以下说法不正确的是()。

A、gets函数用于从终端读入字符串

B、getchar函数用于从终端读入字符

C、fputs函数用于把字符串输出到终端

D、fwrite函数用于以二进制形式输出数据到文件

标准答案:c

知识点解析:fputs函数用于把字符串输出到文件中。

29、在如图所示的链表中,可将q所指节点从链表中删除并释放该节点的是()。

datenext

head।a|"「-HcI+

tPTq

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

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

C、p=q;free(q);

D^p—*>next=q一>next;free(q);

标准答案:D

知识点解析:要将结点b从链表中删除,应先将a的指针域指向b结点的下一个结

点,即p—>next=q->next,然后释放指针q的空间。

30、软件设计过程中的E-R图转换为关系时,其中的实体和联系都可以表示为

()。

A、屈性

B、键

C、关系

D、域

标准答案:C

知识点解析:E—R图中的实体和联系都可以转换为关系,E—R图中的属性也可以

转换为关系的属性。

31、以下关于字符串的定义和赋值语句,正确的是()。

A、char*s;s={,,Text!''};

B、charts;s=''Text!'、:

C、charS|10];s=,,Text!'

D、chars[];s=,,Text!

标准答案:B

知识点解析:选项A去掉大括号就正确了,选项C和D应该是定义时赋初值,若

定义之后对数组赋值,应该逐个元素赋值。

32、设某二叉树的后序序列为CBA,中序序列为ABC,则该二叉树的前序序列为

A、BCA

B、CBA

C、ABC

D、CAB

标准答案:C

知识点解析•:二叉树遍历可以分为3种:前序遍历(访问根节点在访问左子树和访

问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、

后序遍历(访问根节点在访问左子树和访问右子树之后)。后序序列为CBA,则

A为根节点。中序序列为ABC,则B和C均为左子树节点或右子树节点,且B为

C父节点,可知前序序列为ABC,C选项正确。

33、数据独立性是数据库技术的重要特点之一。所谓数据独立性是指()。

A、数据与程序独立存放

B、不同的数据被存放在不同的文件中

C、不同的数据只能被对应的应用程序所使用

D、以上三种说法都不对

标准答案:D

知识点解析:数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应

用程序而不依赖于应用程序。所以选项A),选项B)和选项C)都不正确。

34、以下叙述正确的是

A、只使用三种基本结构即可解决任何复杂问题

B、C语言程序并不是必须要定义main。函数

C、只要程序包含了任意一种基本结构,就肯定是结构化程序

D、程序中的语法错误只能在运行时才能显现

标准答案:A

知识点解析:C语言程序必须要定义main。函数,B选项错误;只有同时包含三种

基本结构时,程序才是结构化程序,C选项错误;程序中的语法错误在编译时能显

现,排除D选项,答案选A。

35、有以卜程序#include<stdio.h>main(){inti,array[6]={I,5,0,4);for(i=0;i

<5;i++)printf("%d,",array[i]&4);printf(M\nH);}程序运行后的输出结果是

A、1,2,1,2,0

B、150,4,0,

C、1,5,5,4,0.

D、040,4,0

标准答案:D

知识点解析:主函数首先定义一个数组array[6],初始化前4个元素的值,其余默

认值为0。在for循环中,为数组array中每一个元素换算成二进制数后和二进制整

数“100”进行按位与运算,再将结果进行输出,因此答案为D选项。

36、有以下程序#include<stdio.h>main(){intm,n;scanf(n%d%d",&m,&n);

while(m!=n){while(m>n){m=m-n;}while(n>m)(n=n-m;})printf("%d\n",m);}

该程序的功能是

A、计算m和n的最小公倍数

B、计算m和n的最大公约数

C、计算m和n的差值

D、找出m和n中的较大值

标准答案:B

知识点解析:题目使用更相减损术求最大公约数,其思想:1、任意给定两个正整

数,判断它们是否都是偶数。若是,则用2约简,若不是则执行第二步。第二

步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。

继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第

二步中等数的乘积就是所求的最大公约数。因此。故答案为B选项.

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

A、'C-STR'

B、2014.1

C、”\1.0

D、2EK

标准答案:B

知识点解析:所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语

言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项A是字符

串,但使用单引号,错误,选项C,D,为实型常量中指数形式,但指数形式e

(E)之前必须是数字,之后必须为整数,错误。故答案为B选项。

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

{scanf(u%d",&b);switch(b){default:printf(”%d,”,b+l);continue;case1:printf(,,%d,,\

b+1);case2:printf(H%d,',b+I);continue;}})执行时输入:123V回车>,则输出

结果是

A、2,2,3,444,

B、2,3,4,

C、2,234,

D、2,3,3,4,56,

标准答案:C

知识点解析:continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循

环。switch…case如果没有break会导致多个分支重叠。因此,输入1,2,3,则1执

行case1:printf("%d,",b+l);case2:printf(',%d,,,»b+11;continue;后结束。2则执行

case2:printf("%d,",b+1);continue;?则执行default:printf("%d,",b+l);continue;得至ij

的结果是223,4。故答案为C选项

39、有以卜定义structperson{charname|10];intage;);structperson

class[10]={“John”,17,“Paul”,19,“Mary”,18,“Adam”,16,};能输出字母M的语句是

A^printf("%c\n",class[2].name[0]);

B、printf(u%c\n'\class[3].name[0]);

C、printf("%c\n",class13].name"]);

D^printf("%c\n",class[2].name[l]);

标准答案:A

知识点解析:C语言规定数组的下标从0开始,结构体变量class初始化了前4

项,第三项的name="Marry",class[2].namc[0]='M',故答案为A选项

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

{if(a%2==0)break;continue;b+=a:}printf("%d\n",b);}程序运行后的

输出结果是()。

A、0

B、1

C、10

D、4

标准答案:A

知识点解析:第一次循环,a=l,a%2!=0所以执行break,整个循环结束,所以

b=0o

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

41、给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用。

规定在—2—处使fa指向函数fl,在—3—处使tb指向函数f2。当调用正

确时,程序输出:xl=5.000000,x2=3.000000,xl*xl+xl*x2=40.000000请在

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

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

改程序的结构!#includedoub2efl(doublex){returnx*x;)doublef2(doublex,

doubley)(returnx*y;)doublefun(doublea,doubleb){/

(*f)();doublerl,r2;

/*pointfountionf1*/rl:f(a);

/kpo-ntfountionf2*/r2=(*f)(a,

b);returnrl+r2:}main(){doublexl=5,x2=3,r;r=fun(xl,x2);printf("\

nxl=%f,x2=%f,xl*xl+xl*x2=%f\n',,xl,x2,r);}

标准答案:⑴double⑵f1(3)f2

知识点解析:第一空:由_2_;/*pointfountionfl*/"和“rl=f(a);”可知f是

一个函数的指针,且f指向白福薮的返回值为double型,函数的指针的定义方式

是:类型标识符(*指针变量名)(),故第一空处的函数的指针的定义为“double"。第

二空:/*pointfountionfl*/M#t4rl=f(a):”可知f指向的函数只有一个

参数a,因此f指向fl函数,即第二空处为“门”。第三空:“4_3_;/*point

fountion冲/”和"r2=(*f)(a,b);",f指向的函数有两个参数,因此f是指向f2函

数,故第三空处应为

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

42、给定程序MOD】C中函数fun的功能是:将tt所指字符串中的小写字母都改

为对应的大写字母,其地字符不变。例如,若输入"Ab,cD",则输出“AB,

CD”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函

数,不得增行或删行,也不得更改程序的结构!#include#includechar*fun(chartt|])

{inti;for(i=0;i++)/**********found**********/iR('a'v=tt[i])I

I(tt[i]<=,z,))/**********found**********/tt[i]+=32;return(tt);)main(){char

tt[8lI;printf(n\nPleaseenterastring:");gets(tt);printf("\nTheresultstr2ng

is:\n%s",fun(tt));)

标准答案:(l)if(('ay=tt[i])&&(tt[i]<=,z,))(2)tt[i]-=32:

知识点解析:(1)第一个错误标识下的if判断语句中的逻辑有误,应该是与(&&)的

关系,不是或(II)的关系,所以if判断语句改为“if(CaV=tt[iD&&(呻]v='z')Y',

(2)第二个标识卜.小写字母转换为大写字母的转换算法有误,小写转换为大写应该

是减去32,而不是加上32,所以“tt[i]+=32;”改为

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

43、假定输入的字符串中只包含字母和幸号。请编写函数fun,它的功能是:使字

符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n

个,则什么也不做,字符串中间和前面的木号不删除。例如,字符串中的内容

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

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

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

语言提供的字符串函数。注意:部分源程序在文件PROG1.C中。请勿改动主函

数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语

句。#includevoidfun(char*a,intn){)main(){chars[81];intn;voidNONO();

printf("Enterastring:\n");gets(s);printf("Entern:");scanf("%d",&n);

fun(s,n);printf("Thestringafterdeleted:\n");puts(s);NONO();jvoid

NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/FTLE*in.*ont:inti.n:chars[81]:in=fopen("in.datn,"r"):

out=fopen("out.dat","wn);for(i=0;i<10;i++)(fscarlf(in,"%s",s);

fscarlf(in,"%d",&n);fun(s,n);fprintf(out,H%s\n",s);}fclose(in);

fclose(out);}

标准答案:inti=0,j=0;char*p,*t;p=t=a;while(*t)//让指针t指向串尾

l++;t-;//t指向串中的最后一个字符while(*t=»)//当t指针当前指向的

字符是"”号时{j++://对“”号计数的累加器加1t-;//指向前一个字符}

t++;//跳出“*”号统计后,指针I继续指向字符串的下一个字符//对统

计的“*”,号数目大于给定的“*”号总数n{while(*p&&p

知识点解析:(1)首先确定字符串的尾,然后判断号字符,并对字符串中的字符

进行判断,如果字符是符号“*”则对“*”号进行统计,(2)根据统计的“*”号数目结合

题目中对,*,号个数的要求,判断是执行对“*”号的截取操作,还是什么都不用做。

(3)所有字符处理完后,记得在新串s的末尾加上结束符

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

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

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

A、算法就是程序

B、设计算法时只需要考虑数据结构的设计

C、设计算法时只需要考虑结果的可靠性

D、以上三种说法都不对

标准答案:D

知识点解析:算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于

计算方法,所以A错误。设计算法时不仅要考虑对数据对象的运算和操作,还要

考虑算法的控制结构。

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

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

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

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

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

标准答案:B

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

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

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

3、软件生命周期中的活动不包括()。

A、叶子节点总是比度为2的节点少一个

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

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

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

标准答案:B

知识点解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为。的叶子节点

总是比度为2的节点多一个。所以选择B。

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

的深度是()。

A、市场调研

B、需求分析

C、软件测试

D、软件维护

标准答案:A

知识点解析:软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶

段。主要活动阶段是:可行性研究与计划阶段、需求分析、软件设计、软件实现、

软件测试、运行和维护,所以选择A。

5、程序调试的任务是()。

A、7

B、6

C、3

D、2

标准答案:C

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

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

6、下列关于数据库设计的叙述中,正确的是()。

A、设计测试用例

B、验证程序的正确性

C、发现程序中的错误

D、诊断和改正程序中的错误

标准答案:D

知识点解析:程序调试的任务是诊断和改正程序中的错误。

7、数据库系统的三级模式不包括()。

A、在需求分析阶段建立数据字典

B、在概念设计阶段建立数据字典

C、在逻辑设计阶段建立数据字典

D、在物理设计阶段建立数据字典

标准答案:A

知识点解析:数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充

实和完善的。

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

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

A、概念模式

B、内模式

C、外模式

D、数据模式

标准答案:D

知识点解析:数据库系统的三级模式是概念模式、外模式和内模式,所以选择D。

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

A、自然连接

B、交

C、投影

D、并

标准答案:A

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

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

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

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

A、继承

B、自顶向下

C、模块化

D、逐步求精

标准答案:A

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

性,所以选择A。

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

A、算法正确的程序可以有零个输入

B、算法正确的程序最终一定会结束

C、算法正确的程序可以有零个输出

D、算法正确的程序对于相同的输入一定有相同的结果

标准答案:C

知识点解析:算法的特征:①有穷性。一个算法(对任何合法的输入)在执行有穷步

后能够结束,并且在有限的时间内完成。②确定性。算法中的每一步都有确切的

含义。③可行性。算法中的操作能够用已经实现的基本运算执行有限次来实现。

④输入:一个算法有零个或者多个输入,零个输入就是算法本身确定了初始条

件。⑤输出:一个算法有一个或者多个输出,以反映出数据加工的结果。所以C

选项错误c

12、以下选项中关于C语言常量的叙述错误的是()。

A、C语句必须在一行内写完

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

C、C语言程序中的注释必须与语句写在同一行

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

标准答案:D

知识点解析:C语句可以跨行来写,但是必须以分号结束,所以A选项错误。C程

序中的一行可以有多条语句,所以B选项错误。C语言中的注释语句可以与原语句

放在一行也可以不放在一行,所以C选项错误。

13、以下选项中,不合法的C语言用户标识符是()。

A、经常被使用的变量可以定义成常量

B、常量分为整型常量、实型常量、字符常量和字符串常量

C、常量可分为数值型常量和非数值型常量

D、所谓常量,是指在程序运行过程中,其值不能被改变的量

标准答案:A

知识点解析:C语言中,常量是指在程序运行过程中其值不能被改变的量,变量是

指运行过程中其值可以改变的量,二者不能混淆,所以A选项错误。

14、若变量均已正确定义并赋值,以下合法的C语言赋值语句是()。

A、a_b

B、AaBe

C、a-b

D、_1

标准答案:C

知识点解析:C语言规定,变量命名必须符合标识符的命名规则,C选项中包含了

非法字符“一",所以错误。标识符由字母、数字或下划线组成,且第一个字符必须

是大小写英文字母或者下划线,而不能是数字。

15>设有定义:inta;floatb;执行scanf(''%2d%r',&a,&b);语句时,若从

键盘输入876543.0V回车,则a和b的值分别是()。

A、x=y==5;

B、x=n%2.5;

C、x+n=i;

D、x=5=4+l;

标准答案:A

知识点解析:B选项中运算符“%”的前后必须为整数,C选项中不能将变量赋给表

达式x+n,D选项中不能将表达式4+1赋给常量5。

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

A、87和6.0

B、876和543.0

C、87和543.0

D、76和543.0

标准答案:A

知识点解析:在格式字符前加入一个整数可以指定输入数据所占的宽度,所以赋值

时会将87赋给ini型变量a,把6.0赋给ini型floal型变量b。

17、当变量c的值不为2、4、6时,值也为“真”的表达式是()。

A、chara=,\x2d,;

B、chara=*\n*;

C>chara=,a\

D、chara=,,aa,\

标准答案:D

知识点解析:D选项中将字符串常量“aa”赋给字符变量a是错误的。

[石go)

18、有以下计算公式(><。)若程序前面已在命令行中包含malh.h文

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

A、(c>=2&&c<=6)&&(c%21=1)

B、(Cc==2)II(c==4)II(c==6)

C、(c>=2&&c<=6)&&!(c%2)

D、(c>=2&&c<=6)II(c!=3)II(c!=5)

标准答案:D

知识点解析:逻辑或运算符中只要有一个运算量为真结果就是真,当c>=2&&cV

=6条件不成立时c的值肯定不是2、3、4、5、6,所以c!=3,与c!=5均成立。所

以D选项的结果一定为真。

19、有以下程序:#include<stdio.h>main()(inty=10;while(y-);

pfinff,y=%d\nHy);}程序执行后的输出结果是()。

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

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

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

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

标准答案:C

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

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

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

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

20、有以下程序:#include<stdio.h>main(){inti;for(i=l;i<=40;i++)

{if(i++%5==0)if(++i%8:=O)pfintf(,,%d,\i);}primf("\n')}程序执行后的

输出结果是()。

A、y=-l

y=0

C、y=l

D、while构成无限循环

标准答案:A

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

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

21、有以下程序:#include<stdio.h>main()(ints;scanf(''%d'',&s);while(s

>0){switch(s){case1:s+5);case2:print*''%d'',s+4);

break;case3:printR''%d'',s+3);default:s+1);break;}

scanf(,,%d,\&s);}}运行时,若输入123450V回车>,则输出结果是()。

A、5

B、24

C、32

D、40

标准答案:C

知识点解析:本题的含义是在1-40的整数的范围中,只有当i的值能被5整除,且

i+2的值能被8整除时,打印i的值,满足这个条件的只有32,选择C选项。

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

A、66656

B、6566456

C、66666

D、6666656

标准答案:B

知识点解析:switch语句的执行流程是:首先计算switch后面圆括号中表达式的

值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某

个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break

语句就退出switch语句:若圆括号中表达式的值与所有case后面的常量表达式都

不等,则执行default后面的语句。然后退出。所以输入1时打印65,输入2时打

印6,输入3时打印64,输入4时打印5,输入5时打印6。

23、有以下程序:#inckide<stdio.h>voidfun(char*c,intd){*c=*c+l;d=d+l;

printf(''%c,%c,*c,d);}main(){charb=,a\a='A';fun(&b,a);

printfC%c,%c\nLb,a);}程序运行后的输出结果是Q。

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

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

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

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

标准答案:B

知识点解析:本题重点考察函数返回值的相关知识,函数的值只能通过return语句

返回主调函数,在函数中允许有多个ream语句.但每次调用只能有一个rehirn语

句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空

类型”,类型说明符为“void”。因此B选项正确。

24、下列选项中,能正确定义数组的语句是()。

A、b,B,b,A

B、b,B,B,A

C、a,B,B,a

D、a,B,a,B

标准答案:A

知识点解析:本题重点考察函数的调用,首先要了解字母对应的ASCII码。例如

A为65,a为97。即字母+1则可得到下一个字母。其次是函数形参和实参的问

题,运行过程如下:在fiin(&b,a)中,*c=*a*,d=65。$c+l='b',d+l=66,

printf(,,%c,%c,",*c,d):输出b,B,因为指针c指向地址的值为b,此时

b=*c=,b,;函数返回执行printf("%c,%c\n\b,a);输出b,A,因此A选项

正确。

25>以下函数实现按每行8个输出w所指数组中的数据:#include<stdio.h>

voidfun(int*w,intn){inti;for(i=0;i<n;i++){w|i|);}printf(''

\n“);}在横线处应填入的语句是()。

A^intnum[0..2008];

B、intnum|];

C、intN=2008:intnun[N];

D、#defineN2008intnun[NJ;

标准答案:D

知识点解析:C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A

选项错误,C语言中数组没有此类型的定义方法;B选项错误,定义数组应指明数

组大小,如果不指明数组大小,需要给定初值的个数;C选项错误,N为变量,不

能用来定义数组大小。因此D选项正确。

26>有以下程序:#include<stdio.h>voidfun(char*c){while(*c){if(*c>

=,a,&&*c<=,z,)*c=*c-(,a,-,A,);C++:}}main(){chars|811;gets(s);fun(s);

puts(s);)当执行程序时从键盘上输入HelloBeijingV回车》,则程序运行后的输

出结果是()。

A、if(i/8=0)primfr\n“);

B、if(i/8==0)continue:

,,,,

C、if(i%8==0)printf(\n);

D、if(i%8==0)continue;

标准答案:C

知识点解析:要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8

的倍数时(即i%8==0),输出一个换行符。因此C选项正确。

27、有以下程序:#include<stdio.h>main(){intaE4][4]=t{b4,3,2),(8,

6,5,7),{3,7,2,5),{4,8,6,1});inti,j,k,t;for(i=0;iV4;i++)

for(j=0;j<3;j++)for(k=j+l;k<4;k++)if(a[j][i]>a[k][i]){t=a[j][i];

a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/fbr(i=O;i<4;i++)printfT%d,”,

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

A、hellobeijing

HelloBeijing

C、HELLOBEIJING

D、hELLOBeijing

标准答案:C

知识点解析:主程序渎取整个字符串存于s中,调用fun函数,字符指针c指向数

组s。函数fun的功能是把指针c所指向的字符数组中的所有小写字符转换为大

写。gets函数可以把空格作为字符串的一部分输入,以回车作为输入结束。如果*c

为小写字符,贝肚c=*c・32(转大写)。因此C选项正确。

28、有以卜程序(strcal函数用于连接两个字符串):#include<stdio.h>#include<

string.h>main。{chara[20]=''ABCD\0EFG\0'',b[尸strcat(a,b);

printf「%s\nLa);}程序运行后的输出结果是()。

A、1,6,2,1,

B、8,7,3,1,

C、4,7,5,2,

D、1,6,5,7,

标准答案:D

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

a⑶⑶的值为I、4........6、lo通过for语句和if语句,对二维数组各列元素进行

由小到大的排序操作,程序最后通过for语句输出二维数组对角线上的元素。因此

D选项正确。

29、有以卜程序段:charname|20];intnum;scanf(''name=%snum=%d'',

name,&num);当执行上述程序段,并从键盘输入:name二Lilinum=1001<叵车

>后,name的值为()。

A、IJK

B、ABCDE\OFG\OIJK

C^ABCDIJK

D、EFGIJK

标准答案:C

知识点解析:字符数组a中包含两个、0、遇到第一个‘\0'时就表示字符串a结

束。字符串处理函数sircal(字符数组a,字符数组h),功能是连接两个字符数组中

的字符串,把字符串b连接到a的后面,结果放在字符数组a中。连接时将字符串

a后的U取消,只在新串最后保留一个、0、本题相当于将“ABCD”和“IJK”连接。

因此C选项正确。

30、有以下程序:#inclnde<stdio.h>main。{charch[]=,》vwxy7j.*pc:

pc=ch;printf("%c\n”,*(pc+5));}程序运行后的输出结果是()。

A、name=Lilinum=1001

B、name=Lili

CNLilinum=

D、Lili

标准答案:D

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

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

给相应的输入项。本题中输入“name=Lilinum=1001V回车〉”后,将字符串“Lili赋

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

31、有以下程序:#include<stdio.h>main(){chars[]={,,012x7^};inti,n=0;

for(i=0;s[i]!=0;i++)if[s[i]>=,a,&&s[i]<=,z,)n-H-;print^^d\n",n);}程序

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

A、z

B、0

C、元素ch[5]的地址

D、字符y的地址

标准答案:A

知识点解析:语句pc二ch;使得指针变量指向字符数组ch的首地址,即指向字

符,W。则pc+5指向的是字符向后移动5位,指向字符,z,。所以输出的东pc+5的值

即为,z,因此A选项正确。

32、有以下程序:include<stdio.h>mttun(intn){it(n==l)return1;else

return(n+fun(n-l));}main(){intx;scanR''%d'',&x);x=fun(x);printf('%d\

n一,x);}执行程序时,给变量x输入10,程序运行后的输出结果是()。

A、0

B、2

C、3

D、5

标准答案:B

知识点解析:程序首先给字符数组s口赋值为"012xy”,fnr循环语句的功能是遍历

字符串,通过if条件语句对字符串中的小写字母计数,在符串中小写字母为2

个,即n=2。因此B选项正确。

33、有以下程序:#inckide<stdio.h>intf(intm){statieintn=0:n+=m:return

n:)main(){intn=0;printf(''%d,f(++n));printf(''%d\n'',f(n++));}程

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

A、55

B、54

C、65

D、45

标准答案:A

知识点解析:该程序考察的是函数的递归调用,在凋用一个函数的过程中又出现直

接或问接地调用该函数本身,称为函数的递归调用,执行结果为

1+2+3+…+8+9+10=55。因此A选项正确。

34、设有以下语句:lypedefstructTT{chare;inta[4];)CIN;则下面叙述中正确

的是()。

A、3,3

B、1,1

C、2,3

D、1,2

标准答案:D

知识点解析:该题目中首先区别++n和n++,第一次调用f函数时,将++n(n自增1

后再参与运算)作为参数进行传递,此时变量m的值为1,执行n+=m;后,n=l,

将1返回主函数,并输出。第二次调用「函数时,将n++(n参与运算后再自增I)作

为参数进行传递,此时变量m的值为1,执行语句n+=m;,由于n是静态存储变

量,因此n=2,将2返回主函数并输出。因此D选项正确。

35、有以下程序:#include<stdio.h>structord{intx,y;)dt[2]={1,2,3,

4);main(){structord*p=dt:printf(''%d,",++(p->x));printff'%d\n",

++(p->y)):}程序运行后的输出结果是()。

A、CIN是slructTT类型的变量

B、Tr是struct类型的变量

C、可以用定义结构体变量

D、可以用CIN定义结构体变量

标准答案:D

知识点解析:本题考查typcdef重新声明一种结构体类型,其中CIN为结构体类型

名,而不是结构体变量,所

温馨提示

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

评论

0/150

提交评论