英语轻松读发新版了,欢迎下载、更新

C新手求助:题目是-- a=0.5^n/n! , b = 0.5^(n+1)/(n+1)!, c=e^0.5; 令s1 =( b - a) / b, s2= (c - a) / c,当|s1|<0.05%时,则停止计算,并输出前面n,s1,s2的值。下面是我写的程序,到底哪里出错了,应该怎么写,主要是我不知道这个n怎么确定,求大神帮忙,谢谢。

VickDing 发布于 2016年09月19日 | 更新于 2016年09月20日
无人欣赏。
#include<stdio.h>
#include<math.h>
double factorial(int n);
int main()
{
    float c =exp(0.5);
    float a, b, s1, s2;
    int n;
    a = pow(0.5, n) / factorial(n);
    b = pow(0.5, n+1) / factorial(n+1);

    for(n =1; fabs(s1 = (b - a) / b) > 0.0005; n++)
    {
        s2 = (c - a) / c;
        printf("n = %d, s1 = %f, s2 = %f.n", n, s1, s2);
    }
}
double factorial(int n)
{
    double temp =1;
    int i;
    for(i = 1; i <= n; i++)
    {
      temp *= i;
    }
    return temp;
}
共1条回复
非鱼物语 回复于 2016年09月20日

排版排排好!!!!

可以这样来确定n

PS: 我试了下,貌似找不到这个n的值。 你参考下

unsigned long fact(unsigned int n)
{
if(n <= 1)
    return 1;
else
    return n*fact(n-1);
}

double A(int n)
{
return pow(0.5, n)/fact(n);
}

int main(void)
{
double a,b,s1,s2;
int n;

for(n=1; ; n++)
{
    a = A(n);
    b = A(n+1);
    s1 = (b-a)/b;
    if(fabs(s1) < 0.0005)
    {
        printf("n=%dn", n);
        break;
    }
}

return 0;
}
登录 或者 注册