c语言:用子函数求cos x=1-x2⼀2!+ x4⼀4! - x6⼀6!+… 看详情

2025-03-06 18:37:32
推荐回答(2个)
回答1:

题目所说的“当取8位小数时,结果约为1.86602621”有误。经用WINDOWS计算器验证,程序的计算是正确的。输出的第一行是验证用的,可以删除。

#include
#include
double mycos(double x)
{double y=1,t=1,p;
 p=3.14159265358979*2;
 if(x<0)x=-x;
 while(x>p)x-=p;
 x*=x;
 for(int i=1;t>1e-6;i+=2)
 {t*=x/(i*(i+1));
  y+=i%4==1?-t:t;
 }
 return y;
}
int main()
{double y;
 printf("cos0=%.8lf  cos(Pi)=%.8lf  cos300=%.8lf  cos600=%.8lf\n",mycos(0),mycos(3.1415926),mycos(300),mycos(600));
 //上面一行printf(...);应当删除
 y=mycos(300)+mycos(600);    //弧度为单位
 printf("%.8lf\n",y*y);    
 return 0;
}

回答2:

#include 
#define PI 3.14159265
double MYCos(double x){  //以弧度为单位 
    int i,k=1;
    double sum=1,an=1;
    x=x-((int)(x/2/PI))*2*PI;
    for(i=2;an>=1e-6;i+=2){
        k=-k;
        an=an*x*x/i/(i-1);
        sum+=an*k;
    }
    return sum;
         
}
double MYCosd(double x){  //以角度为单位 
    return MYCos(x*PI/180);
}
int main()
{
    printf("cos(%d角度)=%f\n",60,MYCosd(60));
    printf("cos(%d角度)=%f\n",30,MYCosd(30));
    printf("%10.8f\n",(MYCosd(30)+MYCosd(60))*(MYCosd(30)+MYCosd(60)));
}