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

下载本文档

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

文档简介

国家二级C语言机试(C语言程序设

计)模拟试卷第1套

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

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

A、循环队列中的元素个数随队头指针与队尾指针的变化而动态变化

B、循环队列中的元素个数随队头指针的变化而动态变化

C、循环队列中的元素个数随队尾指针的变化而动态变化

D、以上说法都不对

标准答案:A

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

针front指向队头元素的前一个位置因此,从队头指针front指向的后一个位置直

到队尾指针rear指向的位置之间,所有的元素均为队列中的元素。所以循环队列

中的元素个数随队头指针和队尾指针的变化而变化。故A选项正确。

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

A、栈底元素一定是最后入栈的元素

B、栈顶元素一定是最先入栈的元素

C、栈操作遵循“先进后出''的原则

D、以上说法均错误

标准答案:C

知识点解析:栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总

是最先被插入的元素,也是最后才被删除的元素;栈的修改是按“后进先出”的原则

进行的。因此,栈称为“先进后出”表,或“后进先出''表,故C选项正确。

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

()。

A、BCA

B、CBA

C、ABC

D、CAB

标准答案:C

知识点解析:后序序列为CBA,中序序列为ABC,则说明,A为根结点,并且B

和C均在A的右子树上;结点B和C中,后序序列为CB,中序序列为BC,则说

明结点C在结点B的右子树上,根据分析可得,该二叉树的前序序列为ABC,答

案选C。

4、结构化程序设计主要强调的是()。

A、程序的规模

B、程序的效率

C、程序设计语言的先进性

D、程序易读性

标准答案:D

知识点解析:结构化程序设计强调的是程序的易读性。

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

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

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

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

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

标准答案:B

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

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

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

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

6、在结构化方法中,软件功能属于软件开发中的()阶段。

A、详细设计

B、需求分析

C、总体设计

D、编程调试

标准答案:C

知识点解析:总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体

实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复

杂的功能进一步分解.分析员结合算法描述仔细分析数据流图中的每个处理,如果

一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。

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

A、程序执行的效率与数据的存储结构密切相关

B、程序执行的效率只取决于程序的控制结构

C、程序执行的效率只取决于所处理的数据量

D、以上说法均错误

标准答案:A

知识点解析:程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结

构、所处理的数据量等有关。

8、关系数据库管理系统所管理的关系是()。

A、若干个二维表

B、一个DBF文件

C、一个DBC文件

D、若干个DBC文件

标准答案:A

知识点解析:在关系数据库中,一个表就是一个关系,关系数据库管理系统管理的

关系就是多个二维表。

9、结构化程序设计中,下面对goto语句使用描述正确的是()。

A、禁止使用goto语句

B、使用goto语句程序效率高

C、应避免滥用got。语句

D、以上说法均错误

标准答案:C

知识点解析:结构化程序设计中,要注意尽量避免got。语句的使用,故C选项正

确。

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

A、T=RCIS

B、T=RUS

C、T=RxS

D、T=R/S

标准答案:B

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

11、以下选项中合法的标识符是()。

A、_11

B、1—1

C、1_1

D、1

标准答案:A

知识点解析:标识符由字母、数字或下画线组成,并且数字不能开头。故A选项

是合法的标识符。

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

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

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

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

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

标准答案:B

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

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

13、若有定义:inta=0,b=0,c=0,d=0;,有C语言表达式(a++&&b++)?c++:

d++,以下关于其执行顺序的叙述中正确是()。

A、先执行a++,表达式a++的值为0,由此即可确定(a++&&b++)值为0,因比执

行d++

B、先执行a++,表达式a++的值为0:再执行b++,表达式b++的值为0,由此可

确定(a++&&b++)值为0,因此执行d++

C、先执行a++,表达式a++的值为1;再执行b++,表达式b++的值为1,由此可

确定(a++&&b++)值为1,因此执行C++

D、先执行b++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可

确定(a++&&b++)值为1,因此执行c++

标准答案:A

知识点解析:把握前置运算和后置运算的基本运算规则。

14、表达式:(int)((douhle)9/2)—(9)%2的值是()。

A、0

B、3

C、4

D、5

标准答案:B

知识点解析:运算符和“%”的优先级高于“一”,所以先进行除法和求余运算,

再进行减法运算。强制类型转换表达式的形式:(类型名)(表达式)。“9/2”结果为

4,转换成double类型再转换成int类型结果依然为4,(9)%2的结果为1,4—1的

最后结果为3o

15、以下选项中叙述正确的是()。

A、函数体必须由{开始

B、C程序必须由main语句开始

C、C程序中的注释可以嵌套

D、C程序中的注释必须在一行里完成

标准答案:A

知识点解析:函数体是函数首部下面的花括号内的部分,所以函数休必须由{开

始,A项正确。一个源程序文件可以包括预处理命令、全局声明、函数定义,程序

总是从main函数开始执行的,不是rflain语句,B项错误。C程序中允许两种注

释,以//开头的单行注释;以/*开始,以*/结束的块式注释,D项错误。函数

可以嵌套,注释不能嵌套,C项错误。

16、若有以下程序段:intr=8:printfC%d\n",r>>l);输出结果是()。

A、16

B、8

C、4

D、2

标准答案:C

知识点解析•:C语言中“>>”是对二进制的右移运算符,右移相当于将原数做除二

操作,它将原数右移相应位数,并将移出的位舍去,在高位补0,将所得的结果再

赋值给变量。本题中8的二进制为00001000,右移一位得到00000100,所以是

40

17、以下能对一维数组a进行初始化的语句是()。

A>inta[5]=(0,1,2,3,4);

inta(5)={};

C>inta[3]={0,I,2);

D、inta{5}={10*1);

标准答案:C

知识点解析:选项A,数组可以看作是若干个相同数据类型元素的有序集合,因此

以集合的形式对其初始叱,使用{}对其初始化;选项BD,常量表达式只能放在中

括号口中.故「选项正确C

18、若有定义:inta;floatb;doublec;,程序运行时输入:123V回车>,能把

1输入给变量a、把2输入给变量b、把3输入给变量c的输入语句是()。

A、scanf("%d%f%ir,&a,&b,&c);

B、scanf("%d%f%l『.,&a,&b,&c);

C、scanf("%d%If%If',&a,&b,&c);

D、scanf("%d%f%f,&a,&b,&c):

标准答案:A

知识点解析:在scanf()函数中,a变量为整数用%d格式字符串,a变量为单精度

数用%f格式字符串,a变量为双精度数用%lf格式字符串,只有A选项正确。

19、下列数据中属于“字符串常量”的是()。

A、

B、{ABC}

C、abc\O,

D、a'

标准答案:A

知识点解析:在C语言中,若干个字符构成字符串,用单引号标识字符,用双引

号标识字符串。选项A,用双引号标识字符串,正确:选项B和C,分别用花括

号和单引号标识字符串,错误;选项D,标识字符。故A选项正确。

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

A、(c==2)||(c==4)||(c==6)

13、(c>=2&&c<=6)||(c!=3)||(c!=5)

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

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

标准答案:B

知识点解析:本题主要考查的是逻辑表达式。逻辑与运算中只有两边的表达式同时

为真,最后结果才为真;参与逻辑或运算的表达式只要有一个为真,最后结果就为

真。选项A中表达式的意思是当c等于2或4或6时,表达式的值为真,否则为

假,所以不满足题意。选项C中表达式的意思是当c大于等于2且小于等于6,并

且c不是奇数时,表达式的值为真,否则为假。此时满足该表达式的c只能取值为

2、4、6,所以也不满足题意。选项D中后面一个子表达式(c%21=1)和选项C中

的!(c%2)是等价的,都是判断c不是奇数,因此也不满足题意。故B选项正确。

21、有以下程序:#include<stdio.h>main()(floata,b,C,t:a=3;b=7;

c=l;if(a>b){t=a;a=b.b=t;)if(a>c){t=a;a=c;c=t;)if(b>c){t=b;b=c;

c=t;)printf("%5.2f,%5.2f,%5.2f,a,b,c);}程序运行后的输出结果

是(其中口代表空格)()。

A、口口3.00,口口1.00,口口7.00

B、口口3.00,口口7.00,口口1.00

C、口口I.00.口口3.00,□□7.()0

D、口口7.00,口口3.00,□□1.00

标准答案:C

知识点解析:本题考查if语句。该题包含了3个if语句,每个if语句后的{}都不

可省略,因为每个什中都包含了多条语句。首先判断条件a>b,由于3小于7,表

达式a>b不成立,因此不执行{l=a;a=b;b=t;);然后判断条件a>c,由于3大

于1,因此表达式a>c成立,则执行{t=a;a=c;c=t;),该表达式语句是用来交

换a和c的值,执行完后a为1,c为3;然后判断条件b>c,由于7大于c中的

3,因此b>c成立,则执行{t=b.b=c;c=t;},过程同上,执行后b为3,c为

7。printf语句用来输出a,b,c中的值,并且要求输出的每个数据宽度为5个空

格,小数部分保留2位,数据右对齐。故最后输出为C选项中所示结果。

22、有以下程序:#include<stdio.h>main(){inta=Lb=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

23、有以下程序:#include<stdio.h>main()(intstlm=10,n=l;while(n<3)

{sum=sum—n;n++;(pnntt("%d»%d"»n,sum);)程序运行后的输出结果是

()o

A、2,8

B、3,7

C、3,8

D、2,7

标准答案:B

知识点解析:考查while循环。当循环条件n<3成立的时候,执行循环体

(sum=sum—n;n++;)中的语句。循环初值sum为10,n为1。首先判断循环条件

n73成立,开始第1次循环,执行sum=sum—n=10—1=9,执彳jn十十,即将n中的

值加1,执行后n为2;此时n中的值为2,sum中的值为9,循环条件n<3成

立,继续执行第2次循环,执行sum=sum—n=9一2=7,执行n++,即将n中的值

加I,执行后n为3;n为3时,循环条件不成立,结束循环,输出结果为3,7。

故B选项正确。

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

A、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式

B、一条语句只能定义一个数组

C、每个数组包含一组具有同一类型的变量.这些变量在内存中占有连续的存储单

D、在引用数组元素时,下标表达式可以使用浮点数

标准答案:C

知识点解析:同类元素的集合称为数组,数组元素在内存中占据连续的存储空间,

答案C正确。方括号中可以为整型变量或者常量表达式,选项A错。在使用逗号

运算符的情况下,一条语句可以定义多个数组,选项B错。数组元素在数组中的

下标为整型常量或者变量构成的整型表达式,不能为浮点数,选项D错。

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

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

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

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

D、数组下标的下限是1

标准答案:A

知识点解析:A正确,charcl,c2,*c3,c4[40]表示定义了两个字符变量cl、c2,

一个字符指针c3,一个字符数组c4。数组的下限永远为0,选项B、C、D错,答

案选A。

26、设有定义:charp[]={T,2,3},*q=p;以下不能计算出一个char型数据

所占字节数的表达式是()。

A、sizeof(*q)

B、sizeof(char)

C、sizeof(p)

D、sizcot(ptOJ)

标准答案:C

知识点解析:数组名表示该数组的首地址,是一个地址常量,所以sizeof(p)求得的

是一个地址占用的字节数,即4个字节,答案选C。

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

A、语句chara[2]={”a”,“b"):是合法的,定义了一个包含两个字符的数组

B、语句inta口={0};是不合法的,遗漏了数组的大小

C、语句inta[8]={0};是合法的

D、语句chara[3]:a="ab":是合法的,因为数组有三个字符空间的容量,可以保

存两个字符

标准答案:C

知识点解析:考查一维数组以及字符数组的初始化。初始化的时候可以只给数组的

前面一部分元素设定初值,故C正确。字符数组中的每个元素为一个字符,需要

用单引号,选项A错。若对数组全部元素赋初值时,可以不指定数组元素的个

数,选项B错。定义字符数组时可以将字符串直接赋给该字符数组,其他情况则

不可以,选项D错。答案选C。

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

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

()o

A、33

B、55

C>35

D、53

标准答案:A

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

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

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

29、有以下程序:#include<stdio.h>main(){intx[3][3]={1,2,3,4,5,6,

7,8,9),i;for(i=l;i<3;i++)printf(',%dH,x[i][3—i]);}程序运行后的输出

结果是()。

A、2,4

B、6,8

C、3,7

D、2,6

标准答案:B

知识点解析:二维数组的起始行标和列标均为O,即x[0][0]=l。当i=l时,for循

环判断条件成立,输出x[l|[2]=6;此时i自增为2,开始第二次for循环,条件成

立,输出x[2][l]=8.故B选项正确。

3。、下列错误的定义是()。

A、int*p=&i,i;

int*p,i:

C、inti,*p=&i;

D、inti,*p;

标准答案:A

知识点解析:选项A,先定义一个整型指针变量p,然后将变量i的地址赋给p。

然而此时还未定义变量i,因此编译器无法获得变量i的地址,A选项错误。A与

C对比,选项C先定义变量i,则在内存中为i分配空间,因此i在内存空间的地址

就可以确定了,然后再定义p,此时可以为p赋i的地址,C选项正确。

31、有以下程序:#include<stdio.h>main(){inta[2][3]=((l,2,3),{4,5,

6)}:intb[3][2],i,j;for(i=0;i<=l;i++){for(j=0;j<=2;j++)

b[j][i]=a[i][j];}for(i=0;i<=2;i++){for(j=0;j<=l;j++)printf("%d",

b[j][j]);}}程序的运行结果是()。

A、123456

B、I35246

C、142536

D、132546

标准答案:C

知识点解析:本题考查for循环的嵌套以及二维数组的赋值和输出。第一个for循

环嵌套用来给二维数组b中的各元素赋值,执行完后得到b[3][2]={{l,4),{2,

5),{3,6}}。第二个for循环嵌套用来输出二维数组b中的各元素。依次输出为

b[0][0],b[0][l],b[l][0|,b[l][l],b[2][0],b[2][l],故输出结果为132546。

,,

32、若有定义语句:charts1="GOOD",*s2="good;以下选项中,能够输出

“GOOD”语句是()。

A、if(strcmp(sl,s2)!=0)puts(s2);

B、if(strcmp(sl,s2)!=0)puts(sl);

C、if(strcmp(sl,s2)==l)puts(sl);

D、if(strcmp(sl,s2)==0)puts(sl);

标准答案:B

知识点解析:strcmp(sl,s2)是字符串比较函数,比较方式是两个字符串从左自右

逐个字符进行比价(按照ASCII码值大小),以第一个不相同字符的大小作为比较结

果。由于大写字母的ASCII码值小于小写字母的ASCII码值,所以比较后的结果

为负值,故只有B选项符合题意。

33、有以卜程序:#include<stdio.h>unsignedfun(unsignednum){unsigned

k=l:do{k*=num%10;num/=10:}while(num):returnk:}main(){unsigned

n=26:printf("%d\nH,fun(n));}程序运行后的输出结果是()。

A、12

B、10

C、16

D、8

标准答案:A

知识点解析:程序首先执行main函数,执行primf「%d\n”,fun(n));即输出表达

式fun(6)的值,为了计算该表达式,需要调用函数func。此时main将n中的26作

为实参传递给fun的num,即num值为26,接着执行do—while语句。第1次循

环,执行k*=num%10,即k=k*(num%10)=1*(26%10)=6;执行num/=10,即

num=num/10=26/10=2;while后面循环条件为num,此时num为2,是非0

值,即表示循环条件成立,继续执行循环体。此时k为6,num为2,执行do-

while中的语句后,k为12,num为0。由丁,while后面循环条件为num,此时num

为0,表示循环条件不成立,结束循环,执行returnk,即返回至main函数中的被

调用处,执行main函数,执行printf语句,输出结果为12。

34、在C语言中,只有在使用时才占用内存单元的变量的是()。

A、auto^11register

extern和register

C、autoflstatic

D、staticregister

标准答案:A

知识点解析:C语言中,动态存储区域中存放的变量在使用时才分配内存空间。

auto变量的存储单元是分配在内存的动态存储区中,每当进入函数体时自动分配存

储单元。register变量也是自动类变量。static说明的变量为静态变量,静态变量在

内存的静态存储中占据着永久的存储单元,直至程序运行结束。extern说明的变量

为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。

35、若有如下定义:char*ps[]={"aa","bb",Hcc","dd");,则以下叙述中正确的

是()。

A、*ps[0]是字符,A,

B、*ps[0]是字符串“aa”

C、ps[0]是字符,A'

D、ps是字符串“aa”

标准答案:B

知识点解析:对于指针数组,ps|O|代表的就是第一个字符串的地址。

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

A、在C语言中,预处理命令行都以#开头

B、预处理命令行必须位于C源程序的起始位置

C、#include<stdio.h>必须放在C程序的开头

D、C语言的预处理不能实现宏定义和条件编译的功能

标准答案:A

知识点解析:C语言中,凡是以#开头的都被称为编译预处理行,选项A正确;预

处理行可以放在C源程序的任何位置,习惯放在起始位置,选项B错误;语句

#include<stdio.h>必须放在使用文件stdio.h中用关方法的语句之前,但是不一

定非要放在C程序开头,选项C错误;预处理包括宏定义、文件包含和条件编译

等,选项D错误。

37、有以下程序:#include<stdio.h>main()(staticchara[]="Program",*ptr;

for(ptr=a;ptr<a+7;ptr+=2)putchar(*ptr);}程序运行后的结果为()。

A、Prog

B、Porm

C、rga

D、Por

标准答案:B

知识点解析:首先定义一个字符型数组a,并对a进行初始化,然后定义字符型指

针变量p。执行for语句,ptr=a表示将数组a的地址赋给ptr;ptr<a+7代表循环条

件,ptr+=2,即ptr=ptr+2。执行putchar(*ptr);即输出*pt所对应的字符。此时ptr

指向数组中的第1个元素,即a[0],因此*ptr表示a[0]中的值,即P,此时输出

P;然后执行ptr+=2,此时ptr指向数组中的第3个元素,即a⑵,输出0;然后执

行阿+=2,此时凡指向数组中的第5个元素,即a[4],输出r;然后执行pir+=2,

此时ptr指向数组中的第6个元素.即输出m:然后执行ptr+=2.得到

ptr=a+8<a+7,即循环条件不成立,循环结束,最终输出结果为Porm。

38、有以下程序:#include<stdio.h>main(){inti;FILE*fp;for(i=0;i<3;

i++){fp=fopen("res.txt","w");fj)utc('K'+i,fp);fclose(fp);}}程序运行后,

在当前目录下会生成一个res.txt文件,其内容是()。

A、M

B、EOF

C、KLM

D、L

标准答案:A

知识点解析:通过三次循环,最后i的值定格在2,最后储存值,K,+2=,M1所以

最后保存的数值为M。注意:fclose函数,每次都关闭文件,并且重新回到文件首

地址。

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

9);main(){printf("%dkn'\a[O].x);}程序运行后的输出结果是()。

A、10

B、18

C、14

D、63

标准答案:c

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

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

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

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

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

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

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

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

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

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

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

标准答案:C

知识点解析:C语言将文件看作是一个字符(字节)的序列,即由一个一个字符(字

节)数据顺序组成。根据数据的组成形式,可将文件分为两种:①ASCII文件,又

称文本(text)文件,它的每一个字节可放一个ASCH码,代表一个字符;②二进制

文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。所以

C文件就是一个字节流或一个二进制流。

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

41、给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、

姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。

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

typedefstruct]intnum;charname[9];floatscore[3J;JSTU;voidshow(STUtt)

{inti;printf("%d%s:",tt.num,tt.name);for(i=0;i<3;i++)printf("%

5.if,tt.score[i]);printf(n\n");}/******found******/voidmodify(J.

*ss,floata){inti;for(i=0;i<3;i++)/******found******/ss—>_2

*=a;}main(){STUstd={1,"Zhanghua'1,76.5,78.0,82.0);floata;

printf("Theoriginalnumberandnameandscores:\n");show(std);printf("Inputa

number:");scanf("%f',&a);/******found******/modifvC3ya);

printf("Aresultofmodifying:\n");show(std);}

标准答案:(l)STU(2)score[i](3)&std

知识点解析:本题考查:数组变量赋值;函数实参定义。本题是利用结构体存储

学生记录,对记录进行修改并由实参SS返回。填空1:实参SS是一个结构型指针

变量,所以应填STU。填空2:该学生的各科成绩都乘以一个系数a,所以应填

score|i]o填空3:函数的调用,由于函数定义时使用的指针结构型变量,所以应

填&std。

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

42、以下给定程序中,函数fun的功能是:判断输入的任何一个正整数n,是否等

于某个连续正整数序列之和。若是,则输出所有可能的序列。否则输出“不能分

解“。例如:当输入100时,输出:100=9+10+11+12+13+14+15+16

100=18+19+20+21+22请改正函数fun中指定部位的错误,使它能得出正确的结

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

程序:#include<stdio.h>voidfun(intn){intj,b,c,m,flag=0;for(b=l;b<

=n/2.b++)[/******found******/n=m:c=b:while(m!=0&&m>=c){/

******jpQund******/JYI=nix:c++}/******found******/

{printf("%d=n,n);for(j=b;j<c—1;j++)printf("%d+",j);printf(H%d\n",

j);flag=1:}}if(flag=O)printf("不能分解\n"):}main(){intn;printf("请输入

一个整数:");scanf("%d'\&n);fun(n);}

标准答案:(l)m=n:(2)m=m―c;C++;(3)if(m==0)

知识点解析:(1)每次循环,程序需要对n执行减去连续的正整数序列,来判断n

是否刚好为0,即n是否是连续的正整数序列之和,所以需要使用临时变量m寄存

n的值,每次循环对m执行减运算操作,不满足继续下一轮,另外程序声明变量m

时,未初始化它的值,所以此处应该修改为:m=n:o(2)语法错误,C语言中每

个语句必须以分号结束,修改为:m=mr;C++;。(3)题目判断n是否是连续的

正整数序列之和。若是,则输出所有序列,程序中m依次减去连续的正整数,当

m为。时,表示m(即n]满足条件,再输出当前序列中的每个正整数,所以此处判

断条件反了,应修改为:if(m==0)。

四、程序设计题(本题共I题,每题7.0分,共[分0)

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

串的前导*号不得多于n个,若多于n个,则删除多余的*号;若少于或等n个,则

不做处理,字符串中间和尾部的*号不删除。例如,字符串中的内容为:******

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

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

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

言提供的字符串函数。注意:请勿改动主函数main和其他函数中的任何内容,仅

在函数fun的花括号中填入所编写的若干语句。试题程序:#include<sldio.h>

voidfun(char*a,intn){)main(){chars[81];intn;voidNONO();printf("Entera

string:n");gels(s);printf(HEntern:M);scanf(*'%d",&n);fun(s,n);

printf("Thestringafterdeleted:n");puts(s):NONO();}voidNONO0{/*本函

数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,

*out;inli,n;chars|811;in=fopen(Hin.dal","r");out=fopen("out.dat",

"wn);for(i=0:i<10:i++){fscanf(in,"%s",s):fscanf(in,"%d",&n);

fun(s,n);fprintf(out,"%s\n",s);}fclose(in);fclose(out);(

标准答案:voidfun(cha「*a,inin){inii=0:intk=0:char*p,*l;p=t=a;/*开

始时,p与t同时指向数组的首地址*/while(*t==,*'){k++;t++:}/*用k来统

计前部星号的个数*/if(k>n)/*如果k大于n,则使p的前部保留n个星号,其

后的字符依次存入数组a中*/{while(*p){a[i]=*(p+k—n);i++;p++;}a[i]=,

\0\/*在字符串最后加上结束标识位*/}}

知识点解析:本题考查:循环判断语句;字符串的操作。字符串中前导*号不能多

于n个,多余的删除。首先需要通过while循环统计字符串前导*号的个数,然后

通过if条件语句完成前导*号的个数和n的比较,如果前导*号多于n个,需要把n

个*号和其余字符重新保留。

家二级C语言机试(C语言程序设

计)模拟试卷第2套

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

1、以下是if语句的基本形式:if(表达式)语句其中“表达式”

A、必须是逻辑表达式

R、必须是关系表达式

C、必须是逻辑表达或关系表达

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

标准答案:D

知识点解析:本题考查if语句,C语言中if语句中的表达式可以是任意合法的表达

式。

2、有以下程序main。{inta=0,b=0,c=0,d=0;if(a=l)b=l;c=2;elsed=3;

printf("%d,%d,%或%(1\/,a,b,c,d),}程序输出

A、0,0,0,3

B、1,1,2,0

C、编译有错

D、0,1,2,0

标准答案:C

知识点解析:if语句的格式为;ifr表达式)语句1else语句2if和else是C语言的

关键字。“语句1”称为if子句,“语句2”称为else子句,这些子句只允许为一条语

句,若需要多条语句时,则应该使用复合语句。因此题目“if(a=l)b=l;c=2;else

d=3;",if分支有两条语句,没构成复合语句。

3、有以下程序main(){inlx=l,y=0;if(!x)y++;elseif(x-O)if(x)y+=2;else

y+=3;printfC%d\ir',y);}程序运行后的输出结果是

A、2

B、0

C、1

D、3

标准答案:B

知识点解析:x=l,if和elseif的条件都不满足,故y值不改变输出。

4、若变量已正确定义,在if(W)pflntf("%d\ll”,k);中,以下不可替代W的是

A^ch=getchar(1

B、a-b+c

C、a<>b+c

D、a++

标准答案:C

知识点解析:在if()语句的括号是一个合法的C语言表达式即可,如果表达式的值

为0,则不执行if语句,否则执行if语句,而在选项C中,符号<>不是C语言的

合法运算符,如果要表达a大于或小于b+c可用a!b+c或(a>b+c)II(ab+Co所以它

不是一个合法的C语言表达式。

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

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

A、a=10b=50c=30

B、a=10b=30c=10

C、a=10b=50c=10

D、a=50b=30c=50

标准答案:C

知识点解析:本题的程序段首先定义三个整型变量a,b,c,并且其初始值分别等

于10.50,30,然后判断a>b是否成立,如果条件成立,则把b的值赋给a,把c

的值赋给b。由a和b的初始值可知,此条件表达式不成立,所以a和b的值保持

不变。再执行下一条语句,把a的值赋给c,所以c的当前值等于10,最后由输出

语句输出变量a,b,c的当前值,分别为10,50,10o

6、设有定义:inta=l,b=2,c=3;以下语句中执行效果与其它三个不同的是

A、if(a>b)c=a;a=b;b=c;

B、if(a>b){c=a,a=b,b=c;}

C^if(a>b)c=a,a=b,b=c:

D、if(a>b){c=a;a=b;b=c;}

标准答案:A

知识点解析:在C语言中,用分号表示一条语句的结束,用{}把几条语句放在一

块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项

B、C)、D)表示的功能相同,而选项A表示的是一条if语句,两条赋值语句。

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

A、必须是整数值

B、必须是正数

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

D、if(a>b){c=a;a=b;b=c;}

标准答案:C

知识点解析:在if语句中,表达式可以是任意合法的数值。当其值为非零时,执

行if语句,为0时执行else语句。

8、有如下嵌套的if语句if(a

A、k=(a

B、k=(a

C、k=(a

D、k=(a

标准答案:D

知识点解析:嵌套的ifelse语句的含义是,在变量a的值小于变量b的值,同时,

变量a的值小于变量c的值时,把变量a的值赋给变量k。在变量a的值小于变量

b的值,同时,变量a的值大于等于变量c的值时,把变量c的值赋给变量k。在

变量a的值大于等于变量b的值,同时,变量b的值小于变量c的值时,把变量b

的值赋给变量匕在变置a的值大于等于变量b的值,同时,变量b的值大于等于

变量c的值时,把变量c的值赋给变量k。

rtJx(x》o)

9、有以下计算公式(x<0)若程序前面已经在命令行中包含

math,h文件,不能够正确计算上述公式的程序段是

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

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

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

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

标准答案:A

知识点解析;由题意可知计算公式的含义是;当x大于等于0时-,y值等于x的算

术平方根;当x小于0时,y值等于x的相反数的算术平方根。所以选项B用一个

完整的ifelse语句表达了计算公式的含义:选项C用两个if语句表达了计算公式

的含义;选项D在求平方根函数的后面用xK)?x:-x条件表达式来表达了计算公式

的含义。选项A没有用C语言语句正确的表达计算公式的含义。

10、有以卜程序#includemain(){intx;scanf("%d",&x);if(x<=3);else

if(x!=10)printf("%d\n”,x);}程序运行时,输入的值在哪个范围才会有输出结果

A、不等于10的整数

B、大于3或等于10的整数

C、小于3的整数

D、大于3且不等10的整数

标准答案:D

知识点解析:题目中,虽然else和第二个if不在同一行上,但等价于在同一行

上,因此,程序的意思是当x大于3且不等于10肘打印出来。

11、有以下程序main(){inta=l,b=2,c=3>d=0;if(a==1&&b++=2)

if(b!=2IIc-!=3)printf("%d,%d,%d\n",a,b,c);elseprintf(n%d,%d,%d

\n",a,b,c);elseprintf("%d,%d,%d\n”,a,b,c);}程序运行后的输出

结果是

A、1,3,2

B、1,2,3

C、I,3,3

D、3,2,1

标准答案:C

知识点解析:a,b,c,d初始值分别为1,2,3,Oo嵌套的if语句中,第一个if

中,表达式a==l&&b++==2值为1,执行嵌套的if分支,此时“b=3,b!=2”成立,

由于运算符是II,不管后面一个表达式的值是不是1,其整个表达式的值总是1,

表达式不执行,最后打印出a,b,c的值是1,3,3。

12、下列条件语句中,输出结果与其他语句不同的是

A、if(a==O)printf("%d\n"»x);elseprintf(',%d\n",y);

B、if(a==O)printf(n%d\,y);elseprintf("%d\n",x);

C、if(a!=O)printf("%d\n".x):elseprintf("%d\n".y):

D、if(a)printf("%d\n",x);elseprintf(n%d\n",y);

标准答案:A

知识点解析:选项B、C)、D)这三条语句都是在变量不等于0的情况下,输出x:

等于0的情况下输出y,而选项A则正好相反。

13、若有以下程序#includemain(){inta=l,b=2,c=3,d=4;if((a=2)II(b=l))c=2;

if((c==3)&&(d=-l))a=5;printf("%d,%d,%d,%d\n3a,b,c,d);)则程序

的输出结果是

A、2,1,2,-1

B、2,2,2,4

C、5,I,2,-1

D、1,2,3,4

标准答案:B

知识点解析:代码中有两条并列的if语句,第一条if语句执行,(a=2)ll(b=l)值为

1,由于逻辑或表达式,根据其短路运算规则,a=2,b=2,即b值不变执行if分支

c=2o并列的if语句中表达式(c==3)&&(d=-l)为逻辑与表达式,c==3不成立,不考

虑d=l表达式,d为5.逻辑表达式值为0,不执行相应if分支。

14、若有以下程序#includemain(){inta=l,b=2,c=3>d=4,r=0;if(a!=l);else

r=l;if(b==2)r+=2;else;if(c!=3)r+=3;else:if(d==4)r+=4:printf(n%d\n',

r);}则程序的输出结果是

A、10

B、6

C、7

D、3

标准答案:C

知识点解析:程序代码中有四条并列的if语句,第一条if表达式a!=l不成立,执

行else分支,r=l;第二条if表达式b==2成立,执行r+=2,r=3;第三条if语句

c!=3不成立,执行else分支,分支为空语句;第四条if分支d==4成立,执行咳if

分支语句,r+=4,r=7o

15,若有以下程序#includemain。{inta=l,b=2,c=3,d=4;

if((a=2)&&(b=1))c=2;if((c==3)II(d=-l))a=5;prin【f("%d,%d,%d,%d\n\

a,b,c,d);}则程序的输出结果是

A、2,1,2,-1

B、2,2,2,4

C、1,2,3,4

D、5,1,2,-1

标准答案:D

知识点解析:代码中有两条并列的if语句,第一条if语句,逻辑与表达式

(a=2)&&(b=1)中.a=2,则执行b=1・得到该逻辑与表达式值为1.执行分支语句

c=2;第二条if语句(c-3)ll(d=l),c==3不成立,执行d二”,而后得出整个逻辑

与表达式值为I,执行分支语句a=5。

16、若有以下程序main(){inta=l,b=2,c=3,d=4.r=0;if(a!=l);elser=1;

if(b==2)r+=2;if(c!=3);r+=3;if(d==4)r+=4;printf("%d\n",r);)则程序的输

出结果是

A、7

B、10

C、6

D、3

标准答案:B

知识点解析:程序代码中有四条并列的if语句,第一条if表达式a!=l不成立,执

行else分支,r=l;第二条if表达式b==2成立,执行r+=2,r=3:第三条if语句

c!=3不成立,执行语句,r+=3,r=6;第四条if分支d==4成立,执行该if分支语

句,r+=4,r=10o

17、以下叙述中正确的是

A、if语句只能嵌套一层

B、不能在else子句中再嵌套if语句

C、if子句和else子句中可以是任意的合法的C语句

D、改变if-else语句的缩进格式,会改变程序的执行流程

标准答案:C

知识点解析:含else子句的it语句的格式为计(表达式)语句1else语句2具中计和

else是C语言的关键字。“语句1”称为if子句,“语句2”称为else子句,这些子句

只允许为一条语句,若需要多条语句时,则应该使用复合语句,对于if和else语

句的嵌套原则是比较自由的。

18、以下选项中与if(a=l)a=b;elsea++;语句功能不同的switch语句是

A^switch(a){case1:a=b:break:default:a++:)

switch(a==l){case0:a=b;break;case1:a++;)

C、swilch(a){default:a++;break;case1:a=b;)

D、switch(a==l){case1:a=b:break:case0:a++;}

标准答案:B

知识点解析:本题主要考查if和switch结构。“if(a=l)a=b;elsea++;”代码段的

功能是如果a等于则把b的值赋值给a,否则a++o选项A使用switch对a进行判

断,如果是1则a=b,跳出switch,如果是其他值则a++;选项B对a==l的结果

进行swilch判断,如果为0表示a不等于1则2=>和题目要求不符合:选项C和

选项A一样;选项D和选项case条件相反,满足题目要求。

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

switch语句是

A、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b:}

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

break:1)

C^switch(a+9){casecl:y=a-b;casec2:y=a+b;)

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

标准答案:B

知识点解析:本题考查switch的使用。选项A中的case。和case4没有break语

句;选项B正确;选项C中的case后面不是常量,错误;选项D中switch后面没

有括号。

20>有以下程序main(){intx=l,y=0,a=0»b=0;switch(x){case1:

switch(y){caseO:a++;break;case1:b++;break;)case2:a++;b++;break;

case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序的运行结果是

A、a=2,b=2

B、a=l,b=l

C^a=l,b=0

D、a=2,b=l

标准答案:D

知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个

switch(x)判断,进入ease1中进行嵌套判断,如果switch(y)也成立,a自加1,遇

到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束

循环,此时a=2,b=lo

21、若有定义:floatx=1.5;inta=l,b=3,c=2;则正确的switch语句是

A、switch(a+b){caseI:printf(H*\nn);case2+1:printfC***\nH);}

B、switch((int)x);{case1:printf(M*\n");case2:printf(H**\n");)

C^switch(x){case1.0:printf("*\n");case2.O:printf("**\n");)

D、switch(a+b){case1:printf(H*\nn);casec:printf(M**\n");}

标准答案:A

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

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

同,各case语句标号的值应该互不相同,选项B中switch后括号表达式出错,选

项C中case后面的常量类型不正确,选项D中case后面出现了变量表达式,所以

D)不正确。

22、下列叙述中正确的是

A^在switch语句中必须使用default

B、break语句必须与switch语句中的case配对使用

C、在switch语句中,不一定使用break语句

D、break语句只能用于switch语句

标准答案:C

知识点解析:break为C语言关键字,乂称间断语句.break语句的功能是跳出F在

执行的条件语句或循环语句。它可以出现在switch语句中,也可以出现在循环语

句中。default是关键字,起标号的作用,代表所有case标号之外的那些

温馨提示

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

最新文档

评论

0/150

提交评论