全国计算机二级C语言分类模拟题568.docx
《全国计算机二级C语言分类模拟题568.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言分类模拟题568.docx(12页珍藏版)》请在冰豆网上搜索。
全国计算机二级C语言分类模拟题568
二级C语言分类模拟题568
选择题
1.有如下程序:
#include<stdio.h>
int*sum(intdata)
{
staticintinit=0;
init+=data;
return&init;
}
main()
{
inti,*p;
for(i=1;i<=4;i++)sum(i);
p=sum(0);
printf("%d\n",*p);
}
程序运行后的输出结果是______。
A.15
B.0
C.1
D.10
答案:
D
[解答]static变量又称为静态变量,编译时,将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。
若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值。
程序执行过程为:
执行for循环,i=1,调用函数sum
(1),data=1,init=0,init=init+data=1;i=2,调用函数sum
(2),data=2,init=1,init=init+data=3;i=3,调用函数sum(3),data=3,init=3,init=init+data=6;i=4,调用函数sum(4),data=4,init=6,init=init+data=10;i=5退出for循环。
调用函数sum(0),data=0,init=10,ini=init+data=10,返回指向init的指针,输出init=10。
故D选项正确。
2.下面不属于软件需求分析阶段主要工作的是______。
A.需求变更申请
B.需求分析
C.需求评审
D.需求获取
答案:
A
[解答]需求分析阶段的工作可概括为4个方面:
①需求获取;②需求分析;③编写需求规格说明书;④需求审评。
3.if语句的基本形式为:
if(表达式)语句,其中“表达式”______。
A.可以是任意合法的表达式
B.必须是逻辑表达式
C.必须是逻辑表达式或关系表达式
D.必须是关系表达式
答案:
A
[解答]本题考查if表达式。
if(表达式)中的表达式可以为任何合法的表达式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(==)误写为赋值号(=)时不会报错的,但是其值恒为1。
4.有以下程序:
#include<stdio.h>
#include<string.h>
main()
{chara[20]="ab",b[20]="cdef";
intk=0;
strcat(a,b);
while(a[k]!
='\0'){b[k]=a[k];k++;}
puts(b);
}
程序的运行结果是______。
A.abcdef
B.cbcdef
C.cdef
D.ab
答案:
A
[解答]strcat(字符串1,字符串2)函数是把字符串2连接到字符串1的后面,最终结果存放到字符串1中,因此本题把字符串a,b连接起来放在数组a中,while语句完成功能是再将字符串a赋给字符串b,因此答案为A选项。
5.设有如下定义:
structsk
{intm;
floatx;
}data,*q;
若要使q指向data中的m域,正确的赋值语句是______。
A.q=&data.m;
B.*q=data.m;
C.q=(structsk*)&data.m;
D.q=(structsk*)data.m;
答案:
C
6.数据库设计中反映用户对数据要求的模式是______。
A.内模式
B.概念模式
C.外模式
D.设计模式
答案:
C
[解答]数据库系统的三级模式是概念模式、外模式和内模式。
概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户的公共数据视图。
外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,因此选择C。
内模式又称物理模式,它给出了数据库物理存储结构与物理存取的方法。
7.下面不属于需求分析阶段任务的是______。
A.确定软件系统的功能需求
B.确定软件系统的性能需求
C.需求规格说明书评审
D.制定软件集成测试计划
答案:
D
[解答]需求分析阶段的工作有:
需求获取;需求分析;编写需求规格说明书;需求评审,所以选择D。
8.设有定义:
structcomplex
{intreal,unreal;}data1={1,8},data2;
则以下赋值语句中错误的是______。
A.data2=(2,6);
B.data2=data1;
C.data2=real=data1.real;
D.data2.real=data1.unreal;
答案:
A
[解答]A选项中可以在声明变量的同时为data2赋值,但是data2=(2,6);应写作data2={2,6}。
所以选择A选项。
9.有以下程序:
#include<stdio.h>
main()
{FILE*Pf;
char*s1="China",*s2="Beijing";
pf=fopen("abc.dat","wb+");
fwrite(s2,7,1,pf);
rewind(pf);/*文件位置指针回到文件开头*/
fwrite(s1,5,1,pf);
fclose(pf);
}
以上程序执行后abc.dat文件的内容是______。
A.China
B.Chinang
C.ChinaBeijing
D.BeijingChina
答案:
B
[解答]本题考查文件操作函数fwrite()和rewind()。
题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。
10.有以下程序:
#include<stdio.h>
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
case3:
a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
程序的运行结果是______。
A.a=2,b=2
B.a=2,b=1
C.a=1,b=1
D.a=1,b=0
答案:
B
[解答]case常量表达式只是起语句标号作用,并不是对该处进行条件判断。
在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从该case子句执行下去,不再进行判断,直到碰到break或函数结束为止。
所以执行内层switch(y)时只执行了a++,此时a的值为1。
然后执行外层case2语句的a++;b++;a为2,b为1。
所以结果为B。
11.以下不正确的定义语句是______。
A.doublex[5]={1.0,2.0,3.0,4.0,5.0};
B.inty[5]={0,1,2,3,4,5};
C.charc1[]={'1','2','3','4','5'};
D.charc2[]={'a','b','c'};
答案:
B
[解答]本题考查对一维数组的赋值。
选项B中,y[5]说明数组中有5个元素,但却给它赋了6个值,数组溢出所以是错误的。
12.下列选项中属于面向对象设计方法主要特征的是______。
A.继承
B.自顶向下
C.模块化
D.逐步求精
答案:
A
[解答]面向对象设计方法的基本概念有对象、类和实例、消息、继承与多态性,因此选择A。
13.C语言源程序名的后缀是______。
A..exe
B..C
C..obj
D..cp
答案:
B
14.在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在多个科室治疗,则实体医生和患者之间的联系是______。
A.多对多
B.多对一
C.一对多
D.一对一
答案:
A
[解答]一般来说,实体集之间必须通过联系来建立连接关系,分为三类:
一对一联系(1:
1)、一对多联系(1:
m)、多对多联系(m:
n)。
医生可为多位患者看病,患者也可以找多位医生看病,实体医生与患者联系是多对多,故A选项正确。
15.有以下程序
#include<stdio.h>
intfun(chars[])
{intn=O;
while(*s<='9'&&*s>='0'){n=10*n+*s-'0';s++;}
return(n);
}
main()
{chars[10]={'6','1','*','4','*','9','*','0','*'};
printf("%d\n",fun(s));
}
A.9
B.61490
C.61
D.5
答案:
C
[解答]本题考查的知识点是:
while循环的简单应用。
题目fun()函数中while循环的意思是:
判断s所指内容是否为数字字符,如果是数字字符,则计算表达式11=10*n+*s-'0';。
其中。
s-'0'的作用是将相应的数字字符转换为数值,例如字符'8'减去字符'0'后,得到的结果就是数值8了。
n=10*n+的作用是将累计变量n中原来内容乘以10,然后再加上刚转换的数字字符的数值,例如原来n的值为1,*s现在的内容为'2',那么执行了n=10*n+*s-'0,;语句后,n的值变为12,如果接下来再来一个'8'字符,执行n=10*n+*s-'0';语句后,n的值就是128了。
故不难看出fun()函数的作用是“将数字字符串转换为相应的十进制数值,碰到非数字字符时结束”。
从主函数中定义的字符数组s的初始化内容可以看出,fun()函数返回值应该是61。
故应该选择C。
16.下列选项中可作为C语言合法常量的是______。
A.-80
B.-080
C.-8e1.0
D.-80.0e
答案:
A
[解答]所谓常量是指在程序运行的过程中,其值不能被改变的量。
在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。
选项B中是以0开头,表示一个八进制数,而八进制数的取值范围是0~7,所以“-080”错误;在C语言中e后面的指数必须是整数,因此选项C和D也不正确。
17.以下叙述中正确的是______。
A.在一个程序中,允许使用任意数量的#include命令行
B.在包含文件中,不得再包含其他文件
C.#include命令行不能出现在程序文件的中间
D.虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接
答案:
A
[解答]本题考查预处理中文件包含的概念,包含文件中可以包含其他文件,B选项错误。
#include可以出现在程序文件的中间,C选项错误。
包含文件被修改了,包含该文件的源程序必须重新进行编译和连接,D选项错误。
18.程序流程图中带有箭头的线段表示的是______。
A.图元关系
B.数据流
C.控制流
D.调用关系
答案:
C
[解答]在数据流图中,用标有名字的带箭头线段表示数据流。
在程序流程图中,用标有名字的带箭头线段表示控制流,因此本题答案为C。
19.下列程序段的输出结果为()。
#include<stdio.h>
main()
{staticchara[]="language";
char*p;
p=a;
for(p=a;p<a+8;p+=2)
putchar(*p);
}
A.language
B.lnug
C.有语法错误
D.lang
答案:
B
[解答]本程序首先定义了静态字符数组a,然后将指针P指向数组a的首地址。
第1次for循环,p=a,p指向数组的第1个元素,*p是取指针P所指地址的内容,输出1;第2次for循环,p=p+2,则p指向数组的第3个元素,*p是取指针p所指地址的内容,输出n;第3次for循环,p=p+2,则p指向数组的第5个元素,*p是取指针p所指地址的内容,输出u;第4次for循环,p=p+2,则p指向数组的第7个元素,*p是取指针p所指地址的内容,输出g,结束循环。
20.对关系S和关系R进行集合运算,结果中既包含关系S中的所有元组也包含关系R中的所有元组,这样的集合运算称为______。
A.并运算
B.交运算
C.差运算
D.除运算
答案:
A
[解答]关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。
21.若k为int型变量,以下语句段执行后的输出结果是______。
#include<stdio.h>
main()
fintk=3;
if(k)
printf("###");
else
printf("&&&&");}
A.###
B.&&&
C.###&&&&
D.有语法错误,不能执行
答案:
D
22.下列不合法的main函数命令行参数的表示形式是______。
A.main(inta,char*c[]);
B.main(ac,av)intarc;char**av;
C.main(c,v)intc;char*v[];
D.main(argc,argv)intargc;charargv[];
答案:
D
[解答]main函数的参数通常有两个,前者为整型,后者为字符型指针数组。
参数的名字可以是任意合法的标识符。
而且,形如**av与*av[]等价,所以选项A、B、C均正确,选项D是错误的。
23.以下程序的输出结果是______。
#include<stdio.h>
inta[3][3]={1,2,3,4,5,6,7,8,9},*p;
f(int*s,intp[][3])
{*s=p[1][1];}
main()
{p=(int*)malloc(sizeof(int));
f(p,a);
printf("%d\n",*p);
free(p);
}
A.1
B.4
C.7
D.5
答案:
D
24.若有定义语句:
char*s1="OK",*s2="OK";
以下选项中,能够输出“OK”的语句是______。
A.if(strcmp(s1,s2)==0)puts(s1);
B.if(strcmp(s1,s2)!
=0)puts(s2);
C.if(strcmp(s1,s2)==1)puts(s1);
D.if(strcmp(s1,s2)!
=0)puts(s1);
答案:
D
[解答]strcmp函数比较字符串大小,区分大小写,所以当s1、s2不相等输出s1就会输出“OK”,答案选择D。
25.下列叙述中正确的是______。
A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D.循环队列中元素的个数是由队头指针和队尾指针共同决定
答案:
D
[解答]循环队列有队头和队尾两个指针,但是循环队列仍是线性结构,因此A错误;在循环队列中需要队头与队尾两个指针来共同反映队列中元素的动态变化情况,因此B与C错误,故本题答案为D。
26.下列程序的输出结果是。
#include<stdio.h>
main()
{inta=3,b=2,c=1;
if(a<B)
if(b<O)c=0;
elsec++;
printf("%d\n",c);
}
A.0
B.2
C.1
D.3
答案:
C
[解答]本题考查汀语句。
第一个if语句,先判断条件,发现a<b不成立,不再执行下列的语句,直接执行最后的printf输出语句,然后结束程序,整个过程c的值没有发生变化。
27.有以下函数定义:
voidfun(intn,doublex){……}
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是。
A.fun(inty,doublem);
B.k=fun(10,12.5);
C.fun(x,n);
D.voidfun(n,x);
答案:
C
[解答]本题考查函数调用。
函数调用时,实参前不需加类型说明,选项A)错误;题目中的函数没有返回值,所以选项B)错误;函数调用前不需要加类型说明,选项D)错误。
28.执行下列程序中的输出语句后,a的值是。
main()
{inta;
printf("%d\n",(a=2*3,a*5,a+7));
}
A.17
B.37
C.6
D.13
答案:
C
[解答]本题考查逗号表达式。
本题的返回值是a+7,a=2*3=6,a+7=13(注意:
本题问的是a的值,而不是程序的输出值)。
29.设文件指针fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是______。
A.只能写不能读
B.写操作结束后可以从头开始读
C.可以在原有内容后追加写
D.可以随意读和写
答案:
A
30.对于现实世界中事物的特征,在实体——联系模型中使用______。
A.属性描述
B.关键字描述
C.二维表格描述
D.实体描述
答案:
A
[解答]本题考查对实体——联系模型的理解和掌握。
在实体——联系模型中,用属性来描述现实世界中对象的属性所表示的对象的性质、特征和行为,因此正确答案为选项A。