C的新手,所有数学计算略有偏差

时间:2012-02-28 00:28:23

标签: c math

我正在编程类中,我们刚刚从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在如此奇怪地阅读这篇文章。

4 个答案:

答案 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