请编写函数fun(),其功能是计算并输出当x<0.97时下列多项式的值,直到|Sn-Sn-1|<0.000001为止。
Sn=1+0.5x+0.5(0.5-1)x2/2!+0.5(0.5-1)(0.5-2)x3/3!+…0.5(0.5-1)(0.5-2)…(0.5-n+1)xn/n!
例如:主函数从键盘给x输入0.21后,则输出为s=1.100000。
注意:部分源程序以存在文件test38_2.cpp中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
文件test38_2.cpp的内容如下:
#include<stdio.h>
#include<iostream.h>
#include<math.h>
double fun(double x)
{
}
void main( )
{
double x, s;
cout<<"Input x:"<<endl;
cin>>x;
s=fun(x);
cout<<"s="<<s<<endl;
}
参考答案:
解析:double fun (double x) { double s1=1.0,p=1.0,sum=0.0,s0,t=1.0; int n=1; do {s0=s1; sum+=s0; t*=n; P*= (0.5-n+1)*x; s1=p/t; n++; }while (fabs(s1-s0)>=le-6); return sum; } 解答本题的关键是观察所给的多项式,并从中找出变化规律。观察得出,每一项分子的变化规律是每一项比前一项多乘一项“(0.5-n+1)*x”。分母的变化规律是每一项比前一项多乘一个n(即在不断变化的各项的编号)。