一、选择题(1)~(10)每小题2分,(11)-(50)每小题1分,共60分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)在下列选项中,_________不是一个算法一般应该具有的基本特征。
A)确定性 B)可行性 C)无穷性 D)拥有足够的情报
答案:C
评析:一个算法,一般应具有以下几个基本特征。①可行性②确定性③有穷性④拥有足够的情报
(2)希尔排序法属于_________类型的排序法。
A)交换类排序法 B)插入类排序法
C)选择类排序法 D)建堆排序法
答案:B
评析:希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。所以希尔排序法属于插入类排序,但它对简单插入排序做了很大的改进。
(3)下列关于队列的叙述中正确的是_________。
A)在队列中只能插入数据 B)在队列中只能删除数据
C)队列是先进先出的线性表 D)队列是先进后出的线性表
答案:C
评析:队列是指允许在一端进行插入、而在另一端进行删除的线性表。它又称为"先进先出"或"后进后出"的线性表,体现了"先来先服务"的原则。
(4)对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为_________。
A)N+I B)N C)(N+I)/2 D)N/2
答案:B
评析:在进行顺序查找过程中,如果被查的元素是线性表中的最后一个,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。
(5)信息隐蔽的概念与下述_________概念直接相关。
A)软件结构定义 B)模块独立性
C)模块类型划分 D)模拟耦合度
答案:B
评析:信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。衡量软件的模块独立性的度量标准是耦合性和内聚性。一个模块的内聚性越强,则该模块的模块独立性越强。而内聚性是信息隐蔽和局部化概念的自然扩长。
(6)面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是_________。
A)模拟现实世界中不同事物之间的联系
B)强调模拟现实世界中的算法而不强调概念
C)使用现实世界的概念抽象地思考问题从而自然地解决问题
D)鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考
答案:C
评析:面向对象的设计方法基本原理:使用现实世界的概念抽象地思考问题从而自然地解决问题。强调模拟现实世界中的概念而不强调算法,鼓励开发者在软件开发的绝大部分中都用应用领域的概念去思考。
(7)在结构化方法中,软件功能分解属于软件开发中的_________阶段。
A)详细设计 B)需求分析 C)总体设计 D)编程调试
答案:C
评析:总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。
(8)软件调试的目的是_________。
A)发现错误 B)改正错误
C)改善软件的性能 D)挖掘软件的潜能
答案:B
评析:由程序调试的概念可知:程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确切性质、原因和位置。其二,对程序进行修改,排除这个错误。所以程序调试的目的就是诊断和改正程序中的错误。
(9)按条件f对关系R进行选择,其关系代数表达式为_________。
RooR
A)RooR B) f C)6f(R) D)兀f(R)
答案:C
评析:选择运算是一个一元运算,关系R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关系。这个关系是由R中那些满足逻辑条件的元组所组成。如果关系的逻辑条件为C则R满足f的选择运算可以写成:6f(R)。
(10)数据库的物理设计是为一个给定的逻辑结构选取一个适合应用环境的_______的过程, 包括确定数据库在物理设备上的存储结构和存取方法。
A)逻辑结构 B)物理结构 C)概念结构 D)层次结构
答案:B
评析:根据数据库物理设计的概念可知:为一个给定的逻辑数据模型选取一个最合适应用要求的物理结构的过程,就是数据库的物理设计。数据库的物理结构就是指数据库在物理设备上的存储结构与存取方法。
(11)下列叙述中正确的是_______。
A)C语言编译时不检查语法
B)C语言的子程序有过程和函数两种
C)C语言的函数可以嵌套定义
D)C语言中,根据函数能否被其它源文件调用,被区分为内部函数和外部函数
答案:D
评析:选项A的错误在于编译过程中是检查语法的,若发现源程序有语法错误,则系统会提示出错信息;选项B的错误在于c语言中,子程序的作用是由函数来完成的,无过程的概念;选项c的错误在于函数不可以嵌套定义,但可以嵌套调用。
(12)有以下程序:
main()
{
int a:
char c=10;
float f=100.0;double x;
a=f/=c*=(x=6.5);
printf("%d%d%3.1f%3.1f\n",a,c,f,x);
}
程序运行后的输出结果是_______。
A)1 65 1 6.5 B)1 65 1.5 6.5 C)l 65 1.0 6.5 D)2 65 1.5 6.5
答案:B
评析:本题求解步骤如下:先进行"c*=(x=6.5)"的运算,由于x=6.5,表达式相当于c=c*6.5=10*6.5=65.再进行"f/=65"的运算,相当于f=-f/65=100.0/65,由于f为单精度实型变量,因此f的值约为1.538462.然后进行"a=f"的运算,由于a为整型变量,因此a=1.最后将各个变量的值按照printf中的格式要求输出到屏幕,注意变量f,x按照"%3.1f"格式输出,,即只输出一位小数。
(13)以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子x/(y*z)的C语言表达式是_______。
A)x/y*z B)x*(1/(y*z)) C)x/y*1/z D)x/y/z
答案:A
评析:按照自左向右的运算逻辑,选项A是先做x/y,然后再乘以x,显然与题意不符。
(14)若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是_______。
A)-3 B)9 C)-12 D)6
答案:C
评析:c语言中对赋值运算的运算顺序是自右向左。本题中,计算a*a之后,a的值依然为3,表达式a*a的值为9;a-=9,a=3-9=-6;a+=-6,a=-6+-6=-12。
(15)以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是_______。
A)if((a>b)&&(b>C))k=l;else k=0;
B)if((a>b)‖(b>C))k=l;else k=O;
C)if(a<=b)k=0;else if(b<=C)k=1;
D)if(a>b)k=1,else if(b>C)k=l;else k=0;
答案:A
评析:"a>b?(b>c?1:0):0"的求解顺序是:先判断a>b是否为真,如果为真,则执行b>c?1:0:如果b>c为真,则(b>c?l:0)的值为1,从而整个表达式返回1,否则整个表达式返回0;如果a<=b,则表达式返回0。因此功能等价的语句应为if((a>b)&&(b>C))k=l;else k=0;。
(16)设x、y、t均为int型变量,则执行语句:x=y=3;t=++x‖++y;后,y的值为_______。
A)不定值 B)4 C)3 D)1
答案:C
评析:e语言中在做逻辑或运算时,自左向右判断各个参加或运算的表达式,一旦运算到某式的值为非零时,表明整个表达式一定为真,余下的语句则不再进行运算。本题中,++x的值为真,则++y并没有进行运算,所以y值不变。
(17)假设a和b为int型变量,则执行以下语句后,b的值为_______。
a=l:b=10:
do
{ b-=a: a++:
} while(b一<0):
A)9 B)-2 C)-l D)8
答案:D
评析:本题程序第一轮循环后b的值为9,在进行循环条件测试时,先取b的现值9与O比较,然后再将b减l。由于9<0不成立,因此循环结束,这时b的值已变成8,本题正确答案为D。
(18)若执行以下程序时从键盘上输入9,则输出结果是_________。
main()
{
int n:
scanf("%d:",&n);
if(n++<10)printf("%d\n",n);
else printf("%d\n",n--);
}
A)ll B)lO C)9 D)8
答案:B
评析:n++是在语句结束后再加l,因此,if语句中相当于判断的是9<10,当然是执行if语句后面的lorintf语句,而这时,因为if语句被执行,n的值也被加1,所以在打印时,n值为10,而n--是在printf语句执行完毕后再减1的。
(19)有以下程序段
int k=O:
while(k=l)k++;
while循环执行的次数是_________。
A)无限次 B)有语法错,不能执行
C)一次也不执行 D)执行1次
答案:A
评析:c语言里关系表达式的等于应该是"=="。一个等于号表示赋值,即这里面重复的把1赋给k,自然表达式k=l的值总为1,while后面的表达式恒为真,当然会进入死循环。
(20)有以下程序:
void sum(int*a)
{a[O]=a[1];}
main()
{
Int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=1;i>O;i--)sum(&aa[i]);
printf("%d\n",aa[0]);
)
程序运行后的输出结果是_________。
A)4 B)3 C)2 D)1
答案:D
评析:c语言规定,实参变量对形参变量的数据传递是"值传递",只由实参传给形参,而不能由形参传回来给实参。函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题要求输出aa[0]的值,结果应为1。
(21)以下程序执行后sum的值是_________。
main()
{
int I,sum;
for(i=1;i<6;i++)sum+=i;
printf("%d\n",sum);
}
A)15 B)14 C)不确定 D)0
答案:C
评析:变量sum在使用时未赋初值,所以无法确定sum最终的值。
(22)有以下程序:
main()
{
int x[8]={8,7,6,5,0,0},*s;
s=x+3:
printf("%d\n",s[2]);
}
程序运行后的输出结果是________。
A)随机值 B)0 C)5 D)6
答案:B
评析:本题定义了数组x[8]和指针变量s,由c语言规定,指针加1的含义是使指针指向数组的下一个元素,而不是指针值简单的加l,因此通过s=x+3;使s指向数组元素x[3]。由于指向数据的指针变量可以带下标表示,如s[i]与*(s+i)等价。因此题目要求输出s[2]的值,即+(s+2)的值,也就是x[51的值,为0。
(23)有以下程序段
int x=3:
do
{
printf("%d",x-=2);
}
while(!(--x));
其输出结果是_______。
A)l B)3 0 C)1 -2 D)死循环
答案:C
评析:本题中循环执行了两次,第一次,执行完printf语句后,x=l,而--X是先自减后执行语句,所以(!(--X))的值为非零,所以又执行了一次。第二次x的值为-2,--x的值为-3,求非后,值为0,跳出循环。
(24)若变量c为char类型,能正确判断出c为小写字母的表达式是_______。
A)'a'<=c<='z' B)(c>='a')‖(c<='z')
C)('a'<=C)and('z'>=C) D)(c>='a')&&(c<='z')
答案:D
评析:(c>='a')和(c<='z')的关系应该是"与"的关系。
(25)下列不合法的main函数命令行参数的表示形式是_______。
A)main(n a,char*c[]); B)main(ac,av)int arc;char**av;
C)main(C,V)int c,char*v[]; D)main(argc,argv)int argc;char argv[];
答案:D
评析:main函数的参数通常有两个,前者为整型,后者为字符型指针数组。参数的名字可以是任意合法的标识符。而且,形如**av与*av[]等价,所以选项A、B、c均正确,选项D是错误的。
(26)以下所列的各函数首部中,正确的是_______。
A)void play(var a:Integer,var b:Integer)
B)void play(int a,b)
C)void play(int a,int b)
D)Sub play(a as integer,b as integer)
答案:C
评析:除选项c项外,其它各项都没有按照c语言中的函数定义规则定义函数。
(27)在c语言中,引用数组元素时,其数组下标的数据类型允许是_______。
A)整型常量 B)整型表达式
C)整型常量或整型表达式 D)任何类型的表达式
答案:C
评析:c语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为数组名[下标],下标可以是整型常量或整型表达式。