程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入精度 e 和 x,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e。
cos(x) = x^0/0!-x^2/2!+x^4/4!-x^6/6!+……
要求定义并调用函数 funcos(e,x)计算 cos(x) 的值,函数形参e和x的类型均为double,函数类型是double。
输入输出示例:括号内是说明
输入:
2 (repeat=2)
0.001 0 (e=0.001, x=0)
0.0001 -3.14 (e=0.0001, x=-3.14)
输出:
sum = 1.000000
sum = -0.999999
下面是我的程序
总是有误差
帮忙看看
#include "stdio.h"
#include "math.h"
double funcos(double e, double x);
double fact(int a);
int main(void)
{
int repeat, ri;
double e, sum, x;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%le%le", &e, &x);
sum=funcos(e, x);
printf("sum = %f\n", sum);
}return 0;
}
double funcos(double e, double x){
double cos,xiang;
int a,fuhao;
cos=0,fuhao=1,a=2;
xiang=pow(x,0)/1;
while(xiang>=e){
cos=xiang*fuhao+cos;
xiang=pow(x,a)/fact(a);
a=a+2;
fuhao=fuhao*(-1);
}
return cos;
}
double fact(int a){
int i ,sum;
sum=1;
for(i=1;i<=a;i++)sum=sum*i;
return sum;
}
谢谢了
double fact(int a){
int i ;
double sum; //返回值类型是double,你这里应该定义成相同的类型才对
sum=1;
for(i=1;i<=a;i++)sum=sum*i;
return sum;
}
double funcos(double e, double x){