求助
求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: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: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,就是我上面那个错误的代码 原来代码,第一次循环时先计算出sum=1,然后if(b=101)这句,就会给b赋值为101,不为0那么if判断为真,就结束循环。
只循环了一次,结果为1 c中if(b=101)=是默认返回True吗?==才会进行判断? superbe 发表于 2019-9-16 11:38
原来代码,第一次循环时先计算出sum=1,然后if(b=101)这句,就会给b赋值为101,不为0那么if判断为真,就结 ...
谢谢您! 2579738746 发表于 2019-9-16 11:40
c中if(b=101)=是默认返回True吗?==才会进行判断?
=不一定返回true,如果if(b=0)就是false了。if看括号里结果为0就是false,不为0就是true。
=或==表达式都会计算出一个结果,做为if判断的依据。
页:
[1]