关于c语言中double类型直接与int类型运算赋值 会出现的问题(求出1- 1/2 + 1/3 - 1/4 …..1/100的和。 )

今天学习循环控制做题的时候需要一个问题

发现int类型与double类型运算后赋值给double类型会产生问题

发现是因为int类型如果和double类型运算的运算逻辑是  int类型和int先进行运算 然后会存在一个以int为类型的内存地址中   但是例如 1/2 储存到int 类型中会先舍去小数位 结果导致为0

有点绕 请看下方实例(如有不对欢迎指正)

这里是其中一种处理方法直接将h 也是运算的一部分定义为double类型会通过运算自动类型提升到double就可以赋值了

原题如下

//求出1- 1/2 + 1/3 - 1/4 …..1/100的和。  

先贴出来正确写法(是能算出来的写法QAQ 【狗头保命】) 

//求出1- 1/2 + 1/3 - 1/4 …..1/100的和。  

//这里是其中一种处理方法直接将h 
//也是运算的一部分定义为double类型会通过运算自动类型提升到double就可以赋值了
 double d = 1.0 ,h = 1;
        for (int i = 2; i <= 100 ; ++i) {
            if(i%2==0){

                //或者直接在后面*1.0
                d -= h *1.0/i;
            } else{
                //或者直接在后面*1.0
                d += h*1.0/i;
            }
        }
        printf("算出的和为:%lf",d);

下方为解决问题步骤

我开始是这样定义的

这是错误的方式

发现问题

 double d = 1.0;
        for (int i = 2; i <= 100 ; ++i) {
            if(i%2==0){
                d -= 1/i;
            } else{
                d += 1/i;
            }
        }
        printf("算出的和为:%lf",d);

结果是这样的   通过断点调试发现

发现问题所在

 解决问题

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值