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

下载本文档

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

文档简介

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

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

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

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

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

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

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

标准答案:B

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

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

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

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

值。

2、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。

A、需求分析阶段

B、概念设计阶段

C、逻辑设计阶段

D、物理设计阶段

标准答案:C

知识点解析:逻辑结构设计的任务:概念结构是各种数据模型的共同基础,为了能

够用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模

型,这正是数据库逻辑结构设计所要完成的任务。它包括从E-R图向关系模式转

换和逻辑模式规范化及调整、实现。

3、下面程序的输出结果是()。#includemain(){char

a[]={'a','b','c','d',T,,g'},*p;p=a;prinlf("%c\n",*p+4);}

A^a

B、b

C、e

D、f

标准答案:C

知识点解析”号的优先级比的优先级高,所以先执行“*p“;指针p指向的是

数组的首地址,因此*p=a,再加4得七"

4、下列排序方法中,最坏情况下比较次数最少的是()。

A、冒泡排序

B、简单选择排序

C、直接插人排序

D、堆排序

标准答案:D

知识点解析:冒泡排序、简单插入排序与简单选择排序法在最坏情况下均需要比较

n(n-l)/2次,而堆排序在最坏情况下需要比较的次数是nlog2no

5、按照C语言规定的用户标识符命名规则,不能出现在标识符中的是()。

A、大写字母

B、下划线

C、数字字符

D、连接符

标准答案:D

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

划线。所以D选项中的连接符不合法。

6^有以下程序,其中%11表示按无符号整数输出()。main(){unsignedint

x=OxFFFF;/*x的初值为十六进制数*/printf("%u\n",x);}程序运行后的输

出结果是()。

A、-1

B、65535

C、32767

D、OxFFFF

标准答案:B

知识点解析:因为%u表示按无符号整数输出,而x用十六进制表示为OxFFFF,

所以输出无符号整数的最大值65535.

7^运行下列程序时,7输入数据为“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);switch(s){case

3:printf("%d%d%d\n”,k,j,i);break;case2:printf("%d%d\n",k,j);case

l:printf("%d\nn,k);}(

A、123

B、1,2,3

C、321

D、3,2,1

标准答案:A

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

的值。因为“num=321>99”,所以“s=3,i=3,j=2,k=l"。因为s=3,所以执行case

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

8、有以下程序:#include<stdio.h>#definePT3.5;#defineS(x)PT*x*x;

main(){inta=l,b:2:printf("%4.lf\n",S(a+bJ);}程序运行后的输出结果是

()。

A、7.5

B、31.5

C、程序有错无输出结果

D、14.0

标准答案:C

知识点解析:宏定义不是C语句,末尾不需要有分号。所以语句printf(”%4.lf\

nH,s(a+b));展开后为prinlf("%4.3.5;*a+b*a+b;);所以程序会出现

语法错误。

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

A、概念模式

B、内模式

C、外模式

D、数据模式

标准答案:D

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

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

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

A、连接码

B、关系码

C、外码

D、候选码

标准答案:D

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

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

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

11、若有定义语句:intx=10;,则表达式x-=x+x的值为()。

A、0

B、-20

C、-10

D、10

标准答案:c

知识点解加•:算术运算符+的优先级高于且-=的结合方向为自右向左,所以表

达式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10J选择Co

12、以下定义数组的语句中错误的是()。

A、intnum[][3]={{l,2),3,4,5,6}:

B、intnum[2]|4|={{1,2},{3,4},(5,6));

C、intnum[]={1,2,3,4,5,6);

D>intnum[][4]={L2,3,4,5,6|;

标准答案:B

知识点解析:B选项中定义的数组为2行4列,而赋值时赋成了3行所以出错.

13>有以下程序:#include<stdio.h>voidfunl(char*p)(char*q;q=p;

while(*q!='\O'){(*q)++;q++;)main(){chara|]={"Program1'),*p;p=&a|3];

funl(p);printf(n%s\n',a):)程序执行后的输出结果是()。

A、Brphsbn

Prohsbn

C>Progsbn

D、Program

标准答案:B

知识点解析:(%)++是q所指的字符加1,q++就是指针移到下一个字符。因此B

选项正确。

14、有以下程序://include#include44string.voidfun(char*s[],intn)(char*t;int

i.d;for(i=0:istrlen(s[j])){t=s[i]:s[i]=s[j]:s[j]=t:}}main(){char*ss[]={t<bcc,\

“bbcc","xy","aaaacc”,"aabcc");fun(ss,5);printR"%s,%s\n”,ss[O],

ss[4]);}程序的运行结果是()。

A、xy,aaaacc

B、aaaacc,xy

C^bcc,aabcc

D、aabcc,bcc

标准答案:A

知识点解析:从main函数入手,定义了一个一维数组并赋初值,接着调用函数

fun(),函数的功能是:比较数组中各元素的长度,按元素长度从小到大的顺序排列

元素,所以执行以n(SS,5)函数后,*ss||={"xy","bccn,,'bbcc""aabcc""aaaacc"},所

以调用printf函数输出ss[O],ss[4]的值分别当xy,aaaacco

15>以下程序的输出结果是()。#include<stdio.h>voidprt(int*x,int*y,int*z)

{printf(''%d,%d,%d\n'',++*x,++*y,*(z++));|main(){inta=IO,b=40,

c=20;prt(&a,&b,&c);prt(&a,&b,&c);)

A、11,42,3112,22,41

B、11,41,2012,42,20

C、11,21,4011,21,21

D、11,41,2112,42,22

标准答案:B

知识点解析:本题考查的是函数参数的传递及自加运算符。主函数中第一次调用函

数"prt(&a,&b,&C;",此函数中的输出语句“printf("%d,%d,%o\n,\

++*x,++*y,*(z++));”使得a和b的值均加L而“*(升+)”由于先执行“z++”所以

c的值不变;第二次调用函数“pn(&a,&b,&c);”使得a和b在上一次的基础上再

各自加1(因为形参和实参进行的是地址传递),而c的值仍不变。

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

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

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

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

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

标准答案:D

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

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

也可能小于队尾指针。

17、若有代数式(其中。仅代表自然对数的底数,不是变量),则下列能

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

A、sqrt(abs(nAx+eAx))

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

C、sqrl(fabs(pow(n,x)+exp(x)))

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

标准答案:C

知识点解析:n和e的x基次方,要分别调用C语言的数学库函数doublepow(n,

x)和doubleexp(x),因为这两个函数的返回值都为double型,对两者的和计算绝对

值,调用库函数doublefabs(pow(n,x)+exp(x)),求出和的绝对值,再调用开平方

函数doublesqrt(fabs(pow(n,x)+exp(x))),这样计算出的结果就是题干中表达式的

值。

18、设已有定义:floatx;则以下对指针变量p进行定义且赋初值的语句中正确

的是()。

A、float*p=&:X;

B>int*p=(float)x;

C^floatp=&;x;

D、float*p=1024:

标准答案:A

知识点解析:考查指针变量的初始化。只能把对应类型的变量的地址赋值给指针,

选项B错误;定义指针对要加上“*”标明该变量为一个指针变量,选项C错误;不

能把一个整数直接赋值给指针变量,选项D错误;所以答案选A。

19、if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是

()。

A、必须是逻辑值

B、必须是整数值

C、必须是正数

D、可以是任意合法的数值

标准答案:D

知识点解析:if语句中的表达式可以是任意合法的数值,如常量、变量表达式。所

以D选项正确。

20有以下程序:#includemain(){intk=5,n=0;do{switch(k){ease1:ease3:

n+=l;k-----;break;default:n=0;k------;case2:ease4:n+=2;k------;

break;}pfimf("%d",n);}while(k>0&&n<5);}程序运行后的输出结果是()。

A、02356

B、0235

C、235

D、2356

标准答案:C

知识点解析:k的值为5,逐个对case语句进行匹配,均不匹配,执行default下的

语句n=0;k-----o再执行case2:cased.:后面的语句n+=2;k------;<)执行

break语句跳出switch判断,打印n的值,即2。经过第一次循环后,k的值为3,

然后进行k>0&&n<5条件判断为真。第二次执行循环体,执行case3:后面的语句

n+=l;k-----;o再执行break语句跳出循环,此时打印n的值3,此时k的值为

2。第三次执行循环体k的值为2,满足条件,执行case2:case4:后面的语句

n+=2;k-----;执行break语句跳出循环体,打印n的值5。此时n不满足条件

k>0&&n<5,所以结束循环。整个程序的打印结果为235。

21、下列方法中,不属于软件调试方法的是()。

A、回溯法

B、强行排错法

C、集成测试法

D、原因排除法

标准答案:C

知识点解析:软件调试主要采用以下三种方法:强行排错法:作为传统的调试方

法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。回溯

法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定

最先发现“症状”的位置°原因排除法:原因排除法是通过演绎和归纳,以及二分

法来实现。

22、设有如下类型说明语句typedefstruet{intnum;struet{inty,m,

d:}date;(PER:则以下定义结构体数组并赋初值的语句中错误的是()。

A、PERst[2]=((IOOl),2008,8,1,{1002},2006,5,20};

B、PERst|2]={100l,{2008,8,1),1002,{2006,5,20});

C、PERst[2]={{1001,2008,8,1),{1002,2006,5,20});

D、PERst[2]=(1001,2008,8,1,1002,2006,5,20};

标准答案:A

知识点解析:结构体PER类型定义了两个成员:num为整型,dale为嵌套的结构

体类型,初始化时,成员值的顺序必须与成员定义的顺序相同,num必须是整数,

date必须是小括号括起来的嵌套的三个整数,选项A中,{1001}和{1002}都不是整

数,所以选项A错误,本题答案为A。

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

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

A^6

B、8

C、9

D、12

标准答案:C

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

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

24>以下程序的输出结果是()。#include<stdio.h>main(){inta=8,b=6,

m=I;switch(a%4){caseO:m++;break;case1:m++:switch(b%3)

{default:m++;case0:m++:break;}}printf(''%d\n'',m);)

A,1

B、2

C、3

D、4

标准答案:B

知识点解析:本题考查switch语句。因为a=8,a%4=0,所以执行case0后面的语

句,将m加1,遇到break语句跳出switch。

25、阅读以下程序#includemain(){IntCase;floatprintF;printf("请输入2个数:

");scanf("%d%F,&Case,&printF);printf("%d%f\n",Case,printF);}以

下说法正确的是()。

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

用户自定义标识符.

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

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

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

标准答案:B

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

可以使用。

26、下面不属于需求分析阶段任务的是()。

A、确定软件系统的功能需求

B、确定软件系统的性能需求

C、需求规格说明书评审

D、制定软件集成测试计划

标准答案:D

知识点解析:需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明

书;需求评审,所以选择D。

27、设文件指针fp已定义,执行语句fp=fopen(“file","w”);后,以下针对文本文

件file操作叙述的选项中正确的是()。

A、只能写不能读

B、写操作结束后可以从头开始读

C、可以在原有内容后追加写

D、可以随意读和写

标准答案:A

知识点解析:考查文件操作函数fopcn的基础知识,以“w”方式打开文件,只能写

不能读。选项A正确。

28>有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x-){if(x%3)

{printf(H%d,H,x-);continue;)printf("%d/',-x);})程序的运行结果是

A、7,4,2,

B,8,7,5,2,

C、9,7,64

D、8,5,4,2,

标准答案:D

知识点解析:coutinue的作用是跳出循环体中剩余的语句而进行下一次循环,第一

次循环x的值为8,循环体中if条件成立,打印x的值8后将x减1,再执行continue

语句,跳出本次循环,第二次判断循环条件时,x的值变为6,不满足循环体内if条件,

执行打印--x的操作,即打印5后跳出循环,第三次判断循环条件时x的值为4,满足

循环体中if条件,执行打印x--的操作,即打印4,后将x值减一,执行continue语句,跳

出本次循环.第四次判断循环条件时x的为2,满足循环体中if条件,打印x-即打

印2后将x减一,执行continue语句,跳出本次循环,在进行for条件表达式中第三个

表达式x-的操作后x的值为0,不满足条件结束循环,所以打印结果为8,5,42。

29有以下程序#includemain。{intk=5,n=0;while(k>0){switch(k){default:

break;case1:n+=k;case2:case3:n+=k:)k—;)printf("%d\n"»n):}

程序运行后的输出结果是

A、0

B、4

C>6

D、7

标准答案:D

知识点解析:因为没有break语句,当k二2的时候,会顺序执行两条语句,k=l的

时候,会顺序执行3条语句。

30、设循环队列的存储空间为Q(l:35),初始状态为from=rea『35。现经过一系列

入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为

A、15

B、16

C、20

D、0或35

标准答案:D

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

针front指向排头元素的前一个位置。在循环队列中进行出队、入队操作时,头尾

指针仍要加1,朝前移动。只不过当头尾指针指向向量上界时,其加1操作的结果

是指向向量的下界0。由于入队时尾指针向前追赶头指针,出队时头指针向前追赶

尾指针,故队空和队满时,头尾指针均相等。答案为D选项。

31、设有定义:doublex=5.16894;,则语句(int)(x*1000+0.5)

/1000.);的输出结果是()。

A、5.16900

B、5.16800

C、0.00000

D、输出格式说明符与输出项不匹配,产生错误信息

标准答案:A

知识点解析:(x*1000+0.5)表示x移动3位小数,加0.5,也就是小数第4位加

5,若这位大于等于5,则进1到个位。因为“5.16894*10005168.94+0.5

5169.44”所以(int)(以1000+0.5)强制转换为整型结果为5169。(5169/

1000.0)5.169,由于1000.0结果自动转换为浮点数所以

5.169)结果是5.16900。故答案为A选项

32、若有以下程序#include<stdio.h>main(){inta=0,b=0,c=0c=(a+=++b,b+=4);

printf("%d,%d,%d\n”,ahc);}则程序的输出结果是

A、1,5,1

B、1,5,5

C、-1,4,4

D、

标准答案:B

知识点解析:逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计

算,且逗号运算符的优先级最低,先计算a+=++b,结果a为l,b为1,然后计算

b+=4,b的值为5,逗号表达式的值为其中最后一个表达式的值,所以将5赋给变量c,

即a为l,b为5,c为5,所以选择B。

33、有以下程序:#include#defineM6#defineg(x)(x*M)main(){intm,n,k=l;

m=g(k+l);n=g(2);printf("%d,%d\n”,m,n);}程序运行后的输出结果是

()o

A、7,12

B、12,12

C、7,11

D、7,7

标准答案:A

知识点解析:宏定义一定要先代入再计算表达式的值,m=(k+l*6)=(1+6)=7;

n=(2*6)=12o

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

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,而不是int(x);选项C中不能将

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

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

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

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

B、说明中的a[10]写成叫或*a效果完全一样

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

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

标准答案:B

知识点解析:本题重点考察返回指针值的函数相关知识,返回指针值的函数,一般

定义形式为:类型名*函数名(参数列表)。func函数被定义为指针型函数,它的

形参inta[10]和intn,分别指一维数组a[0]和整型变量n«

36、有以下程序#include<stdio.h>structS{inta;int*b;};main(){int

H

X1[]={3,4},X2[]={6,7);structSx[]={l,xl,2,x2};printf("%d,%d\n,*x[O].b,*x[l].b);}

程序的运行结果是

A、1,2

B、3,6

C、4,7

D、变量的地址值

标准答案:A

知识点3析:程序的执行过程为:定义整型数组xl,x2并进行初始化,两个数组长

度均为2。定义结构体数组X,并为其初始化,则x[0].a=l,x⑼.b=xl,

x[l].a=2,x[0].b=x2o输出x[0]的成员指针b指向的内存单元值,即数组xl的第一个

元素3,输出x[l]的成员指针b指向的内存单元值,即数组x2的第一个元6。程序

的运行结果是3,6,B选项正确。

37、以下对C语言函数的叙述中正确的是

A、调用函数时,只能把实参的值传给形参,形参的值不能传给实参

B、函数既能嵌套定义,乂能递归定义

C、函数必须有返回值,否则不能使用

D、程序中有调用关系的所有函数必须放在同一个源程序中

标准答案:A

知识点解析:C语言不能嵌套定义函数,能递归定义函数,因此B选项错误;函数

可以没有返回值,没有返回值的函数返回类型为void,C选项错误;程序有调用关

系的所有函数可以不放在同一源程序中,D选项错误,答案为A选项。

38、有以下程序#include<stdio.h>#include<string.h>main(){char

str[][20]={uOne*World1',HOne*Dream!"},*p=str[1];printf("%d,”,stiien(p));

printf("%s\n';p);}程序运行后的输出结果是

A、10,One*Dream!

9,One*Dream!

C、9,One*World

D、10,One*World

标准答案:A

知识点解析;unsignedintstrlen(char*s);计算字符串s的(unsignedint型)长

度,不包括'\0'在内;p指向数组的第二个元素,因此slrlen(p)=IO,并打印,成答

案为A选项

39、软件生命周期是指

A、软件的定义和开发阶段

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

C、软件的开发阶段

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

标准答案:D

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

称为软件生命周期。选顶A、B、C选项均为生命周期的一部分。故选D选项

40、下列程序的运行结果是()。#include<stdio.h>voidfun(int*s,int*p){static

intt==3;*p=s[t];t—;}voidmain(){inta[]={2,3,4,5),k,x;for(k=0;k

V,4;k++){fun(a,&x);prinlf("%d,",x);}}

A^5,4,3,2,

B、2,3,4,5,

C、2,2,2,2,

D、5,5,5,5,

标准答案:A

知识点解析:分析fun函数程序段,可知fun函数要实现的功能是将s中第(1+1)个

元素以前的元素“逆置''赋给数组P。由于fun函数定义了静态变量t=3,因此,在

主函数中调用函数fun(a,&x)时,就是要将数组a中前4个元素逆置赋给数组X,

最后输出x数组。

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

41、下列给定程序中,函数fun的功能是:将形参a所指数组中的前半部分元素中

的值与后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,

则中间的元素不动。例如,若a所指数组中的数据为:1,2,3,4,5,6,7,

8,9,则调换后为:6,7,8,9,5,1,2,3,4.请在程序的下画线处填入正确

的内容并将下画线删除.使程序得出正确的结果。注意:部分源程序给出如下。

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

N9voidfun(inta[],intn){inti,t,P;/**********found***********/P=(n%

2==0)?n/2:n/2+[1];for(i=0;i<n/2;i++){t=a[i];

/**********found***********/a[i]=a[P+[2]]•/**********Cund***********/

[3]=t,))main(){intb[N]={l,2,3,4,5,6,7,8,9),i;printf(44\nThe

originaldata:\n");fbr(i=O,i<N;i++)primfC'%4d”,b|i]);primfT'n'');

fun(b,N),printf(k4\nThedataaftermoving:\n'');for(i=0;i<N;i++)printR"%

4d”.b[i]).printf("\n"):)

标准答案:(1)1(2)i(3)a[p+i]或*(a+p+i)

知识点解析:填空1:该处是判断数组元索的个数足奇数还是偶数,为奇数时要使

当前位置加1,使p指向数组中间位置。填空2和填空3:这里是一个比较常见的

数组位置调换程序,应填入i和a[p+i]或*(a+p+i)。

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

42、给定程序MODH.C中函数fhn的功能是:将m(10mRO)个字符串连接起来,

组成•个新申,放入pt所指存储区中。例如:把3个申:“abc”,“CD”,“EF”连

接起来,结果是“abcCDEF”。请改正程序中的错误,使它能得出正确的结果。注

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

#includevoidfun(charstr[][10],intm,char*pt){/**********found***********/

Intk,q,i;for(k=0;k

标准答案:(l)intk,q,i;(2)pt[i]=str[k][li]j

知识点解析:函数的功能是将m(lWmWO)个字符串连接起来。⑴第一标识下是整

型变量k、q和i的定义,根据C语言中整型变量的定义方式,第一标识下应为“int

k,q,i;(2)第二个标识下的“pt[i]=str[k,i|;”语句应该将str中的字符依次拷

贝到3中,根据C语言中对二维数组每一位的取值,应该是str[k][i],所以

“pt[i]=str[k,i]:”改为“pt[i]=str[k][i];

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

43、程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun(int

a[][N]),函数的功能是:使数组左下三角元素中的值全部置成0。例如:a数组中

I97097

238008

454则返回主程序后a数组中的值应为

的值为0°°注意:部分源程序

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

数fun的花括号中填入你编写的若干语句。#inc2ude#inc2ude#defineN5voidfun

(inta[][N]){}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数

据,关闭文件。*/FILE*rf,*wf;inti,j,a[5][5];rf=fbpen(Min.dat”,T);

wf=fbpen(4tout.daf\"w");for(i=0;i<5;i++)for(j=0;j<5;j++)fscanf(rf,"%

d",&a[i][j]);fun(a);for(i=0;i<5;i++){for(j=0;j<5;j++)fprintf(wf,"%

4d“,a[i][j]);fprintf(wf,“\n");)fclose(rf);fclose(wf);)main()(int

a|N][N|,i,j;printf(',x****Thearray*****\n");for(i=0;i

标准答案:inii,j;for(i=0:i

知识点解析:程序功能是使数组左下半三角元素的值全部置成0。(1)对二维数组

常用双重循环结构来处理:外层循环控制二维数组的行处理,内层循环控制二维数

组的列处理。(2)左下半三角元素的下标特点是列下标小于或等于行下标,即

i<=io(3)依次访问二维数组,把符合以上条件的元素的值赋0。该题是对矩阵操

作的考查。

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

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

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

包含一个源程序文件blankl.Co在此程序中,函数fun的功能是:把形参s所指

字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所

指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。例如,形

参s所指的字符串为:abedefgh,n的值为5,程序执行后t所指字符数组中的字符

串应为:dcfgho请在程序的下划线处填入正确的内容并把下划线删除,使程序得

出正确的结果。注意:部分源程序在文件BIANKI.C中。不得增行或删行,也

不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>

#dcfincN80voidfun(char*s,intn,char*t){intlen,i,j=0:lcn=strlcn(s);/

*********found*********/if(n>=len)strcpy([1]);else{/

*********found*********/for(i=len-n»i<=len-1:i++)t[j++]=[2];/

*********fouiid******:*:**/t[j]=[3];))main(){chars[N],t[N];intn;

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

fun(s,n,t);printf("Thestringt:");puts(t),)

标准答案:(1)3s(2)s[i](3)0或、(F

知识点解析:填空1:当给定的长度n大于该字符串s的长度,那么把该字符串直

接拷贝到I就可以了,所以应填3s。填空2:使用for循环语句,把最右边n个

字符依次添加到t中,所以应填s[i]。填空3:字符串操作结束,需要给t加一个

字符串结束符,所以应填0或'\0、

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

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

包含一个源程序文件modil.Co在此程序中,函数fun的功能是:找出一个大于

给定整数mH紧随m的素数,并作为函数值返回。请改正程序中的错误,使它能

得出正确的结果。注意:部分源程序在文件MOD11.C中,不要改动main函数,

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

#include<conio.h>#include<stdio.h>intfun(intm)(inti,k,for(i=m+l;;

i++){for(k=2;k<i;k++)/*********found*********/if(i%k!=O)break:/

*********found*********/if(k<i)return(i).))voidmain(){intn:

system("CLSH);printfC'\nPleaseentern:");scanf("%d",&n);printf("%d\

n",fun(n));}

标准答案:(l)if(i%k==0)(2)if(k==i)

知识点解析:(1)判断当前数是否为素数,若存在一个数(除1和其自身)能整除当前

数,则跳出本次循环,所以if条件应为i%k==0。(2)如果i是素数,则循环结束时

k==i,将该值返回。

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

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

包含一个源程序文件progl.Co在此程序中,请编写函数voidfun(intx,intPP[],

int*n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放

在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,

则有4个数符合要求,它们是1、3、5、15。注意:部分源程序在文件

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

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

stdio.h>#include<stdlib.h>voidfun(intx,intPP[]»int*n){)voidmain()

(FILE*wf;intx,aa[1000],n,i;systemC'CLS");printf("\nPleaseenteran

integernumber:\nM):scanf("%d",&x);fun(x,aa,&n):for(i=0:i<n;i++)

1u

printfC%d",aa|i|);printf("\n);/*********found*********/

wf=fopen(nout.dat","w");fun(30>aa,&n);for(i=0;i<n;i++)fprintf(wf,

“%d",aa[i]),fclose(wf);,/*********found*********/

标准答案:voidfun(intx,intpp[],int*n){inti,j=0;for(i=l;i<=x;i=i+2)/*i

的初始值为1,步长为2,确保i为奇数*/if(x%i==O)/*将能整除x的数存入数

组pp中*/pp[j++]=i;*n=j;/*传回满足条件的数的个数*/}

知识点解析:本题考查:偶数的判定方法;整除的实现。本题题干信息是:能整

除x且不是偶数的所有整数。循环语句中变量i从1开始且每次增2,所以i始终

是奇数。整除的方法,已经讲过多次,这里就不再赘述了。对于本题目要求的不

是偶数的判定方法,即该数对2求余不为0。除本题描述的方法外,还可以通过

for循环语句直接把偶数筛出去,确保参与操作的数均为奇数。

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

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

1、以下叙述中错误的是(V

A、C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文

B、C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

C、用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中

D、C语言源程序经编译后生成后缀为.obj的目标程序

标准答案:B

知识点解析:C语言程序编译时将每条可执行语句转换为二进制的机器指令,但非

执行语句(如注释语句)不被编译。所以选项B错误。

2、下列链表中,其逻辑结构属于非线性结构的是()。

A、二叉链表

B、循环链表

C、双向链表

D、带链的栈

标准答案:A

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

样的链表为单链表或线性链表。带链的栈可以用来收集计算机存储空间中所有空闲

的存储节点,是线性表。在单链表的节点中增加一个指针域指向它的直接前件,这

样的链表,就称为双向链表(一个节点中含有两个指针),也是线性链表。循环链表

具有单链表的特征,但又不需要增加额外的存储空间,仅对表的链接方式稍做改

变,使得对表的处理更加方便灵活,属于线性链表。二叉链表是二叉树的物理实

现,是一种存储结构,不属于线性结构。答案为A选项。

3、软件生命周期是指()。

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

B、软件从需求分析、设计、实现到测试完成的过程

C、软件的开发过程

D、软件的运行维护过程

标准答案:A

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

为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用

为止的整个时期都属于软件生命周期。

4、在prinlf的格式字符中,e格式字符的作用是()c

A、以十六进制无符号形式输出整数

B、以带符号的十进制形式输出整数

C、以指数形式输出实数

D、以字符形式输出,且只输出一个字符

标准答案:C

知识点解析:本题考查printf函数的格式。格式字符“e”或者“E”都表示以指数形式

输出单精度或双精度数。

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

A、函数的形参类型不能是指针类型

B、函数的类型不能是指针类型

C、设有指针变量为double*p,则p+1将指针p移动8个字节

D、基类型不同的指针变量可以相互混用

标准答案:C

知识点解析:C项正确,一般情况下,double类型的变量长度为8个字节,对指针

进行加、减运算时,数字指1个存储单元长度。A项错误,函数的形参可以是

数值类型,也可以是指针类型:R项错误.C语言中有指向函数的指针,称为函数

指针;D项错误,int类型的指针只能指向int,不能指向double,基类型不同的指

针变量不能混用。

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

A、使用三种基本结构构成的程序只能解决简单问题

B、结构化程序由顺序、分支、循环三种基本结构组成

C、C语言是一种结构化程序设计语言

D、结构化程序设计提倡模块化的设计方法

标准答案:A

知识点解析:使用顺序,选择(分支),循环三种基本结构构成的程序可以解决所有

问题,而不只是解决简单问题,所以A)错误。

T

ABC区ABC

a12LZ_L\a12

b21L2JZJb21

c31c31

d32

7、有三个关系R、S和T如下:则由

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

A、选择

B、投影

C、交

D、并

标准答案:D

知识点解析:关系T中的元素是关系R和关系S中不同元素的总和,因此为并操

作。

8、若已定义:inta[]={0,1,2,3,4,5,6,7,8,9),*p=a,i;其中0<9,

则对a数组元素不正确的引用是()。

A、a|p—a]

B、*(&a[i])

C、Pli]

D、a[101

标准答案:D

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

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

9、若x=4,y=5,则x&y的结果是()。

A、0

B、4

C、3

D、5

标准答案:B

知识点解析•:本题主要考查按位与运算的知识点。按位与是对两个运算量相应的位

进行逻辑与,的规则和逻辑与“&&“相同。x=4的二进制为00000100,v=5的二

进制为00000101,x&y=00000100,转化为十进制即为4。

10>下面的程序在编译时产生错误,其出错原因是()。#includemain(){int

l_case;HoalprintF;print?("请输入2个数:");scanf("%d%F,&l_case,

&printF);printf(M%dl_case,printF);}

A、定义语句出错,lease不能屉为变量名

B、定义语句出错,printF不能用作用户自定义标识符

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

D、定义语句无错,printf不能输出1case的值

标准答案:A

知识点解析:C语言变量名可由数字,字母,下划线构成,但首字符不能为数字。

11、结构化程序设计的基本原则不包括()。

A、多态性

B、自顶向下

C、模块化

D、逐步求精

标准答案:A

知识点解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使

用goto语句,所以选择A)o

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

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

d",++b);case2:printf("%du,++b);}}}执行时输入:123〈回车》,则输出

结果是()。

A、233456

B、234

C、223444

D、234344

标准答案:A

知识点解析:这是一个循环结构嵌套选择结构,按照外层循环,内层选择一步一步

处理即可。本题重点注意,switch语句中并没有出现break语句,所以内层循环是

不会跳出的。

13、计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确

的是()。

A、C语言程序仅可以编译执行

B、C语言程序仅可以解释执行

C、C语言程序既可以编译执行又可以解释执行

D、以上说法都不对

标准答案:A

知识点解析:C语言作为计算机高级语言,用它编写的程序必须经过C语言的编译

器编译后,转换为二进制的机器码来运行。

14^有以下程序:#includeintfun(int*k){intb=0;b=*k(+b:return(b);}main()

{inta[10]={1,2,3,4,5,6,7,8),i;for(i=2;i<4;i++){printf("%d",

fun(&a[i]));}printfC'\n');)程序运行后的输出结果是()。

A、1012

B、810

C、34

D、1028

标准答案:C

知识点解析:b是局部变量,因此当i=2时,fun的返回值值为3,i=3时fun返回

值为4。

15、有以卜程序:#include<stdio.h>main(){intk=5;while(—k)printf("%d",k-

=3);printf("\n,');)程序执行后的输出结果是(),

A、1

B、2

C、4

D、死循环

标准答案:A

知识点解析:-k先自减再使用,所以第一次判断条件即为while(4),条件为真,

执行打印k的值k=4-3,结果为1;第二次判断条件即为while(O),条件为假,结束

循环,打印回车换行符。所以选择A选项。

16^有以下程序#inckideintfun(inta,intb){if(b==O)returna;elsereturn(fun(-a,-

-b));)mainO{printff,%d\nM,fun(4,2));}程序的运行结果是()。

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:由程序可知,函数fun(inta,intb)是一个递归函数。所以当主函数中

调用fun。(4,2)时,其执行过程如下:fun(4,2)->fun(3,l)->fun(2,0),其返回

值为2。所以正确答案为选项B。

17、有以下定义语句,编译时会出现编译错误的是

A、chara=,\x2d\

B、chara=>\n,;

C、chara='a';

D、chara="aa";

标准答案:D

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

18、有以下程序:includemain(){char*s={"ABC");do{prinlf("%d",*s%10);

s++:)while(*s):)注意:字母A的ASCII码值为65,程序运行后的结果是()。

A、5670

B、656667

C、567

D、ABC

标准答案:C

知识点解析:每进行一次循环,将输出s指向字母的ASCH码值除以10的余数。

字符A的ASCII码值为65,第一次输出65%10的余数5,执行s++后,指针指向

字母B;第二次输出66%10的余数6,执行s++后,指针指向字母c;第三次输出

67%10的余数7,执行3++后,指针指向串结束标志、0、对应ASCII值为

0,即*s等于0,退出循环。因此,输出结果为567。

19、有以下程序:includemain(){char*a[]={"abed'1,"efr,nghn,"ijk"[;inti;

for(i=0;i<4;i++)printf("%c,',*a[i]);}程序运行后的输出结果是()°

A、aegi

13、dthk

C、abed

D^abedefghijk

标准答案:A

知识点解析:char*a口定义了一个指向数组的指针。*a[O]="abcd”,邸1月4,

a[2]="gh",a[3]="ijk",输出语句要求输出的格式是%c,为一个字符,所以每个元

素输出第一个字符,即aegio

20、有以卜函数定义:inifun(doublea,doubleb){returna*b;}若以下选项中所用

变量都已正确定义并赋值,错误的函数调用是().

A、if(fun(x,y)){.......}

B、z=fun(fun(x,y),fun(x,y));

C^z=fun(fun(x,y)x,y);

D、fun(x>y);

标准答案:C

知识点解析:本题考查函数调用时的参数传递。选项C中第一个参数的表达式不

正确,因此不能得到正确的结果。

21、有以下程序:#include#includestructA{inta;charb[10];doublec;);void

f(structA*t):main(){structAa={1001,"ZhangDaM,1098.0);f(&a);pfintf("%

d,%s,%6.If\nH,a.a,a.b,a.c);)voidinstructA*t){t->a=1002;

strcpy(t->b,"changRong");t->c=1202.0;}程序运行后的输出结果是O。

A^1001,zhangDa,1098.0

B、1002,changRong,1202.0

C、1001,changRong,1098.0

D^1002,zhangDa,1202.0

标准答案:B

知识点解析:本题主要考查是的函数调用时参数之间的传递问题。在C语言中参

数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生

变化。但对于指针调用来说,函数直接对实参的地址操作,因此在这种情况下实参

变化。

22、软件需求规格说明书的作用不包括

A、软件验收的依据

B、用户与开发人员对软件要做什

温馨提示

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

评论

0/150

提交评论