计算机二级C语言选择题附答案解析_第1页
计算机二级C语言选择题附答案解析_第2页
计算机二级C语言选择题附答案解析_第3页
计算机二级C语言选择题附答案解析_第4页
计算机二级C语言选择题附答案解析_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

第一套

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

A)所谓算法就是计算方法

B)程序可以作为算法的•种描述方法

C)算法设计只需考虑得到计算结果

D)算法设计可以忽略算法的运算时间

答案:B

【解析】算法是指对解题方案的准确而完整的描述,算法不等于数学上的计算方法,也不等

于程序,A选项错误。算法设计需要考虑可行性、确定性、有穷性与足够的情报,不能只考虑

计算结果,C选项错误。算法设计有穷性是指操作步骤有限且能在有限时间内完成,如果一

个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的,I)选项错误。算

法在实现时需要用具体的程序设计语言描述,所以程序可以作为算法的一种描述方法,B选

项正确。

(2)下列叙述中正确的是

A)一个算法的空间复杂度大,则其时间复杂度也必定大

B)一个算法的空间复杂度大,则其时间复杂度必定小

C)一个算法的时间且杂度大,则其空间复杂度必定小

D)算法的时间复杂度与空间更杂度没有直接关系

答案:D

【解析】算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,

是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。

(3)下列叙述中错误的是

A)数据结构中的数据元素不能是另一数据结构

B)数据结构中的数据元素可以是另一数据结构

C)空数据结构可以是线性结构也可以是非线性结构

D)非空数据结构可以没有根结点

【答案】A

【解析】数据元素是一个含义很广泛的概念,它是数据的“基本单位”,在计算机中通常作为

一个整体进行考虑和处理,数据元素可以是一个数据也可以是被抽象出的具有一定结构数据

集合,所以数据结构中的数据元素可以是另一数据结构。

满足有且只有一个根结点并且每一个结点最多有一个前件,也最多有一个后件的非空的数据

结构认为是线性结构,不满足条件的结构为非线性结构。

空数据结构可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点,如非性线

结构“图''就没有根结点。故选A选项

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

A)多态性

B)自顶向下

C)模块化

D)逐步求精

答案:A

【解析】结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用got。语句,

所以选择A)。

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

A)禁止使用goto语句

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

C)应避免滥用goio语句

D)以上说法均错误

答案:C

【解析】结构化程序设计中,要注意尽量避免got。语句的使用,故选C。

(6)下列叙述中正确的是

A)软件是程序、数据和文档

B)软件是程序和数据

C)软件是算法和数据结构

D)软件是算法和程序

答案:A

【解析】计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,

与软件开发、运行、维护、使用等有关的文档。故选A选项

⑺软件生命周期是指()。

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

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

C)软件的开发过程

D)软件的运行维护过程

答案:A

【解析-】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周

期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于

软件生命周期

(8)卜面能作为软件需求分析工具的是

A)PAD图

B)程序流程图

C)甘特图

D)数据流程图(DFD图)

答案:D

【解析】软件需求分析方法包括结构化分析方法和面向对象的分析方法两大类,前者常用工

具为数据流图(DFD)、数据字典(DD)、判定表、判定树等。故D选项正确。

(9)在数据库管理系统提供的数据语言中,负贡数据的查询、增加、删除和修改等操作的是

A)数据定义语言

B)数据管理语言

C)数据操纵语营

D)数据控制语言

答案:C

【解析】数据库管理系统提供了相应的数据语言,它们是:数据定义语言,该语言负责数据

的模式定义与数据的物理存取构建;数据操纵语言,该语言负责数据的操纵,包括查询与增、

删、改等操作:数据控制语言,该语言负责数据完整性、安全性的定义与检查以及并发控制、

故障恢复等功能。C选项正确。

(10)在数据库系统中,考成数据库实现的数据模型是

A)概念数据模型

B)逻辑数据模型

C)物理数据模型

D)关系数据模型

答案:B

【解析】数据模型按照不同的应用层次分为以下3种类型:概念数据模型,它是一种面向客

观世界、面向用户的模型,它与具体的数据库管理系统和具体的计算机平台无关;逻辑数据

模型,是面向数据库系统的模型,着重于在数据库系统一级的实现;物理数据模型,是面向

计算机物理实现的模型,此模型给出了数据模型在计算机上物理结构的表示。B选项正确。

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

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

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

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

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

答案:A

【解析】使用顺序,选择(分支),循环三种基本结构构成的程序可以解决所有问题,而不只

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

(12)以下选项中叙述正确的是

A)函数体必须由{开始

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

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

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

答案:A

【解析】函数体是函数首部下面的花括号内的部分,所以函数体必须由{开始,A选项正确。

一个源程序文件可以包括预处理命令、全局声明、函数定义,程序总是从main函数开始执行

的,不是main语句,B选项错误。C程序中的允许两种注释,以〃开头的单行注释;以/*开始,

以*/结束的块式汪祥,D选项错误。函数可以嵌套,注释不能嵌套,C选项错误。

(13)以下叙述正确的是

A)C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件

B)C编译程序把文件后缀为.。的源程序文件编译成文件后缀为.exc的可执行文件

0C编译程序把文件后缀为.obj的二进制文件编译成文件后缀为exe的可执行文件

D)链接程序把文件后缀为.c的源程序文件链接成文件后缀为.exe的可执行文件

答案:A

【解析】C编译程序把文作后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件,链

接将一个或多个目标文件与程序用到的库文件连接起来,形成一个可以在操作系统直接运行

的执行程序.exe,故排除B,C,D选项,答案选A选项。

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

A)大写字母

B)下划线

0数字字符

D)连接符

答案:D

【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以D)

选项中的连接符不合法。

(15)下列定义变量的语句中错误的是

A)int_int;

B)doubleint_;

C)charFor;

D)floatUS$;

答案:D

【解析】C语言规定,变量命名必须符合标识符的命名规则。D选项中包含了非法字符〃$“,所以

错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,

而不能是数字。大写字符与小写字符被认为是两个不同的字符,所以For不是关键字for。

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

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

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

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

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

答案:B

【解析】关键字不可用作C语言的标识符,所以A错误。在标识符中大写字母与小写字母作为不

同字符处理,所以C错误。标识符由下划线、字母、数字组成,且必须以下划线和字母开始,所以

D错误。

(17)以下选项中合法的常量是

A)999

B)2.7e

C)OXab

D)123E0.2

答案:C

【解析】A选项中含有非法的空格,所以错误。C语言中十六进制常量以Ox开头,所以C正确。实

型常量中e的前后必须均有数据,且其后必须为整数,所以B和I)错误。

(17)有以下程序

#include<stdio.h>

mainO

{intk=33;

printf(*%d,%x\nw,k,k,k);

}程序的运行结果是

A)33,41,21

B)33,33,33

041,33,21

D)33,21,41

答案:A

【解析】整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数

表示法。十进制整型常量没有前缀,输出格式控制符为%d:八进制整型常量以0作为前缀,

输出格式控制符为%。;十六进制整型常量以0X或Ox作为前缀,输出格式控制符为%X。整型33

用八进制表示为41,十六进制表示为21,A选项正确。

(18)以下选项中,合法的一组C语言数值常量是()。

A)12.0Xa234.5c0

B)028.5e-3-Oxf

C).1774el.5Oabc

D)0x8A10,0003.e5

答案:A

【解析】C语言中八进制整型常量的开头是数字0,十六进制整型常量的开头数字是Ox。C语

言中的实型常量有两种表示形式:小数形式,小数形式表示的实型常量必须要有小数点;指

数形式,以"e"或〃E”后跟一个整数来表示以10为底数的凝数,且规定字母e或E之前必须要有

数字,且。或E后面的指数必须为整数。B)选项中028错误,八进制中没有数字8。C)选项中

4eL5中e后面的指数不是整数。D)选项中数字“10,000”不能用逗号.

(19)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写

字母转换为对应小写字母的语句是()。

A)c=('A,+c)%26-,a,

B)c=c+32

C)c^-'A'+'a'

D)c=(c-'A')%26+'a'

答案:A

【解析】根据题意可知,小写字母比与之对•应的大写字母的ASCII码大32。A选项中字符A加上c

表示的大写字符再对字母个数26取余,本身这个表达式没有任何含义所以选择A选项。

(20)若有定义:doublea,b,c:能正确给a,b,c输入数据的语句是()。

A)scanfC%lf%lf%lf*&a,&b,&c)

B)scanf(*%f%ftb,&c);

C)scanf(*%lf%lf%lfw,a,b,c):

D)scanf(*%lf%lf&b,&c):

答案:D

【解析】对f,%le是针对double的,如果仅用%「,输入的数据可能不完全接收,数据的精度

可能不足Af主要针对float类型的变量的输入,因此选项B错误。根据题目格式可知A,C错误。

故答案为D选项。

(21)若有以下程序段

doublex=5.16894;

printf("%f\n"z(int)(x*1000+0.5)/(double)1000);

则程序段的输出结果是

A)5.170000

B)5.175000

05.169000

D)5.168000

答案:C

【解析】断的输出格式是以带小数点的数学形式输出浮点数。首先计算x*1000,结果为

5168.94然后+0.5,结果为5169.44,然后进行强制类型转换,转换成整型为5169,然后除以双

精度数据1000,结果也为双精度数据5.169,输出时按照%f的格式输出,所以输出结果为

5.169000,

(22)若变量已正确定义,在1“亚冲向1£(“%小-,1<);中,以下不可替代W的是()。

A)a<>b+c

B)ch=getchar()

C)a=b+c

D)a++

答案:A

【解析】选项A)是非法的表达式,C语言中没有◊运算符。

(23)//include<stdio.h>

main()

{intx,y,z;

x=y=l;

z=x++,y++,++y;

printf("%d,%d,%d\n",x,y,z);

}

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

A)2,3,3

B)2,3,2

C)2,3,1

D)2,2,1

答案:C

【解析】z=x++,y++,++y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以

将上式表示成(z=xr),(yM),(Iiy)o然后从左向右先计算表达式Z=XL,因为x3先使

用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为2,

最后计算第三个表达式++y,y的值为3。

(24)有如下程序

#include<stdio.h>

mainO

(

inta=0,b=1;

if(a++&&b++)

printf(T);

else

prinlf("F");

printf(*a=%d,b=%d\n*,a,b);

)

程序运行后的输出结果是

A)Ta=hb=2

B)Fa=0,b=2

C)Fa=l,b=l

D)Ta=0,b=l

答案:C

【解析】题目中判断if条件是否成立,a++先取值为0,则(a++&&b++)为0,且不计算b++,

而后a自增得a=l,if条件不成立执行else函数体,饰出F。最后执行语句

printf(",a=%d,b=%d\nz,,a,b);按照格式输出a=l,b=l。C选项正确。

(25)有以下程序

#include<stdio.h>

mainO

{char*s=*120119110w;

ininO,nl,n2,nn,i;

n0=nl=n2=nn=i=0;

do{

switch(s[i++])

{default:nn++:

case'O':n0++;

case*I':nl++:

case'2':n2++;

}while(s⑴);

printf(*nO=%d,nl=%d,n2=%d,nn=%d\n*»nO,nl,n2,nn):

)

程序的运行结果是()。

A)nO=3,nl=8,n2=9,nn=l

B)nO=2,nl=5,n2=l,nn=l

C)n0=2,nl=7,n2=10,nn=l

D)n0=4,nl=8,n2=9,nn=l

答案;A

【解析】本题执行过程为,s[0]=T"匹配case'1',nl=l,n2=l;s[l]='2',匹配case'2',

n2=2;s[2]='O',匹配case'O',nO=Lnl=2,n2=3;s[3]=,T,匹配caseT',nl=3,r.2=4;

s[4]=*T,匹配case'1',nl=4,n2=5;s[5]=,9*,匹配default,nn=Ln0=2,nl=5,r,2=6;

s[6]=,T,匹配case'1',nl=6,n2=7;s[7]=>T,匹配case'1',nl=7,n2=8;s[8]=,0,,

匹配case'O',n0=3,nl=8,n2=9;s[9]='\0',退出循环。输出nO,nl,n2,im为3,8,9,1,A

选项正确。

(26)有以下程序

#include<stdio.h>

main()

{inti,j=0:

chara[]="lbwareyou*,b[10]={0};

for(i=0;a[i];i++)

if(a[i]==-)

b[j++]=a[i+l];

printf(*%s\nz,,b):

)

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

A)Hay

B)Howareyou

C)we

D)ay

答案:D

【解析】for语句循环体执行功能是,每次当a[i]元素为‘‘时,自动将a[i]下一个元素赋值

给b[j],赋值完成后,j值加1,因此a[i]的'a'和'y'分别赋值给答案为D选项。

(27)行以下程序

#include<stdio.h>

main()

{chara=3,b=6,c;

c=(a*b)«2;

printf(飞d\n*,c);

)

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

A)5

B)1

C)20

D)18

答案:C

【解析1-运算符为按位异或运算符,即01=1,「0=1,11=0,0-0=0,因此@飞=101在进行<<

操作,变为101002=2010,因此答案为C选项。

(28)有如下程序

#include<stdio.h>

mainO

(

inti,*ptr;

intarray[5]=(5,3,1};

for(ptr=array,i=0;i<5;i++,ptr++)

(

if(*ptr==0)

putchar(,X');

else

putchar('A'+*ptr);

)

printf(~\n");

)

程序运行后的输出结果是

A)FDBXX

B)FFFXX

C)I'DBBB

D)ABCDE

答案:A

【解析】在对数组进行初始化时,如果对数组的全部元素赋以初值,定义时可以不指定数组

长度,如果被定义数组的长度与初值个数不同,则数组长度不能省略;如果在说明数组时给

出了长度,但没有给所有的元素赋予初始值,而只依次给前面的几个数组元素赋予初值,那

么C语言将自动对余下的元素赋初值,则array={5,3,1,0,0}。程序执行过程为:执行for

循环,将数组首地址赋给指针plr,依次遍历每一个元素,如果数组元素为0则输出X,如

果不为0则按照字母表输出字符5,后第array[i]个字符。程序运行后的输出结果为:FDBXX,

A选项正确。

(29)有以下程序

/include<stdio.h>

main()

char*s="12134";

intk=0,a=0;

while(s[k+1])

k++;

if(k%2==0)

(

a=a+(s[k]-'O'+l);

continue;

)

a=a+(s[k]-'O');

)

printf("k=%da=%d\n",k,a);

}

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

A)k=5a=15

B)k-4a-12

C)k=6a=ll

D)k=3a=14

答案:B

【解析】当k=0时,执行while-*次,得到k=La为2;当k=l时,执行while一次,得到k=2,

a为4;当k=2时,执行while一次,得到k=3,a为7;当k=3时,执行while一次,得到k=4,a

为12;所以答案为B选项。

(30)有以下程序

#include<stdio.h>

main()

{inta,b;

for(a=l,b=l;a<=100;a++)

{if(b>=20)break;

if(b%3==1){b=b+3;continue;}

b=b-5;

)

printf("%d\n",a);

)

程序的输出结果是()。

A)10

B)9

C)8

D)7

答案:C

【解析】首先注意for循环的控制条件当b>=20或者a>100则跳出for循环也即b<20且

a<=100时执行for循环;第一次进入循环a=l,b=l均满足循环条件,但b%3==l条件满足,故执

行b=b+3,得到b=4,注意有continue,所以后面语句不执行,直接跳转到a++这个语句,所以

第一次循环完之后a=2,b=4;进入第二轮循环,b%3=l也是满足的,故再次b=b+3,此轮循环

执行之后a=3,b=7,进入下一轮。此后和前面循环同理,都是b$3=l满足,因为每次都是加3,

而之后又去模3,且都跳过for后面语句直接执行a++,所以,一直循环到b=22跳出for循环。

此时a为&综合起来就是,每次循环b增加3,a增加1,且当b>22时跳出循环,结束程序。所

以b从1增加到22,有(22T)/3=7,所以a=l+7=8.因此C选项正确。

(31)设有一个M*N的矩阵已经存放在一个V行N列的数组x中,且有以下程序段

sum=0;

for(i=0:i<M;i++)sum+=x[i][0]+x[i][N-l]:

for(j=l;j<N-l;j++)sum+=x[0][j]+x[M-l][j];

以上程序段计算的是

A)矩阵两条对角线元素之和

B)矩阵所有不靠边元素之和

C)矩阵所有元素之和

D)矩阵所有靠边元素之和

答案:D

【解析】程序执行过程为:第一个for循环实现对第一列和第N列求和。第二个for循环在上

一个for循环结果上实现对第一行和第M行从笫二个元素到第N1个元素的求和,总体来说,

就是矩阵所有靠边元素之和,D选项正确。

(32)若有以下程序

include<stdio.h>

voidfun(inta[],intn)

{intt,i,j;

for(i=0;i<n;i+=2)

for(j=i+2;j<n;j+=2)

if(a[i]>a[jl){t=a[i];a[i]=a[j];a[j]=t;}

)

main()

{intc[10]={10,9,8,7,6,5,4,3,2,l},i;

fun(c,10);

for(i=0;i<10;i-+)printf("%d,“,c[i]);

printf("\n");

)

则程序的输出结果是(),

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

B)10,9,8,7,6,5,4,3,2,1,

010,1,8,3,6,5,4,7,2,9,

D)2,9,4,7,6,5,8,3,10,1,

答案:D

【解析】该题首先对一维数组进行初始化,c[0]到c[9]依次赋值为次到l;fun(c,10);语句调

用fun函数,fun函数的功能是将一维数组奇数位元素的数值由小到大排序;最后将排好序的

新的一维数组进行输出。因此D选项正确。

(33)若有以下程序

include<stdio.h>

#defineN4

voidfun(inta[][N],intb口,intflag)

{intij;

for(i=O;i<N;i++)

{b[i]=a[O][i);

for(j=l;j<N;j++)

if(flag?(b[i]>a[j][i]):(b[i]<a[j][i]))b[i]=a[j][i];

)

)

main()

{intx[N][N]={l,2,3,4,5,6,7,8,9,10,ll,12,13,14,15,16},y[NLi;

fun(x,y,1);

for(i=0;i<N;i++)printf(”%d,",y[i]);

fun(x,y,0);

for(i=0;i<N;i++)printf(”%d,”,y[i]);

printf("\n");

)

则程序的输出结果是

A)4,8,12,16,1,5,9,13,

B)1,2,3,4,13,14,15,16,

C)1,5,9,13,4,8,12,16,

D)13,14,15,16,1,2,3,4,

答案:B

【解析】该题首先初始化二维数组,if(flag?(b[i]>a[i][j]):(b[i]<a[i][j]))

条件语句的条件表达式使用了条件运算符构成的选择结构,即门ag为真时,以(b[i]>

作为条件表达式的值,否则以(b[i]<作为条件表达式的值,fun函数功

能是给一维数组赋值。fun(x,y,1);该函数调用后,即当门ag为真时,使一维数组获得一

维数组第1行的数值;fun(x,y,0);该函数调用后,即当flag为假时,使一维数组获得二维

数组第4行的数值;因此B选项正确。

(34)有以下程序

#include<stdio.h>

voidfunl(char*p)

(

char*q;

q=p;

while(*q!='\0')

(

(*q)++;

q++;

)

)

main()

chara[]={"Program"},*p;

P=&a[3];

funl(p);

printf("%s\n",a);

}

程序执行后的输出结果是()O

A)Prphsbn

B)Prohsbn

C)Progsbn

D)Program

答案:B

【解析】(*q)++是q所指的字符加1,q++就是指针移到下一个字符。因此B选项正确。

(35)有以下程序

#include<stdio.h>

#include<string.h>

voidfun(char*s,intml,intm2)

{chart,*p;

p=s+ml;s=s+m2;

while(s<p)

{t=*s;*s=*p;*p=t;

s++;p—;

)

)

main()

{charss[10]="012345678";

intn=6;

fun(ss,0,n-1);

fun(ss,9,n):

fun(ss,0,9);

printf(飞s\n",ss):

)

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

A)012345

B)876543210

C)876543

D)012345678

答案:A

【解析】fun(*ss,ml,m2)的作用是,如果ml>m2交换数组元素ss[ml],ss[m2]<>因此,

fun(ss,0,5)后ss的0,1,2:3,4,5,6,7,8,\0。fun(ss,9,6)后ss的0,1,2,3,4,5,\(),8,7,6。

fun(ss,0,9)后ss的0,1,2:3,4,5八0,8,7,6。因此打印结果012345。故答案为A选项

<36)有以下程序

#include<stdio.h>

lypedefstructstu{

charname[10];

chargender;

intscore;

}STU;

voidf(STUa,STU*b,STUc)

{*b=c=a:

printf(*%s,%c,%d,*,b->namc,b->gcnder,b->score):

printf(*%s,%c,%d,*,c.name,c.gender,c.score):

)

main()

{STUa={"Zhao",'m',290),b={"Qian",'f',350},c={"Sun",'m',370);

f(a,&b,c);

printf(*%s,%c,%d,*,b.name,b.gender,b.score);

printf(飞s,%c,%d\n”,c.name,c.gender,c.score);

)

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

A)Zhao,HI,290,Zhao,m,290,Zhav,叫290,Sun,in,370

B)Zhao,in,290,Zhao,m,290,Zhao,m,290,Zhao,in,290

C)Zhao,m,290,Zhao,m,290,Qian,f,350.Sun,m,370

D)Zhao,in,290,Zhao,m,290,Qian,f,350,Zhao,in,290

答案:A

【解析】C语言函数参数传递分为:1、值传递过程中,被调函数的形参作为被调函数的局部

变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实

参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影

响主调函数的实参变量的值。

2、地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是

这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成

间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对

形参做的任何操作都影响了主调函数中的实参变量。题设中,参数b是地址传递,因此会直

接影响实参变晟。a,c是值传递,传递是a,c的拷贝,不会a,c实参产生影响,因此,调用函

数返回,3殳有被修改,b被修改了。故答案为A选项。

(37)有以下程序:

#include<stdio.h>

#include<stdlib.h>

intfun(intn)

{int*p;

p=(int*)malloc(sizeof(int));

*p=n;return*p;

}

main()

{inta;

a=fun(IO);printR"%d\n",a+fun(10));

程序的运行结果是()。

A)0

B)10

020

D)出错

答案:C

【解析】maHoc(sizeof(int))的作用是开辟一个长度为sizeof(int)存储空间,并通过强制

类型转换(int*)将此存储空间的地址就给了一个整型的指针变量p。然后执行语句*p=n,使

得*P的值为10,并通过return返回此值,叩a的值为10。然后在主函数中输出a+fun(10)=

10+10=20。

(38)有以下程序

include<stdio.h>

#definef(x)x*x*x

main()

(

inta=3,s,t;

s=f(a+l);

t=f((a+l));

printf("%d,%d\n”,s,t);

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

A)10,64

B)10,10

C)64,10

D)64,64

答案:A

【解析】本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行

f(a+1)=a+1*a+1*a+1=3*a+1=10,f((a+l))=(a+1)*(a+1)*(a+1)=64,所以答案为A选项。

(39)有以下程序

#include<stdio.h>

main()

(

inti;

FILE*fp:

for(i=0;i<3;i++)

(

fp=fopen(*res.txt*,'w");

fputc(*K*+i,fp);

fclose(fp);

)

}

程序运行后,在当前目录下会牛.成一个res.txt文件,其内容是()。

A)EOF

B)M

C)KLM

D)L

答案:B

【解析】for循环中,每次都执行打开文件res.txt.写入文件、再关闭文件的操作,由于fopen

函数使用‘w'模式写文件,所以每次打开res.ixt后,都删除文件中的原有数据,再重新写入

新数据。所以文件最终的内容只与最后一次for循环有关,最后一次for循环是向文件res.txt

写入'K'+2,即M,正确答案是B选项。

(40)有以下程序

0include<stdio.h>

main()

{FILE*fp;

inti,a[6]=(1,2,3,4,5,6},k;

fp=fopen(*data.dat*,"w+");

fprintf(fp,a[0]);

for(i=l;i<6;i++)

{rewind(fp);

fprintf(fp,*%d\n*,a[i]);

)

rewind(fp):

fscanf(fp,"*d”,&k);

fclose(fp);

prinlf(飞d\n”,k);

)

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

A)6

B)21

C)123456

D)654321

答案:A

【解析】本题首先定义文件指针变量fp和一个数组a[],再打开一个文件“data.dat”,随后

先给文件写入数据a[0],由于rewind函数是将文件指针从当前位置重新指向文件开始位置,

所以「or循环依次将数组a中的数据写入文件开始位置,退出循环后,文件中的数据顺序为:

654321,重新使指针指向文件开始位置,将此时fp指向的数据(即文件中第一个数据6)写

入变量k中,关闭文件,输出k值,答案为A选项。

第二套

(1)算法空间复杂度的度量方法是

A)算法程序的长度

B)算法所处理的数据量

C)执行算法所需要的工作单元

D)执行算法所需要的存储空间

答案:D

【解析】算法的空间复杂度是指执行这个算法所需要的内存空间,。算法执行期间所需的存

储空间包括3个部分:输入数据所占的存储空间:程序木身所占的存储空间:算法执行过程

中所需要的额外空间。D选项正确。

(2)下列叙述中正确的是

A)循环队列属于队列的链式存储结构

B)双向链表是二叉树的链式存储结构

C)非线性结构只能采用链式存储结构

D)有的非线性结构也可以采用顺序存储结构

答案:D

【解析】循环队列是队列的一种顺序存储结构,A选项错误。双向链表为顺序存储结构,

二叉树通常采用链式存储结构,B选项错误。完全二叉树是属于非线性结构,但其最佳

存储方式是顺序存储方式,C选项错误,D选项正确。

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

A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的

B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构

C)顺序存储结构能存储有序表,链式存储结构不能存储有序表

D)链式存储结构比顺序存储结构节省存储空间

答案:A

【解析】链式存储结构既可以针对线性结构也可以针对非线性结构,所以B)与C)错误。

链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D)错

误。

(4)下列关于栈的叙述中,正确的是

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

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

C)栈操作遵循先进后出的原则

D)以上说法均错误

答案:C

【解析】栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最

先被插入的元素,从而也是最后才能被删除的元素。栈的修改是按后进先出的原则进行

的。因此,栈称为先进后出表,或"后进先出〃表,所以选择C。

(5)在软件设计中不使用的工具是()。

A)系统结构图

B)PAD图

C)数据流图(DFD图)

D)程序流程图

答案:C

【解析】系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经

从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。

PAD图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示,在详细设计过

程中用到。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统

中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,

是在可行性研究阶段用到的而非软件设计时用到,所以选择C)。

(6)下面对类-对象主要特征描述正确的是()o

A)对象唯一性

B)对象无关性

C)类的单一性

D)类的依赖性

答案:A

【解析】对象的基本特点是:标识唯一性、分类性、多态性、封装性、模块独立性好。

类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象

类型的所有对象的性质。对象具有的性质,类也具有,故A选项正确。

(7)在软件开发中,需求分析阶段产生的主要文档是()。

A)可行性分析报告

B)软件需求规格说明书

C)概要设计说明书

D)集成测试计划

答案:B

【解析】A)错误,可行性分析阶段产生可行性分析报告。C)错误,概要设计说明书是总

体设计阶段产生的文档。D)错误,集成测试计划是在概要设计阶段编写的文档。B)正确,

需求规格说明书是后续工作如设计、编码等需要的重要参考文档。

(8)下面对软件测试描述错误的是()»

A)严格执行测试计划,排除测试的随意性

B)随机地选取测试数据

C)测试根本目的是尽可能多地发现并排除软件中隐臧的错误

D)软件测试是保证软件质量的重要手段

答案:B

【解析】在测试之前制定测试计划,并严格执行,测试用例的选择不可随意,应选择有

代表性的,尽可能发现迄今为止尚未发现的错误,A选项叙述正确,B选项叙述错误。测

试根本bl的是尽可能多地发现并排除软件中隐藏的错误,C选项叙述正确。软件测试是

保证软件质量、可靠性的关键步骤,D选项叙述正确。故正确答案为B选项。

(9)在数据库系统中,用于对客观世界中复杂事物的结构及它们之间的联系进行描述的是

A)概念数据模型

B)逻辑数据模型

C)物理数据模型

D)关系数据模型

答案:A

【解析】数据模型按照不同的应用层次分为以下3种类型:概念数据模型,着重于对客

观世界复杂事物的描述及对它们内在联系的刻画;逻辑数据模型,是面向数据库系统的

模型,着重于在数据库系统一级的实现;物理数据模型,是面向计算机物理实现的模型,

此模型给出了数据模型在计算机上物理结构的表示。A选项正确。

(10)公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部

门和职员间的联系是

A)1:1联系

B)m:1联系

C)1:m联系

D)m:n联系

答案:C

【解析】两个实体集间的联系实际上是实体集间的函数关系,主要有一对一联系(上1)、

一对多联系(l:m)、多对一联系(m:l)、多对多联系(m:n)。对于每一个实体部门,

都有多名职员,则其对应的联系为一对多联系(l:m),答案选C。

(11)关于程序中的注释,以下叙述正确的是

A)注释的内容必须放在•对和*/之间

B)注释必须置于所说明的语句前或语句后

0注释中间可以嵌套另一个注释

D)注释内容错误会导致编译出错

答案:A

【解析】程序中,注释可以出现在程序的任何位置,B选项错误;注释中间不能嵌套另

一个注释,C选项错误;注释内容不影响程序编译,D选项错误,答案为A选项。

(12)有以下程序

#include<stdio.h>

mainO

{intk=-17;

printf(飞d,%x\n”,k,1-k,1-k);

)

程序的运行结果是()。

A)-17,22,12

B)-17,12,22

C)-17,-22,-12

D)17,22,12

答案:A

【解析】整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进

制数表示法。十进制整常量没有前缀,输出格式控制符为%d;八进制整常量以0作为前

缀,输出格式控制符为加;十六进制整常量以0X或Ox作为前缀,输出格式控制符为%X。

l-k=18,整型常量18用人进制表示为22,十六进制表示为12,A选项正确。

(13)以下定义语句中正确的是()。

A)inta=b=O;

B)charA=65+lzb='b';

C)floata=l,*b=&a,*c=&b;

D)doublea=0.0;b=l.l;

答案:B

【解析】A选项语句中b变量还没有定义不能直接用于给a变量赋值。C选项语句中*b、*c表

示的是一个实型变量的地址,不能再将&b赋值给指针型变量c°D选项语句中a=0.0后面应

该为逗号,不能是分号。

(14)有以下程序:

#include<stdio.h>

main()

{ints,t,A=10:doubleB=6;

s=sizeo«A);t=sizeoHB);

printf("%d,%d\nH,s,t);

)

在VC6.0平台上编译运行,程序运行后的输出结果是()。

A)10,6

B)4,4

O2,4

D)4,8

答案:D

【解析】C语言中利用sizeof。函数判断数据类型长度,在VC6.0平台中,整型int占有4

个字节,double型数据占有8个字节。

(15)表达式:(int)((double)9/2)-9%2的值是()。

A)0

B)3

04

D)5

答案:B

【解析】先将整型数据9强制转换成double型,然后除以2得到的结果与double型保持一

致,即为4.5,然后将4.5强制转换成整型数据4,然后计算9%2的值为1,最后计算4T的值

为3,所以选择B选项。

(16)设有定义:intx=ll,y=12,z=0;,以下表达式值不等于12的是()。

A)(z,X,y)

B)(z=x,y)

C)z=(x>y)

D)z=(x==y)

答案:D

【解析】逗号表达式的计算过程是从左到右逐个求每个表达式的值,取最右边一个表达

式的值作为该逗号表达式的值。赋值运算结合性为由右向左结合,赋值运算符左值为变

量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。成功实现赋值后以左

值为返回值。逻辑表达式成立则返回1,不成立返回0,A选项逻辑表达式x二二y不成立,

则z=0,表达式值为0。B选项中逗号表达式x,y取y值为表达式值,然后赋值给z=12,表

达式值为12。C选项逗号表达式(x,y)取y值为表达式值,然后赋值给z=12,表达式值为

120D选项逗号表达式(z,x,y)取y值为表达式值12。选择D选项。

(17)若有定义: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++&&b++)值为1,因此执行C++达式a++的值为1;再执行b++,表达式b++的值为

1,由此可

D)先执行b++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可确定(a++麟b++)值为1,因

此执行C++

答案:A

【解析】表达式1?表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表

达式3。逻辑与运算符遵循〃短路求值〃策略,即只有在仅靠左操作数的值无法确定玄逻

辑表达式的结果时,才会求解右操作数,表达式(a++&&b++)中,左操作数a++的值为0,

已经可以确定整个逻辑表达式的结果为0,因此右操作数b++不再求解,直接执行表达式

3,即d++,答案为A选项

(18)有以下程序:

#include<stdio.h>

main()

{unsignedchara=2,b=4,c=5»d:

d=a|b:d&=c;printf(n%d\nH,d);}

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

A)3

B)4

C)5

D)6

答案:B

【解析】&按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。I

按位或,两个相应的二进制位中只要有一个为1,该位的结果值为1。2的二进制为

00000010,4的二进制为0D000100,所以做或运算结果为00000110,该数与5即00000101

做与操作结果为00000100,即4

(19)有以下程序

#include<stdio.h>

main()

{charc;

c=getchar();

do{

putchar(c++);

}while((c=getchar())!='#');

)

程序运行时从第一列开始输入:abedefg**回车〉,则输出结果是

A)bcdefgh$

B)bcdefgh

C)abedefg#

D)abedefg

答案:D

【解析】运算符〃++〃放在变量后面时,先参与其他操作,再对变量+1。pulchar(C++)表

示先输出当前c值,再对c值+1,当输入abedef##时,在while语句中,程序输入”#〃,循

环退出。因此输出为abedefg,答案为D选项。

(20)若有定义:charc:intd:,程序运行时输入:1,2〈回车),能把值1输入给变量c、值2输入给

变量d的输入语句是

A)scanf(*%c,%d*»&c,&d);

B)scanf&c,&d);

C)scanf&c,&d):

D)scanf(*%d%d*,&c,&d);

答案:A

【解析】scanf函数的调用格式为:scanf(格式控制串,地址列表);,格式控制串,由%

开头,后跟格式字符,如c对应字符型变量,d对应整型变量。地址表列需要读入的是所

有变量的地址或字符串的首地址。如果除了格式说明字符和附加格式字符外,如果还有

其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符,比如两个格式说

明之间有一个逗号,则从键盘输入时输入量之间也应照原样输入逗号。A选项正确。

(21)有以下程序

#include<stdio.h>

main()

{inta=l,b=2,c=3,d=0;

if(a==l&&b++==2)

if(b!=2||c-!=3)

printf("%d,%d,%d\n",a,b,c);

elseprintf(”%d,%d,%d\rT,a,b,c);

elseprintf("%d,%d,%d\n",a,b,c);

}

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

A)1,3,2

B)1,3,3

O1,2,3

D)3,2,1

答案:B

【解析】。Iso总是和最近的if配对,所以进入第一个if语句中条件判断时,因为是逻辑与

操作需要两边运算对象的值均为非零值,才为真,所以需要逐个执行判断的结果为L不

再执行第二个case语句中的操作。而是进入第二个if语句条件判断,因为b!=2条件成立

所以整个条件表达式的值为真,所以不再执行逻辑或的第一个运算对象(c—!=3)c的值

不变,也不再执行第一个else语句。打印a的值1,b的值3,c的值3。

(22)有以下程序

[include<stdio.h>

main()

{ints;

scanfC^d",&s);

while(s>0)

{switch(s)

{case1:printf("%d",s+5);

case2:printf("%d"/s+4);break;

case3:printf("%d",s+3);

default:printfC^d",s+1);break;

)

scanf("%d",&s);

)

)

运行时,若输入123450<回车>,则输出结果是()o

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)设有以下代码

do{

while(条件表达式1)

循环体A;

}while(条件表达式2);

while(条件表达式1)

do{

循环体B;

}while(条件表达式2);

其中,循环体A与循环体B相同,以下叙述正确的是

A)循环体A与循环体B的执行次数相同

B)循环体A比循环体B的执行次数多•次

C)循环体A比循环体B的执行次数少一次

D)循坏体A与循必、体B的执行次数不确定

答案:A

【解析】while循环语句一般形式为:while(表达式):循环体},执行过程为:首先判断

表达式,成立(非0)则执行循环体,不成立(0)则退出循环。do…while循环语句一

般形式为:do{循环体}while(表达式),执行过程为:首先执行循环体,之后判断表达

式,成立(非0)则再一次执行循环体,不成立(0)则退出循环。假设表达式1与表达

式2成立次数为nl与n2,若nl>n2,则循环体A执行次数为n2+l,B执行次数n2+l;若nl<n2,

则循环体A执行次数为nLB执行次数nl,A选项正确。

(24)有以下程序

#include<stdio.h>

main()

{inta=0,b=0;

for(;a<5;a++)

{if(a%2==0)continue;

b+=a;

break:

printf(*%d'n”,b);

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

A)1

B)4

C)0

D)10

答案:A

【解析】for语句中,当a=0时,满足for循环中if语句的条件,执行continue继续下一

次循环,a+1后再进入for语句循环,此时a=l不满足if语句,执行b=b+a为1,接着执行

break语句,终止循环,最后输出b=l,故答案为A选项,

(25)有以下程序

//include<stdio.h>

main()

{inti=5;

do

{if(i%3==l)

if(i%5==2)

{printf("*%d"zi);break;}

i++;

}while(i!=0);

printf("\n");

)

程序的运行结果是

A)*2*6

B)*3*5

C)*5

D)*7

答案:D

【解析】do...while语句是先执行后判断,所以第一次先执行循环体,判断i%3二=1的条

件,由于i为5所以余数为2,条件不成立,执行i++,i的值为6,判断while条件为真,第二次

执行循环体,同第一次循环体的执行过程一样,i的值变为7,判断while条件为真,第三次

执行循环体,此时说3二=1条件成立,判断i%5==2也成立,打印*与i的值,即*7,然后执行

break语句,跳出循环。所以选择D选项。

(26)有以下程序

//include<stdio.h>

main()

{intc(6]={10

温馨提示

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

评论

0/150

提交评论