全国计算机等级考试二级C语言真题库之选择题11.docx
- 文档编号:18090573
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:27
- 大小:38.38KB
全国计算机等级考试二级C语言真题库之选择题11.docx
《全国计算机等级考试二级C语言真题库之选择题11.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言真题库之选择题11.docx(27页珍藏版)》请在冰点文库上搜索。
全国计算机等级考试二级C语言真题库之选择题11
全国计算机等级考试等级考试真题库之选择题(11)
1.下列叙述中正确的是
A)一个算法的空间复杂度大,则其时间复杂度也必定大
B)一个算法的空间复杂度大,则其时间复杂度必定小
C)一个算法的时间复杂度大,则其空间复杂度必定小
D)算法的时间复杂度与空间复杂度没有直接关系
参考答案:
D
【解析】算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。
2.下列叙述中正确的是
A)循环队列中的元素个数随队头指针与队尾指针的变化而动态变化
B)循环队列中的元素个数随队头指针的变化而动态变化
C)循环队列中的元素个数随队尾指针的变化而动态变化
D)以上说法都不对
参考答案:
A
【解析】在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。
因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。
所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。
3.一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为
A)219
B)229
C)230
D)231
参考答案:
B
【解析】二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。
4.对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为
A)9
B)10
C)45
D)90
参考答案:
C
【解析】冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。
5.构成计算机软件的是
A)源代码
B)程序和数据
C)程序和文档
D)程序、数据及相关文档
参考答案:
D
【解析】软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D。
6.软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是
A)测试
B)设计
C)可行性研究
D)实现
参考答案:
C
【解析】开发阶段包括分析、设计和实施两类任务。
其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段,C不属于开发阶段。
7.下面不能作为结构化方法软件需求分析工具的是
A)系统结构图
B)数据字典(DD)
C)数据流程图(DFD图)
D)判定表
参考答案:
A
【解析】结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。
8.在关系模型中,每一个二维表称为一个
A)关系
B)属性
C)元组
D)主码(键)
参考答案:
A
【解析】关系模型采用二维表来表示,即每个二维表称为一个关系。
9.若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是
A)一对一
B)一对多
C)多对一
D)多对多
参考答案:
B
【解析】A和B为一对多的联系,则对于A中的每一个实体,B中有多个实体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所以为一对多联系。
10.
A)选择
B)投影
C)交
D)并
参考答案:
D
【解析】关系T中的元素与关系R和关系S中不同元素的总和,因此为并操作。
11.我们所写的每条C语句,经过编译最终都将转换成二进制的机器指令。
关于转换以下说法错误的是
A)一条C语句可能会被转换成零条机器指令
B)一条C语句可能会被转换成多条机器指令
C)一条C语句对应转换成一条机器指令
D)某种类型和格式的C语句被转换成机器指令的条数是固定的
参考答案:
C
【解析】一个C语句经过编译后产生若干条机器指令。声明部分不是语句,不产生机器指令,只是对有关数据的声明。而且固定类型和格式的C语句被转换成机器指令的条数固定。所以选择C选项。
12.关于"while(条件表达式)循环体",以下叙述正确的是
A)循环体的执行次数总是比条件表达式的执行次数多一次
B)条件表达式的执行次数总是比循环体的执行次数多一次
C)条件表达式的执行次数与循环体的执行次数一样
D)条件表达式的执行次数与循环体的执行次数无关
参考答案:
B
【解析】while循环是先判断条件,满足条件后执行循环体,执行完后接着判断条件,执行,直到最后一次判断条件后不成立,跳出循环,所以最后一次执行了条件表达式,但是没有执行循环体,所以选择B选项。
13.关于C语言的符号常量,以下叙述中正确的是
A)符号常量的符号名是标识符,但必须大写
B)符号常量是指在程序中通过宏定义用一个符号名来代表一个常量
C)符号常量在整个程序中其值都不能再被重新定义
D)符号常量的符号名必须是常量
参考答案:
B
【解析】在C语言中,可以用一个标识符来代表一个常量,称为符号常量。这个标识符必须在程序中进行特别的"指定",并符合标识符的命名规则。用作符号常量的标识符通常采用大写字母表示,在主函数中其值不能再被定义。所以选择B选项。
14.若有以下程序
#include
main()
{intb=10,a=-11;
a%=b%=4;
printf("%d%d\n",a,b);
}
则程序的输出结果是
A)12
B)-12
C)-1-2
D)1-2
参考答案:
B
【解析】先计算b%=4,即b=b%4,结果为2,然后计算a%=2,结果为-1,最后a的值为-1,b的值为2,所以选择B选项。
15.若有以下程序
#include
main()
{inta=0,b=0,c=0;
c=(a-=++a),(a+=b,b+=4);
printf("%d,%d,%d\n",a,b,c);
}
则程序的输出结果是
A)0,4,0
B)0,4,4
C)1,4,1
D)1,4,4
参考答案:
A
【解析】逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算。
且逗号运算符的优先级最低,所以先计算c=(a-=++a)这部分。
其中,赋值运算符从右往左计算,先执行++a,a自增1后再赋值,所以a的值为1,执行a=a-1,即a=1-1,a的值为0,并将0赋给变量c。第二部分(a+=b,b+=4),先执行a=a+b,a=0+0,即a的值为0,然后执行b+=4,b=0+4,即b的值为4。所以打印结果为0,4,0,选择A选项。
16.若有以下程序
#include
main()
{inta=0,b=0,c=0,d;
c=(a+=b,,b+=a);/*第4行*/
d=c;;/*第5行*/
;/*第6行*/
;printf("%d,%d,%d\n",a,b,c);/*第7行*/
}
编译时出现错误,你认为出错的是
A)第4行
B)第5行
C)第6行
D)第7行
参考答案:
A
【解析】第4行逗号表达式中间的第二个表达式为空,是不合法的,可以去掉写成a+=b,b+=a,也可以在里面补一个表达式,如a+=b,a,b+=a。所以选择A选项。
17.若有以下程序
#include
main()
{inta=1,b=2,c=3,d=4;
if((a=2)||(b=1))c=2;
if((c==3)&&(d=-1))a=5;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
则程序的输出结果是
A)1,2,3,4
B)2,1,2,-1
C)5,1,2,-1
D)2,2,2,4
参考答案:
D
【解析】第一个if语句的判断条件中是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断。执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2。判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c==3,不成立,不再判断第二个运算对象,所以不执行d=-1操作和a=5操作。所以结果为选项D。
18.若有以下程序
#include
main()
{inta=1,b=2,c=3,d=4,r=0;
if(a!
=1);elser=1;
if(b==2)r+=2;
else;if(c!
=3)r+=3;
else;if(d==4)r+=4;
printf("%d\n",r);
}
则程序的输出结果是
A)10
B)7
C)6
D)3
参考答案:
B
【解析】else总是和与之最近的上面的if配对,执行第一个if,判断条件不成立,执行elser=1;语句。再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立执行第7行else后面的空语句";"。再执行第四个if的判断条件d==4成立,执行r+=4,r的值为7。然后打印输出。
19.若有以下程序
#include
main()
{ints=0,n;
for(n=0;n<4;n++)
{switch(n)
{default:
s+=4;
case1:
s+=1;
case2:
s+=2;
case3:
s+=3;
}
}
printf("%d\n",s);
}
则程序的输出结果是
A)6
B)18
C)10
D)24
参考答案:
D
【解析】第一次for循环,n的值为0,所以从default后面的语句开始执行,s+=4,s+=1,s+=2,s+=3,s的值为10。在进入第二次for循环,n的值为1,所以执行s+=1,s+=2,s+=3,s的值为16。在进入第三次for循环,n的值为2,所以执行s+=2,s+=3,s的值为21。在进入第四次for循环,n的值为3,所以执行s+=3,s的值为24。
20.若有以下程序
#include
main()
{inta=-2,b=0;
while(a++)++b;
printf("%d,%d\n",a,b);
}
则程序的输出结果是
A)1,2
B)0,2
C)1,3
D)2,3
参考答案:
A
【解析】第一次while判断条件中a++,先用后加,为-2不为0条件为真,执行a的自加与++b操作,a的值变为-1,b的值变为1。第二次while判断后,a的值变为0,b的值变为2。第三次while判断条件为假,但是仍要执行自加操作,即值为1,跳出循环。打印1和2。
21.若有以下程序
#include
main()
{inta=6,b=0,c=0;
for(;a;){b+=a;a-=++c;}
printf("%d,%d,%d\n",a,b,c);
}
则程序的输出结果是
A)1,14,3
B)0,14,3
C)0,18,3
D)0,14,6
参考答案:
B
【解析】本循环的条件判断时只要a为0就退出循环体,初始值a的值为6,满足条件执行完循环体,b的值为6,a-=++c即a=a-(++c),所以a的值为5,c的值为1。第二次循环后b的值为11,a的值为3,c的值为2。第三次也是最后循环后,a的值为0,b的值14,c的值为3。
22.以下选项中非法的C语言字符常量是
A)'\007'
B)'\b'
C)'aa'
D)'\xaa'
参考答案:
C
【解析】C选项中是字符串常量,应该用双引号表示即"aa"。所以选择C选项。
23.若有以下程序
#include
charf(charx)
{returnx*x+'a';}
main()
{chara,b=0;
for(a=0;a<4;a+=1)
{b=f(a);putchar(b);}
}
则程序的输出结果是
A)abcd
B)ABEJ
C)abej
D)ABCD
参考答案:
C
【解析】该题目首先初始化变量a和b,通过for循环语句使a取值为0、1、2、3,f函数的功能是将a*a+'a'的值返回给b,即b为a、b、e、j。
最后通过字符输出函数putchar()将b输出。
因此C选项正确。
24.若有以下程序
#include
voidsp(int*a)
{intb=2;
a=&b;*a=*a*2;printf("%d,",*a);
}
main()
{intk=3,*p=&k;
sp(p);printf("%d,%d\n",k,*p);
}
则程序的输出结果是
A)4,3,3
B)4,3,4
C)6,3,6
D)6,6,6
参考答案:
A
【解析】首先在主函数中给整型变量k赋值为3,将变量k的地址赋给指针变量p;调用sp函数,将实参p的值传给形参a,在sp函数中,指针变量a又获得变量b的地址,通过运算后,输出a的值为4;返回主函数,输出k的值和p的值为3和3。
因此A选项正确。
25.若有以下程序
#include
intk=7;
voidf(int**s)
{int*t=&k;
*s=t;
printf("%d,%d,%d,",k,*t,**s);
}
main()
{inti=3,*p=&i,**r=&p;
f(r);printf("%d,%d,%d\n",i,*p,**r);
}
则程序的输出结果是
A)3,3,3,7,7,7
B)3,7,7,7,7,7
C)7,7,7,3,3,3
D)7,7,7,3,7,7
参考答案:
D
【解析】在主函数中分别给整型变量i,指针型变量p和指向指针的指针变量r赋初值;调用f函数,并将实参变量r的值传递给形参变量s,在f函数中,通过printf("%d,%d,%d,",k,*t,**s);语句输出7,7,7;返回主函数,通过printf("%d,%d,%d\n",i,*p,**r);输出3,7,7。因此D选项正确。
26.若有以下程序
#include
int*f(int*s,int*t)
{int*k;
if(*s<*t){k=s;s=t;t=k;}
returns;
}
main()
{inti=3,j=5,*p=&i,*q=&j,*r;
r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);
}
则程序的输出结果是
A)3,5,5,3,5
B)3,5,3,5,5
C)5,3,5,3,5
D)5,3,3,5,5
参考答案:
B
【解析】在主函数中分别给整型变量i、j和指针型变量p、q赋初值,并声明指针变量r;调用f函数,并将实参变量p和q的值传递给形参变量s和t,并且f函数是指针型函数,即函数的返回值将是一个地址。
在f函数中,如果条件成立,则将指针变量s和t互换,并且将指针s的地址返回主函数。
最后输出i,j,*p,*q,*r的值,即3,5,3,5,5。
因此B选项正确。
27.若有以下程序
#include
#defineN4
voidfun(inta[][N],intb[],intflag)
{inti,j;
for(i=0;i {b[i]=a[i][0]; for(j=1;j if(flag? (b[i]>a[i][j]): (b[i] b[i]=a[i][j]; } } main() {intx[N][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},y[N],i; fun(x,y,1); for(i=0;i fun(x,y,0); for(i=0;i printf("\n"); } 则程序的输出结果是 A)1,5,9,13,4,8,12,16, B)4,8,12,16,1,5,9,13, C)1,2,3,4,13,14,15,16, D)13,14,15,16,1,2,3,4, 参考答案: A 【解析】该题首先初始化二维数组,if(flag? (b[i]>a[i][j]): (b[i]a[i][j])作为条件表达式的值,否则以(b[i] 28.若有以下程序 #include voidfun(inta[],intn) {intt,i,j; for(i=1;i for(j=i+2;j if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;} } main() {intc[10]={10,9,8,7,6,5,4,3,2,1},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, C)2,9,4,7,6,5,8,3,10,1, D)10,1,8,3,6,5,4,7,2,9, 参考答案: D 【解析】该题首先对一维数组进行初始化,c[0]到c[9]依次赋值为10到1;fun(c,10);语句调用fun函数,fun函数的功能是将一维数组偶数位元素的数值由小到大排序;最后将排好序的新的一维数组进行输出。 因此D选项正确。 29.若有以下程序 #include main() {inti,j=0; chara[]="Howareyou! "; for(i=0;a[i];i++) if(a[i]! ='')a[j++]=a[i]; a[j]='\0'; printf("%s\n",a); } 则程序的输出结果是 A)Hay! B)Howareyou C)Howareyou! D)Howareyou! 参考答案: C 【解析】主函数中首先定义字符数组a[]="Howareyou! ";执行for循环语句,语句if(a[i]! ='')a[j++]=a[i];其功能是将字符数组中的空格去掉。 因此C选项正确。 30.若有以下程序 #include char*a="you"; charb[]="WelcomeyoutoChina! "; main() {inti,j=0;char*p; for(i=0;b[i]! ='\0';i++) {if(*a==b[i]) {p=a; for(j=i;*p! ='\0';j++) {if(*p! =b[j])break; p++; } if(*p=='\0')break; } } printf("%s",&b[i]); } 则程序的输出结果是 A)China! B)toChina! C)meyoutoChina! D)youtoChina! 参考答案: D 【解析】该程序首先定义*a和b[],并进行初始化。 主函数中通过外层for循环语句,遍历字符数组b[],并且将符合if条件语句的字符赋给数组p;for内层循环语句,遍历字符数组a[]。 再将符合if条件语句的结果输出。 因此D选项正确。 31.若有以下程序 #include main() {chara[20],b[]="Theskyisblue.";inti; for(i=0;i<7;i++)scanf("%c",&b[i]); gets(a);printf("%s%s\n",a,b); } 执行时若输入: (其中 Figflowerisred. 则输出结果是 A)werisred.Figfloisblue. B)werisred.Figflo C)werisred.Theskyisblue. D)Figflowerisred.Theskyisblue. 参考答案: A 【解析】程序首先初始化字符数组b[],执行for循环语句,循环变量i的取值范围从0到6。在for循环语句中通过scanf函数将从键盘上输入的数据输入到b[]中,即b的值为Figfloisblue.。退出for循环语句,执行语句gets(a);,gets()函数的调用形式为: gets(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止,即a的值为werisred.。因此A选项正确。 32.若有以下程序 #include main() {charw[20],a[5][10]={"abcdef","ghijkl","mnopq","rstuv","wxyz"}; intp[6][2]={{0,1},{1,5},{0,0},{0,2},{1,4},{4,4}},i; for(i=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 语言 题库 选择题 11