二级C语言笔试102.docx
- 文档编号:28977946
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:24
- 大小:24.73KB
二级C语言笔试102.docx
《二级C语言笔试102.docx》由会员分享,可在线阅读,更多相关《二级C语言笔试102.docx(24页珍藏版)》请在冰豆网上搜索。
二级C语言笔试102
二级C语言笔试-102
(总分:
100.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
70.00)
1.以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能,造成错误的原因是
#defineMIN-2147483647
intfindmax(intX[],intn)
inti,max;
for(i=0;i<n;i++)
max=MIN;
if(max<x[i])max=x[i];
returnmax;
(分数:
2.00)
A.定义语句inti,max;中max未赋初值
B.赋值语句max=MIN;中,不应给max赋MIN值
C.语句if(max<x[i])max=x[i];中判断条件设置错误
D.赋值语句max=MIN;放错了位置 √
解析:
[解析]程序中max=MIN;应该放在for循环语句之前,否则每次循环都要将MIN的值重新赋给max,这样不能实现求最大值的算法思想。
2.数据库管理系统是
(分数:
2.00)
A.操作系统的一部分
B.在操作系统支持下的系统软件 √
C.一种编译系统
D.一种操作系统
解析:
[解析]数据库管理系统是指位于用户与操作系统之间的数据管理软件。
数据库管理系统是为数据库建立、使用和维护而配置的软件。
3.下列叙述中正确的是
(分数:
2.00)
A.程序设计的任务就是编写程序代码并上机调试
B.程序设计的任务就是确定所用数据结构
C.程序设计的任务就是确定所用算法
D.以上3种说法都不完整 √
解析:
[解析]选项A、B、C的说法都不完整。
程序设计应根据计算机要完成的任务进行数据结构和算法的设计,并且编写其程序代码,然后进行调试,直到得出正确结果。
4.软件详细设计产生的图如图所示,该图是
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]N-S图是由若干基本框图构成的流程图,其特点是没有流程线;PAD(问题分析图,ProblemAnalysisDiagram)是一种由左往右展开的二维树状结构;程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤,菱形框表示逻辑判断,箭头表示控制流向;E-R图即实体一联系图(EntityRelationshipDiagram),用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。
5.以下程序运行后的输出结果是
#include<stdio.h>
main()
inta[]=2,3,5,4,i;
for(i=0;i<4;i++)
switch(i%2)
case0:
switch(a[i]%2)
case0:
a[i]++:
break;
case1:
a[i]--;
break;
casei:
a[i]=0;
for(i=0;i<4;i++)printf("%d",a[i]);printf("/n");
(分数:
2.00)
A.3344
B.2050
C.3040 √
D.0304
解析:
[解析]程序执行过程及其取值参见下表。
[*]
所以,程序最后输出a数组中的值分别为3040。
6.有以下定义语句,编译时会出现编译错误的是
(分数:
2.00)
A.chara='a';
B.chara='/n';
C.chara='aa'; √
D.chara='/x2d';
解析:
[解析]字符变量只能存放一个字符,字符常量可以用来给字符变量赋值。
C语言规定字符常量是用一对单撇号“'”括起来的单个字符。
在选项C中,单撇号中有两个字符。
7.下列数据结构中,能够按照“先进后出”原则存取数据的是
(分数:
2.00)
A.循环队列
B.栈 √
C.队列
D.二叉树
解析:
[解析]栈是限定只在一端进行插入与删除的线性表,通常称进行插入、删除的这一端为栈顶,另一端为栈底。
栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才能被删除的元素。
栈是按照“先进后出”或“后进先出”的原则组织数据的。
8.以下程序段的输出结果是
intr=8;
printf("%d/n",r>>1);
(分数:
2.00)
A.16
B.8
C.4 √
D.2
解析:
[解析]变量r的值为8,其二进制为00001000,右移1位后为00000100,即十进制数4,所以输出结果为4。
9.设有以下函数
voidfun(intn,char*s)…
则下面对函数指针的定义和赋值均正确的是
(分数:
2.00)
A.void(*pf)();pf=fun; √
B.viod*pf();pf=fun;
C.void*pf();*pf=fun;
D.void(*pf)(int,char);pf=&fun;
解析:
[解析]选项B、C中的pf定义的不是可指向函数的指针。
对于选项D,赋值时fun前不应有&。
10.若有定义语句:
inta[4][10],*p,*q[4];且0≤i<4,则错误的赋值是
(分数:
2.00)
A.P=a √
B.q[i]=a[i]
C.P=a[i]
D.P=&a[2][1]
解析:
[解析]对于选项A,p只能被地址赋值,而a[i]是下标变量,不是地址。
11.在E-R图中,用来表示实体联系的图形是
(分数:
1.00)
A.椭圆形
B.矩形
C.菱形 √
D.三角形
解析:
[解析]E-R图中用矩形表示实体(等同于表),用椭圆形表示实体的属性(等同于表中的字段),用菱形表示实体关系(等同于外键)。
12.算法的空间复杂度是指
(分数:
1.00)
A.算法在执行过程中所需要的计算机存储空间 √
B.算法所处理的数据量
C.算法程序中的语句或指令条数
D.算法在执行过程中所需要的临时工作单元数
解析:
[解析]算法的空间复杂度是指算法执行过程中所需的存储空间。
一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间及算法执行过程中所需要的额外空间。
13.以下程序运行后的输出结果是
#include<stdio.h>
#definef(x)x*x*x
main()
inta=3,s,t;
s=f(a+1);t=f((a+1));
printf("%d,%d/n",s,t);
(分数:
1.00)
A.10,64 √
B.10,10
C.64,10
D.64,64
解析:
[解析]s=f(a+1)=a+1*a+1*a+1=3+1*3+1*3+1=10
t=f((a+1))=(a+1)*(a+1)*(a+1)==(3+1)*(3+1)*(3+1)=64
14.下列选择项中不属于结构化程序设计原则的是
(分数:
1.00)
A.可封装 √
B.自顶向下
C.模块化
D.逐步求精
解析:
[解析]模块化、自顶向下、逐步求精都是结构化程序设计的原则;可封装是面向对象程序设计原则。
15.下面结构体的定义语句中,错误的是
(分数:
1.00)
A.structordintx;inty;intz;;structorda;
B.structordintx;inty;intz;structorda; √
C.structordintx;inty;intz;a;
D.structintx;inty;intz;a;
解析:
[解析]对于选项B,结构体类型声明和定义分开时,在声明后应有分号“;”。
16.以下程序段中,与语句k=a>b?
(b>e?
1:
0):
0;功能相同的是
(分数:
1.00)
A.if((a>b)&&(b>e))k=1;
elsek=0; √
B.if((a>b)||(b>e))k=1;
elsek=0;
C.if(a<=b)k=0;
elseif(b<=c)k=1;
D.if(a>b)k=1;
elseif(b>c)k=1;
elsek=0;
解析:
[解析]语句k=a>b?
(b>c?
1:
0):
0;的功能是:
当a>b条件成立时,k的值由(b>c?
1:
0)确定,即当a>b与b>c同时成立时,k值为1,否则为0;当a>b条件不成立时,k的值为0。
选项A与语句符合。
对于选项B、D,当a>b或b>c,k值为1,与语句不符合。
对于选项c,当b<=c时,k值为1,与语句不符合。
17.下列关于C语言文件的叙述中,正确的是
(分数:
1.00)
A.文件由一系列数据依次排列组成,只能构成二进制文件
B.文件由结构序列组成,可以构成二进制文件或文本文件
C.文件由数据序列组成,可以构成二进制文件或文本文件 √
D.文件由字符序列组成,其类型只能是文本文件
解析:
[解析]文件由数据序列组成,可以构成二进制文件或文本文件。
18.以下程序运行后的输出结果是
#include
#include
main()
charstr[][20]='One*World","One*Dream!
",*p=str[1];
printf("%d,",strlen(p));printf("%s/n",p);
(分数:
1.00)
A.9,One*World
B.9,One*Dream
C.10,One*Dream!
√
D.10,One*World
解析:
[解析]初始化*p=str[1]使指针变量p指向第二个字符串"One*Dream!
",输出长度为10。
语句printf("%s/n",p);输出字符串"One*Dream!
"。
19.以下程序运行后的输出结果是
#include<stdio.h>
intf(intn);
main()
inta=3,s;
s=f(
(分数:
1.00)
A.;s=s+f(a);pri
解析:
[解析]本题考查静态局部变量。
第一次调用f函数时,将实参a值3传给形参变量n,此时,静态局部变量a的值为1,经过n+=a++运算后,n为4,a为2,return语句将4带回到main函数赋给s;第二次调用f函数时,将实参a值3(注意,实参a的值并未改变)传给变量n,此时,静态局部变量a的值为2,经过n+=a++运算后,n为5,a为3,return语句将5带回到main函数,s=s+f(a)=4+5=9。
20.下列函数的功能是
fun(char*a,char*b)
while((*b=*
(分数:
1.00)
__________________________________________________________________________________________
解析:
[解析](*b=*a)!
='/0'是将a所指空间的字符赋给b所指空间,所以,while((*b=*a)!
='/0'){a++,b++;
21.阅读以下程序
#include<stdio.h>
main()
intcase;floatprintF;
printf("请输入2个数:
");
scanf("%d%f",&case,&printF);
printf("%d%f/n",case,printF);
该程序编译时产生错误,其出错原因是
(分数:
2.00)
A.定义语句出错,case是关键字,不能用作用户自定义标识符 √
B.定义语句出错,printF不能用作用户自定义标识符
C.定义语句无错,scanf不能作为输入函数使用
D.定义语句无错,printf不能输出case的值
解析:
[解析]该程序编译时出现语法错误:
Declarationsyntaxerrorinfunctionmain。
其错误原因是case是关键字,不能用作用户自定义标识符。
22.已知字母A的ASCII码为65,以下程序运行后的输出结果是
#include<stdio.h>
main()
charc1,c2;
c1='A'+'8'-'4';
c2='A'+'8'-'5';
printf("%c,%d/n",c1,c2);
(分数:
2.00)
A.E,68 √
B.D,69
C.E,D
D.输出无定值
解析:
[解析]c1='A'+'8'-'4'='A'+'4'='E',c2='A'+'8'-'5'='A'+'3'='D'(ASCII码为68),所以程序运行结果为E,68。
23.下列有关C语言字符数组的叙述中,错误的是
(分数:
2.00)
A.不可以用赋值语句给字符数组名赋字符串
B.可以用输入语句把字符串整体输入给字符数组
C.字符数组中的内容不一定是字符串
D.字符数组只能存放字符串 √
解析:
[解析]数组名是地址常量,所以不能用赋值语句给字符数组名赋字符串;可以用输入语句把字符串以整体输入方式给字符数组赋值;字符数组中的内容不一定是字符串,可以是整型数。
24.对于循环队列,下列叙述中正确的是
(分数:
2.00)
A.队头指针是固定不变的
B.队头指针一定大于队尾指针
C.队头指针一定小于队尾指针
D.队头指针可以大于队尾指针,也可以小于队尾指针 √
解析:
[解析]循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针。
25.软件设计中划分模块的一个准则是
(分数:
2.00)
A.低内聚、低耦合
B.高内聚、低耦合 √
C.低内聚、高耦合
D.高内聚、高耦合
解析:
[解析]模块划分应考虑的因素包括模块之间的耦合和内聚。
一般来说,要求模块之间的耦合尽可能低,即模块尽可能独立;要求模块的内聚程度尽可能高,即遵循高内聚、低耦合的原则。
26.若有定义语句:
intx=10;,则表达式x-=x+x的值为
(分数:
2.00)
A.-20
B.-10 √
C.0
D.10
解析:
[解析]表达式x-=x+x等价于x=x-(x+x)=10-20=-10。
27.设有定义:
char*c;,以下选项中能够使字符型指针c正确指向一个字符串的是
(分数:
2.00)
A.charstr[]="string";c=str; √
B.scanf("%s",c);
C.c=getchar();
D.*c="string";
解析:
[解析]对于选项B,C没有指向,编译会报警告错。
对于选项C,c只能被地址赋值,不能被getchar读取的字符赋值。
对于选项D,赋值错误,应该改为c="string";。
28.表达式:
(int)((double)9/2)-(9)%2的值是
(分数:
2.00)
A.0
B.3 √
C.4
D.5
解析:
[解析](int)((double)9/2)=4,(9)%2=1,所以(int)((double)9/2)-(9)%2=4-1=3。
29.以下程序运行后的输出结果是
#include
voidfun(intP)
intd=2;
P=d++;printf("%d",P);
main()
inta=1;
fun(
(分数:
2.00)
A.;printf("%d/
解析:
[解析]调用函数fun时将变量a的值1传给形参变量p,p=d++将2赋给p,再执行d++;在函数fun中,printf("%",p);输出p的值2,main函数中输出a的值1。
程序的输出结果为21。
30.以下程序运行后的输出结果是
#include<stdio.h>
main()
inta=1,b=0;
print[("%d,",b=a+b);
printf("%d/n",a=2*b);
(分数:
2.00)
A.0,0
B.1,0
C.3,2
D.1,2 √
解析:
[解析]在第一个printf中计算了b=a+b,使b值变为1;在第二个printf中计算a=2*b=2*1,a值变为2。
所以输出结果为“1,2”。
31.有3个关系R、S和T如下:
其中关系T由关系R和S通过某种操作得到,该操作为
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]两个相同结构的关系的并是由属于这两个关系的元组组成的集合。
32.以下程序运行后的输出结果是
#include
main()
intm=1,n=2,*P=&m,*q=&n,*r;
r=P;p=q;q=r;
printf("%d,%d,%d,%d/n",m,n,*p,*q);
(分数:
2.00)
A.1,2,1,2
B.1,2,2,1 √
C.2,1,2,1
D.2,1,1,2
解析:
[解析]执行语句r=p;p=q;q=r;后,改变了p、q的指向,即p指向了n,q指向了m,m和n的值没有改变,分别仍为1和2。
33.以下程序运行后的输出结果是
#include<stdio.h>
#include<string.h>
main()
chara[10]="abed";
printf("%d,%d/n",strlen(
(分数:
2.00)
A.,sizeof(a));
解析:
[解析]strlen是求a数组中字符串的实际长度(不含串结束符),结果为4;sizeof是求a数组的定义长度(加上'/0'所占的一个字节),结果为10。
34.以下程序运行后的输出结果是
#include<stdio.h>
main()
chars[]="012xy";inti,n=0;
for(i=0;s[i]!
=0;i++)
if(s[i]>='a'&&s[i]<='z')n++;
printf("%d/n",n);
(分数:
2.00)
A.0
B.2 √
C.3
D.5
解析:
[解析]程序的功能是统计字符串“012xy”中小写字母的个数。
所以程序的运行结果为2。
35.以下选项中,能用作用户标识符的是
(分数:
2.00)
A.void
B.8_8
C._0_ √
D.unsigned
解析:
[解析]C语言用户标识符可以由字母、数字和下画线组成,且第一个字符不能是数字。
选项B的第一个字母不合法;关键字不能用作用户标识符,选项A、D不合法。
36.以下程序运行后的输出结果是
#include<stdio.h>
main()
intn=2,k=0;
while(k++&&n++>2);
printf("%d%d/n",k,n);
(分数:
2.00)
A.02
B.13
C.57
D.12 √
解析:
[解析]while循环条件是k++&&n++>2,由于k++先取k值0(为假),n++不计算,循环条件不成立,退出循环结构。
执行k++后结果为1,n未处理,值仍为2,所以输出结果为12。
37.以下程序运行后的输出结果是
#include<stdio.h>
main()
intc=0,k;
for(k=1;k<3;k++)
switch(k)
default:
c+=k;
case2:
c++;break;case4:
c+=2;break;
printf("%d/n",c);
(分数:
2.00)
A.3 √
B.5
C.7
D.9
解析:
[解析]for循环2次:
当循环变量k=1时,从default入口,执行c+=k;,再顺序执行c++;,break跳出switch结构,此时c的值为2;当循环变量k=2时,从case2入口,执行c++;,break跳出switch结构,此时c的值为3;退出循环结构,输出c值3。
38.以下程序运行后的输出结果是
#include<stdio.h>
#include<string.h>
structA
inta;charb[10];doublec;;
structAf(structAt);
main()
structAa=1001,"ZhangDa",1098.0;
a=f(
(分数:
2.00)
A.;printf("%d,%s,%6.1f/n",a.a,a.b,a.c);
structAf(st
解析:
[解析]函数调用f(a)将结构体变量a的值传给f函数的形参t,在函数f中改变了t的值,通过return语句返回后,在main函数中,因为a=f(a);,a也被改变,所以最后输出的是改变后的结果。
39.下列数据结构中,属于非线性结构的是
(分数:
2.00)
A.循环队列
B.带链队列
C.二叉树 √
D.带链栈
解析:
[解析]根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类:
线性结构与非线性结构。
线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。
根据各种结构的定义可知二又树是一种非线性结构。
40.设有定义:
inta=1,b=2,e=3;,以下语句中执行效果与其他3个不同的是
(分数:
2.00)
A.if(a>b)c=a,a=b,b=c;
B.if(a>b)c=a,a=b,b=c;
C.if(a>b)c=a;a=b;b=c; √
D.if(a>b)c=a;a=b;b=e;
解析:
[解析]选项A,if子句是一个逗号表达式,其效果与选项B和D相同,即当a>b成立时,执行c=a;a=b;b=c;语句,否则不执行。
选项C中,当a>b成立时,执行c=a;后,再顺序地执行a=b;b=c;,与选项A、B、D相同;但当a>b不成立时,仍要执行a=b;b=c;语句,与选项A、B、D不同。
二、填空题(总题数:
15,分数:
30.00)
41.某二叉树有5个度为2的结点及3个度为1的结点,则该二叉树中共有1个点。
(分数:
2.00)
填空项1:
__________________ (正确答案:
14)
解析:
[解析]在二叉树中,度为0的结点数是度为2的结点数加1,故二叉树中结点数的总和为度为0的结点数、度为1的结点数及度为2的结点数三者相加,得出结果为14个结点。
42.程序流程图中的菱形框表示的是1。
(分数:
2.00)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 笔试 102