计算机等级二级C语言模拟试题1(六)
一、选择题((1)-(10)每题2分,(11)-(50)每题1分,共60分)
下列问题A)、B)、C)、D)中的四个选项只有一个是正确的。请在答题卡的相应位置涂上正确选项,答案不会在试卷上计分。
(1)下列选项中,_ _ _ _ _ _ _ _ _ _ _ _不是算法一般应具备的基本特征。
A)确定性B)可行性C)无限性D)拥有足够的信息
答案:C
评价:一个算法一般应具备以下基本特征。①可行性②确定性③贫困化④信息充足
(2)希尔排序法属于_ _ _ _ _ _ _ _型排序法。
A)交换排序法B)插入排序法
C)选择排序法d)构建堆排序法
答案:B
点评:希尔排序法的基本思想是将整个无序序列分成若干个小的子序列进行插入排序。所以Hill排序法属于插入排序,但它在简单插入排序上做了很大的改进。
(3)下列关于队列的说法中正确的是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _的 _ _ _ _ _ _ _ _ _ _ _ _
A)队列中只能插入数据B)队列中只能删除数据
C)队列是先进先出的线性表D)队列是先进后出的线性表
答案:C
备注:队列是线性表,允许一端插入,另一端删除。 也叫“先进先出”或“后进后出”线性表,体现了“先来先服务”的原则。
(4)顺序查找长度为N的线性表,最坏情况下需要的比较次数是_ _ _ _ _ _ _ _ _ _ _ _。
a)n+IB)n c)(n+I)/2d)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仍为1(且所选逻辑条件由该运算给出)。 这种关系由R中满足逻辑条件的元组组成。如果关系的逻辑条件是C,R满足F的选择运算可以写成:6f(R)。
(10)数据库的物理设计是为给定的逻辑结构选择适合应用环境的_ _ _ _ _ _的过程,包括确定数据库在物理设备上的存储结构和访问方式。
A)逻辑结构B)物理结构C)概念结构D)层次结构
答案:B
评价:根据数据库物理设计的概念,可以知道选择最适合给定逻辑数据模型的物理结构的过程就是数据库的物理设计。数据库的物理结构是指数据库在物理设备上的存储结构和访问方式。
(11)下列说法正确的是_ _ _ _ _ _ _ _。
A)C语言编译时不检查语法
B)C语言子程序有两种
C)C语言函数可以嵌套定义
D)C语言根据函数是否能被其他源文件调用分为内部函数和外部函数
答:D【选项B的错误在于C语言,子程序的功能是由函数完成的,没有进程的概念;选项C的错误在于函数不能嵌套在定义中,但可以嵌套在调用中。
(12)有以下程序:
main()
{
int a:
char c = 10;
float f = 100.0;双x;
a = f/= c * =(x = 6.5);
printf("%d%d%3.1f%3.1f\n ",a,c,f,x);
}
程序运行后的输出结果是_ _ _ _ _ _ _ _ _。
A)1 65 1 6.5b)1 65 1.5 6.5c)L 65 1.0 6.5d)2 65 1.5 6.5
答案:B
评价:解决此问题的步骤如下:首先,计算“C * = (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”运算。
(13)以下变量X、Y和Z是双精度类型,并且已经被正确赋值。不能正确表示数学公式x/(y*z)的C语言表达式是_ _ _ _ _ _ _ _。
A)X/Y * ZB)X *(1/(Y * Z))C)X/Y * 1/Z D)X/Y/Z
答案:A
评价:按照从左到右运算的逻辑,选项A是先做X。
(14)若A为int类型,其值为3,则执行表达式a+=a-=a*a后,A的值为_ _ _ _ _ _。
A)-3 B)-9 C)-12D)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;否则k = 0;
B)if((a > B)÷(B > C))k = l;else k = O;
C)if(a D)if(a>b)k=1,else if(b > C)k = l;否则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;如果ab)& &(b > c))k = l;否则k = 0;。
(16)如果x,y,t都是int变量,执行语句:x = y = 3;t = ++ x ‖++ y;之后y的值就是_ _ _ _ _ _ _ _ _。
A)不确定值B)4 C)3 D)1
答案:C
备注:在E语言中做逻辑OR运算时,参与OR运算的每个表达式都是从左到右判断的。一旦一个公式的值不为零,就表示整个表达式必须为真,剩下的语句都不会被运算。在这个问题中,如果++x的值为真,++y不运算,那么y的值不变。
(17)假设A和B是int变量,执行下面的语句后,B的值是_ _ _ _ _ _ _ _ _。
A = l:B = 10:
do
{ B-= A:a++:
} while(B A)9 B)-2 C)-l D)8
答案:D因为9 (18)如果在执行下面的程序时从键盘输入9,则输出结果是_ _ _ _ _ _ _ _ _ _ _ _ _ _。
main()
{
int n:
scanf(" % d:",& n);
if(n++ else printf("%d\n ",n-);
}
A)LLB)LOC)9D)8
答案:B
注释:n++是在语句结束后加上L。因此,如果语句等价于判断9 (19)有如下程序段
int k .
while循环执行的次数是_ _ _ _ _ _ _ _ _。
A)无限次B)有一个语法错误,所以不能执行
C)没有执行一次D)执行一次
答案: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 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意味着指针指向数组的下一个元素,而不是简单的在指针值上加1。因此,通过S = X,使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'='a')&&(c答:D
点评:(c>='a ')、(c (25)下列非法的主函数命令行参数以_ _ _ _ _ _ _ _ _的形式表示。
A)main(n a,char * c[]);b)主(交流、交流)内部电弧;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,As integer)
答案:C
备注:除选项C外,其他各项均没有按照C语言中的函数定义规则定义函数。
(27)在C语言中,引用数组元素时,允许其数组下标的数据类型为_ _ _ _ _ _ _ _ _。
A)整数常量B)整数表达式
C)整数常量或整数表达式D)任意类型的表达式
答案:C
备注:C语言规定只能逐个引用数组元素,不能一次性引用整个数组。数据元素由数组名[下标]表示,下标可以是整数常量,也可以是整数表达式。
0条评论