weijun_zhang 发表于 2021-4-11 18:07:10

S1E16课后作业答疑

1. 都说天降横财不是什么好事儿,这不,小甲鱼中了双色球一等奖,扣除税收后还剩下 400 万人民币。假设小甲鱼把这些钱做固定投资,每年可以获得 8% 的红利,但在每年的第一天,小甲鱼都会取出 50 万作为本年度的开销……
请编写一个程序,计算需要多久小甲鱼才会败光所有家产,再次回到一贫如洗?

请问为何下面的程序运行处理,是n=0?
#include <stdio.h>
#include <math.h>

int main()
{
        double Mon=400,rate=0.08,rest;
        int n=0;
   
    while(rest>0)
    {   
                rest=Mon*(1+rate)-50;
                Mon=rest*(1+rate);
                n++;
               
        }
        printf("%d年后,小甲鱼一贫如洗!\n",n);
       
       
        return 0;
}

wp231957 发表于 2021-4-11 18:12:26

rest 都没赋初值你就让它跑循环   咋跑 ?

weijun_zhang 发表于 2021-4-11 18:23:18

wp231957 发表于 2021-4-11 18:12
rest 都没赋初值你就让它跑循环   咋跑 ?

说的dei。。。。

weijun_zhang 发表于 2021-4-11 18:25:53

wp231957 发表于 2021-4-11 18:12
rest 都没赋初值你就让它跑循环   咋跑 ?

我随便服了一个值rest=1,为了让循环跑起来。可是为何还是不行?
这回啥结果都没有

肖-肖 发表于 2021-4-11 20:42:31

本帖最后由 肖-肖 于 2021-4-11 20:44 编辑

分析如下:
你的错误出现在了循环体内-》重置取出五十万后卡内余额的代码就是这句-》Mon=rest*(1+rate);
-》还是看吧,代码比较直观-》看注释就能看懂了,自认为写的很清楚了
还有就是不能将500万写成50,一个大数*0.08和一个小数*0.08-》肯定不相同啊!
代码如下:
#include <stdio.h>
#include <math.h>

int main()
{
      double Mon=4000000,rate=0.08,rest=Mon;//rest代表n年后的余额
      int n=0;//n代表年

    while(rest>0)
    {
      //n年后的余额如下
      rest=Mon*(1+rate)-500000;
      //赋值给Mon,不然每次循环Mon都是四百万,会死循环,你就是这个地方错了哦
      Mon=rest;
      n++;
    }
    printf("%d年后,小甲鱼一贫如洗!\n",n);
    return 0;
}

运行结果如下:
14年后,小甲鱼一贫如洗!
OK 希望有用吧!

学C的大叔 发表于 2021-4-11 21:49:50

肖-肖 发表于 2021-4-11 20:42
分析如下:
你的错误出现在了循环体内-》重置取出五十万后卡内余额的代码就是这句-》Mon=rest*(1+rate);
...

请教一下,这个程序代码是怎么贴到帖子上的啊?旁边还有行数的,谢谢

肖-肖 发表于 2021-4-11 23:56:44

学C的大叔 发表于 2021-4-11 21:49
请教一下,这个程序代码是怎么贴到帖子上的啊?旁边还有行数的,谢谢

点击回复后,再输入框的上面笑脸的左边的-》【<>】->点击->然后粘贴你的代码就行了!

学C的大叔 发表于 2021-4-12 11:50:50

肖-肖 发表于 2021-4-11 23:56
点击回复后,再输入框的上面笑脸的左边的-》【】->点击->然后粘贴你的代码就行了!

谢谢
页: [1]
查看完整版本: S1E16课后作业答疑