二级C语言选择题专项强化真题试卷31
选择题
1.下列排序方法中,最坏情况下比较次数最少的是( )。(D)
A. 冒泡排序
B. 简单选择排序
C. 直接插入排序
D. 堆排序
解析:冒泡排序,简单选择排序,直接插入排序在最坏情况下的比较次数都是O(n2),而堆排序的时间复杂度为O(nlog2n)。
2.设有定义:char s[81];int i=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是( )。
C
解析:字符串的输入有两种方式:①scanf()函数;②get()函数。C项中,s代表输入一个字符数组而非地址,而且遇到空格时会默认字符串输入结束,所以不能读入带有空格的字符串。
3.下列与队列结构有关联的是( )。(D)
A. 函数的递归调用
B. 数组元素的引用
C. 多重循环的执行
D. 先到先服务的作业调度
解析:队列的修改是依“先进先出”的原则进行的,故D选项正确。
4.若有以下语句:
int n;float f=1 3.8;
则执行n=(int)f%3;后,n的值是( )。(A)
A. 1
B. 4
C. 4.333333
D. 4.6
解析:(int)f表示将f中的值强制类型转换为整型,即将13.8的小数部分舍掉,转换为13;然后计算13%3,结果为1,再将结果赋给变量n,因此n的值为1。
5.有以下程序:
#include<stdio.h>
typedef struct{int b,p;}A;
void f(A c)/*注意:c是结构变量名*/
{ int j;
c.b+=1;c.p+=2;
}
main()
{
int i;
A a={1,2};f(a);
printf(\\(B)
A. 2 4
B. 1 2
C. 1 4
D. 2 3
解析:考查结构体变量作为函数实参整体传递,也是一种值传参,形参的变化不能影响到实参,所以调用函数f(a)对a中的数据没有影响,输出结果为12,答案选B。
6.设循环队列为Q(1:m),其初始状态为fronront=rear=m。经过一系列入队与退队为front=rear=m。经过一系列入队与退队运算后,front=15,rear=20。现要在该循环队列中寻找最大值的元素,最坏情况下需要比较的次数为( )。(A)
A. 4
B. 6
C. m—5
D. m—6
解析:初始状态为front=rear=m,说明初始状态为空。经过一系列入队与退队运算后,front=15,rear=20,则当前共有5个元素,在最坏情况下,需要比较的次数为4次,答案选A。
7.若有以下程序:
#include<stdio.h>
char fun(char x)
{return x*x+’a’;)
main()
{
char a,b=0;
for(a=0;a<4;a+=1)
{b=fun(a);putchar(b);}
printf(\\(C)
A. abcd
B. ABEJ
C. abej
D. ABCD
解析:该题首先初始化变量a和b,通过for循环语句使得a取值为0、1、2、3,fun函数的功能是将a*a+’a’的值返回给b,即b为a、b、e、j。最后通过字符输出函数putchar()将b输出。故C选项正确。
8.以下叙述错误的是( )。(B)
A. 一个算法所包含的操作步骤应该是有限的
B. 任何能通过编译和运行的算法都一定能得到所期望的结果
C. 算法中每一条指令必须有确切的含义
D. 算法可以用各种描述方法来进行描述
解析:算法的特点:零个或多个输入,至少一个输出,可行性(能编程实现),有穷性(有限步出结果),确定性(描述不能有歧义)。可知A,C,D选项正确。C语言中,通过编译,可以运行的程序,不一定符合题目的本意,因此即使可以运行得到结果,也不一定和预期的结果一样,否则就不需要调试和修改程序了,故B选项错误。答案为B选项。
9.if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是( )。(D)
A. 必须是逻辑值
B. 必须是整数值
C. 必须是正数
D. 可以是任意合法的数值
解析:if语句中的表达式可以是任意合法的数值,如常量、变量表达式。所以D选项正确。
10.有以下程序:
#include
main()
{ int i,j,m=1;
for(i=1;i<3;i++)
{for(j:3;j>0;j- -)
{if(i*j>3)break;
m *=i*j;
}
}
printf(\\(C)
A. m=4
B. m=2
C. m=6
D. m=5
解析:第一次外循环i的值为1,第一次内循环j的值为3,不满足条件执行m*=i*j,即m的值为3;第二次j的值为2,不满足条件执行m*=i*j,即m的值为6;第三次j的值为1,不满足条件执行m*=i*j,即m的值仍为6。第二次外循环i的值为2,j的值为3,满足条件,执行break语句,跳出循环。
11.有以下程序:
#include
main()
{ int x=1,y=0,a=0,b=0;
switch(x)
{ case 1:
switch(y)
{ case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;
}
printf(\\(B)
A. a=2,b=2
B. a=2,b=1
C. a=1,b=1
D. a=1,b=0
解析:case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不再进行判断,直到碰到break或函数结束为止。所以执行内层switch(y)时只执行了a++,此时a的值为1。然后执行外层case 2语句的a++;b++;则a为2,b为1。所以结果为B)。
12.有以下程序:
#include
fun(int x,int y)
{static int m=0,i=2;
i+=m+1;m=i+x+y;retum m;
}
main()
{int j=1,m=1,k;
k
本文档预览:3600字符,共7523字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载