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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试

卷第1套

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

1>若变量都己正确说明,则以下程序段输出结果为()。#includemain(){char

a='a';intb=2:printf(a>b?"***a=%d":M###b=%d",a,b);)

A、***a=3

B、###b=3

C、***a=3##b=5

D、全部错误

标准答案:D

知识点解析:本题考查prinif函数的格式和三目运算符“?:”的使用。printf函数中

格式说明符之前插入的任何字符都原样输出.本题中为真,所以返回

2、对于循环队列,下列叙述中正确的是

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

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

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

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

标准答案:D

知识点解析:所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位

置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,用队尾指针rear

指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置。循环队列

的主要操作是:入队运算和退队运算。每进行一次入队运算,队尾指针就进一。每

进行一次退队运算,队头指针就进一。当rear或front等于队列的长度加1时,就

把rear或front值置为1。所以在循环队列中,队头指针可以大于队尾指针,也可

以小于队尾指针。

3、若有以下程序段:structst{intn;int*m;};inta=2,b=3,c=5;structst

s[3]=({101,&a),{102,&c),(103>&b));main(){structst*p;p=s;…}则

以下表:式中值为5的是()。

A、(p++)->m

B>*(p++)->m

C、(*p)-m

D、*(H_p)->m

标准答案:D

知识点解析:本题考查如何通过指针引用数组元素。首先定义了一个结构体,然后

定义了一个结构体变量s[3],并赋了初值。在主程序中,定义了一个指向结构体变

量s的指针p,要使表达式的值为5,就应该引用s[l].m的值,使指针p指向

s[l],++p可以实现将p指针加1,指向

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

A、在链表中,如果每个结点有两个指针域,则该链表一定是非线性结构

B、在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是非线性

结构

C、在链表中,如果每个结点有两个指针域,则该链表一定是线性结构

D、在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是线性结

标准答案:B

知识点解析:判断一个非空的数据结构是否为线性结构必须满足以下两个条件:

①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件。选

项B)中,如果有两个结点的同一个指针域的值相等,则说明至少有一个结点有两

个前件,不符合线性结沟的定义,所以答案选B),

5、下面属于白盒测试方法的是()。

A、等价类划分法

B、判定一条件覆盖

C、因果图法

D、错误推测法(猜错法)

标准答案:B

知识点解析:白盒测试法主要有逻辑覆盖、基本路径测试等。其中,逻辑覆盖又包

括语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断一条件覆盖。黑盒测试方法主

要有等价类划分法、边界值分析法、错误推测法和因果图等0

6、若有以下程序,编译时出现错误,你认为出错的是#includemain(){inta=0,

b=0,c=0,d;c=(a+=b,,b+=a);/*第4行*/d=c;;/*第5行*/;/*第

6行*/printf("%d,%d,%d\nH,a,b,c);/*第7行*/}

A、第4行

B、第5行

C、第6行

D、第7行

标准答案:A

知识点解析:第4行出错,在第4行括号中两个逗号不可以为空。单独的分号为C

语言的空语句,是编译程序可以识别并且编译的,因此第5、6行都是正确的。

7、在黑盒测试方法中,设计测试用例的主要根据是()。

A、程序内部逻辑

B、程序外部功能

C、程序数据结构

D、程序流程图

标准答案:B

知识点解析:黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证,黑

盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格

说明,检查程序的功能是否符合它的功能说明,所以本题选择B。

8、设一棵树的度为3,其中度为3,2,1的结点个数分别为4,1,3o则该棵树中

的叶子结点数为

A、10

B、11

C、12

D、不可能有这样的树

标准答案:A

知识点解析:因为任一裸树中,结点总数=总分支数目+1,所以:no+4+l+3=(no*O

+3*4+2*1+1*3)+1,计算结果no=lO。其中,no表示叶子结点。所以选项A正

确。

9、学生和课程的关系模式定义为:S(S#,Sn,Sd,De,Sa)(其属性分别为学号、

姓名、所在系、所在系的系主任、年龄):C(C#,Cn,P#)(其属性分别为课程号、

课程名、先选课);SC(S#,C#,G)(其属性分别学号、课程号和成绩)。关系中包

含对主属性传递依赖的是()。

A、S#—Sd

B、S#->Sd,(S#,C#)-G

C、S#—Sd,Sd—Dc

D、C#TP#,(S#,C#)TG

标准答案;c

知识点解析:关系SC的主属性为(S#、C#),但在SC中S#(学号)单独就可以决定

Sd(所在系),Sd(所在系)可决定De(所在系的系主任),故对主属性传递依赖的是

S#—►Sd,Sd—>Dco

10、sizeof(char)是()。

A、一种函数调用

B、一个整型表达式

C、一个字符型表达式

D、一个不合法的表达式

标准答案:B

知识点解析:“sizeof(char)”是一个C语言的关键字,它不是函数调用。“size。「的

功能是计算出运算对象在计算机的内存中所占用的字节数量,该表达式的返回值是

一个整数,而不是一个字符型表达式。

II、若有以下定义和语句:#include<stdio.h>charsi[10]=''abcd!’',*s2=''\

nl23\\'‘;printf(''%d%d\n'‘,strlen(sl),strlen(s2)):程序的运行结果是()。

A、107

B、105

C、55

D、58

标准答案:C

知识点解析:strlen函数返回字符串的长度,求字符串长度时,遇到结束标志、(T

为止,但是长度不包括结束标识。字符数组si的后5个元素没有赋值,都为〜

0',即-abed!”后为、(F,所以slrlen(sl)的值为5。字符指针s2所指向的字符串

中,\n为转义字符换行符,表示1个字符,\\也为转义字符,代表\,也是1

个字符,其后为字符串结束标识'\0',所以strlcn(s2)的值也为5,因此C选项正

确。

12、若有函数首部血加口((1此怕*[10],皿1*11),则下列针对此函数的函数声明语句

中正确的是()。

A、intfun(double,int);

B、intfun(double*,int*);

C、intfun(double*x,inin);

D、intfun(doublex,int*n);

标准答案:B

知识点解析:函数声明的一般形式为:类型说明符被调函数名(类型形参,类型形

参……);或为类型说明符被调函数名(类型,类型……)o由于函数首部为int

fun(doublex[10],int*n),因此B选项正确。

13、有以下程序:#include<stdio.h>voidf(intb|]){inti;for(i=2;i<6;i++)

b[i]*=2;}main(){inta[10]={l,2,3,4,5,6,7,8,9,10),i;f(a);

for(i=0:i<10:i++)ptinff("%d,n.a[i]):}程序的运行结果是()°

A、1,2,3,4,5,6,7,8,9,10,

B、1,2,6,8,10,12,7,8,9,10,

C、1,2,3,4,10,12,14,16,9,10,

D、1,2,6,8,10,12,14,16,9,10,

标准答案:B

知识点解析:数组名是常量,表示的是数组首元素的地址。当执行f(a)的时候,由

于传递的是首地址,相当于直接对数组a进行操作,所以从数组a的第3个元素

a[2]到元素a[5],每个元素值扩大两倍,因此B选项正确。

14、以下不能输出字符A的语句是(注:字符A的ASCH码值为65,字符a的

ASCII码值为97)

A、printf(n%c\nM,匕'-32);

B、printf("%d\n",'A');

C、printf(',%c\nH,65);

D、printf("%c\n",'B,—I);

标准答案:B

知识点解析:在选项B的输出函数中,大写字符,A,以整型数据的形式输出。

15、以下选项中非法的C语言字符常量是

A、

B、\007,

C^aa'

D、\xaa?

标准答案:C

知识点解析:一个宁符常量代表ASCII字符集中的一个字符,在程序中用单引号

把一个字符括起来作为字符常量。

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

A、AaBc

a-b

C、a_b

D、_1

标准答案:B

知识点解析:在C语言中的用户标识符只能由字母,数字和下划母组成,并且第

一个字符必须是字母或下划线,在选项B中出现了非法的字符“二。

17、以下选项中合法的标识符是

A、1月1日

B、1_1

C、_11

D、1―

标准答案:C

知识点解卜:本题考查标识符定义。合法标识符的要求是由下划线、英文大小写字

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

18、以下叙述中正确的是

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

B、C语言的关系表达式:OVx

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

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

标准答案:A

知识点解析:逻辑表达式的运算比较复杂,有短路现象,也就是首先计算“逻辑与”

或者“逻辑或”运算的第一个运算量的值,根据表达式的值决定是否进行第二个量的

值的计算。“逻辑与”和“逻辑或“运算低于关系运算和算术运算。但是“逻辑非''运算

却高于算*运算。

19、有下列程序:main(){inti,s=O,t[]={l,2,3,4,5,6,7,8,9};for(i=0;

i<9;i+=2)s+=*(t+i);printf("%d\n”,s);}程序执行后的输出结果是

A、20

B、45

C、36

D、25

标准答案:D

知识点解析:本题在主函数中定义了一维整型数组山={123,4,5,6,7,8,9};然后在

foi■循环语句中自变量i从0开始,每次自加2,执行s+=*(t+i)语句,因为C语言规

定数组名代表数组的首地址,也就是第一个元素的地址。因此*(l+i)代表数组的第

i+1个元素。所以程序运行的结果是1+3+5+7+9=25,即变量s的值等于25。

20>有以下程序main。{intk=5,n=0;do(switch(k){case1:case3:n+=l;k-;

break;default:n=0;k—;case2:case4:n+=2;k—;break;}printf("%d,',

n);)while(k>0&&n<5)}运行以后的输出结果是

A、0235

B、235

C、02356

D、2356

标准答案:B

知识点解析:因为变量的初始值分别为k=5,n=0,所以程序第1次进入循环时,

执行default语句,“n=0,k=4",没有break语句,因此执行case2分支语句,n为

2,k为3,程序进行第2次循环,执行“case3:n=3,k=2",输出n值为3,程序

进行第3次循环,执行case3这个分支,结果是“n=5,k=l”,打印出5;这时因为

n=5不满足nV5的循环条件,因此退出循环,程序运行结束。

21、若有以下程序#includevoidsp(int*a){intb=2;a=&b;*a=*a*2;printf("%d,",

*a);)main(){intk=3,*p=&k;sp(p):printf("%d,%d\nn,k,*p);}则程序的输出结果是

A、4,3,3

B、4,3,4

C、6,3,6

D、6,6,6

标准答案:A

知识点解析:首先在主函数中给整型变量k赋值为3,将变量k的地址赋给指针变

量p;调用sp函数,将实参p的值传给形参a,在sp函数中,指针变量a又获得变

量b的地址,通过运算后,输出a的值为4;返回主函数,输出k的值和p的值为

3和3。因此A选项正确。

22、有以下程序程n(intx,inty)main(){staticintm=0,i=2;{intj=Lm=l,k;

i+=m+l;m=i+x+y;returnm;k=fun(j,m);printf("%d,",k);}k=fun(j,m);

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

A、5,5

B、5,11

C、11,11

D、11,5

标准答案:B

知识点解析:子函数fun(intx,inty),将变量m和i声明为局部静态变量,因此第

1次调用主函数后,局部静态变量m和i的值为5和3,第1次函数调用结束时,

它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i的初始值分别

为5和3,即在执行“i+=m+l”时,i的值为9,因此最终m的值为11。

23、有下列程序:main(){inti,s=O,2,3,4,5,6,7,8,9);

for(i=0;i<9;i+=2)s+=*(t+i);printf("%d\n",s);}程序执行后的输出结果是

A、20

B、45

C、36

D、25

标准答案:D

知识点解析:本题在主函数中定义了一维整型数组U]={1,2,3,4,5,6,7,

8,9):然后在for循环语句中自变量i从0开始,每次自加2,执行s+=*(t+i)语

句,囚为C语言规定数组名代表数组的首地址,也就是第一个元索的地址。因此

*(t+i)代表数组的第i+1个元素。所以程序运行的结果是1+3+5+7+9=25,即变量s

的值等于25。

24、有以下程序#includemain(){inta[5]={2,4,6,8,10),*p,**k;p=a;k=&p;

printf(M%d”,*(p++));printfC'%d\n",**k);}程序运行后的输出结果是

A、46

B、44

C、22

D、24

标准答案:D

知识点解析:首先通过p=a使p指向数组的第1个元素,所以输出2;在输出2以

后,由于p++,即p就指向数组的第2个元素,*以就是取出p所指向元素的值,

而p指向的是数组的第2个元素,即输出4。因此D选项正确。

25、若有定义inta;floatb;doublec:程序运行时输入:345V回车,能把值3输入给变

量a、4输入给变量b、5输入给变量c的语句是

A、scanf(,'%d%f%lf,,&a,&b,&c);

B、scanf(n%d%lf%lf&a,&b,&c);

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

D、scanf(n%lf%lf%lf;&a,&b,&c);

标准答案:A

知识点解析:scanf()函数的格式串中,必须含有与输入项一一对应的格式转换说明

符,整型数据、float型数据、double型数据对应的格式转换说明符分别

为%5%f、%lfo所以选择A。

国家二级C语言机试(选择题)模拟试

卷第2套

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

1、下列数据结构中,属于非线性结构的是()。

A、循环队列

B、带链队列

C、二叉树

D、带链栈

标准答案:C

知识点解析:树是简单的非线性结构,所以二叉树作为树的一种,也是一种非线性

结构。

2、在一个容量为15的循环队列中,若头指针fronl=6,尾指针rear=9,则循环队

列中的元素个数为

A、2

B、3

C、4

D、5

标准答案:B

知识点解析:循环外列中,rear表示尾指针,front表示头指针,当有元素入队时,

rear=rear+1,而元素出队的时候,front=front+1,当rear值大于fronl值时,队

列中的元素个数为rear—front,当rear的值小于front时,列队中的元素个数为

rear—front+m(m表示队列的容量)。

3、软件设计中划分模块的一个准则是()。

A、低内聚、低耦合

B、高内聚、低耦合

C、低内聚、高耦合

D、IWJ内聚、局耦合

标准答案:B

知识点解析:一般较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间

的耦合性和提高模块内的内聚性,有利于提高模块的独立性,因此本题答案为B。

4、以下描述中,不是线性表顺序存储结构特征的是()。

A、可随机访问

B、需要连续的存储空间

C、不便于插入和删除

D、逻辑相邻的数据物理位置上不相邻

标准答案:D

知识点解析:线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻

辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在

物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。

5、下列叙述中正确的是

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

B、能采用顺序存储的必定是线性结构

C、所有的线性结构都可以采用顺序存储结构

D、具有两个以上指针的链表必定是非线性结构

标准答案:c

知识点解析:根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数

据结构分为两大类型:线性结构与非线性结构。有序线性表既可以采用顺序存储结

构,又可以采用链式存储结构。所有的线性结构都可.以采用顺序存储结构。

6、以下叙述中正确的是

A、a表示---个字符常量

B、,\(T表示字符0

C、表达式:力,的结果是“假”

D、是非法的

标准答案:C

知识点解析:字符常量可以参加关系运算,按照其存储的ASCH码值进行比

较.不成立,值为假。而、0,表示NULL.ASCII码值为0c

7、设变量均已正确定义,若要通过scanf("%d%c%d%c'',&al,&cl,&a2,

&c2);语句为变量al和a2赋数值10和20,为变量cl和c2赋字符X和Y。下列

所示的输入形式中正确的是(注:□代表空格字符)()。

A、10aXa20aY<CR>

B、10nX20nY<CR>

C、10nX<CR>20Y<CR>

D、IOX<CR>20Y<CR>

标准答案:D

知识点解析:在使用scanf函数进行输入数据时,输入的数据之间可以用空格、回

车符、制表符(Tab键)等间隔符隔开,但是输入值时也要输入相应的字符,格式符

中没有这些字符,所以输入时也不能输入,否则会将这些字符作为对应的字符变量

的值赋值给字符变量,如输入10赋值给al,应直接输入X赋值给cl,否则输入

空格后,将空格赋值给cl,同理输入a2,、c2。。

8、表示关系式xSy9的C语言表达式的是

A^(x<=y)II(y<=z)

B、(x

C、(x<=y)&&(y<=z)

D、(x<=y)!(y<=z)

标准答案:C

知识点解析:表示三个变量的关系,要利用逻辑表达式,用逻辑与连接。

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

A、软件验收的依据

B、用户与开发人员对软件要做什么的共同理解

C、软件设计的依据

D、软件可行性研究的依据

标准答案:D

知识点解析•:软件规格说明书主要有三个作用:①用户和软件开发人员之间的合

同;②开发人员进行设计和编程的依据;③软件工程项目验收的依据。

10、软件设计中模块划分应遵循的准则是

A、低内聚低耦合

B、高内聚低耦合

C、低内聚高耦合

D、iW]内聚悬]耦合

标准答案:B

知识点解析:耦合性与内聚性是模块独立性的两个定性标准。一般一个较优秀的软

件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内

聚性,有利于提高模块的独立性。

11、非法的用户标识符是()。

A、Main

B、_0

C、_int

D、sizeof

标准答案:D

知识点解析:用户标识将只能由字母、下划线和数字组成,且必须以字母或者下划

线开头,不能和C语言的关键字相同。选项A、B和C都符合要求,选项D中的

sizeof是C语言关键字,不能作为用户标识符。

12、若a是数值类型,则逻辑表丑式(a==l)II(a!=l)的值是()。

A、1

B、0

C、2

D、不知道a的值,不能确定

标准答案:A

知识点解析:逻辑或“II”要求只要两边的运算对象有一个非零,结果就为真。虽

然不知道a的值,但是若a为1,则左边运算对象为1;若a的值不是1,则右边运

算对象的值为1,所以总能保证一边非零。

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

A、可以用关系运算符比较字符串的大小

B、空字符串不占用内存,其内存空间大小是0

C、两个连续的单引号是合法的字符常量

D、两个连续的双引号是合法的字符串常量

标准答案:D

知识点解析:比较两个字符串大小用函数strcmp(strl,str2),空字符串有结尾符,

所以也要占用字节,两个双引号表示地是空字符串。

ABC

C31

则由关系R得到关

A、自然连接

B、并

C、选择

D、投影

标准答案:C

知识点解析:关系S是由关系R中的一行元组组成,应通过选择运算得到。

15、若有定义语句doublex,y,*px,*py;,执行了px=&x;py=&y;之后,正

确的输入语句是()。

A、searlf(n%If%lc",px,py);

B、seanf("%f%f'&x,&y);

C、scard“(“%f%F,x,y):

D、seanf("%If%If,x,y);

标准答案:A

知识点解析:因为x和y都是double型数据,所以输入时的格式字符应为%lf,所

以B、C选项错误。D选项中的scanf("%lf%F,x,y);应为scanf(”%lf%f,

&x,&y);o

16、以下叙述中正确的是

A、下面的语句用赋初值方式来定义字符串,其中,’\(T是必须的char

strl[]={'s','匕T,T,n0'};

B、有定义语句:charstrl[]=Hstrl";,数组strl将包含4个元素

C、字符串常量"str『的类型是:字符串数据类型

D、字符数组的每个元素可存放一个字符,并且最后一个元素必须是、(T字符

标准答案:B

知识点解析:选项B中除了字符串中实际字符之外,还要存储字符串结束标志,

应为5个元素。在C语言中没有字符串数据类型,因此选项C不正确,选项D字

符数组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志。

17、以下叙述中正确的是

A、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

13、C语言程序将从源程序中第一个函数开始执行

C、main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等

D、C语言规定必须用main作为主函数名,程序将从此开始执行

标准答案:D

知识点解析:C语言规定必须以main作为主函数名。程序中的main。是主函数的

起始行,也是C程序执行的起始行。每一个可执行的C程序都必须有一个且只能

有一个主函数。一个C程序中可以包含任意多个不同的函数,但只能有一个主函

数。程序要从main。函数开始执行,最后在main。函数中结束。

18,下面选项中关于编译预处理的叙述正确的是

A、凡是以#号开头的行,都被称为编译预处理命令行

B、预处理命令行必须使用分号结尾

C、预处理命令行不能出现在程序的最后一行

D、预处理命令行的作用域是到最近的函数结束处

标准答案:A

知识点解析:在C语言中,凡是以飞”号开头的行,都称为编译预处理命令行。这

些预处理命令组成的预处理命令行必须在一行的开头以“#”号歼始,每行的末尾不

能用“;''号结束,以区别于C语句、定义和说明语句。根据需要,命令行可以出

现在程序的任何一行的开始部位,其作用一直持续到源义件的末尾°

19、以下关于逻辑运算符两侧运算对象的叙述中正确的是

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

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

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

D、只能是整数。或1

标准答案:C

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

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

20、一个工作人员可使用多台计算机,而一台计算机被多个人使用,则实体工作人

员与实体计算机之间的联系是

A、一对一

B、一对多

C、多对多

D、多对一

标准答案:C

知识点解析:如果一个工作人员只能使用一台计算机且一台计算机只能被一个工作

人员使用,则关系为一对一;如果一个工作人员可以使用多台计算机,但是一台计

算机只能被一个工作人员使用,则关系为一对多;如果一个工作人员可以使用多台

计算机,一台计算机也可以被多个工作人员使用,则关系为多对多。

21、若各选项中所用变量已正确定义,函数fun中通过relurn语句返回一个函数

值,以下选项中错误的程序是

A、main(){....x=fun(2»10);.....}floatfun(inta,intb){.....}

B、floatfun(inta,intb){....)main(){.....=fun(i,j);.....}

C^floatfun(int,int);main(){....x=fun(2,10);....)floatfun(inta,intb)(.....)

D、main(){floatfun(inti,intj);....x=fun(ij);.....(floatfun(inta,intb){.....)

标准答案:A

知识点解析:C语言规定,函数必须先定义,后调用(函数的返回值类型为int或

char时除外)。在选项A)中,调用的子函数在调用后面定义,所以不正确。在选项

B)、C)中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在

选项D)中,在主函数中先对于函数floaifun(inii,inij)进行了声明,然后进行调

用。

22、有以下程序#includemain(){inta=0,b=0;for(;a<5;a++){if(a%2==0)

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

A、4

B、10

C、0

D、15

标准答案:A

知识点解析:continue语句用于循环语句的作用是跳过当前循环层余下未执行的语

句,继续执行下一次循环。所以该程序的逻辑是for循环a从0循环到4,b累加的

是不能被2整除的a的值,也就是a=l,a=3这两种情况,答案选A。

23、有以卜程序#include〈stdio.h>intfun(int(*s)[4],intn,intk){intm,i;

m=s[0][k];for(i=l;i<n;i++)if(s[i][k]>m)m=s[i]|k];returnm:)main(){int

a[4][4]={{l,2,3,4),{11,12,13,14),{21,22,23,24),{31,32,33,

34));printf(H^d\n",fun(a,4,0));}程序的运行结果是

A、31

B、34

C、4

D、32

标准答案:A

知识点解析:函数fun(inl(*s)[4],inin,intk)的功能是返回二维数组第k列的最大元

素。在主函数中由于二维数组a[4]⑷已经初始化,所以fun(a,4,0)的值是二维数组

a[用第1列中的最大元素31。

24>有以下程序intfun(intn){if(n==l)retum1;elseretum(n+fun(n-1));}

main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n'\x);}执行程序

时,给变量x输入10,程序的输出结果是

A、54

B、65

C、45

D、55

标准答案:D

知识点解析:在C语言中函数可以递归调用,即直接或间接地自己调用自己。本

题在函数intfun(intn)的定义中又出现了对函数fun的调用,所以函数fun是递归函

数。因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程

为:fun(10)=10+fun(9)=10+9+fun(8)=10+9++8+fun(7)=10+9++8+7+

fun(6)=10+9++8+7+6+fun(6)=10+9++8+7+6+5+fun(4)=10+9++8

+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6

十5十4十3十2十fun(l)—10十9+十8+7十6十5十4十3十2+1一55

25、若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是

()O

A、intn=10,a[n];

B、#definen5inta[2*n];

C、inta[5+5];

D、#defineN10inta[N];

标准答案:A

知识点解析:定义数组时数组的维数需为常量或者常量表达式,不可以用变量更不

可以省略,所以答案选A。

26、以下关于C语言数据类型使用的叙述中错误的是

A、若要保存带有多位小数的数据,可使用双精度类型

B、若要处理如“人员信息''等含有不同类型的相关数据,应自定义结构体类型

C、若只处理“真”和“假”两种逻辑值,应使用逻辑类型

D、整数类型表示的自然数是准确无误差的

标准答案:c

知识点3析:在C语言中没有定义逻辑类型,而是用0代表假,用非零代表真。

27、有以下程序includeincludemain(){charw[20],a[5][10]={"abcder,Mghijkr;

"mnopq","rstuv'*,"wxyz.HJ;inti;for(i=0;i<5;i++)w[i]=a[i][strlen(a[i])-1];

w[5]=\(r;puts(w);}程序的运行结果是()o

A、flqv.

B>agmrw

C^ekpuy

D、flqvz

标准答案:A

知识点解析:该段代码的逻辑是:将二维字符数组a中每个字符串最后一个字符存

放在数组w中并输出,所以答案选A。

28、若有以下程序#includemain(){FILE*fp;inti,a|6]={1,2,3,4,5,6),k;fp=

fopen("data.datH,"w+b");for(i=0;i<6;i++){fseek(fp,OL,0);fwrite(&a[5-i],

sizeof(int),1,fp);}rewind(fp);fread(&k,sizeof(int),1,fp);fclose(fp);printf(M%d",k);}

则程序的输出结果是

A、6

B、1

C、123456

D、21

标准答案:B

知识点解析:本题考查文件操作函数,fseek用于二进制方式打开的文件,移动文件

读写指针位置。将文件内部的位置指针重新指向一个流(数据流/文件)的开头。

所以最后只保留了1,答案为B。

29、若有以下说明和语句intc[4][5],(*p)|5];p=c;能够正确引用c数组元素的

A、p+1

B、*(p+3)

C、*(p+l)+3

D、*(p⑼+2)

标准答案:D

知识点解析:本题考查数组和指针,在本题中c是二维数组,指针p指向二维数组

c,p其实是指向c数组的第一行。因此选项A)中p+1指向c数组的第二行:选项

B)中,p+3表示p指向c数组的第三行,因此*(p+3)表示取出c数组第三行首元素

的地址:选项C)和选项B)类似,表示取出数组c第二行首元素地址然后加3;选

项D)中p[0]+2表示数组第一行第三列元素的地址,因此*(p[0]+2)是取出该元素的

值。

30、下列叙述中正确的是

A、两个连续的单引号(")是合法的字符常量

B、可以对字符串进行关系运算

C、两个连续的双引号("")是合法的字符串常量

D、空字符串不占用内存,其内存空间大小是0

标准答案:C

知识点露析:两个连续的双引号:。是一个字符串常量,称为“空串”。

31、下面选项中合法的字符常量是

A、X

B、,X'

C、,abc,

D、

标准答案:B

知识点解析:字符常量是用单引号括起来的一个字符。A选项中,使用双引号,所

以是错误的;C选项中,'abc,是字符串,字符常量只能是单个字符,不能是字符

串;D选项中,以反斜线"'”开头的是转义字符。因此B选项正确。

32、对长度为n的线性表作快速排序,在最坏情况下,比较次数为

A、n

B、n-1

C、n(n-l)

D、n(n-l)/2

标准答案:D

知识点解析:快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比

较(n-l)+(n-2)+...+l=n(n-l)/2,选D。

33、有以卜程序#include〈stdio-h>#includeVstring.h>typedefstruct{char

name[9];charsex;intscore[2];)STU;STUf(STUa){STUb={"Zhao",'m',

85,90};inti;strcpy(a.name,b.name);a.sex=b.sex;for(i=0:i<2;

i++)a.score[i]=b.score[ij;returna;}main。{STUc={"Qian",T,95,92).

d;d=f(c);printf("%s,%c,%d,%d,",d.name,d.sex,d.score[。],

d.score[l]);printf("%s,%c,%d,%d,",c.name,c.sex,c.score[0],

c.score[l]);}

A、Zhao,m,85,90,Zhao,m,85,90

R、Qian,f.95.92.Qian.f.95.92

C、Zhao,m,85,90,Qian,f,95,92

D、Qian,f,95,92,Zhao,m,85,90

标准答案:C

知识点解析:在C语言中,函数实参与形参之间数据的传递是传值,也就是说在

用实参调用形参时,是:巴实参的值拷贝一份给形参,而实参的值并不变化,仍是原

来的值。所以对于木题来说,在主函数中调f(e)后,实参e的值并不会变化,仍是

原值。在函数f中把局部变量b的值依次返回给变量d。

34、以下选项中合法的常量是

A、999

B、2.7e

C、OXab

D、123E0.2

标准答案:C

知识点解析:A选项中含有非法的空格,所以错误,C语言中十六进制常量以Ox开

头,所以C正确?实型常量中e的前后必须均有数据,且其后必须为整数,所以B和D

错误。

35、以下能正确进行字符串赋值的语句组是()。

A、char*ch;ch="abcn;

B、charch[]={,a;,b,;c,};

C、charch|3]="abcM;

D、charch[4];ch="abc";

标准答案:A

知识点解析:通过赋初值的方式把一个字符串赋给字符数组必须要在字符串的末尾

加上结束标识符xr,没有rr的不能判定该字符数组存放的是字符串,选项B)错

误;用字符数组存放字符串的时候,字符数组的元素个数至少要比存放的字符串长

度要多1,因为结束标识符也会被写入到字符数组中,选项C)错误;数组名为地

址常量,不能对其进行赋值性操作,选项D)错误。答案选A)。

36、C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的

A、关键字可用作用户标识符,但失去原有含义

B、预定义标识符可用作用户标识符,但失去原有含义

C、在标识符中大写字母和小写字母被认为是相同的字符

D、用户标识符可以由字母和数字任意顺序组成

标准答案:B

知识点解析:关键字不可用作C语言的标识符,所以A错误,在标识符中大写字母

与小写字母作为不同字符处理,所以C错误?标识符由下划线、字母,数字组成,且

必须以下划线和字母开始,所以D错误。

37、有以下程序#includevoidfun(char*p,intn){charb[6]="abcde";inli;for(i=0,p=b;i<

n;i++)p[i]=b[i];}main。{chara[6]="ABCDE”;fun(a,5):printf("%s\n”,a);}程序运行后

的输出结果是

A、abcde

B、ABCDE

C、edcba

D、EDCBA

标准答案:B

知识点解析:本题考查数组名作为函数参数,执行f函数时,传进去的a指针跛重

新指向了b,所以原本a数组的地址内容不变,所以输出结果为ABCDE,答案为

B选项。

38、有以卜程序#includemain。{intaa[3][3]={{2},{4},{6}},i,*p二&aa|0][0];for(i=0;i

<2;i++){if(i==O)aa[i][i+l]=*p+l;else++p;printf(n%d",*p);})程序运行后的输巴结

果是

A、26

B、23

C、43

D、46

标准答案:B

知识点解析:观察题目,可以发现,*p=&aa⑼⑼语句实际是将数组aa的首地址赋

给了指针变量p将i的值带入for循环中,i=0aa[0][l]=3,*p=2;*p输出的

是指针所指向的数组值,此时p所指向的是aa[0][0],输出2,而i=l时执行了++p

操作使指针向后移动指向了所以在输出*p时应为3。因此B选项正确。

39、以下关于宏的叙述中正确的是()。

A、宏替换没有数据类型限制

B、宏定义必须位于源程序中所有语句之前

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

D、宏调用比函数调用耗费时间

标准答案:A

知识点解析:宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的

最开头,所以B)选项中宏定义必须位于源程序中所有语句之前是错误的。宏名一

般用大写,但不是必须用大写,所以C选项错误。宏展开不占运行时间,只占编

译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),所以D选

项错误。

40、有以下程序#include#includemain()

{charp[20]={'a','b','c','d'},q[]="abc",r[]="abcde”;strcat(p,r);strcpy(p+strlen(q),q);

printf("%d\n",strlen(p));(短启运行后而输出结果是

A、11

B、9

C、6

D、7

标准答案:C

知识点解析:strcpy:字符串拷贝函数;strlen:求字符串长度函数(注意:不包含

字符串结束标记字符'\0');strcat:字符串连接函数。执行完语句strcat(p,r);后,p

数组中存储的元素为a,b,c,d,a,b,c,d,e;执行语句strcpy(p+strlen(q),q);得到的结果

是将q所指向的字符串拷贝至p+strlen(q)开始的存储位置,因为strlen的值为

3,即p+3开始存储q中的元素。所以执行完strcpy(p+strlcn(q),q)语句后,字符数

组p[20]的存储元素为a、b,c,a,b,c;所以stHen(p)的结果为6。因此C选项正确。

国家二级C语言机试(选择题)模拟试

卷第3套

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

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

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

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

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

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

标准答案:B

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

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

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

和D)错误。

2、下列选项中不符合良好程序设计风格的是

A、源程序要文档化

B、数据说明的次序要规范化

C、避免滥用got。语句

D、模块设计要保证高耦合、高内聚

标准答案:D

知识点解析:一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻

辑思路。程序设计风格总体而言应该强调简单和清晰,程序必须是可以理解的。可

以认为,著名的“清晰第一、效率第二”的论点己成为当今主导的程序设计风格。良

好的程序设计风格主要应注重和考虑下列几个因素:①源程序文档化,包括下列

三个方面:a.符号的命名应具有一定的含义:b.正确的注释能够帮助读者理解程

序:c.视觉组织,可以在程序中利用空格、空行、缩进等技巧使程序层次清晰。

②数据说明的方法,包括下列三个方面:a.数据说明的次序规范化;b.说明语句

中变量安排有序化;c.使用注释来说明复杂数据的结构。③语句的结构应该简单

直接,不应该为提高效率而把语句复杂化。④输入和输出方式和风格应尽可能方

便用户的使用。

3、有以下程序#includevoidmain。{intn=2,k=-l;while(!(k>0IIn++));

printfC^d%d\nM,k,n);}程序运行后的输出结果是O。

A、02

B、13

C、57

D、12

标准答案:D

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

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

否为真,”(k>0||n++)”表达式的值为真。”!(k>0||n++r表达式的值为假,所以while

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

k和n的值是1和2o

4、构成计算机软件的是

A、源代码

B、程序和数据

C、程序和文档

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

标准答案:D

知识点解析:软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执

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

5、在结构化程序设计中,模块划分的原则是

A、各模块应包括尽量多的功能

B、各模块的规模应尽量大

C、各模块之间的联系应尽量紧密

D、模块内具有高内聚度、模块间具有低耦合度

标准答案:D

知识点解析:内聚性是对一个模块内部名个元素间彼此结合的紧密程度的度量.耦

合性是对模块间瓦相连接的紧密程度的度量。在结构化程序设计中,模块划分应遵

循高内聚、低耦合的原则,即减弱模块之间的耦合性和提高模块内聚性,有利于提

高软件模块的独立性。

6、已知字符A的ASCH码值是65,字符变量cl的值是,A\c2的值是,DL则执

行语句printfC%d,%d"fcl,c2-2);的输出结果是()。

A、65,68

B、A,68

C、A,B

D、65,66

标准答案:D

知识点解析:打印时以%€1整型格式打印输出,所以字符变量C1的值打印出来就

是65,从c2-2的值打印出来就是68-2,即66,所以选择D选项。

7、有以下程序#includemain。{inti,i,m=l;for(i=l;i<3;i++){for(j=3;j>0;j-

-){if(i*j>3)break;})printf("m=%d\n",m);}程序运行后的输出结果

A、m=2

B、m=4

C^m=5

D、m=6

标准答案:D

知识点解析:这道题考查了for循环的嵌套应用。对于外层for循环来说,变量i从

1增到2,循环执行2次。当变量i的值等于1时,对于内层for循环来说,变量j

从3减到1,求得变量m的值等于6。当变量i的值等于2时,第一遍执行内层for

循环,变量j的值等于3,那么i*j的值等于6,其值大于3,这时执行break语

句,退出内层for循环的执行。所以程序输出变量m的值为6。

8、以下对C语言中联合类型数据的正确叙述是()。

A、定义了联合变量后,即可引用该变量或该变量中的任意成员

B、一个联合变量中可以同时存放其所有成员

C、联合中的各个成员使用共同的存储区域

D、在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变

标准答案:C

知识点解析:联合体的几个特点:①联合体所占用的内存空间为最长的成员所占

用的空间;②各个成员分量全部是从低地址方向开始使用内存单元;③联合体中

的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌

套。

9、有以下程序:#includevoidmain(){chara[5][10]={uone,\"two","three”,

"fbur",“five”;;inti,j:chart;for(i:0:i<5:i++)for(j=i+l;j<4;j++)

if(a[i||O|>a|j]|O]){t:a|i||0];a[i][0]=a[j][0];a[j][O]=t;puts(a|l|);}}程序运行

后的输出结果是()。

A、twoowo

B、fixowo

C、twofov

D、owooff

标准答案:A

知识点解析:for循环完成的功能是把二维数组a的第一列的字母按从小到大排

序,其他列的字母不变.

10、以下选项中,值为1的表达式是

A、「0'

B、T-0

C、1.'\(T

D、、(r-o

标准答案:C

知识点解析:在C程序中,字符量可参与任何整数运算。字符参与运算时,首先

要将字符转换为其对应的ASCII码值再参与整数运算。字符T对应的ASCII码值

是49,字符U对应的ASCII码值是48,字符、(T是字符串结束标识符NULL,其

对应的ASCII码值是0。

11、有以下程序,程序的输出结果是main(){charcl='A"c2=Y;printf(u%

d,%d\nu,cl,c2);)

A、输出格式不合法,输出出错信息

B、65,90

C、65,89

D、A,Y

标准答案:C

知识点解析:C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。

在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。

12、以下程序的输出结果是()。include#defineN5#defineMN+l#define

f(x)(x*M)main(){intil,i2;il=f(2);i2=f(l+l);pi'intf(''%d%d\n'',il,i2);}

A、1212

B、127

C、1211

Ds117

标准答案:D

知识点解析:本题考查了宏的嵌套定义定义了3个宏定义语句,分别是:#defineN

5、#defineMN+1和#(1©而6胞)a*?4),所以根据C语言的宏交替规则,我们可知,

f(2)=2*N+lA2*5+l=ll,f(l+l)=l+l*N+l=l+l*5+l=7o

13、有以下程序段charname[20];intnum;scanf("name=%snum=%d",name,&num);

当执行上述程序段,并从键盘输入:name二Lilinum=1001v回车,后,name的值为

()O

A、Lili

B、namc=Lili

C、Lilinum=

D、name=Lilinum=1001

标准答案:A

知识点解析:考查scanf的格式输入。如果scanf的””内有■普通字符,则程序调试的

时候必须原样输入,所以字符数组name接受到的字符为Lili,答案选A。

14、以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的

ASCII码值为97)

A、printf("%c\n",H-32):

B、pnntf(H%d\n",,A'):

C、printf(H^c\nH,65);

D、printf("%c\n",'B--l):

标准答案:B

知识点解析:在选项B的输出函数中,大写字符1A-以整型数据的形式输出。

15>有以下程序#include#inckidevoidfun(chars口[10],intn)(chart;inti,j;

for(i=0;is[j][O]){t=s[i][O];s[i][O]=s[j][O];s[j][O]=t;}}main(){char

ss|5]|10|={"bccn,"bbcc",”xy","aaaacc","aabcc”);fun(ss,5);printf(H%s,%

s\n",ss[O],ss[4]):}程序的运行结果是

A、aaaacc,xy

B、bcc,aabcc

C、xy,aaaacc

D、aabcc,bcc

标准答案:C

知识点解析:函数fun(chars[][10],inin)通过两重for循环语句,比较二维字符数

组s口[10]的每个字符串的首字符大小,如果前一个字符串首字符大于后一个字符串

的首字符,则交换这两个字符串的首字符。在丰函数中,语

温馨提示

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

评论

0/150

提交评论