鱼C论坛

 找回密码
 立即注册
查看: 1494|回复: 6

[已解决]求助

[复制链接]
发表于 2019-9-16 08:51:07 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求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帮忙看看,手机打的,有些没对齐*/






}
最佳答案
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;
}
无标题.png

原来代码b=(b+1)*n,由于n=1,-1,实际循环中b的值是1,-2,-1,0,1,-1,-1,0,1,-2......,永远不会到101,所以死循环了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
无标题.png

原来代码b=(b+1)*n,由于n=1,-1,实际循环中b的值是1,-2,-1,0,1,-1,-1,0,1,-2......,永远不会到101,所以死循环了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-16 11:32:07 From FishC Mobile | 显示全部楼层
本帖最后由 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,就是我上面那个错误的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-16 11:38:06 | 显示全部楼层
原来代码,第一次循环时先计算出sum=1,然后if(b=101)这句,就会给b赋值为101,不为0那么if判断为真,就结束循环。
只循环了一次,结果为1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-16 11:40:02 From FishC Mobile | 显示全部楼层
c中if(b=101)=是默认返回True吗?==才会进行判断?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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判断的依据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 09:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表