更新时间:2021-11-14 13:27:33
【项目-太乐了】
(1)先听故事,再编程序。
故事是这样的:话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么成这幅摸样了?sin说:是啊,太乐了!
故事讲完了。下面是sin函数的泰勒展式:
(注:x取弧度值,而非角度值)
用sin泰勒展式编写程序,求出sin(π/2)和sin(56°)的值,精度要求达到小数点后6位(即当最后一项的绝对值小于0.000001时,累加结束,求绝对值的函数也可以自定义函数myabs实现)。
下面是程序模板,请完成自定义函数的声明和定义,并将main函数中下划线部分补充完整。
#include <iostream> using namespace std; const double pi=3.1415926; int main( ) { cout<<"sin(π/2)的值为"<<mysin(pi/2)<<endl; cout<<"sin(56°)的值为"<<_____________<<endl; return 0; } //下面定义mysin函数,求sin值 //下面定义myabs函数,求绝对值
参考解答:
#include <iostream> using namespace std; const double pi=3.1415926; double mysin(double x); double myabs(double x); int main( ) { cout<<"sin(π/2)的值为"<<mysin(pi/2)<<endl; cout<<"sin(56°)的值为"<<mysin((56.0/180)*pi)<<endl; return 0; } //下面定义mysin函数,求sin值 double mysin(double x) { double sum=x,x_pow=x,item; int n=1,fact=1,sign=1; //定义变量时赋初值,已经将第一项考虑到累加和sum中 do { fact=fact*(n+1)*(n+2); //fact用于表示阶乘,在公式中作分母 x_pow*=x*x; //x_pow是分子中用于表示阶乘,在公式中作分母 sign=-sign; //确定即将要累加的这一项的符号 item =x_pow/fact*sign; //计算出要累加的项 sum+=item; //将该项累加上去 n+=2; }while(myabs(item)>1e-6); return sum; } //下面定义myabs函数 double myabs(double x) { return ((x>=0)?x:-x); }