首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一道C语言题目

2013-04-21 
一道C语言题目求助输入精度e 和实数x,用下列公式求cos x 的近似值,精确到最后一项的绝对值小于e?要求定义

一道C语言题目求助
输入精度e 和实数x,用下列公式求cos x 的近似值,精确到最后一项的绝对值小于e?要求定义和调用函数funcos(e,x)求余弦函数的近似值?
然后我是这么做的没有错误但是不能算出要求的东西
#include<stdio.h>
#include<math.h>
int main(void)
{
double e,result,x;
double funcos(double e,double x);

printf("输入精度:");
scanf("%lf",&e);
printf("x=");
scanf("%lf",&x);
result=funcos(e,x);
printf("cos %f = %f",x,result);

}


double funcos(double e,double x)
{
int flag,digit,i;
double denominator,sum,item,numerator;

sum=0;
item=1.0;
denominator=1.0;
flag=1;
    numerator=1.0;
digit=0;
while(fabs(item)>=e)
{
item=flag*numerator/denominator;
numerator=numerator*x*x;
digit=digit+2;
denominator=1.0;
for(i=digit;i>=1;digit--)
denominator=denominator*i;
flag=-flag;
sum=sum+item;
}

return sum;
}
求指导哪里错误了 C math.h
[解决办法]


    #include<stdio.h>   
    #include<math.h>   
    double funcos(double e,double x);   
    double fact(int x);   
    int main(void)   
    {   
        double e,x,y;   
        printf("Input e:");   
        scanf("%lf",&e);   
        printf("Input x:");   
        scanf("%lf",&x);   
        y=funcos(e,x);   
        printf("cos%lf=%.2lf\n",x,y);   
        return 0;   
    }   
    double funcos(double e,double x)   
    {   
        int n,p;   
        double z,m;   
        z=p=0;   
        n=1;   
        while(1)   
        {   
            m=pow(x,p)/fact(p);   
            if(m<e)   
                break;   
            z=z+n*m;   
            n=-n;   
            p=p+2;   
        }   
        return z;   
    }   


    double fact(int x)   
    {   
        int i;   
        double y;   
        y=1;   
        for(i=1;i<=x;i++)   
        {   
            y=y*i;   
        }   
        return y;   
    }  


[解决办法]

// 其他的没细看,感觉这句有点问题
for(i=digit;i>=1;digit--)  // i值没变化,很容易陷入死循环
    denominator=denominator*i;       

热点排行