小张要努力. 发表于 2023-9-2 11:52:02

c语言课后作业的一题,不知道哪里不对

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

int main()
{
      double awards = 4000000;
      int count = 0;

      while (awards >= 0)
      {
                awards -= 500000;
                awards += awards * 0.08;
                count++;
      }

      printf("%d年之后,小甲鱼败光了所有的家产,再次回到一贫如洗……\n", count);

      return 0;
}

我的程序:#include <stdio.h>

#define MONEY 4000000

int main()
{
        int count = 0;
        double total =MONEY;
       
        do
        {       
                total -= 500000;
                total += MONEY*0.08;
                count++;
               
        }while(total>=0);
       
        printf("%d年之后,小甲鱼败光了所有的家产,再次回到一贫如洗.....\n",count);
       
        return 0;
}

答案是12年,我的程序是23年,能看出来是什么问题哪里出错了吗?

isdkz 发表于 2023-9-2 11:52:14

你的程序出错的地方在于计算每年的红利时使用了固定的MONEY值,而不是每年剩余的资产total。这导致了每年的红利计算错误,因此结果出现了偏差。

在小甲鱼的程序中,他使用了awards来保存每年的剩余资产,并在计算红利时使用了awards的值。这样可以确保每年的红利都是基于剩余资产计算的。

你可以将你的程序修改为:
#include <stdio.h>

#define MONEY 4000000

int main()
{
    int count = 0;
    double total = MONEY;

    do
    {
      total -= 500000;
      total += total * 0.08;
      count++;

    } while(total >= 0);

    printf("%d年之后,小甲鱼败光了所有的家产,再次回到一贫如洗...\n", count);

    return 0;
}


这样修改后,你的程序应该能够得到正确的结果,即12年。

陶远航 发表于 2023-9-2 11:52:16

你的问题出在计算每年的红利上。在你的程序中,你每年都是按照初始金额 MONEY 来计算红利的,而正确的做法是应该按照实际剩余的金额来计算红利。

以下是修改后的程序:

#include <stdio.h>

#define MONEY 4000000

int main() {
    int count = 0;
    double total = MONEY;

    while (total >= 0) {
      total -= 500000;
      double interest = total * 0.08;// 每年的红利根据实际剩余金额计算
      total += interest;
      count++;
    }

    printf("%d年之后,小甲鱼败光了所有的家产,再次回到一贫如洗......\n", count);
    return 0;
}


在这个修改后的程序中,我们将每年的红利计算改为根据实际剩余的金额来计算,并将结果存储在变量 interest 中。然后我们用这个红利更新总金额 total。

运行修改后的程序,你将得到正确的答案:12年之后小甲鱼败光了所有的家产,再次回到一贫如洗。

希望这个解答能够帮到你!如果你还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: c语言课后作业的一题,不知道哪里不对