C语言题求大师

如题所述

#include<stdio.h>
double fact (int n) ;
double power(double x,int n);
int main()
{
int ok = 1,i;
double  x,ans = 0;
scanf("%lf",&x);
for(i = 0;i< 20;i++) {
ans +=  ok *power(x,2*i+1)/((2*i+1)*fact(i));
ok *= -1;
}
printf("%lf\n",ans);

return 0;
}
double fact (int n)
{
double ans = 1;
if(n == 0) return 1;
while(n>=1) ans *= n,n--;
return ans;
}
double power(double x,int n)
{
double ans = 1;
if(n == 0) return 1;
while(n--) ans *= x;
return ans;

}

追问

结果运行不对啊,为什么是负值

追答

当然是负值
每两项一组(1和2 3和4 5和6)
20项 每两项一组
两项中 后面一项分子虽然大,但是分子多了 2500的倍,后面的大,肯定是负值

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-20
图看不太清,上面的x是多少次方追问

3 5 7 9 11......自此类推

追答#include <stdio.h>
double fac(int n){
    if(n==1 || n==0) return 1;
    else return n*fac(n-1);
}
double power(double x,int n){
    int i=0;
    double ans = 1.0;
    for(i=0;i<n;i++){
        ans = ans * x;
    }
    return ans;
}
int main()
{
    int i,j,k=1;
    double x,sum=0.0;
    scanf("%lf",&x);
    for(i=0,j=1;i<20;i++,j=j+2){
        sum = sum + k*(power(x,j)/(fac(i)*j));
        k = k*(-1);
        //printf("%.2f\n",sum);
    }
    printf("%.2f\n",sum);
    return 0;
}

追问

结果运行不对啊,为什么是负值

相似回答
大家正在搜