我正在编程类中,我们刚刚从python切换到C.我遇到了一些麻烦,因为C似乎没有像python那样轻松地执行数学运算,或者我在C语言中,我缺少一些东西。
对于我的家庭作业,我正在编写一个程序,用于收集每加仑用户汽车的行驶里程数,每加仑燃气费用以及每月行驶的里程数。然后,该计划告诉他们他们可以期望为当月的天然气支付多少钱。我目前的代码如下:
#include <stdio.h>
int main () {
int mpg, miles;
double gas_price;
printf("How many miles per gallon does your car get?\n");
scanf("%d", &mpg);
printf("What is the price of gasoline per gallon?\n");
scanf("%lf", &gas_price);
printf("How many miles do you drive in a month?\n");
scanf("%d", &miles);
printf("The cost of gas this month is $%.2lf\n", miles / mpg * gas_price);
printf("%d %d %d", mpg, gas_price, miles);
return 0;
}
当我运行程序时,“mpg”的值为24,“gas_price”为3.00,里程为1000,总计为$ 123.00。这是不正确的,比实际价格低约2美元。当你((1000/24)* 3.00),你应该得到125均匀。我添加了一个字符串来打印出所有值以查看C在第23行中使用的公式,而mpg和gas_price是正确的,“miles”显示为值为1,074,266,112。我知道这里肯定会有一些错误,因为这会让结果超过2美元,但我不禁认为这是相关的。
我为问题的长度道歉,但我希望尽可能具体,我完全难以理解为什么C在如此奇怪地阅读这篇文章。
答案 0 :(得分:14)
你在这里进行整数除法:
miles / mpg * gas_price
首先将两个操作数之一转换为double
:
(double)miles / mpg * gas_price
整数除法将截断小数部分。这就是你的号码关闭的原因。
这里有另一个错误:
printf("%d %d %d", mpg, gas_price, miles);
您的printf
格式说明符与操作数不匹配。它应该是:
printf("%d %f %d", mpg, gas_price, miles);
答案 1 :(得分:4)
这个表达式:
miles / mpg * gas_price
被解析为
(miles / mpg) * gas_price
在乘法之前完成除法。除法的两个操作数都是整数,因此C给出一个整数(截断)结果。要强制它为浮点计算,请执行以下操作:
1.0 * miles / mpg * gas_price
答案 2 :(得分:1)
将int mpg, miles;
更改为double mpg, miles;
。问题是miles/mpg
使用整数除法,产生的结果为41而不是41.66 ....
答案 3 :(得分:0)
miles / mpg
的整数除法将失去一些精度。您在最后一行中也有printf格式说明符不匹配 - 在打印%f
时,您应该使用%d
或与其相关的内容而不是gas_price
。