二级C语言选择题专项强化真题试卷29
选择题
1.以下函数按每行8个输出数组中的数据:
void fun(int*w int n)
{int i;
for(i=0;i<n;i++)
{
___________
printf(\\(C)
A. if(i/8==0)printf(\\
B. if(i/8==0)continue;
C. if(i%8==0)printf(\\
D. if(i%8==0)continue;
解析:每行输出8个数组数据后输入一个换行,所以应该采取对8取余的方法,余数循环一次便换行一次,所以语句为if(i%8==0)printf(\\
2.有以下程序:
#include<stdio.h>
main()
{
int x=1,y=0;
if(!x)y++;
else if(x==0)
y+=2:
else y+=3;
printf(\\(D)
A. 0
B. 2
C. 1
D. 3
解析:本题考查条件分支结构和C语言中条件成立与否的判定方式。在C语言中,变量值为零则表示假,非零则表示真。因此,if(!x)与else if(x=—0)均不成立,程序执行else语句,即y+=3。得到答案为D。
3.下列叙述中正确的是( )。(D)
A. 如果函数带有参数,就不能调用自己
B. 所有函数均不能接受函数名作为实参传入
C. 函数体中的语句不能出现对自己的调用
D. 函数名代表该函数的入口地址
解析:本题考查函数调用的相关知识。B选项中函数可以接受函数名作为实参传入,引用函数名也是指针;A、C选项是错误的,因为递归函数就能调用自己。
4.下列关于算法复杂度叙述正确的是( )。(B)
A. 最坏情况下的时间复杂度一定高于平均情况的时间复杂度
B. 时间复杂度与所用的计算工具无关
C. 对同一个问题,采用不同的算法,则它们的时间复杂度是相同的
D. 时间复杂度与采用的算法描述语言有关
解析:算法的时间复杂度是指执行算法所需要的计算工作量,它与使用的计算机、程序设计语言以及算法实现过程中的许多细节无关,故B选项正确,D选项错误。最坏情况下的时间复杂度可以与平均情况的时间复杂度相同,故A选项错误。不同的算法时间复杂度一般不相同,故C选项错误。
5.有以下程序:
#include<stdio.h>
main( )
{
int a=1,b=2,c=3,x;
x=(a^b)&c;
printf(\\(A)
A. 3
B. 1
C. 2
D. 0
解析:本题考查位运算符以及相关运算,^为按位或,&为按位与,那么a^h为3,再与c按位与仍然为3,所以答案为A选项。
6.在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在多个科室治疗。则实体医生和患者之间的联系是( )。(A)
A. 多对多
B. 多对一
C. 一对多
D. 一对一
解析:一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。医生可为多位患者看病,患者也可以找多位医生看病,实体医生与患者联系是多对多,A选项正确。
7.关于地址和指针,以下说法正确的是( )。(A)
A. 通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量
B. 可以取一个常数的地址赋值给同类型的指针变量
C. 可以取一个表达式的地址赋值给同类型的指针变量
D. 可以取一个指针变量的地址赋值给基类型相同的指针变量
解析:常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C语言也不允许这样做,编译会出错,B选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言不允许这样做,编译会出错,C选项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,D选项错误。故答案为A选项。
8.在最坏情况下,二分查找法的时间复杂度为( )。(C)
A. B.
C. log2n
D. n
解析:二分法查找也称拆半查找,能使用二分法查找的线性表必须满足两个条件,用顺序存储结构以及线性表有序。利用二分法查找元素x的过程如下:将x与线性表的中间项比较,如果x的值与中间项的值相等,则查找成功,结束查找;如果x小于中间项的值,则在线性表的前半部分以二分法继续查找;如果X大于中间项的值,则在线性表的后半部分以二分法继续查找。可以证明,对于长度为n的有序线性表,在最坏情况下,二分法查找需比较log2n次,故时间复杂度为log2n。故选择C选项。
9.有三个关系R、S和T如下:
(D)
A. 笛卡儿积
B. 交
C. 并
D. 自然连接
解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。
10.有以下程序
#include<stdio.h>
main( )
{int a=6,i;
for(i=1;i<=3;i++)
{if(a>=5)break;
if(a%2){a+=2;continue;}
a=(a-3,a+4);
}
prinff(\\(B)
A. 0,6
B. 1,6
C. 8,6
D. 4,2
解析:程序在进入for循环时,a的初值为6,i的初值为1,for循环中,if(a>=5)语句成立,执行break,跳出for循环,此时a的值为6,i的值为1,所以程序输出1,6,本题答案为B。
11.有以下程序:
#include
#define D(x)2*x+3
main()
{
int i=1,j=2;
printf(\\(A)
A. 7
B. 6
C. 9
D. 2
解析:宏定义只作简单的替换,pr4ntf()函数中“D(i+j)”表达式执行运
本文档预览:3600字符,共8435字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载