鱼C论坛

 找回密码
 立即注册
查看: 1333|回复: 2

[已解决]c语言课后作业的一题,不知道哪里不对

[复制链接]
发表于 2023-9-2 11:52:02 | 显示全部楼层 |阅读模式

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

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

x
题目:都说天降横财不是什么好事儿,这不,小甲鱼中了双色球一等奖,扣除税收后还剩下 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年,能看出来是什么问题哪里出错了吗?
最佳答案
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年。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 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年之后小甲鱼败光了所有的家产,再次回到一贫如洗。

希望这个解答能够帮到你!如果你还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 02:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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