C160 发表于 2020-11-30 22:31:08

老哥们帮帮忙

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

int main()
{
        float a,b,c,d;//房屋单价,房屋面积,基准年利率,基准月利率
        float e,f,g,h,i,j;   //房款总额,首期付款,贷款总额,支付利息,月均还款,还款总额
        int k,l,m;       //按揭成数,按揭年数
       
       
        printf("请输入房屋单价 (元/平方):    ");
        scanf("%f",&a);
        printf("请输入房屋面积:   ");
        scanf("%f",&b);
        printf("请输入基准年利率:   ");
        scanf("%f",&c);
        printf("请输入按揭成数:   ");
        scanf("%d",&k);
        printf("请输入按揭年数:   ");
        scanf("%d",&l);
       
        m=12*l;
        e=a*b;
        f=e*(1-(float)k/10);
        g=e*k/10;
        d=c/100/12;
        i=g*(d*pow((1+d),m)/(pow((1+d),m)-1));
        h=12*(float)l*i-g;
        j=h+g;
       
        printf("=========报告结果============\n");
        printf("房贷总额:%.2f\n",e);
        printf("首期付款:%.2f\n",f);
        printf("贷款总额:%.2f\n",g);
        printf("还款总额:%.2f\n",j);
        printf("支付利息:%.2f\n",h);
        printf("月均还款:%.2f\n",i);
       
       
        return 0;
       
       
       
}



请问我这个程序哪里有错误
为啥我输出的数据里有两三个数据差了一点点{:10_269:}

昨非 发表于 2020-11-30 22:56:21

表示不懂按揭是啥

C160 发表于 2020-12-1 20:49:49

昨非 发表于 2020-11-30 22:56
表示不懂按揭是啥

阿这,按揭年数就是贷款的时间,按揭成数就是贷款的钱占房价的比例{:10_269:}{:10_269:}我也是百度了解的

C160 发表于 2020-12-1 21:34:12

昨非 发表于 2020-11-30 22:56
表示不懂按揭是啥

老哥,我还想问一下,flaot可以存放整数吗?还有int可以存放小数吗?

昨非 发表于 2020-12-1 22:03:05

C160 发表于 2020-12-1 21:34
老哥,我还想问一下,flaot可以存放整数吗?还有int可以存放小数吗?

float可以存整数,但是会添加小数点和后面的0(也就不是整数了)
int存放小数会损失精度,就是小数点和后面全没了

C160 发表于 2020-12-1 23:10:54

昨非 发表于 2020-12-1 22:03
float可以存整数,但是会添加小数点和后面的0(也就不是整数了)
int存放小数会损失精度,就是小数点和 ...

奥奥,大佬前面那个程序有啥问题不,我打的数据总是和正确答案差一点{:10_269:}

昨非 发表于 2020-12-1 23:16:47

C160 发表于 2020-12-1 23:10
奥奥,大佬前面那个程序有啥问题不,我打的数据总是和正确答案差一点

比如?

C160 发表于 2020-12-1 23:19:30

首期付款那个多了一个0.02还款总额,支付利息,月均还款都有类似的错误

风过无痕1989 发表于 2020-12-1 23:38:10

本帖最后由 风过无痕1989 于 2020-12-2 00:28 编辑

#include <stdio.h>
#include <math.h>
int main()
{
        double price, area, yir, mir;       // 总价、面积、年利率、月利率
        double interest, ratio, loan;      // 利息、贷款总额
        double ave_repay, down_payment;   // 月均还款、首期付款
        double total_price, total_repay;// 房款总额、还款总额
        int time;                        // 按揭成数、按揭年数

        printf("请输入单价(元/平方): ");
        scanf("%lf", &price);
        printf("请输入面积: ");
        scanf("%lf", &area);
        printf("请输入按揭成数: ");
        scanf("%lf", &ratio);
        printf("请输入按揭年数: ");
        scanf("%d", &time);
        printf("请输入当年基准年利率: ");
        scanf("%lf", &yir);

        mir = yir / 100 / 12;            // 年利率需要除以100得到,因为用户输入是5.4(%),而不是0.054
        time = time * 12;
        total_price = price * area;
        loan = total_price * ratio / 10; // 这里不能写成(ratio/10),否则結果会变成0
        ave_repay = loan * mir * pow((1 + mir), time) / (pow((1 + mir), time) - 1);
        interest = ave_repay * time - loan;
        total_repay = loan + interest;
        down_payment = total_price * (1 - (float)ratio / 10);    //强制转换ratio为浮点型

        printf("\n");
        printf("==========报告结果==========\n");
        printf("房款总额: %.2lf元\n", total_price);
        printf("首期付款: %.2lf元\n", down_payment);
        printf("贷款总额: %.2lf元\n", loan);
        printf("还款总额: %.2lf元\n", total_repay);
        printf("支付利息: %.2lf元\n", interest);
        printf("月均还款: %.2lf元\n", ave_repay);
        return 0;
}

忘记加行号了

风过无痕1989 发表于 2020-12-1 23:46:50

你的程序,我用 VS2015 运行正常,没有问题
但是,你的程序,让人看了眼花瞭乱的,主要是你设置的变量名称,a、b、c、d、e、f、g、h、i、j、k、l、m 这样下来,我敢保证,一个月以后,不!一个星期以后,你自己,没有半个小时,也搞不清楚,这些变量到底哪个是哪个

昨非 发表于 2020-12-1 23:47:36

C160 发表于 2020-12-1 23:19
首期付款那个多了一个0.02还款总额,支付利息,月均还款都有类似的错误

你还是没说到底输入是啥?输出是啥?输出正确应该是啥

C160 发表于 2020-12-2 00:03:45

风过无痕1989 发表于 2020-12-1 23:46
你的程序,我用 VS2015 运行正常,没有问题
但是,你的程序,让人看了眼花瞭乱的,主要是你设置的变量名称 ...

{:10_257:}{:10_257:}阿,好像是这样,所以一般大佬一般都是打英文吗?{:10_269:}

C160 发表于 2020-12-2 00:05:40

风过无痕1989 发表于 2020-12-1 23:46
你的程序,我用 VS2015 运行正常,没有问题
但是,你的程序,让人看了眼花瞭乱的,主要是你设置的变量名称 ...

可能是我哪里算错了

风过无痕1989 发表于 2020-12-2 00:27:45

C160 发表于 2020-12-2 00:03
阿,好像是这样,所以一般大佬一般都是打英文吗?

最好不要使用中文作为变量名,若不懂英文的话,用汉语拼音也是可以的

风过无痕1989 发表于 2020-12-2 00:29:39

C160 发表于 2020-12-2 00:05
可能是我哪里算错了

我再帮你看看

风过无痕1989 发表于 2020-12-2 00:49:19

C160 发表于 2020-12-2 00:05
可能是我哪里算错了

若只差 0.02 ,那问题是不大的,这是计算精度引起的。不必太过在意,程序是对的,说明我们已经掌握了此题的编写方法。下图中间那个,我就是将你的程序中的所有整数改为了带小数的整数,比如:10 改为 10.0
页: [1]
查看完整版本: 老哥们帮帮忙