问答题
请编写函数fun(),其功能是计算并输出下列多项式的值:
F=1+1/1!+1/2!+1/3!+1/4!+…+1/m!
例如,若主函数从键盘给m输入5,则输出为F=2.716667。
注意:m的值要求大于1但不大于100。部分源程序给出如下。
请勿改动main()函数与其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
double fun(int m)
{
}
void main()
{ int m;
double f;
FILE *out;
printf("Input m:");
scanf("%d", &m);
f=fun(m);
printf("F=%f/n", f);
out=fopen("outfile.dat", "w");
for(m=10; m<10; m++)
fprintf(out, "%f/n", fun(m));
fclose(out);
}
【正确答案】
【答案解析】double t, s=1.0; //初始化求解多项式的值s
int i, j;
for(i=1; i<=m; i++) //m项多项式的循环
{
t=1.0; //阶乘求解初始化
for(j=1; j<=i; j++)
t*=j;
s+=1.0/t; //求得多项式的和
}
return s;
[解析] 该程序的功能是计算并输出多项式的值。该题的解题思路是根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。
根据题干中给出的数列,推出每一项是阶乘的倒数,所以首先在循环中求得每一项的阶乘。其中阶乘的计算公式定义为:
m!=m*(m-1)*(m-2)*…*1(m>1)
m!=1(m=1)
公式分为参数m是1和大于1的两种情况,例如,1的阶乘1!=1;5的阶乘5!=5*4*3*2*1。
然后求得阶乘分之一的累加和。