鱼C论坛

 找回密码
 立即注册
查看: 1433|回复: 4

[已解决]s1e9 练习求大佬解惑啊。。。

[复制链接]
发表于 2020-2-25 22:24:29 | 显示全部楼层 |阅读模式

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

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

x
公式顺序不同出的结果不一样啊

  1. total_repay=time*12.0*ave_repay;
  2. interest=total_repay-loan;
复制代码


这两句放到

  1. ave_repay=loan*(mir*pow((1.0+mir),time*12.0))/(pow((1.0+mir),time*12.0)-1.0);
复制代码


之前输出的还款总额、支付利息结果就错了。。。貌似是溢出了
求大佬解惑原因。。。写公式还有顺序得吗?  感觉没有互相占用变量的时候啊

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

  3. int main()
  4. {
  5.         float price,area,yir,mir;/*单价、面积、年利率、月利率*/
  6.         float interest,loan;/*利息、贷款总额*/
  7.         float ave_repay,down_payment;/*月均还款、首期付款*/
  8.         float total_price,total_repay;/*房款总额、还款总额*/
  9.         int ratio,time;/*按揭层数、按揭年数*/

  10.         printf("请输入单价(元/平米):");
  11.         scanf("%f",&price);
  12.         printf("请输入面积:");
  13.         scanf("%f",&area);
  14.         printf("请输入按揭层数:");
  15.         scanf("%d",&ratio);
  16.         printf("请输入按揭年数:");
  17.         scanf("%d",&time);
  18.         printf("请输入当前基准利率:");
  19.         scanf("%f",&yir);

  20.         mir=yir/100.0/12.0;/*月利率*/
  21.         total_price=price*area;
  22.         down_payment=total_price*(1.0-ratio/10.0);
  23.         loan=total_price-down_payment;
  24.         ave_repay=loan*(mir*pow((1.0+mir),time*12.0))/(pow((1.0+mir),time*12.0)-1.0);
  25.         total_repay=time*12.0*ave_repay;
  26.         interest=total_repay-loan;


  27.         printf("==========报告结果============\n");
  28.         printf("房款总额:%.2f元\n",total_price);
  29.         printf("首期付款:%.2f元\n",down_payment);
  30.         printf("贷款总额:%.2f元\n",loan);
  31.         printf("还款总额:%.2f元\n",total_repay);
  32.         printf("支付利息:%.2f元\n",interest);
  33.         printf("月均还款:%.2f元\n",ave_repay);

  34.         return 0;

  35. }
复制代码
最佳答案
2020-2-26 11:43:04
本帖最后由 转会但姿势丶 于 2020-2-26 11:57 编辑

这题我做过。
编译代码的时候要注意先后顺序。
比如你第一行的变量需要第二行变量的值,这样的话编译器会报错。
就像初中数学的证明题(不是反证法)一样,你如果要证明一个结论,你是不是要拼凑足够多的条件去证明它,好像越说越乱了,总之就是不要无中生有,没有的,你就要相反设法去创造它
还有,你第25行括号里面应该是:((10 - ratio) / 10),第26行不要那么写,虽然方便,但如果你第25行错了就跟着一起错
给你看一下我的代码:
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         float price, area, yir, mir;//单价、面积、年利率、月利率
  6.         float interest, loan;//利息、贷款总额
  7.         float ave_repay, down_payment;//月均还款、首期付款
  8.         float total_price, total_repay;//房款总额、还款总额
  9.         int ratio, time;//按揭成数、按揭年数
  10.        
  11.         printf("请输入单价(元/平方):");
  12.         scanf("%f", &price);
  13.         printf("请输入面积:");
  14.         scanf("%f", &area);
  15.         printf("请输入按揭成数:");
  16.         scanf("%d", &ratio);
  17.         printf("请输入按揭年数:");
  18.         scanf("%d", &time);
  19.         printf("请输入当前基准年利率:");
  20.         scanf("%f", &yir);
  21.        
  22.         total_price = price * area;
  23.         loan = total_price * ratio / 10;
  24.         down_payment = total_price * (10 - ratio) / 10;
  25.         mir = yir / 12.0;
  26.         ave_repay = loan * ((mir / 100.0) * pow(1.0 + (mir / 100.0), time * 12)) / (pow(1.0 + (mir / 100.0), time * 12) - 1.0);
  27.         total_repay = (time * 12) * ave_repay;
  28.         interest = total_repay - loan;
  29.        
  30.         printf("========== 报告结果 ==========\n");
  31.         printf("房款总额:%.2f元\n", total_price);
  32.         printf("首期付款:%.2f元\n", down_payment);
  33.         printf("贷款总额:%.2f元\n", loan);
  34.         printf("还款总额:%.2f元\n", total_repay);
  35.         printf("支付利息:%.2f元\n", interest);
  36.         printf("月均还款:%.2f元\n", ave_repay);
  37.        
  38.         return 0;
  39. }
复制代码

我编译起来没什么问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 22:54:04 | 显示全部楼层
pow返回值是double ,问题出在这,自己看看类型转换处理下就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 23:22:41 | 显示全部楼层
ba21 发表于 2020-2-25 22:54
pow返回值是double ,问题出在这,自己看看类型转换处理下就可以了

那应该和公式写的顺序没关系啊。。。但是改变公式顺序就会出错。。。不改就不会错。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 23:25:39 | 显示全部楼层
拖延症大叔 发表于 2020-2-25 23:22
那应该和公式写的顺序没关系啊。。。但是改变公式顺序就会出错。。。不改就不会错。。。

还是那句话 pow返回值是double
不要非得给你写出正确代码吧。那这问题你问起还有函意吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 11:43:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 转会但姿势丶 于 2020-2-26 11:57 编辑

这题我做过。
编译代码的时候要注意先后顺序。
比如你第一行的变量需要第二行变量的值,这样的话编译器会报错。
就像初中数学的证明题(不是反证法)一样,你如果要证明一个结论,你是不是要拼凑足够多的条件去证明它,好像越说越乱了,总之就是不要无中生有,没有的,你就要相反设法去创造它
还有,你第25行括号里面应该是:((10 - ratio) / 10),第26行不要那么写,虽然方便,但如果你第25行错了就跟着一起错
给你看一下我的代码:
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         float price, area, yir, mir;//单价、面积、年利率、月利率
  6.         float interest, loan;//利息、贷款总额
  7.         float ave_repay, down_payment;//月均还款、首期付款
  8.         float total_price, total_repay;//房款总额、还款总额
  9.         int ratio, time;//按揭成数、按揭年数
  10.        
  11.         printf("请输入单价(元/平方):");
  12.         scanf("%f", &price);
  13.         printf("请输入面积:");
  14.         scanf("%f", &area);
  15.         printf("请输入按揭成数:");
  16.         scanf("%d", &ratio);
  17.         printf("请输入按揭年数:");
  18.         scanf("%d", &time);
  19.         printf("请输入当前基准年利率:");
  20.         scanf("%f", &yir);
  21.        
  22.         total_price = price * area;
  23.         loan = total_price * ratio / 10;
  24.         down_payment = total_price * (10 - ratio) / 10;
  25.         mir = yir / 12.0;
  26.         ave_repay = loan * ((mir / 100.0) * pow(1.0 + (mir / 100.0), time * 12)) / (pow(1.0 + (mir / 100.0), time * 12) - 1.0);
  27.         total_repay = (time * 12) * ave_repay;
  28.         interest = total_repay - loan;
  29.        
  30.         printf("========== 报告结果 ==========\n");
  31.         printf("房款总额:%.2f元\n", total_price);
  32.         printf("首期付款:%.2f元\n", down_payment);
  33.         printf("贷款总额:%.2f元\n", loan);
  34.         printf("还款总额:%.2f元\n", total_repay);
  35.         printf("支付利息:%.2f元\n", interest);
  36.         printf("月均还款:%.2f元\n", ave_repay);
  37.        
  38.         return 0;
  39. }
复制代码

我编译起来没什么问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-15 19:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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