计算机二级c语言答案解析.docx
- 文档编号:5158378
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:16
- 大小:23.73KB
计算机二级c语言答案解析.docx
《计算机二级c语言答案解析.docx》由会员分享,可在线阅读,更多相关《计算机二级c语言答案解析.docx(16页珍藏版)》请在冰豆网上搜索。
计算机二级c语言答案解析
计算机二级c语言答案解析
【篇一:
国家计算机二级c语言108套操作题真题及答案解析】
2.9
下列给定程序中,函数fun的功能是:
计算如下公式
s?
357n?
1?
2?
?
2?
n?
1?
22?
42?
62?
…?
-1?
n?
1?
?
2?
n?
2?
2?
n?
2
?
10?
3
直到
,并
且把计算结果作为函数值返回。
例如,若形参e的值为1e-3,则函数返回值为0.551690。
请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:
部分源程序在文件blank1.c中。
不得增行或删行,也不得更改程序的结构!
#includestdio.hdoublefun(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));}
【参考答案】
(1)3.0或(double)3
(2)(3)(t+1)【考点分析】
本题考查:
基本算术运算时的类型转换,其转换规则为:
如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致;
如果双目运算符两边运算的类型不一致,系统将自动进行类型转换,
while循环语句,一般考查如何根据题意确定循环条件,以及如何通过循环变量变化实现循环操作。
【解题思路】
填空1:
变量x定义为double类型,而运算符/后面是整型数,所以给x赋值时,需要注意数据类型,此处不能将3.0写成3。
填空2:
while循环语句的循环条件,根据题意确定循环变量应大于1e-3,因此此处应填。
填空3:
表达式的通项是(2*i+1)/(2*i)2,由于程序中已定义t=2*i,所以此处应该填写(t+1)。
【解题宝典】
本题填空1还可以运用强制类型转换来实现。
强制类型转换是通过类型转换运算来实现的。
其一般形式为:
(类型说明符)(表达式)。
其功能是:
把表达式的运算结果强制转换成类型说明符所表示的类型。
例如:
(float)a把a转换为实型
(int)(x+y)把x+y的结果转换为整型
所属年份:
2010.9;2011.3;2012.3;2012.9
下列给定程序中函数fun的功能是:
求出如下分数序列的前n项之和。
和值通过函数值返回。
2358131,2,3,5,8,2113,…例如,若n=5,则应输出
8.391667。
请改正程序中的错误,使其得出正确的结果。
注意:
部分源程序在文件modi1.c中,不得增行或删行,也不得更改的程序的结构!
#includestdio.h
/************found************/voidfun(intn)
{inta,b,c,k;doubles;s=0.0;a=2;b=1;for(k=1;k=n;k++){/************found************/s=s+(double)a/b;c=a;a=a+b;b=c;}
returns;}
main()
{intn=5;
printf(\nthevalueoffunctionis:
%lf\n,fun(n));}
【参考答案】
(1)doublefun(intn)
(2)s=s+(double)a/b;【考点分析】
本题考查:
函数定义,函数定义的一般形式为:
类型标识符函数
名(形式参数表列),其中类型标识符指明了本函数的类型,函数的类
型实际上是函数返回值的类型。
【解题思路】
(1)由语句return(s)和变量s定义为double数据类型可知,该函数定义时其类型标识符为double类型。
(2)注意数据类型double的书写格式。
【解题宝典】
确定函数类型标识符在填空和改错题中经常考到,如果函数没有返回值,则函数定义为void型;如果函数有返回值,则函数类型应与返回值类型一致;如果不定义函数类型标识符,则系统默认为int型。
所属年份:
2010.9;2011.3;2012.3;2012.9
注意:
部分源程序在文件prog1.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#includestdio.h#definem4
intfun(inta[][m]){}
main()
{intarr[2][m]={5,8,3,45,76,-4,12,82};voidnono();printf(max=%d\n,fun(arr));
nono();}
voidnono()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
file*wf;
intarr[][m]={5,8,3,90,76,-4,12,82};
wf=fopen(out.dat,w);
fprintf(wf,max=%d\n,fun(arr));fclose(wf);}
【参考答案】
intfun(inta[][m]){
inti,j,max=a[0][0];for(i=0;i2;i++)for(j=0;jm;j++)if(maxa[i][j])max=a[i][j];returnmax;}
【考点分析】
本题考查:
求数组的最大值,需要运用循环语句,因为数组是二维数值,所以应使用二层加for循环嵌套。
使用for循环语句时需要注意循环变量的取值范围。
【解题思路】
此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。
首先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于max,则将该值赋于max,循环结后max的值即为数组最大值,最后将该值返回。
【解题宝典】
该类题目考查较多,要掌握逐行比较的方法。
对于m*n二维数组,如采用逐行查找方法,代码实现为:
for(i=0;im;i++)for(j=0;jn;j++)……
所属年份:
2010.9;2012.3;2012.9
下列给定程序中,函数fun的功能是:
计算如下公式前n项的和并作为函数值返回。
s?
1?
3?
2?
n?
1?
?
(2?
22?
3?
542?
5?
7
n?
1)62?
…?
?
2?
n?
2例如,当形参n的值为10时,函数返回值为9.612558
。
请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:
部分源程序在文件blank1.c中。
不得增行或删行,也不得更改程序的结构!
#includestdio.hdoublefun(intn)
{inti;doubles,t;/**********found**********/s=__1__;
/**********found**********/for(i=1;i=__2__;i++){t=2.0*i;
/**********found**********/
s=s+(2.0*i-1)*(2.0*i+1)/__3__;}
returns;}
main()
{intn=-1;while(n0)
{printf(pleaseinput(n0):
);scanf(%d,n);}
printf(\ntheresultis:
%f\n,fun(n));}
【参考答案】
(1)0
(2)n(3)(t*t)【考点分析】
本题考查:
变量初始化操作,需要注意该变量是用作累加器还是累乘器;for循环语句。
【解题思路】
填空1:
程序开始定义了变量s,但没有对其进行初始化,根据公式及后面的程序可知变量s用来存储公式的前n项和,因此该变量应初始化为0。
填空2:
通过for循环语句将表达式各项进行累加,结果存于变量s中,循环变量i的取值范围为1~n。
填空3:
根据题目要求确定表达式通项,前面已定义t=2.0*i,因此此空应填(t*t)。
【解题宝典】
程序要求计算表达式值时,一般我们都设定一个变量s,并赋初值,如果s用来存放表达式的和,则赋初值为0;如果s用来存放表达式的积,则赋初值为1。
所属年份:
2010.9;2012.3;2012.9
下列给定程序中函数fun的功能是:
统计substr所指的子符串在str所指的字符串中出现的次数。
例如,若字符串为aaas1kaaas,子字符串为as,则应输出2。
请改正程序中的错误,使它能得出正确的结果。
注意:
部分源程序在文件modi1.c中,不得增行或删行,也不得更改的程序的结构!
#includestdio.h
intfun(char*str,char*substr){inti,j,k,num=0;
/************found************/for(i=0,str[i],i++)
for(j=i,k=0;substr[k]==str[j];k++,j++)/************found************/if(substr[k+1]==\0){num++;break;}
returnnum;}
main(){
charstr[80],substr[80];printf(inputastring:
);gets(str);
printf(inputasubstring:
);gets(substr);
printf(%d\n,fun(str,substr));}
【参考答案】
(1)for(i=0;str[i];i++)
(2)if(substr[k+1]==\0)【考点分析】
本题考查:
for循环语句的格式,for循环语句使用最为灵活,其一般形式为:
for(表达式1;表达式2;表达式3),注意表达式之间使用;相隔;if条件语句的格式,其中if关键字需要区别大小写,这里不能混淆使用。
关键字是由c语言规定的具有特定意义的字符串,也称为保留字。
用户定义的标识符不应与关键字相同,并且关键字应小写。
【解题思路】
我们先看循环条件for(i=0,str[i],i++),不难发现此处for循环语句的格式有误,其中表达式之间应以;相隔;同时很容易发现if条件语句处的关键字书写错误。
所属年份:
2010.9;2012.3;2012.9
?
11?
21?
2?
31?
2?
3?
2?
1?
3?
3?
5?
3?
5?
7?
43?
5?
7?
9?
……?
1?
2?
…?
n3?
5?
…?
2n?
1程序运行后,若输入精度0.0005,则程序应输出为3.14…。
注意:
部分源程序在文件prog1.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#includestdio.h#includemath.h
doublefun(doubleeps){}
main()
{doublex;voidnono();printf(inputeps:
);
scanf(%lf,x);printf(\neps=%lf,pi=%lf\n,x,fun(x));nono();}
voidnono()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
file*fp,*wf;inti;
doublex;
fp=fopen(in.dat,r);wf=fopen(out.dat,w);for(i=0;i10;i++){fscanf(fp,%lf,x);
fprintf(wf,%lf\n,fun(x));}
fclose(fp);fclose(wf);}
【参考答案】
doublefun(doubleeps){
doubles=1.0,s1=1.0;intn=1;
while(s1=eps)/*当某项大于精度要求时,继续求下一项*/
{s1=s1*n/(2*n+1);/*求多项式的每一项*/s=s+s1;/*求和*/n++;}
return2*s;}
【考点分析】
本题考查:
迭代法求给定多项式的值,迭代算法:
让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
需要注意变量的数据类型以及赋初值操作。
【解题思路】
首先应该定义double类型变量,并且赋初值,用来存放多项式的某一项和最后的总和。
从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s表示求和后的结果。
需注意s1和s的初值都为1.0,因为循环变量从第二项开始累加。
【篇二:
国家计算机二级c语言历年真题及答案】
class=txt>c语言程序设计
(考试时间90分钟,满分100分)
一、选择题(
(1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分)
(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)下列选项中不属于结构化程序设计原则的是
a)可封装
d)自顶向下
c)模块化
d)逐步求精
(7)软件详细设计产生的图如下:
该图是
a)n-s图
b)pad图
c)程序流程图
d)e-r图
(8)数据库管理系统是
a)操作系统的一部分
b)在操作系统支持下的系统软件
c)一种编译系统
d)一种操作系统
(9)在e-r图中,用来表示实体联系的图形是
a)椭圆图
b)矩形
c)菱形
d)三角形
(10)有三个关系r,s和t如下:
其中关系t由关系r和s通过某种操作得到,该操作为
a)选择
b)投影
c)交
d)并
(11)以下叙述中正确的是
a)程序设计的任务就是编写程序代码并上机调试
b)程序设计的任务就是确定所用数据结构
c)程序设计的任务就是确定所用算法
d)以上三种说法都不完整
(12)以下选项中,能用作用户标识符的是
a)void
b)8_8
c)_0_
d)unsigned
(13)阅读以下程序
#include
main()
{intcase;floatprintf;
printf(“请输入2个数:
”);
scanf(“%d%f”,case,pjrintf);
printf(“%d%f\n”,case,printf);
}
该程序编译时产生错误,其出错原因是
a)定义语句出错,case是关键字,不能用作用户自定义标识符
b)定义语句出错,printf不能用作用户自定义标识符
c)定义语句无错,scanf不能作为输入函数使用
d)定义语句无错,printf不能输出case的值
(14)表达式:
(int)((double)9/2)-(9)%2的值是
a)0
b)3
c)4
d)5
(15)若有定义语句:
intx=10;,则表达式x-=x+x的值为
a)-20
b)-10
c)0
d)10
(16)有以下程序
#includemain(){inta=1,b=0;printf(“%d,”,b=a+b);printf(“%d\n”,a=2*b);}程序运行后的输出结果是a)0,0
c)3,2
d)1,2
17)设有定义:
inta=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是
a)if(ab)c=a,a=b,b=c;
b)if(ab){c=a,a=b,b=c;}
c)if(ab)c=a;a=b;b=c;
d)if(ab){c=a;a=b;b=c;}
(18)有以下程序
#include
main(){intc=0,k;for(k=1;k3;k++)switch(k){default:
c+=kcase2:
c++;break;case4:
c+=2;break;}printf(“%d\n”,c);
}
程序运行后的输出结果是
a)3
b)5
c)7
d)9
(19)以下程序段中,与语句:
k=ab?
(bc?
1:
0):
0;功能相同的是
a)if((ab)(bc))k=1;
elsek=0;
b)if((ab)||(bc)k=1;
elsek=0;
c)if(a=b)k=0;
elseif(b=c)k=1;
d)if(ab)k=1;
elseif(bc)k=1;
elsek=0;
20)有以下程序
#include
{chars[]={“012xy”};inti,n=0;
for(i=0;s[i]!
=0;i++)
if(s[i]=’a’s[i]=’z’)n++;
printf(“%d\n”,n);
}
程序运行后的输出结果是
a)0
b)2
c)3
d)5
(21)有以下程序
#include
main()
{intn=2,k=0;
while(k++n++2);
printf(“%d%d\n”,k,n);
}
程序运行后的输出结果是
a)02
b)13
c)57
d)12
(22)有以下定义语句,编译时会出现编译错误的是
a)chara=’a’;
b)chara=’\n’;
c)chara=’aa’;
d)chara=’\x2d’;
(23)有以下程序
#include
main()
{charc1,c2;
c1=’a’+’8’-‘4’;
c2=’a’+’8’-‘5’;
printf(“%c,%d\n”,c1,c2);
}
已知字母a的ascii码为65,程序运行后的输出结果是
a)e,68
【篇三:
2015年9月份全国计算机等级考试二级c语言题库及详细解答】
)
(说明:
无纸化考试选择题40分,程序题60分。
学会这些题,保证二级高空飘过!
!
!
)
第一套
给定程序的功能是:
求二分之一圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:
圆面积公式为:
s?
?
r2,在程序中定义的变量名要与公式的变量相同)。
例如,输入圆的半径值:
19.527,输出为:
s=598.949991。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。
试题程序:
#includestdio.h
doublefun(doubler)
{
}
voidmain()
{
}
【参考答案】
(1)r*r
(2)x(3)x
【考点分析】本题考查:
圆面积计算公式s?
?
*r*r;scanf()函数的形式,其一般形式为scanf(格式控制字符串,地址表列);,注意地址是由地址运算符后跟变量名组成的;printf()函数的形式,其一般形式为printf(格式控制字符串,输出表列);;函数实参调用,函数作为另一个函数调用的实际参数出现。
【解题思路】doublex;printf(enterx:
);scanf(%lf,【2】);printf(s=%lf\n,fun(【3】));return3.14159*【1】/2.0;
填空2:
scanf()函数一般形式为scanf(格式控制,地址表列),因此填入x。
填空3:
函数的实际参数是圆的半径x。
下列给定程序中,函数fun的功能是:
计算s=f(-n)+f(-n+1)+…+f(0)+f
(1)+f
(2)+…f(n)的值。
例如,当n为5时,函数值应为10.407143。
f(x)函数定义如下:
f(x)=?
(x?
1)?
(x?
2)?
?
0?
(x?
1)?
(x?
2)?
x?
0x?
0或x?
2x?
0
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#includestdlib.h
#includeconio.h
#includestdio.h
#includemath.h
/*************found**************/
f(doublex)
{
if(x==0.0||x==2.0)
return0.0;
elseif(x0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
}
doublefun(intn)
{
inti;doubles=0.0,y;
for(i=-n;i=n;i++)
/*************found**************/
returns
}
voidmain()
{system(cls);
printf(%f\n,fun(5));
}
【参考答案】
(1)错误:
f(doublex)正确:
doublef(doublex)
(2)错误:
returns正确:
returns;
【考点分析】本题考查:
函数的定义,其一般形式为类型标识符函数名(形式参数表列),其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。
【解题思路】
该程序的流程是,fun()程序对f(n)项循环累加,并且采用条件选择语句计算函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 语言 答案 解析