注册 登录
编程论坛 C语言论坛

求各位大佬帮忙,求1/1*2+1/2*3+...+1/n*(n+1)直到某一项小于0.001为止

吴佳俊 发布于 2020-04-05 23:24, 3026 次点击
#include<stdio.h>
int main()
{
    int n=1;
    double     k,S=0;
    k=(float)(1/(n*(n+1)));
    while(k>=0.001)
    {
        S+=(float)(1/(n*(n+1)));
        n++;
    }
    printf("%lf\n",S);
    return 0;
}
3 回复
#2
rjsp2020-04-05 23:51
题目要求是 1/1*2+……
代码却是 1/(1*2)+……

…… = (float)(1/(n*(n+1)));
既然 1/(n*(n+1)) 的运算结果必然是0,为什么不直接写 …… = 0.0f ?

while(k>=0.001)
{
    S+=(float)(1/(n*(n+1)));
    n++;
}
既然 k 永远不变,那么不是一次都不执行,就是死循环。

一会儿 double,一会儿 float
#3
吴佳俊2020-04-06 00:03
回复 2楼 rjsp
那个我自己编的,就是有问题,后来越改越乱,希望得到大佬的帮助,编写一个正确的程序,再讲解一下
求1/(1*2)+1/(2*3)+1/(3*4)+...+1/(n*(n+1))直到某一项小于0.001为止  的和
上面的算式是数学的式子,编程计算
#4
rjsp2020-04-06 11:39
回复 3楼 吴佳俊
直到某一项小于0.001为止
那这一“小于0.001”的项要不要统计进 总和 里去?

若不进总和
程序代码:
#include <stdio.h>

int main( void )
{
    double s = 0;
    for( unsigned n=1; n*(n+1)<=1000; ++n )
        s += 1.0/(n*(n+1));
    printf( "%.3f\n", s );
}

若进总和
程序代码:
#include <stdio.h>

int main( void )
{
    double s = 0;
    for( unsigned n=1; (n-1)*n<=1000; ++n )
        s += 1.0/(n*(n+1));
    printf( "%.3f\n", s );
}

1