【发布时间】:2021-10-30 15:21:34
【问题描述】:
我目前正在阅读关于 C 的 K&R 书籍,我目前正在编写温度转换器代码,这里说 cels = 5 * (fahr-32) / 9; 不是将它乘以 5/9,而是乘以 5,然后除以 9,因为它被截断,但我的代码没有截断它是我做错了什么还是这是现代 C 中的一个新特性?这是我的代码
#include <stdio.h>
int main(){
int fahr, cels;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
cels = (fahr - 32) * 5/9;
printf("%d\t%d\n", fahr, cels);
fahr = fahr + step;
}
}
编辑:
而不是cels = (fahr - 32) * 5/9; 我做了cels = 5/9 *(fahr - 32); 并且它截断了代码。为什么另一个起作用而另一个不起作用?
【问题讨论】:
-
这会有帮助吗? “How to debug small programs”。
-
我的程序有效,我只是不明白为什么 C 不再截断它了?这是现代 C 编译器的新特性吗?
-
这本书的意思是你不能这样做:
cels = 5/9 * (fahr - 32);原因是乘法和除法是从左到右计算的,所以5 * a / 9和a * 5 / 9都做乘法首先,但5 / 9 * a先除。 -
是的,我只是这样做了,它会截断它,但是为什么它不在其他代码上这样做呢?
-
当你说不截断时,你是什么意思?你的意思是你得到浮点输出? - 不可能的。使用
"%d"格式说明符进行整数除法和输出只能得到整数输出。
标签: c computer-science