2579738746 发表于 2019-9-16 08:51:07

求助

求1-1/2+1/3......+1/99-1/100的和
为什么我这样写算不出结果
#include<studio.h>
int main()
{ double sum=0;
float a=1.0,b=0,n=-1.0;
while(520)/*我的想法:随便输入一个为真的数,下面符合if条件时直接break*/
{ a=1.0;
   n=n*(-1);
    b=(b+1)*n;
   a=a/b;
   sum=sum+a;
   if(b=101)/*如果用==就不出答案,无限死循环,不知道为什么*/
       break;


   }
printf(“sum=%lf”,sum);
/*算出来的sum=1,不知道错哪了,麻烦dalao帮忙看看,手机打的,有些没对齐*/






}

superbe 发表于 2019-9-16 11:23:00

本帖最后由 superbe 于 2019-9-16 11:29 编辑

#include <stdio.h>

int main()
{
        double sum=0;
        float a=1.0,b=0,n=-1.0;

        while(520)
        {
                a=1.0;
                n=n*(-1);
                b=b+1;        //b=1,2,3,4... 如果*n就出现负数,永远不会到101
                a=a/(b*n);        //把*n挪到这里
                sum=sum+a;
                if(b==100)        break;//应该是b==100吧
       
        }
        printf("sum=%lf",sum);

        return 0;
}


原来代码b=(b+1)*n,由于n=1,-1,实际循环中b的值是1,-2,-1,0,1,-1,-1,0,1,-2......,永远不会到101,所以死循环了。

2579738746 发表于 2019-9-16 11:32:07

本帖最后由 2579738746 于 2019-9-16 11:33 编辑

superbe 发表于 2019-9-16 11:23
原来代码b=(b+1)*n,由于n=1,-1,实际循环中b的值是1,-2,-1,0,1,-1,-1,0,1,-2......,永远不会到101 ...

非常感谢,那为什么if(b=101)会输出sum=1.0000,就是我上面那个错误的代码

superbe 发表于 2019-9-16 11:38:06

原来代码,第一次循环时先计算出sum=1,然后if(b=101)这句,就会给b赋值为101,不为0那么if判断为真,就结束循环。
只循环了一次,结果为1

2579738746 发表于 2019-9-16 11:40:02

c中if(b=101)=是默认返回True吗?==才会进行判断?

2579738746 发表于 2019-9-16 11:44:37

superbe 发表于 2019-9-16 11:38
原来代码,第一次循环时先计算出sum=1,然后if(b=101)这句,就会给b赋值为101,不为0那么if判断为真,就结 ...

谢谢您!

superbe 发表于 2019-9-16 11:55:40

2579738746 发表于 2019-9-16 11:40
c中if(b=101)=是默认返回True吗?==才会进行判断?

=不一定返回true,如果if(b=0)就是false了。if看括号里结果为0就是false,不为0就是true。
=或==表达式都会计算出一个结果,做为if判断的依据。
页: [1]
查看完整版本: 求助