铭凡 发表于 2022-12-9 21:05:21

带你学C带你飞第9节课后题动手做0

传送门:https://fishc.com.cn/forum.php?mod=viewthread&tid=67732&extra=page%3D1%26filter%3Dtypeid%26typeid%3D570

下面是我写的

#include <stdio.h>
#include <math.h>

int main()
{
        float price, area, yir, mir;//单价、面积、年利率、月利率
        float interest, loan;//利息、贷款总额
        float ave_repay, down_payment;//月均还款、首期付款
        float total_price, total_repay;//房款总额、还款总额
        int ratio, time;//按揭成数、按揭年数
       
        printf("请输入单价(元/平方): ");
        scanf("%f", &price);
        printf("请输入面积(平方米): ");
        scanf("%f", &area);
        printf("请输入按揭成数: ");
        scanf("%d", &ratio);
        printf("请输入按揭年数: ");
        scanf("%d", &time);
        printf("请输入当前基准年利率: ");
        scanf("%f", &yir);
       
        total_price = price * area;//房款总额
        ratio *= 0.1;//按揭成数用户输入的是 7,其实表示的应该是 70%,即 0.7;
        time *= 12;//还款月数=还款年数 * 12
        loan = total_price * ratio;//贷款本金 = 房款总额 * 按揭成数
        mir = yir / 100 / 12;//计算月利率
        ave_repay = loan * (mir * pow((1 + mir), time)) / (pow((1 + mir), time) - 1);//月均还款 = 贷款本金 * (月利率 * (1 + 月利率)^还款月数) / ((1 + 月利率)^还款月数 - 1)
        interest = time * ave_repay - loan;//总利息 = 还款月数 * 月均还款 - 贷款本金
        down_payment = loan + interest - ave_repay * time + ave_repay;//首期付款
        total_repay = loan + interest;
       
        printf("========== 报告结果 ==========\n");
        printf("房款总额: %.2f元\n", total_price);//房款总额,已计算
        printf("首期付款: %.2f元\n", down_payment);//首期付款,已计算
        printf("贷款总额: %.2f元\n", loan);//就是贷款本金,已计算
        printf("还款总额: %.2f元\n", total_repay);//
        printf("支付利息: %.2f元\n", interest);//总利息 ,已计算
        printf("月均还款: %.2f元\n", ave_repay);//月均还款,已计算
}

运算结果如下:



我知道肯定有问题,高中这个东西我就没学明白,肯定算法有问题,但是我不想看小甲鱼老师的答案,想了一个晚上都没有想明白哪里有问题,算式应该是对的把

请教大神

zhangjinxuan 发表于 2022-12-9 21:48:31

试试把所有的int换为float,输入输出的格式符用整形

铭凡 发表于 2022-12-10 00:16:15

zhangjinxuan 发表于 2022-12-9 21:48
试试把所有的int换为float,输入输出的格式符用整形

小甲鱼老师要求前面定义变量,输入那块,最后的输出,都是给好的不让改,你看一下那个传送门

jhq999 发表于 2022-12-10 07:43:56

本帖最后由 jhq999 于 2022-12-10 07:50 编辑

铭凡 发表于 2022-12-10 00:16
小甲鱼老师要求前面定义变量,输入那块,最后的输出,都是给好的不让改,你看一下那个传送门


        ratio *= 10;//按揭成数用户输入的是 7,其实表示的应该是 70%,即 0.7;//////////////////要懂得变通
      time *= 12;//还款月数=还款年数 * 12
      loan = total_price * ratio/100;

铭凡 发表于 2022-12-10 08:06:59

jhq999 发表于 2022-12-10 07:43


你看传送门,按揭成数,输入是7,但是应该是0.7,不就是×0.1吗,你咋×10了呢?

time *= 12;这句你没有改啊

第三句为什么除以100?贷款本金 = 房款总额 * 按揭成数,这句话是小甲鱼老师给出来的,按揭成数我都换成0.7了,直接×就行了啊

jhq999 发表于 2022-12-10 12:32:48

本帖最后由 jhq999 于 2022-12-10 12:34 编辑

铭凡 发表于 2022-12-10 08:06
你看传送门,按揭成数,输入是7,但是应该是0.7,不就是×0.1吗,你咋×10了呢?

time *= 12;这句你没 ...

int ratio是整数类型没有小数,所以要懂得变通,7成是%70,直接变成70,后面用到就除以100,没用到改什么?

铭凡 发表于 2022-12-10 14:46:25

jhq999 发表于 2022-12-10 12:32
int ratio是整数类型没有小数,所以要懂得变通,7成是%70,直接变成70,后面用到就除以100,没用到改 ...

明白你意思了,就是说我ratio *= 0.1之后,这个东西就是0了,怪不得后面都是0。那如果我强制转换成浮点型呢?比如(int)ratio *= 0.1,这样子可以不?

jhq999 发表于 2022-12-10 15:11:54

铭凡 发表于 2022-12-10 14:46
明白你意思了,就是说我ratio *= 0.1之后,这个东西就是0了,怪不得后面都是0。那如果我强制转换成浮点型 ...

不行,

铭凡 发表于 2022-12-10 16:24:03

jhq999 发表于 2022-12-10 15:11
不行,

OK, 感谢
页: [1]
查看完整版本: 带你学C带你飞第9节课后题动手做0