全国计算机等级考试C语言题库试题.docx
《全国计算机等级考试C语言题库试题.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试C语言题库试题.docx(20页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试C语言题库试题
2013年3月全国计算机等级考试无纸化二级C语言
一、选择题(每一题1分,共40分)
(1)程序流程图中带有箭头的线段表示的是()。
A)图元关系B)数据流C)控制流D)调用关系
(2)结构化程序设计的基本原则不包括()。
A)多态化B)自顶向下C)模块化D)逐步求精
(3)软件设计中模块划分应遵循否认准则是()。
A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合
(4)在软件开发中,需求分析阶段产生的主要文档是()。
A)可行性分析报告B)软件需求规格说明书
C)概要设计说明书D)集成测试计划
(5)算法的有穷性是指()。
A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的
C)算法程序的长度是有限的D)算法只能被有限的用户使用
(6)对长度为n的线性表排序,在最坏的情况下,比较次数不是n(n–1)/2的排序方法是()。
A)快速排序B)冒泡排序C)直接插入排序D)堆排序
(7)下列关于栈的叙述正确的是()。
A)栈按“先进先出”组织数据B)栈按“先进后出”组织数据
C)只能在栈底插入数据D)不能删除数据
(8)在数据库设计中,将E-R图转化成关系数据模型的过程属于()。
A)需求分析阶段B)概念设计阶段
C)逻辑设计阶段D)物理设计阶段
(9)有三个关系R,S和T如下:
R
B
C
D
a
0
k1
b
1
ni
S
B
C
D
f
3
h2
a
0
k1
n
2
x1
T
B
C
D
a
0
k1
由关系R和S通过运算得到关系T,则所使用的运算为()。
A)并B)自然连接C)笛卡儿积D)交
(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为()。
A)课号,成绩B)学号,成绩C)学号,课号D)学号,姓名,成绩
(11)以下叙述中错误的是()。
A)C语言中的每条可执行语句和非执行语句最终都将被转化成二进制的机器指令
B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D)C语言源程序经编译后生成后缀为.obj的目标程序
(12)以下选项中,合法的一组C语言数值常量是()。
A)12.0Xa234.5e0B)028.5e-3-0xf
C).1774el.50abcD)0x8A10,0003.e5
(13)以下选项中不合法的标识符是()。
A)&aB)FORC)printD)_00
(14)若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是()。
A)sqrt(fabs(pow(n,x)+exp(x)))
B)sqrt(fabs(pow(n,x)+pow(x,e)))
C)sqrt(abs(n^x+e^x))
D)sqrt(fabs(pow(x,n)+exp(x)))
(15)若有定义:
doublea=22;inti=0,k=18;则不符合C语言规定的赋值语句是()。
A)i=(a+k)<=(i+k);B)i=a%11;
C)a=a++,i++;D)i=!
a;
(16)有以下程序:
#include
main()
{
ints,t,A=10;doubleB=6;
s=sizeof(A);t=sizeof(B);
printf(“%d,%d\n”,s,t);
}
在VC6.0平台上编译运行,程序运行后的输出结果是()。
A)10,6B)4,4C)2,4D)4,8
(17)有以下程序:
#include
main()
{
chara,b,c,d;
scanf(“%c%c”,&a,&b);
c=getchar();d=getchar();
printf(“%c%c%c%c\n”,a,b,c,d);
}
当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:
回车也是一个字符)
12
34
则输出结果是()。
A)12B)12C)1234D)12
343
(18)以下关于逻辑运算符两侧运算对象的叙述中正确的是()。
A)可以是任意合法的表达式B)只能是整数0或非0整数
C)可以是结构体类型的数据D)只能是整数0或1
(19)有以下程序:
#include
main()
{
inta=0,b=0,c=0,d=0;
if(a=1)b=1;c=2;
elsed=3;
printf(“%d,%d,%d,%d\n”,a,b,c,d);
}
程序输出()
A)1,1,2,0B)0,0,0,3C)编译有错D)0,1,2,0
(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;
Case3:
a++;b++;
}
Printf(“a=%d,b=%d\n”,a,b);
}
程序运行结果是()
A)a=2,b=2B)a=2,b=1C)a=1,b=1D)a=1,b=0
(21)以下程序段中的变量已正确定义:
for(i=0;i<4;i++;i++)
for(k=1;k<3;k++);
printf(“*”);
程序段输出结果是()。
A)**B)****C)*D)********
(22)有以下程序段:
#include
inti,n;
for(i=0;i<8;i++)
{
n=rand()%5;
switch(n)
{
case1:
case3:
printf(“%d\n”,n);break;
case2:
case4:
printf(“%d\n”,n);continue;
case0:
exit(0);
}
printf(“%d\n”,n);
}
以下关于程序段执行情况的叙述。
正确的是()
A)for循环语句固定执行8次B)当产生的随机数n为4时结束循环操作
C)当产生的随机数n为1和2不做任何操作D)当产生的随机数n为0时结束程序运作
(23)有以下程序:
#include
intf(intx);
main()
{
Intn=1,m;
M=f(f(f(n)));
Printf(“%d\n”,m);
}
Intf(intx)
{
Retrunx*2;
}
程序运行后的输出结果是()
A)8B)2C)4D)1
(24)以下叙述中错误的是()
A)可以给指针变量赋一个整数作为地址值
B)函数可以返回地址值
C)改变函数形参的值,不会改变对应实参的值
D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋值NULL
(25)设已有定义:
floatx;则以下对指针变量p进行定义且赋初值的语句中正确的是()。
A)int*p=(float)x;B)float*p=&x;C)floatp=&x;D)float*p=1024;
(26)以下数组定义中错误的是()
A)intx[2][3]={1,2,3,4,5,6};B)intx[][3]={0};
C)intx[][3]={{1,2,3,},{4,5,6}};D)intx[2][3]={{1,2},{3,4},{5,6}};
(27)有以下程序:
include
voidfun(inta[],intn)
{
inti,t;
for(i=0;i{
t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;
}
}
main()
{
intk[10]={1,2,3,4,5,6,7,8,9,10},I;
fun(k,5);
for(i=2;i<8;i++)
printf(“%d”,k[i]);
printf”\n”);
}
程序运行结果是()
A)321678
B)876543
C)1098765
D)345678
(28)有以下程序:
:
#include
#defineN4
voidfun(inta[][N],intb[])
{
inti;
for(i=0;ib[i]=a[i][i]-a[i][n-1-i];
}
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);
for(i=0:
iprintf(“%d,”y[i]);
printf(“\n”);
}
程序运行后的输出结果()
A)-3,-1,1,3B)-12,-3,0,0C)0,1,2,3D)-3,-3,-3,-3
(29)设有定义:
chars[81];inti=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()
A)get(s);
B)while((s[i++]=getcher())!
=’\n’);s[i]=’\0’;
C)scanf(“%s”,s);
D)do{scanf(“%c”,&s[i]);}while(s[i++]!
=’\n’);s[i]=’\n’;
(30)设有定义:
charp[]={‘1’,’2’,’3’},*q=p;一下不能计算出一个char型数据所占有字节数的表达式是()。
A)sizeof(p)B)sizeof(char)C)sizeof(*q)D)sizeof(p[0])
(31)有以下程序:
#include
#include
main()
{
Charstr[][20]={“One*World”,”One*Dream!
”},*p=str[1];
printf(“%d,”,strlen(p));printf(“%s\n”,p);
}
程序运行后的输出结果是()。
A)10,One*Dream!
B)9,One*Dream!
C)9,One*WorldD)10,One*World
(32)有以下程序:
#include
main()
{
chars[]=”012xy\08s34f4w2”;
inti,n=0;
for(i=0;s[i]!
=0;i++)
if(s[i]>=’0’&&s[i]<=’9’)n++;
printf(“%d\n”,n);
}
程序运行后的输出结果是()。
A)0B)3C)7D)8
(32)有以下程序:
#include
fun(intx,inty)
{
staticintm=0,i=2;
i+=m+1;m=i+x+y;returnm;
}
main()
{
intj=1,m=1,k;
k=fun(j,m);printf(“%d,”,k);
k=fun(j,m);printf(“%d\n”,k);
}
执行后的输出结果是()。
A)5,11B)5,5C)11,11D)11,5
(34)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。
A)auto和staticB)extern和registerc)auto和registerD)static和register
(35)下面结构体的定义语句中,错误的是()。
A)structord{intx;inty;intz;}structorda;B)structord{intx;inty;intz;};structorda;
C)structord{intx;inty;intz;}a;D)struct{intx;inty;intz;}a;
(36)有以下程序:
#include
Typedefstruct{intb,p;}A;
Voidf(Ac)/*注意:
c是结构变量名*/
{
intj;
c.b+=1;c.p+=2;
}
main()
{
inti;
Aa={1,2};
f(a);
printf(“%d,%d\n”,a.b,a.p);
}
程序运行后的输出结果是()。
A)2,4B)1,2C)1,4D)2,3
(37)以下叙述中正确的是()。
A)在C语言中,预处理命令行都以“#”开头
B)预处理命令行必须位于C源程序的起始位置
C)#include必须放在C程序的开头
D)C语言的预处理不能实现宏定义和条件编译的功能
(38)有以下程序:
#include
#include
Intfun(intn)
{
int*p;
p=(int*)malloc(sizeof(int));
*p=n;return*p;
}
main()
{
inta;
a=fun(10);printf(“%d\n”;a+fun(10));
}
程序的运行结果是()。
A)0B)10C)20D)出错
(39)有以下程序:
#include
main()
{
unsignedchara=8,c;
c=a>>3;
printf(“%d\n”,c);
}
程序运行后的输出结果是()。
A)16B)1C)32D)0
(40)读取二进制文件的函数调用形式为:
fread(buffer,size,count,fp);其中buffer代表是()。
A)一个内存块的字节数
B)一个整形变量,代表待读取的数据的字节数
C)一个文件指针,指向待读取的文件
D)一个内存块的首地址,代表读入数据存放的地址-
二、程序填空题(共18分)
下列给定程序中函数fun的功能是:
计算如下公式
直到
并且把计算结果作为函数值返回。
例如,若形参e的值为le-3,则函数的返回值为0.551690。
请在下面划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:
部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include
doublefun(doublee)
{inti.k;doubles,t,x;
s=0;k=1;i=2;
/******found******/
x=【1】/4;
/******found******/
while(x【2】e);
{
s=s+k*x;
k=k*(-1);
t=2*i;
/******found******/
x=【3】/(t*t);
i++;
}
returns;
}
main()
{doublee=1e-3;
printf(“\nTheresultis:
%f\n”,fun(e));
}
3、程序修改题(共18分)
下列给定程序中函数fun的功能是:
求出如下分数序列的前n项目之和,和值通过函数值返回。
例如,若n=5,则对应输出8.391667。
请改正程序中的错误,使其得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
#include
/******found******/
voidfun(intn)
{
inta=2,b=1,c,k;
doubles=0.0;
for(k=1;k<=n;k++)
{
/******found******/
s=s+(double)a/b;
c=a;a=a+b;b=c;
}
return(s);
}
Voidmain()
{
intn=5;
system(“CLS”);
printf(“\nThevalueoffunctionis:
%1f\n”,fun(n));
}
4、程序设计题(共24分)
请编写函数fun,其功能是:
找出2×M整型二位数组中最大元素的值,并将此值返回调用函数。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#defineM4
#include
intfun(inta[][M])
{
}
Voidmain()
{
intarr[2][M]={5,8,3,45,76,-4,12,82};
printf("max=%d\n",fun(arr));
}
无纸化题库试题答案解析
一选择题
(1)C)【解析】在数据流图中,用标有名字的箭头表示数据流。
在程序流程图中,用标有名字的箭头表示控制流,所以选择C)。
(2)A)【解析】结构化程序设计的思想包括:
自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A)
(3)B)【解析】软件设计中模块划分应遵守的准则是高内聚低耦合、模块大小规模适当、模块的依赖关系适当等。
模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。
模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。
(4)B)【解析】A)错误,可行性分析阶段产生可行性分析报告。
C)错误,概要设计说明书是总体设计阶段产生的文档。
D)错误,集成测试计划是在概要设计阶段编写的文档。
B)正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。
(5)A)【解析】算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
有穷性是指算法程序的运行时间是有限的。
(6)D)【解析】除了堆排序算法的比较次数是O(
),其他的都是(n-1)/2.
(7)B)【解析】栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。
(8)C)【解析】将E-R图转换成关系模型数据是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。
(9)D)【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B)错误。
笛卡尔积是用R集合中元素为第一元素,S集合中元素为第二元素构成的有序对,所以C)错误。
根据关系T可以很明显的看出其是从关系R与关系S中取得相同的关系组成,所以运用的是交运算,选择D)。
(10)C)【解析】学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选C).
(11)A)【解析】C语言中的非执行语句不会被编译,不会生成二进制的机器指令,所以A)错误。
由C语言构成的指令序列成为C源程序,C源程序经过C语言编译程序编译之后生成一个后缀为.OBJ的二进制文件(成为目标文件);最后要由“连接程序”把此.OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为。
EXE的可执行文件。
(12)A)【解析】C语言中八进制整数常量的开头是数字0,十六进制整形常量的开头数字是Ox,C语言中的实型常量有两种表示形式:
小数形式,小数形式表示的实型常量必须要有小数点;指数形式,以e或E后跟一个整数来表示以10为底数的幂数,切规定字母e或E之前必须要有数字,且e或E后面的指数必须为整数。
B)选项中028错误,八进制中没有数字8。
C)选项中4e1.5中e后面的指数不是整数。
D)选项中3.e5小数点后面缺少数字。
(13)A)【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。
另外,关键字不能作为标识符。
应为C语言中区分大小写,所以B)选项中的“FOR”可以作为标识符来用。
A)选项中含有非法字符&,所以选择A)。
(14)A)【解析】B)选项中函数pow(x,e)错误,应该直接使用exp(x)函数。
C)选项中函数abs(n^x+e^x)错误,应该使用fabs()返回浮点数的绝对值。
D)选项中的pow(x,n)参数顺序错误。
(15)B)【解析】取模运算符“%”为二元运算符,具有左结合性,并且参与运算的量均应为整型。
选项B中的a变量double实型,所以B)不符合规定。
(16)D)【解析】C语言中利用sizeof()函数判断数据类型长度,在VC6.0平台中,整形int占4个字节,double型数据占8个字节。
(17)D)【解析】按照从键盘输入的数据可以判断字符1给了变量a,字符2给了变量b,字符即回车给了变量c,字符3给了变量d。
所以打印出的结果为D)选项。
(18)A)【解析】C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A)。
(19)C)【解析】本题中if(a=1)b=1;与cased=3;之间多了语句c=2,所以会出现else语句的位置错误的编译失败提示。
(20)B)【解析】case常量表达式只起语句标号的作用,并不是该处进行条件判断。
在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此字句执行下去,不再进行判断,直到碰到break或函数结束为止。
所以执行内层switch(y)时只执行了a++,此时a的值为1.然后执行外层case2语句的a++;b++;则a为2,b为1.所以结果为B)。
(21)C)【解析】由于内层循环for(k=1;k<3;k++),后面直接跟了个空语句“;”,所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个“*”,因此应该选C)。
(22)D)【解析】case常量表达式只是起语句标号作用,并不是该处进行条件判断。
在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此字句执行下去,不再进行判断,直到碰到break或函数结束为止。
简单的说,break是结束整个循环体,而continue是结束单次循环。
B)选项中当产生的随机数n为4时,要执行打印操作。
C)选项中当产生的随机数为1和2时,分别执行case3和case4后面语句的内容。
由于存在break语句,所以for循环不是固定执行8次,执行次数与产生的随机数n有关系。
(23)A)【解析】第一次调用为m=f(