计算机⼆级考试C语⾔例题(1)
第⼀套
给定程序的功能是:求⼆分之⼀的圆⾯积,函数通过形参得到圆的半径,函数返回⼆分之⼀的圆⾯积(注:圆⾯积公式为:2,在程序中定义的变量名要与公式的变量相同)。
例如,输⼊圆的半径值:19.527,输出为:s=598.949991。注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在横线上填⼊所编写的若⼲表达式或语句。
试题程序:
#include
double fun( double r)
{
return 3.14159*【1】/2.0;
}
void main()
{
double x;
printf("Enter x: ");
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)函数定义
c语言二维数组表示方法如下:
f(x)=
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增⾏或删⾏,也不得更改程序的结构。
试题程序:
#include
#include
#include
#include
/*************found**************/
f(double x)
{
if(x==0.0||x==2.0)
return 0.0;
else if(x<0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
}
double fun(int n)
{
int i; double s=0.0,y;
for(i=-n; i<=n;i++)
{ y=f(1.0*i); s+=y;}
/
*************found**************/
return s
}
void main()
{ system("CLS");
printf("%f\n", fun(5));
}
【参考答案】
(1) 错误:f(double x) 正确:double f(double x)
(2) 错误:return s 正确:return s;
【考点分析】本题考查:函数的定义,其⼀般形式为"类型标识符函数名(形式参数表列)",其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的
类型。
【解题思路】
该程序的流程是,fun( )程序对f(n)项循环累加,并且采
⽤条件选择语句计算函数f(x)的值。本题的错误在于未定义函数f(double x)的返回值类型。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
float fun(int n)
{
}
void main()
{
FILE *wf;
int n;
float s;
system("CLS");
printf("\nPlease enter N: ");
scanf("%d",&n);
s=fun(n);
printf("The result is:%f\n " , s);
/******************************/
wf=fopen("out.dat","w");
fprintf (wf,"%f",fun(11));
fclose(wf);
/*****************************/
}
【参考答案】
float fun(int n)
{
int i,s1=0; /*定义整型变量s1,表⽰分母*/
float s=0.0; /*定义单精度变量s,表⽰每⼀项*/ for(i=1;i<=n;i++) {
s1=s1+i; /*求每⼀项的分母*/
s=s+1.0/s1; /*求多项式的值*/
}
return s;
}
【考点分析】
本题考查:计算给定表达式的值,根据题意判断表达式为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
void main()
{
int n,m;
long sum;
【1】;
system("CLS");
printf("\nInput n,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"。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。