全国计算机等级考试二级C语言真题库之选择题13.docx
- 文档编号:11517208
- 上传时间:2023-03-02
- 格式:DOCX
- 页数:22
- 大小:28.31KB
全国计算机等级考试二级C语言真题库之选择题13.docx
《全国计算机等级考试二级C语言真题库之选择题13.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言真题库之选择题13.docx(22页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C语言真题库之选择题13
全国计算机等级考试等级考试真题库之选择题(13)
1.程序流程图中带有箭头的线段表示的是( )。
A)图元关系
B)数据流
C)控制流
D)调用关系
参考答案:
C
【解析】在数据流图中,用标有名字的箭头表示数据流。
在程序流程图中,用标有名字的箭头表示控制流。
所以选择C)。
2.结构化程序设计的基本原则不包括( )。
A)多态性
B)自顶向下
C)模块化
D)逐步求精
参考答案:
A
【解析】结构化程序设计的思想包括:
自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A)。
3.软件设计中模块划分应遵循的准则是( )。
A)低聚低耦合
B)高聚低耦合
C)低聚高耦合
D)高聚高耦合
参考答案:
B
【解析】软件设计中模块划分应遵循的准则是高聚低偶合、模块大小规模适当、模块的依赖关系适当等。
模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。
模块之间的耦合应尽可能的低,模块的聚度应尽可能的高。
4.在软件开发中,需求分析阶段产生的主要文档是( )。
A)可行性分析报告
B)软件需求规格说明书
C)概要设计说明书
D)集成测试计划
参考答案:
B
【解析】A)错误,可行性分析阶段产生可行性分析报告。
C)错误,概要设计说明书是总体设计阶段产生的文档。
D)错误,集成测试计划是在概要设计阶段编写的文档。
B)正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。
5.算法的有穷性是指( )。
A)算法程序的运行时间是有限的
B)算法程序所处理的数据量是有限的
C)算法程序的长度是有限的
D)算法只能被有限的用户使用
参考答案:
A
【解析】算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
有穷性是指算法程序的运行时间是有限的。
6.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是( )。
A)快速排序
B)冒泡排序
C)直接插入排序
D)堆排序
参考答案:
D
【解析】除了堆排序算法的比较次数是,其他的都是n(n-1)/2。
7.下列关于栈的叙述正确的是( )。
A)栈按"先进先出"组织数据
B)栈按"先进后出"组织数据
C)只能在栈底插入数据
D)不能删除数据
参考答案:
B
【解析】栈是按"先进后出"的原则组织数据的,数据的插入和删除都在栈顶进行操作。
8.在数据库设计中,将E-R图转换成关系数据模型的过程属于( )。
A)需求分析阶段
B)概念设计阶段
C)逻辑设计阶段
D)物理设计阶段
参考答案:
C
【解析】E-R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。
9.有三个关系R、S和T如下:
由关系R和S通过运算得到关系T,则所使用的运算为( )。
A)并
B)自然连接
C)笛卡尔积
D)交
参考答案:
D
【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B)错误。
笛卡尔积是用R集合中元素为第一元素,S集合中元素为第二元素构成的有序对,所以C)错误。
根据关系T可以很明显的看出是从关系R与关系S中取得相同的关系组所以取得是交运算,选择D)。
10.设有表示学生选课的三表,学生S(学号,,性别,年龄,号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为( )。
A)课号,成绩
B)学号,成绩
C)学号,课号
D)学号,,成绩
参考答案:
C
【解析】学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C)。
11.C语言程序的模块化通过以下哪个选项来实现
A)变量
B)函数
C)程序行
D)语句
参考答案:
B
【解析】C语言程序的模块化通过函数来体现,所以选择B。
12.以下选项中不属于C语言标识符的是
A)常量
B)用户标识符
C)关键字
D)预定义标识符
参考答案:
A
【解析】常量是指在程序运行过程中其值不能被改变的量,如5、1.0、字符'a'等。
C语言的标识符分为3类:
关键字、预定义标识符和用户标识符。常量不属于标识符,所以选择A。
13.以下选项中不属于C语言程序运算符的是
A)sizeof
B)<>
C)()
D)&&
参考答案:
B
【解析】C语言中的不等于符号用"!
="表示,没有符号"<>"。所以选择B。
14.若变量已正确定义并赋值,以下不能构成C语句的选项是
A)B++;
B)A=a+b;
C)a=a+b
D)A?
a:
b;
参考答案:
C
【解析】C语言规定,C语句必须以分号";"结束。C选项中没有结束符号,所以错误。
15.若有以下程序段
doublex=5.16894;
printf("%f\n",(int)(x*1000+0.5)/(double)1000);
则程序段的输出结果是
A)5.170000
B)5.175000
C)5.169000
D)5.168000
参考答案:
C
【解析】%f的输出格式是以带小数点的数学形式输出浮点数。
首先计算x*1000,结果为5168.94然后+0.5,结果为5169.44,然后进行强制类型转换,转换成整型为5169,然后除以双精度数据1000,结果也为双精度数据5.169,输出时按照%f的格式输出,所以输出结果为5.169000。
16.设有定义:
doublea,b,c;
若要求通过输入分别给a、b、c输入1、2、3,输入形式如下(注:
此处□代表一个空格)
□□1.0□□2.0□□3.0<回车>
则能进行正确输入的语句是
A)scanf("%lf%lf%lf",a,b,c);
B)scanf("%lf%lf%lf",&a,&b,&c);
C)scanf("%f%f%f",&a,&b,&c);
D)scanf("%5.1lf%5.1lf%5.1lf",&a,&b,&c);
参考答案:
B
【解析】scanf函数的一般形式为scanf(格式控制,变量1地址,变量2地址,…),其中,格式字符串要与数据类型保持一致,所以格式字符串中应为%lf,后面应该为变量地址,所以需要加上符号"&",所以选择B。
17.若有定义语句
charc='\101';
则变量c在存中占
A)1个字节
B)2个字节
C)3个字节
D)4个字节
参考答案:
A
【解析】本题考察字符变量的存储空间,每个字符变量被分配一个字节的存空间。
因此A选项正确。
18.若有以下程序
#include
main()
{charc1,c2;
c1='C'+'8'-'3';c2='9'-'0';
printf("%c%d\n",c1,c2);
}
则程序的输出结果是
A)H'9'
B)H9
C)F'9'
D)表达式不合法输出无定值
参考答案:
B
【解析】本题考察字符变量以及printf()函数相关知识,字符变量c1被赋值为'C'+'8'-'3',即ASSCII码的运算,67+54-49=72,即H;字符变量c2被赋值为'9'-'0',但输出时,需要注意的是c1以字符变量输出,而c2是以十进制整型变量输出。
因此B选项正确。
19.表示关系式x≤y≤z的C语言表达式的是
A)(x<=y)&&(y<=x)
B)(x<=y)||(y<=x)
C)(x<=y<=z)
D)x<=y)!
(y<=x)
参考答案:
A
【解析】本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。
因此A选项正确。
20.有以下程序
#include
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
程序运行后的输出结果是
A)a=1,b=0
B)a=1,b=1
C)a=2,b=1
D)a=2,b=2
参考答案:
C
【解析】本题重点考察switch语句,switch语句中case分支后面如果没有break,那么就会顺序执行下面的case,直到遇到break跳出。
由于变量a和变量b均赋初值为0,当程序执行完语句case0:
a++;break;后,a的值为1,继续执行语句case2:
a++;b++;break;a的值为2,b的值为1。
因此C选项正确。
21.有以下程序
#include
main()
{intk,j,s;
for(k=2;k<6;k++,k++)
{s=1;
for(j=k;j<6;j++)s+=j;
}
printf("%d\n",s);
}
程序运行后的输出结果是
A)6
B)10
C)24
D)40
参考答案:
B
【解析】本题重点考察for语句循环嵌套,首先k=2,进行一次循环后,k自增两次,变成4,这时s为1。
即当k=4的时候,s=1,j=4,执行层循环,s=1+4,j自增1后等于5,s=5+5,j再自增1后即为6,跳出层循环。
k自增两次后等于6,不成立,跳出外层循环。
最后输出s的值,即为10。
因此B选项正确。
22.由以下while构成的循环,循环体执行的次数是
intk=0;
while(k=1)k++;
A)有语法错,不能执行
B)一次也不执行
C)执行一次
D)无限次
参考答案:
D
【解析】本题考察while语句,while语句的语义是:
计算表达式的值,当值为真(非0)时,执行循环体语句。
k=1为赋值语句,即k的值等于1。
while(k=1)=while
(1),是死循环,执行无限次。
因此A选项正确。
23.有以下程序
#include
intfun(inta,intB)
{returna+b;}
main()
{intx=6,y=7,z=8,r;
r=fun(fun(x,y),z--);
printf("%d\n",r);
}
程序运行后的输出结果是
A)21
B)15
C)20
D)31
参考答案:
A
【解析】函数fun的功能是返回两个形参的和。
调用函数fun(x,y)时,将变量x=6和y=7的值分别传送变量a和b,并且通过语句returna+b;将13返回给主函数。
继续调用函数fun(13,z--),这里z--指将z的值参与运算后,再将z的值减1操作;将13和8分别传送变量a和b,且通过语句returna+b;将21返回给主函数。
因此A选项正确。
24.以下选项中函数形参不是指针的是
A)fun(int*a){…}
B)fun(inta[10]){…}
C)fun(int&p){…}
D)fun(intp[]){…}
参考答案:
C
【解析】B选项和D选项是将数组作为函数参数;A选项是将指针作为函数参数;因此C选项正确。
25.有以下程序
#include
main()
{inty=1,x,a[]={2,4,6,8,10},*p;
p=&a[1];
for(x=0;x<3;x++)y=y+*(p+x);
printf("%d\n",y);
}
程序运行后的输出结果是
A)17
B)19
C)18
D)20
参考答案:
B
【解析】本题通过语句"p=&a[1]将指针变量p指向了存储单元a[1],即使得p[0]的值为4。
然后通过3次for循环,x=0时,*(p+x)=*p=a[1]=4所以y=1+4=5;x=1时,*(p+x)=*(p+1)=a[2]=6,所以y=5+6=11;x=2时,*(p+x)=*(p+2)=a[3]=8,所以y=11+8=19。
因此B选项正确。
26.以下程序调用fun函数求数组中最大值所在元素的下标。
#include
voidfun(int*s,intn,int*k)
{inti;
for(i=0,*k=i;i if(s[i]>s[*k])__________; } main() {inta[5]={1,6,2,8,0},k; fun(a,5,&k); printf("%d%d\n",k,a[k]); } 在横线处应填入的容是 A)*k=i B)k=i C)*k=i-s D)k=i-s 参考答案: A 【解析】fun函数的功能是求数组中最大值所在元素的下标。 通过for循环语句,每次将最大的数给*k,即*k=i。 因此A选项正确。 27.有以下程序 #include main() {inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},(*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++)k=k+*(*(p+i)+j); printf("%d\n",k); } 程序运行后的输出结果是 A)108 B)68 C)99 D)60 参考答案: D 【解析】该题首先给二维数组赋值a[3][4]={{1,3,5,7}{9,11,13,15}{17,19,21,23}};(*p)[4]=a指针p指向二维数组a的首地址,接下来执行for循环,首先i=0,j=0时k=k+*(*(p+0)+0)=1(a[0][0]);然后i=0,j=1时k=k+*(*(p+0)+1)=4(a[0][1]);然后j=2时,跳出j的循环,执行i的循环i=1,j=0时k=k+*(*(p+1)+0)=13(a[1][0]);依次类推一直到i=3时跳出全部循环。 循环语句在这里的功能是累加二维数组第1列和第2列的元素,累加结果为60。 28.有以下程序 #include intfuna(inta,intB){returna+b;} intfunb(inta,intB){returna-b;} intsss(int(*t)(),intx,inty){return((*t)(x,y));} main() {intx; x=sss(funa,9,3);x+=sss(funb,8,3);printf("%d\n",x); } 程序运行后的输出结果是 A)24 B)23 C)17 D)22 参考答案: C 【解析】由x=sss(funa,9,3);可得到x=9+3=12,而后直接传入函数funb,x=x+8-3=12+5=17。 因此C选项正确。 29.有以下程序 #include intfun(intx) {intp; if(x==0||x==1)return(3); p=x-fun(x-2); return(p); } main() {printf("%d\n",fun(9));} 程序运行后的输出结果是 A)4 B)5 C)9 D)7 参考答案: D 【解析】本题考查函数的递归调用,执行f(9)后,f(9)=9-(7-(5-(3-f (1))))=7,所以答案为D选项。 30.以下选项中,能正确进行字符串赋值的是 A)char*s="ABCDE"; B)chars[5]={'A','B','C','D','E'}; C)chars[4][5]={"ABCDE"}; D)char*s;gets(s); 参考答案: A 【解析】本题考查字符数组的初始化,B选项中赋值号右侧是赋值给一个字符串数组,而左边是一个字符数组,所以错误。 C选项中字符串包含6个字符,所以不能赋值在左边只能放5个字符的字符串数组中。 D选项gets函数中参数需要指定长度。 所以选项A正确。 31.有以下程序 #include voidfun(char**p) {inti; for(i=0;i<4;i++)printf("%s",p[i]); } main() {char*s[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"}; fun(s);printf("\n"); } 程序运行后的输出结果是 A)ABCDEFGHIJKL B)ABCD C)AEIM D)ABCDEFGHIJKLMNOP 参考答案: D 【解析】本题考查字符串数组,s表示指向字符数组的指针,s指向了第一个字符串,s++指向了第二个字符串,所以最后输出结果为D选项。 32.以下fun函数的功能是将形参s所指字符串容颠倒过来 voidfun(char*s) {inti,j,k; for(i=0,j=strlen(s)__________;i {k=s[i];s[i]=s[j];s[j]=k;} } 在横线处应填入的容是 A)+1 B)-1 C)+0 D),k=0 参考答案: B 【解析】本题考查字符串处理函数strlen,strlen计算一个字符串的长度,包含结尾符,所以本题中j的初始化应该是从最后一个字符开始,所以应该将得到的字符串长度减1,选项B正确。 33.有以下程序 #include voidfun(char*p,intn) {charb[6]="abcde";inti; for(i=0,p=b;i } main() {chara[6]="ABCDE"; fun(a,5);printf("%s\n",a); } 程序运行后的输出结果是 A)abcde B)ABCDE C)edcba D)EDCBA 参考答案: B 【解析】本题考查数组名作为函数参数,执行f函数时,传进去的a指针被重新指向了b,所以原本a数组的地址容不变,所以输出结果为ABCDE,答案为B选项。 34.有以下程序 #include fun(inta,intb) { intstaticm=0,i=2; i=i+m+1; m=i+a+b; returnm; } main() { intk=4,m=1,p; p=fun(k,m); printf("%d,",p); p=fun(k,m); printf("%d\n",p); } 程序运行后的输出结果是 A)8,17 B)7,16 C)8,8 D)7,17 参考答案: A 【解析】本题考查静态局部变量,本题中先执行fun(4,1)得到返回值为8,此时静态局部变量m为8,i为3,那么再次执行fun(4,1)得到的值为17,所以选项A正确。 35.为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向结点的指针域),则在【】处应填入的选项是 Structlink{chardata;【】}node; A)linknext; B)structlink*next; C)link*next; D)structlinknext; 参考答案: B 【解析】本题主要考查链表中节点的概念,属于基础知识,其中指针域应该是指向下个节点,所以答案为B。 36.以下结构体说明和变量定义中,正确的是 A)typedefstructabc{intn;doublem;}ABC; ABCx,y; B)structabc{intn;doublem}; structabcx,y; C)structABC{intn;doublem;} structABCx,y; D)structabc{intn;doublem;}; abcx,y; 参考答案: A 【解析】本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,选项A中ABC为新的类型别名,定义正确。 37.有以下程序 #include #include voidfun(int*p1,int*p2,int*s) {s=(int*)malloc(sizeof(int)); *s=*p1+*(p2++); } main() {inta[2]={1,2},b[2]={10,20},*s=a; fun(a,b,s);printf("%d\n",*s); } 程序运行后的输出结果是 A)11 B)10 C)1 D)2 参考答案: C 【解析】本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1,选项C正确。 38.以下程序依次把从终端输入的字符存放到f文件中,用#作为结束输入的标志,则在横线处应填入的选项是 #include main() {FILE*fp;charch; fp=fopen("fname","w"); while((ch=getchar())! ='#')fputc(__________); fclose(fp); } A)ch,"fname" B)fp,ch C)ch D)ch,fp 参考答案: D 【解析】本题考查fputc函数,该函数将字符ch写到文件指针fp所指向的文件的当前写指针的位置。 函数格式: intfputc(intn,File*fp)答案为D选项。 39.有以下程序 #include #defineN2 #defineMN+1 #define
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 语言 题库 选择题 13