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

下载本文档

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

文档简介

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

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

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

A、算法的时间复:杂度与问题规模无关

B、算法的时间复杂度与计算机系统无关

C、算法的时间复杂度与空间复杂度没有必然的联系

D、算法的空间复杂度与算法运行输出结果的数据量无关

标准答案:A

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

算机工作量是用算法所执行的基本运算次数来度量的,算法所执行的基本运算次数

和问题的规模有关。算法的空间复杂度指执行这个算法所需要的内存空间。为降低

算法的空间复杂度,主要应减少输入数据所占的存储空间及额外空间,通常采用压

缩存储技术v由于在编程时要受到计算机系统运行环境的限制,因此,程序的编制

通常不可能优于算法的设计。算法执行时所需要的计算机资源越多算法复杂度越

高,因此算法的复杂度和问题规模成正比。算法设计时要考虑算法的复杂度,问题

规模越大越是如此。算法的时间复杂度与空间复杂度没有必然的联系。算法的空

间复杂度与算法运行输出结果的数据量无关。故本题答案为A选项。

2、设表的长度为20。则在最坏情况下,冒泡排序的比较次数为()。

A、190

B、20

C、19

D、90

标准答案:A

知识点解析:对长度为n的线性表排序,在最坏情况下,冒泡排序需要比较的次数

为n(n-l)/2。本题中n=20,20x(20-1)/2=190c故本题答案为A选项。

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

A、带链栈的栈底指针是随栈的操作而动态变化的

B、若带链队列的队头指针与队尾指针相同,则队列为空

C、若带链队列的队头指针与队尾指针相同,则队列中至少有一个元素

D、带链栈的栈底指针是固定的

标准答案:A

知识点解析:由于带链栈利用的是计算机存储空间中的所有空闲存储结点,因此随

栈的操作栈顶栈底指针动态变化。带链的队列中若只有一个元素,则首尾指针相

同。故本题答案为A选项。

4、设一棵树的度为3,共有27个结点,其中度为3,2,0的结点数分别为4,1,

10o该树中度为1的结点数为()。

A、12

B、13

C、11

D、不可能有这样的树

标准答案:A

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

中最大的度称为树的度。根据题意,度为3的树第1层1个根结点,第2层3个

子结点,每个子结点下各3个子结点,所以第3层共9个子结点,前3层共13个

结点。第3层有一个结点度为2即有2个子结点,本层其他结点各1个子结点;即

第4层共10个结点。前4层共23个结点。第4层中的两个结点下各有一个子结

点,即第5层有2个结点,此2个结点下各有一个子结点。第3层有8个度为1的

结点,第4层有2个度为1的结点,第5层有2个度为1的结点,8+2+2=12。故本

题答案为A选项。

5、下面描述中正确的是()。

A、好的软件设计应是高内聚低耦合

B、内聚性和耦合性无关

C、内聚性是指多个模块间相互连接的紧密程度

D、耦合性是指一个模块内部各部分彼此结合的紧密程度

标准答案:A

知识点解析:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适

当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合

理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块

之间的耦合应尽可能的低,模块的内聚度应尽可能的高。故本题答案为A选项。

革系统

■353

|功能画面1|功破2.3||功后,1]

[功能功能2.2.2|

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

构图的最大扇出数、最大扇入数的总和是()。

A、5

B、7

C、4

D、8

标准答案:A

知识点解析:模块的扇出是指本模块的直属下层模块的个数。或者说是由•个模块

直接调用的其他模块数。模块的扇入是指有多少个上级模块调用它。题干中某系统

为一个模块,其扇出数目为3,功能2模块扇出数为3,功能3模块扇出数为2,

功能2.2扇出数目为2,故最大扇出数为3。功能2.2.2有2个上级模块调用,

为最大扇入数。3+2=5o故本题答案为A选项。

7、下面属于应用软件的是()。

A、人事管理系统

B、Oracle数据库管理系统

C、C++编译系统

D、ios操作系统

标准答案:A

知识点解析:系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供

各种服务的软件,包括各种系统开发、维护工具软件。应用软件是为了应用于特定

的领域而开发的软件。人事管理系统属于应用软件。Oracle数据库管理系统、C++

编译系统、ios操作系统是系统软件。故本题答案为A选项。

8、下面选项中不是关系数据库基本特征的是()。

A、不同的列应有不同的数据类型

B、不同的列应有不同的列名

C、与行的次序无关

D、与列的次序无关

标准答案:A

知识点解析:在关系数据库中,二维表由行数据组成,每行数据包含若干属性值,

每个属性都有指定的类型和取值范围。数据行数是有限的,每行数据互不相同(元

组唯一性),每行的次序可以任意交换(元组的次序无关性);表中属性名(列各)各不

相同即字段名不重复,属性名(列名)次序可任意交换。故本题答案为A选项。

9、工厂生产中所需的零件可以存放在多个仓库中,而每一仓库中可存放多种零

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

A、多对多

B、一对多

C、多对一

D、一对一

标准答案:A

知识点解析:零件可以存放在多个仓库中,而每一仓库中可存放多种零件,则实体

仓库和零件间的联系是多对多。故本题答案为A选项。

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

名、所在系、所在系的系主任、年龄);C(C撑,cn,P撑)(其属性分别为课程号、

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

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

A、S#一Sd,Sd—Dc

B、S#一Sd

C、S#->Sd,(S#,C#)TG

D、C#一P#,(S#,C#)-G

标准答案:A

知识点解析:设X、Y、Z是关系R中互不相同的属性集合,存在X-Y(Y!TX),

Y一乙则称z传递函数依赖于X。在关系S中S#—Sd,Sd—De。则De传递函数

依赖于S#。故本题答案为A选项。

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

A、计算机能直接运行未经编译的C语言程序

B、循环结构、选择结构、顺序结构是结构化程序的三种基本结构

C、复杂算法不能使用N-5流程图来描述

D、计算机能够直接处理不超过20行源码的简单C语言程序

标准答案:B

知识点解析:任何C语言程序,无论简单或复杂,都必须经过编译、链接生成可

执行文件才能由计算机运行,选项A、D错误;结构化程序的三种基本结构是顺序

结构、选择结构和循环结构,选项B正确;N-S流程图是描述算法的很好的工具,

复杂的算法也是可以描述的,选项错误;本题答案为B。

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

A、C语言程序运行时可以从键盘上读入用户输入的C源程序并附加到木程序的尾

部一并执行

B、C语言程序运行时可以从键盘上读入用户以二进制输入的指令,并执行这些指

C、C语言程序运行时可以从键盘上读入用户输入的C源程序并逐行执行

D、C语言程序运行时可以从键盘上读入用户输入的字符或数据,并依此改变程序

的运行步骤

标准答案:D

知识点解析:C语言运行前,需要将C程序编译、链接,生成可执行程序文件,在

运行可执行文件时,只能从键盘读入用户输入的字符或数据,依据程序的逻辑,来

改变程序运行的步骤,选项D正确;不能从键盘读入C源程序并附加到本程序的

尾部一并执行,选项A错误;也不能直接读入二进制指令并执行,选项B错误;

也不能读入C源程序并逐行运行,选项C错误,本题答案为D。

13、若有程序段chare;doubled:scanf("%lf%c",&d,&c);如果想把2.3输

入给变量d,字符f输入给变量c,程序运行时正确的输入是()。

A、2.3f

B、2.3f

C、2.3T

D、2.3f

标准答案:B

知识点解析:由于变量c是字符变量,所以选项A中的空格会赋给变量c,丢弃

f:选项C会将单引号“.”赋给变量c,丢弃f;选项D会将空格赋给变量c,丢弃单

引号“川和f;本题答案为B。

14、设a、b、c是已定义的整型变量且已正确赋初值,以下赋值语句中,错误的是

()。

A、a=(b=3)=l;

B、a=(b=O)+c+O;

C、a=b=c+O;

D、a=O+(b=c=O);

标准答案:A

知识点解析:C语言中赋值运算符具有右结合性,且括号内的表达式优先级最高,

所以选项A中首先运算b=3,将3赋给b,表达式的值为3,然后再将I赋给3,

这种逻辑是错误的,3是常量,不能被赋值,本题答案为A。

15>若有定义:inta=3;doubleb=0.1263;charch=,a,;,则以下选项中,叙述有

错的是()。

A、逗号表达式的计算结果是最后一个逗号之后的表达式的运算结果

B、运算符%只能对整数类型的变量进行运算

C、语句ch=(unsignedint)a+b;是对a与b之和进行强制类型转换,结果赋值给变

量ch

D、复合运算:a*=b+ch是将变量b、ch之和与a相乘,结果再给a赋值

标准答案:C

知识点诵析:逗号表达式的计算结果是最后一个逗号之后的表达式的运算结果,选

项A正确;运算符%是求模运算符,只能对整数类型的变量进行运算,选项B正

确;复合运算a:1c=b+ch中,先计算b+ch的值,再将a与b+ch之和相乘,结果苒

赋值给a,选项D正确;语句ch=(unsignedinl)a+b中,括号优先级最高,所以首先

将a强制转换成无符号整型,再与b相加,结果赋值给ch,选项C错误;本题答

案为C。

16、以下可以正确且安全的用作用户标识符的一组选项是()。

A、_32int.Iong64

B、Switch,unsigned

C、Abe,getch

D、3break,enter

标准答案:A

知识点解析:C语言中,合法的标识符是由字母、数字和下划线组成,并且第一个

字符必须是字母或下划线,选项D中的3break错误:用户标识符不能是C语言中

的关键字或函数,选项B中的unsigned是关键字,不是合法的用户标识符;选项

C中的getch是库函数名,不是合法的用户标识符;C语言区分字母大小写,选项

B中的Switch是合法的用户标识符;选项A中的两个标识符都是合法的用户标识

符,所以本题答案为A,

17、若有定义:charch;inta;doubled;,当输入为12345678910.36时,以下

选项中能给各个变量正确输入数据的是()。

A、scanf("%d%c%lf\&a,&ch,&d);

B、scanf(H%5d%2c%7.21『,&a,&ch,&d);

C、scanf("%d%c%lf,a,ch,d);

D、scanf("5d%2c%7.21f%",&a,&ch,&d):

标准答案:A

知识点解析:$canf()函数是标准输入函数,其中双引号之间的内容是格式控制串,

后面是输入参数列表。其中输入参数列表中各项都必须是变量地址,所以选项C

错误;在scanf()函数的珞式字符前,可以加入一个正整数指定输入数据所占的宽

度,但不可以对实数指定小数位的宽度,所以选项B、D错误;选项A是正确

的,按照A的输入格式,12345赋值给a,空格赋值给ch,678910.36赋值给d;

本题答案为A。

18、以下选项中,合法的C语言实数是()。

A、3.Ie3.1

B、.2el

C、E09

D、1.23E

标准答案:B

知识点解析•:C语言中,实数有两种表示形式:十进制小数形式和指数形式,木题

各选项都是以指数形式表示。当实数以指数形式表示:尾数E(或e)整型指数。其

中尾数是小数形式的实型常量,E或e是指数形式的标识,又称为阶码标识;整型

指数表示指数的大小。C语言规定,E或e之前的尾数必须要有数字,E或e之后

的整型指数必须是整数,且E或e前后以及数字之间不得插入空格I。综上:本题

答案为B。

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

A、#include〈stdio.h>是C程序的一条语句

B、使用符号'可以将一条include命令写在多行里

C、一j#inchide行可以包含多个文件.文件名用逗号分开

D、一个include行可以包含多个文件,且最后一个文件起作用

标准答案:B

知识点解析:C语言中语句必须是以“;”结尾,#include是文件包含的宏定义,不

属于C语言的语句,选项A错误;一个include只可以包含一个文件,如果需要包

含多个文件,必须使用多j#include命令行,选项C、D错误;#inckide命令如果

太长,可以使用符号、'将命令写成多行,选项B正确,本题答案为B。

20、与数学式(x2-y2).cos(45。)对应的C语言表达式是()。

A、(poW(x,2)-pow(y,2))*cos(3.1415926*45/180)

BN(poW(2,x)-pow(2,y))*cos(3.1415926*45/180)

C、(x*x-y*y)*cos(45)

D、(x"2-y"22)*COS(45)

标准答案:A

知识点解析:x的平方在C语言中有2种表示方法:pow函数和x*x,选项D错

误;pow()菌数第一个参数是底数,第二个参数是指数,所以x的平方是pow(x,

2),选项B错误;余弦值需要使用COS函数,数学上,360度等价于2兀,所以45

度转换成整数是1/4兀,选项C错误;本题答案为A。

21、以下程序拟实现计算s=l+2*2+3*3+...+n*n+...,直到s>1000为止。#include

<stdio.h>main(){ints,n:s=l;n=l;do(n=n+l;s=s+n*n;)while(s>

1000);printfCs=%d\n\s);}程序运行后,不能得到正确结果,以下修改方案

正确的是()。

A、把『11+1;改为n=n"n;

把s=l;改为s=0;

C>把n=l;改为n=0;

D、JEwhile(s>1000);改为while(sV=1000);

标准答案:D

知识点解析:题意中,需要求得n平方和并赋给s,直到s大于1000为止。题目的

程序中使用do…while。循环来实现,每次循环都是将n自增1后求平方,再累加

给s,while循环条件是当s大于1000时,才继续循环,所以本题程序的运行结果

是1+2*2=5,不是正确结果,需要将while的循环条件:s>1000修改为sV

二1000,含义是:当s<=100。时继续循环,否则s>1000后终止循环,本题答案为

Do

22、有如下程序#includeVstdio.h>main(){chara,b;inti;a='3':b='A';

for(i=0:i<6;i++){if(i%2)putchar(a+i);elseputchar(b+i);}}程序运行后的输

出结果是()。

A、AB56EF

B、A4C6E8

C、B4D6F8

D、A5C7E9

标准答案:B

知识点解析:程序首先赋值a为字符,3、赋值b为字符,AL循环变量i的初值为

0,每次循环后自增1,最大值为5,if条件判断i的值,当i的值为偶数时,将b

与i的和当做字符输出;当i的值为奇数时,将a与i的和当做字符输出;所以i为

0时,输出b+0即A;i为1时,输出a+l即4;i为2时,输出b+2即C;i为3

时输出a+3即6……,综上,程序运行结果为:A4C6E8,本题答案为B。

23、设有定义:intSUITRI00,i;以下选项中,能够实现sum-=l+2+3…+10的程序

段是()。

A、for(i=0:i<=10;)sum=sum-i++:

B、i=0;do{sum=sum-++1:}while(i<=10);

C、i=0;while(i<>sum=sum-++i;

D、i=l;for(;i<10;i++)sum=sum-i++;

标准答案:A

知识点解析:题意中sum初值为100,要求实现sum减去I到10之和,选项A

中,for循环将i从0循环到10,每次循环都用sum减去i的当前值,再将i自增

1»满足题意,选项A正确;选项B中,使用do...while。循环,每次循环前i先自

增1,然后用sum减去i自增后的值,由于i初值为0,所以第一次循环sum减去

1,直到i为1。时,继续循环,i自增1后,sum减去11,不满足题意,选项B错

误;选项C中while循环条件iV>不合法,错误;选项D中,循环终止条件为i

<10,所以结果是sum累减1—9中所有奇数之和,不满足题意;本题答案为A。

24、有下列程序#includeVstdio.h>main(){inta=123456,b:while(a){b=a%

10;a/=10;switch(b){default:printt("%d",b++);easel;case2:printt("%

d",b++);break;case3:printf("%d”,b++);break;case4:printf(n%d",

b++);}}}程序执行后的输出结果是()。

A、76654321

B、112345667

C、67564321

D、654321

标准答案:C

知识点解析:程序中a的初值为123456,while循环的终止条件为a为。;每次循

环,都将a的最后一位数字赋给b,a除以10后(丢弃最后一位)重新赋给a,所以

循环过程中,a(b)的取值为123456(6)、12345(5)、1234(4)、123(3)、12(2)、1(1);

循环体中,每次循环都对b执行switch语句,当b的数值不等于1、2、3、4时,

首先执行default'语句,输出b并将b自增1,再执行rase1,case2语句,输出自增

后的b值;当b的数值等于1、2、3、4时,只执行case语句,输出b的值;综

上,当b为6、5时,分别输出67、56;当b为4、3、2、1时,分别输出4、3、

2、1,最终程序输出结果为:67564321,本题答案为C。

25、有以下程序#inchideVsldio.h>main(){chari,j,n;fbr(i=T;iV='9';

i++){if(i<,3^continue;fbr(j=,O,:jV='9':j++){if(j<^211.T>=...4)continue:

n=(i-,0,)*10+j-,0,;printf(',%dn,n);}if(i=,4,)break;}printf(H\n");}程序运

行后的输出结果是()。

A、32334243

B、30314041

C、34354445

D、35364546

标准答案:A

知识点解析:数字字符。一9的ASCH码值是连续递增的,即“,比,(T的ASCII码

值大1……所以题意中,外层for循环的循环变量i取值为“'、'21...........,夕:内层

for循环的循环变量j取值为,(T、……9;另外外层for循环的循环体中if(iV

,3,)语句表示当i的ASCH码小于字符,3"的ASCH码值时,执行conlinue语句跳入

下一次循环(i的ASCII码值自增1);if(i==,4。语句表示当i是字符4时,执行

break语句跳出循环;同理,内层for循环中的if(j<2田>=4)语句在j的值不等

于,2,、3'时,执行conlinue跳入下一次循环;综上,只有在i取值为3或Z,,j取

值为2或3时,才执行语句:n=(i-,0,)*10+j-,0,;和primf(”%d",n);所以当i取

值为3时,j取值为2,n的值为3*10+2=32,输出32(空格),j取值为3,n的值

为3*10+3=33,输出33(空格);当i取值为4时,j取值为2,n的值为

4*10+2=42,输出42(空格);j取值为3,n的值为4*10+3=43,输出43(空格):所

以程序最终输出结果为:32334243,答案为A。

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

A、无论指针变量P具有何种基类型,表达式p=p+l都代表指针p移动一个字节

B、指针变量具有基类型,基类型不同的指针变量不能直接相互赋值

C、指针变量的赋值操作:p=0;是非法的

D、通过指针变量存取某个变量值的方式称为“直接存取”方式

标准答案:B

知识点解析•:指针自增或自减1,移动的字节数与指针变量指向的具体类型有关,

假设指针变量p指向的是int类型,那么p=p+I表示指针p移动4个字节(通常int

类型占4个字节),选项A错误;将。赋给指针变量,表示指针变量的值为空,这

是合法的,选项C错误;通过指针变量存储指向的地址的值,称为“间接存取”方

式,选项D错误;指针变量具有基类型,基类型不同的指针变量不能直接相互赋

值,选项B正确;本题答案为B。

27、有以下程序#includcVstdio.h>voidswap(int*a,int*b)(intt,*tp;t=*a;

*a=*b;*b=t;tp=a;a=b;b=tp;printf("%d,%d,",*a,*b);)main(){int

i=3,j=7,*p=&i,*q=&j;swap(p,q);printf(H%d,%d,%d,%d”,i,j,

*p,*q):}程序执行后的输出结果是()。

A、3,7,3,7,3,7

B、7,3,7,3,7,3

C、3,7,3,7,7,3

D、3,7,7,3,7,3

标准答案:D

知识点解析:main。函数中,首先定义两个整型变量i和j,初值为3和7,并洛i

的地址赋给p,j的地址赋给q,传给swap。函数,swap。函数接收两个整型指针变

量a,b,然后使用整型变量t交换a、b所指向的值并输出,通过指针变量,这次

交换改变丫实参i、j的值,使得i=7,j=3;指针变量tp交换a和b的值,由于a、

b的值是p,q值的拷贝,所以这次交换只改变了形参a,b的值,对实参p,q的值

没有改变,所以此时a指向i,b指向i,函数最后输出*a和*b,所以输出3,7;

由于swap。函数改变了p和q指向的值,但未改变p,q的值,所以main。函数输

出i的值为7,j的值为3,*p的值为i,*q的值为j,所以程序输出:3,7,7,

3,7,3,本题答案为D。

28、对于函数声明voidfun(floatarray口,int*ptr);以下叙述正确的是()。

A、函数fun的参数array,plr都是指针变量

B、函数fun的参数array是数组名,ptr是指针变量,它们有木质区别

C、调用函数fun时,实参数组元素个数可以比形参array数组元素个数多

D、调用函数fun时,传送给形参array的应是数组的所有元素

标准答案:A

知识点解析:fun()函数两个参数:array和ptr,返回值为void类型,其中array是

float数组名,pir是整型指针变量,C语言中,数组名本身就是一个地址,作为形

参时,数组退化成指针类型,所以array就是一个指针变量,选项A正确,B错

误;调用函数fun()时,实参数组元素的个数与形参array数组元素个数相同,选项

C错误;调用函数fun()时,传递给形参array的只是实参数组的首地址,选项D错

误,本题答案为A。

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

A、'\x4「和'101,都是转义字符常量

B、\\与\\,都是字符串常量

C、是空的字符串,”是空字符NULL

D、\!!和,\11,都是回车字符

标准答案:A

知识之解析:C语言中,双引号””括起来的是字符串,单引号''括起来的是字符,

选项B错误;””是长度为0的字符串,它包含字符串结束标志符、(T,所以不是

空字符串,选项C错误;'\n,是回车字符,“\n”是字符串,它还包括字符串结束

标志符、\0',选项D错误;C语言中,以开头的字符属于转义字符,其中、\

ddd',ddd是三位八进制数,它代表一个ASCII字符,'\xhh',hh是两位十六进制

数,也代表一个ASCH字符,所以A选项中两个都是转义字符常量,本题答案为

Ao

30、以下选项中,能够正确利用随机函数rand(),产生一个英文字母的表达式是

()。

A、rand()%2==0?rand()%?A':rand()%,a,

B、rand()%26+'A'|kand()%26+'a'

C、rand()%26+'A'&&rand()%26+、'

D、rand()%2==0?rand()%26+'A':rand()%26+'a'

标准答案:D

知识点解析:rand()函数是产生随机数的函数,它可以生成0〜RAND_MAx之间的

一个随机数,其中RAND_MAx是stdlib.h中定义的一个整数。通常如果我们需

要随机0〜N-1之间的一个随机数,需要使用rand()的结果对N求模即可。选项A

中,rand()%2只有两个值。或1,所以当mnd()%2的结果为0时,整个表达式的值

是rand()%,AL这里,A,要转换成ASCII码值65,所以结果为0〜64之间的一个随

机数,当rand()%2的结果为I时,整个表达式的值是rand。%4,'a'的ASCII码

值为97,所以结果是0〜96之间的一个随机数,可见选项A错误;逻辑或运算符||

或逻辑与运算符&&的结果都只能是。或非0,所以选项B、C也是错误的;选项

D中,如果rand()%2的结果为0,那么整个表达式的值为rand()%26+'Al0〜25

之间任一个数与,A,的和都是一个大写字母;如果mnd()%2的值为1,整个表达式

的值为rand()%26+/,0〜25之间任一个数与言的和都是一个小写字母,所以选

项D正确;本题答案为D。

31、若有定义,inla=3,*p=&a,**q=&p;,则以卜叙述中错误的是()。

A、q是指针变量,*q就是变量a

B、P是指针变量,p指向变量a

C、q指向变量p,所以*q指向变量a

D、*p与**q都代表变量a

标准答案:A

知识点解析:由题意可知:指针变量p指向变量a,p的值是a的地址;指针变量q

指向变量p,q的值是p的地址,所以q是指针变量,q指向p,*q是变量p,选项

A错误;p也戛指针变量,p指向a,选项B1E确;由于q指向p,所以*q籍向a,

选项C正确;*p和**q都是代表变量a,选项D正确,本题答案为A。

32、有下列程序#inckide<stdio.h>voidf(intx[],intn){if(n>1){printf("%d",

x[n-l]);f(x,n-1);printf("%d",x[n-1]);}elseprintf(n%d">x[n-l]);[main()

{inta[4]={l,2,3,4);f(a,4);}程序执行后的输出结果是()。

A、1234321

B、43211234

C、4321234

D、12344321

标准答案:C

知识点解析:f()函数有两个参数:数组首地址x和数组元素个数n,当n大于1

时,执行首先输出最后一个元素然后递归调用自身;直到n等于1时再次

输出然后回到上一层调用,输出x[n-l];main。函数定义一个数组a,包含

四个元素:1,2,3,4,然后调用f函数f(a,4),此时形参x等于a,形参n的值

是4,所以输出a[引即4,接着调用f(a,3),输出3,调用f(a,2)输出2,调用

f(a,1)输出1;接着再逐步回到上一层的调用:f(a,2)输出2,f(a,3)输出3,

f(a,4)输出4,最终程序输出结果为:4,3,2,1,2,3,4,本题答案为C。

33、有以下不完整函数intfun(char*p){ehar*f=p:while(*t++):

rcturn():}该函数的功能是:计算p所指字符串占用内存单元的个

数,作为函数值返回。return语句下划线处应填入的是()。

A^t-p

B、*t

C、*t-*p

D、t

标准答案:A

知识点解析:fun。函数参数是字符串的首地址p,函数首先将首地址p赋给t,然

后通过while循环遍历指针t,直到t指向字符串结束标志符、(F,此时循环结

束,t指向、(T,p指向首地址,所以p指向的字符串所占存储单元个数就是:t-

p,本题答案为A。

34、有下列程序#includcVstdio.h>#inckidcVstring.h>main()(char

v|4|[10]={nefg\"abed",nmnopq","hijkl"),*p[4],*t;inti,j;for(i=0;i<4;

i++)P[i]=v[i];for(i=0;i<3;i++)fbr(j=i+1;j<4;j++)if(strcmp(p[i],p[i])>0)

{t=p[i];p[i]=P[i]:p[i]=t;}for(i=0;i<4;i++)printf("%s",p[i]);}程序执行后

的输出结果是()。

A、efgabedhijklmnopq

B、abedefghijklmnopq

C>mnopqhijklefgabed

D、efgabedmnopqhijkl

标准答案:B

知识点解析:main。函数中定义一个二维数组v,另外还定义一个指针数组p,通

过for循环,将v的各个行(字符串的首地址)赋给p的对应下标的元素•,然后通过

嵌套的for循环,为该二维数组中存放的各个字符串进行排序,stemp函数返回值

大于0时(p[i]>p[i])交换两个宇符串,所以每一轮内嵌的for循环,都将下标为i的

字符串放在最终的排序位置上,即排序规则是按字符串升序排列,字符串排序时,

是将两个字符串自左向右逐个字符比较(按字符的ASCII码大小),直到出现不司的

字符或遇到'0'为止,排序后,再将v中各个排序后的

35、有以卜程序#include<sidio.h>#defineSl(z)4*z+4*(z)#defineS2(x,

y)4*(x)*(y)+y*xmain(){inta=l,b=2;printf("%d,",Sl(a+b));printf("%d,",

S2(a,b)+Sl(3));printf("%d",S2(3+a,b+3));程序执行后的输出结果是()。

A、18,34,100

B、24,34,92

C、24,34,100

D、18,34,92

标准答案:D

知识点解析:程序中SI和S2都是宏定义,所以Sl(a+b)宏展开后的表达式为:

4*a+b+4*(a+b),BP4*1=1+2+4*(1+2),结果为18;S2(a,b)宏展开的表达式为:

4*(a)*(b)+b*a,BP4*(1)*(2)+2*1,结果为10;S1⑶宏展开后的表达式为:

4*314*(3),结果为24;S2(3ia,b13)宏展开的表达式为;

4*(3+a)*(b+3)+b+3*3+a,即4*(3+1)*(2+3)+2+3*3+1,结果为92,本题输出:18,

34,92,答案为D。

36、设有定义#includc〈stdio.h>#includc<stdlib.h>typedefstruct{intx,

y;)T;typedefstruet{intx,y;}*USER;USERfun(){USERp;

p=(USER)malloc(sizeof(T));p->x=l:p->y=2:returnp:}函数fun返回值的类

型是()。

A、T类型的结构体

B、指向结构体类型的指针

C、int类型的元素

D、int类型的指针

标准答案:B

知识点解析:由题意可知:使用lypeclef将类型:s【ruel{intx,y;产重命名为

usER,所以函数fun的返回类型而struct{intx,y:}*,即指向结构体类型的指

针,本题答案为B。

37、有以下宏定义及调用#defineHA2#defineHB(a)(HA+l)*a

x=HA*(HA+HB(2));则以下判断正确的是()。

A、宏定义不允许嵌套

B、x的值是6

C、x的值是16

D、宏调用不允诧嵌套

标准答案:C

知识点解析:C语言中,宏定义和宏调用都是允许嵌套的,选项A、D错误:根据

题意,将表达式x=HA*(HA+HB(2))宏展开为:x=2*(2+(2+l)*2),所以结果为

x=16,选项B错误,C正确;本题答案为C。

38、若以“a+”方式打开一个已存在的文件,以下叙述正确的是()。

A、文件打开时,原有文件内容不被删除,可以进行添加和读操作

B、文件打开时,原有文件内容不被删除,位置指针移到文件开头,可以进行重写

和读操作

C、文件打开时,原有文件内容不被删除,位置指针移到文件中间,可以进行重写

和读操作

D、文件打开时,原有文件内容被删除,只可进行写操作

标准答案:A

知识点解析:C语言文件打开时,打开方式“a+”表示打开一个文本文件,从文件开

始位置读,在文件尾部添加数据,如果指定的文件不存在,系统将使用调用

fopcn()时指定的文件名创建一个新的文件,如果指定的文件存在,那么文件原有内

容将被保存,新的数据追加到原有文件之后,本题答案为A。

39、有下列程序includeVstdio.h>main(){FILE*fp;inti,a[6]={l,2,3,4,

5,6);fp=fopcn("d.dat"»"w+b");for(i=0;i<6;i++)fwritc(&a[i],

sizeof(int),1,fp);revzind(fp);fread(&a[3],sizeof(int),3,fp);fclose(fp);

for(i=0;i<6;i++)printfC%d,%a[i]);}程序执行后的输出结果是()。

A、4,5,6,4,5,6,

B、1,2,3,4,5,6,

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

D、1,2,3,1,2,3,

标准答案:D

知识点解析:程序首先以读和写二进制文件的方式打开文件d.dat,然后通过for

循环,调用fwritc()函数将数组a中的各个元素写入到d.dat中,然后使用

rewind。函数,将文件指针fp重定位到文件的开始位置,再调用fread()函数将文件

的前三个整数1,2,3读入a[3]开始的位置,所以此时数组a中的元素值分别为:

1,2,3,I,2,3,本题答案为:D

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

40、下列给定程序中,函数fun的功能是:从形参ss所指字符串数组中,删除所

有串长超过k的字符串,函数返回剩余字符串的个数。ss所指字符串数组中共有N

个字符串,且串长小于M。请在程序的下划线处填入正确的内容并将下划线删

除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增

行或删行,也不得更改程序的结构!#includcVstdio.h>#include<string.h>

#deftneN5#defineM10intfun(char(*ss)[M],intk){inti,j=0,len;/

**********found**********/for(i-O;iV[1];i++){len=strden(ss[i]);/

**********found**********/if(len^^=[)])/***:*******found**********/

strcpy(ss[j++],[3]);}returnj;)main(){charx[N][M]={t"BeijingH,

"Shanghai","Tianjin",MNanjing","Wuhan11};inti,f:plintf("\nTheoriginal

string\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");f=fun(x,7);

printf("Thestringwitchlengthislessthanorequalto7:\n");for(i=0;i<f;

i++)puts(x[i]);printf("\n"):}

标准答案:(l)N(2)k(3)ss[i]

知识点解析:填空1:for循环语句作用是遍历字符串数组中的每一个字符串,所

以循环变量i的循环条件是iVN。填空2:题目要求删除串长度小于k的字符串,

所以if条件语句的条件表达式是l

温馨提示

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

评论

0/150

提交评论