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年,能看出来是什么问题哪里出错了吗? 你的程序出错的地方在于计算每年的红利时使用了固定的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年。 你的问题出在计算每年的红利上。在你的程序中,你每年都是按照初始金额 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]