国家计算机等级考试二级c语言南开100套题C语言_精品文档.doc
- 文档编号:211419
- 上传时间:2022-10-06
- 格式:DOC
- 页数:93
- 大小:1.08MB
国家计算机等级考试二级c语言南开100套题C语言_精品文档.doc
《国家计算机等级考试二级c语言南开100套题C语言_精品文档.doc》由会员分享,可在线阅读,更多相关《国家计算机等级考试二级c语言南开100套题C语言_精品文档.doc(93页珍藏版)》请在冰豆网上搜索。
93
第一套
给定程序的功能是:
求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:
圆面积公式为:
2,在程序中定义的变量名要与公式的变量相同)。
例如,输入圆的半径值:
19.527,输出为:
s=598.949991。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。
试题程序:
#include
doublefun(doubler)
{
return3.14159*【1】/2.0;
}
voidmain()
{
doublex;
printf("Enterx:
");
scanf("%lf",【2】);
printf("s=%lf\n",fun(【3】));
}
【参考答案】
(1)r*r
(2)&x(3)x
【考点分析】本题考查:
圆面积计算公式*r*r;scanf()函数的形式,其一般形式为"scanf("格式控制字符串",地址表列);",注意地址是由地址运算符"&"后跟变量名组成的;printf()函数的形式,其一般形式为"printf("格式控制字符串",输出表列);";函数实参调用,函数作为另一个函数调用的实际参数出现。
【解题思路】
填空1:
计算圆的面积,公式为:
*r。
填空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)=
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#include
#include
/*************found**************/
f(doublex)
{
if(x==0.0||x==2.0)
return0.0;
elseif(x<0.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++)
{y=f(1.0*i);s+=y;}
/*************found**************/
returns
}
voidmain()
{system("CLS");
printf("%f\n",fun(5));
}
【参考答案】
(1)错误:
f(doublex)正确:
doublef(doublex)
(2)错误:
returns正确:
returns;
【考点分析】本题考查:
函数的定义,其一般形式为"类型标识符函数名(形式参数表列)",其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。
【解题思路】
该程序的流程是,fun()程序对f(n)项循环累加,并且采用条件选择语句计算函数f(x)的值。
本题的错误在于未定义函数f(doublex)的返回值类型。
C语言规定,在未显式声明的情况下,函数返回值默认为int型。
编写函数fun,函数的功能是:
根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。
S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)
例如,若n的值为11时,函数的值为1.833333。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
#include
floatfun(intn)
{
}
voidmain()
{
FILE*wf;
intn;
floats;
system("CLS");
printf("\nPleaseenterN:
");
scanf("%d",&n);
s=fun(n);
printf("Theresultis:
%f\n",s);
/******************************/
wf=fopen("out.dat","w");
fprintf(wf,"%f",fun(11));
fclose(wf);
/*****************************/
}
【参考答案】
floatfun(intn)
{
inti,s1=0;/*定义整型变量s1,表示分母*/
floats=0.0;/*定义单精度变量s,表示每一项*/
for(i=1;i<=n;i++){
s1=s1+i;/*求每一项的分母*/
s=s+1.0/s1; /*求多项式的值*/
}
returns;
}
【考点分析】
本题考查:
计算给定表达式的值,根据题意判断表达式为1到n累加倒数之和。
变量数据类型及强制转换操作。
for循环语句,一般情况需要确定循环变量的取值范围。
使用return语句完成函数值的返回。
【解题思路】
本题可以通过for循环语句来实现第1项到第n项的变化,然后计算各项的累加和。
方法是先根据题目要求定义变量(注意该变量的数据类型),然后对其进行初始化操作,因为该变量用作累加器,所以初始值应为0(或0.0,根据变量数据类型来确定),再通过for循环语句来完成累加过程。
本题中s1用来表示式中每一项的分母,它可以由前一项的分母加项数得到。
注意:
由于s1定义成一个整型,所以在s=s+1.0/s1中不能把1.0写成1。
【解题宝典】
此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。
第二套
请补充main函数,该函数的功能是:
计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入)。
例如,当n=1,m=100时,sum=5050;当n=100,m=1000时,sum=495550。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#include
voidmain()
{
intn,m;
longsum;
【1】;
system("CLS");
printf("\nInputn,m\n");
scanf("%d,%d",&n,&m);
while(n<=m)
{
【2】;
n++;
}
printf("sum=%【3】\n",sum);
}
【参考答案】
(1)sum=0
(2)sum+=n(3)ld
【考点分析】本题考查:
变量初始化,需要注意该变量是累加器还是累乘器:
printf()函数,其一般形式为"printf("格式控制符",输出表列)"。
其中,格式控制符用于指定输出格式,可由格式字符串和非格式字符串两种组成,格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等,如"%ld"表示按十进制长整型输出,非格式字符串在输出时原样照印,在显示中起提示作用。
【解题思路】
填空1:
变量sum进行了类型声明,但没有进行初始化,而后面的程序用sum来存放最后的结果,所以要在使用前将sum初始化为0。
填空2:
通过while循环将自然数n和m之间的数进行累加,结果存于sum中。
填空3:
由于sum为长整型,所以标准输出函数printf()中的格式控制符为"%ld"。
下列给定程序中,fun函数的功能是:
根据形参m,计算下列公式的值:
t=1+1/2+1/3+1/4+…+1/m
例如,若输入5,则应输出2.283333。
请改正程序中的错误,使它能计算出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#include
doublefun(intm)
{
doublet=1.0;
intI;
for(I=2;I<=m;I++)
/*************found**************/
t+=1.0/k;
/*************found**************/
returnI;
}
voidmain()
{intm;
system("CLS");
printf("\nPleaseenter1integernumber:
");
scanf("%d",&m);
printf("\nTheresultis%1f\n",fun(m));
}
【参考答案】
(1)错误:
t+=1.0/k;正确:
t+=1.0/I;
(2)错误:
returnI;正确:
returnt;
【考点分析】
本题考查:
for循环语句的循环条件,这类题目的一般解法是根据题意确定循环变量的取值范围;函数返回值,其一般形式为"return表达式;",该语句的功能是计算表达式的值,并返回给主调函数。
【解题思路】
(1)该题目考查分母成等差数列递增的一个数学公式,我们先看循环条件for(I=2;I<=m;I++),i从2开始递增到m,所以t的值应该是由1.0/i的值逐步循环叠加后的结果,而不是t+=1.0/k;。
(2)returnI;考查对程序的解读能力,当循环结束后(由输入m的值决定),函数返回当前t的值。
请编写一个函数voidfun(char*tt,intpp[]),统计在tt字符串中"a"到"z"26个字母各自出现的次数,并依次放在pp所指数组中。
例如,当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:
333221110000000000000000000
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
voidfun(char*tt,intpp[])
{
}
voidmain()
{
FILE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 国家 计算机等级考试 二级 语言 南开 100 精品 文档