嗨,我是编程方面的新手。我从《 C编程语言(第二版)》一书开始学习C,并停留在第一个示例中,在该示例中,我们练习编写一个简单的程序,该程序将包含摄氏度a的温度值从低到高打印在2列(选项卡)中。华氏温度。
我遇到问题是因为尝试为以下代码编辑这些代码:
当我使用整数变量时,一切都工作正常。
#include <stdio.h>
main()
{
int celcius, farenheit;
int lower, upper, step;
lower = -273.15;
upper = 0;
step = lower / -10; // Dividing lower temperature by given number
celcius = lower;
while (celcius <= upper) {
farenheit = celcius * 9/5 + 32;
printf("%d\t%d\n", celcius, farenheit);
celcius = celcius + step;
}
}
但是当我尝试使用float或double变量以获得更精确的结果时,使用绝对随机数:(终端中有代码和输出)
#include <stdio.h>
main()
{
float celcius, farenheit;
float lower, upper, step;
lower = -273.15;
upper = 0;
step = lower / -10; // Dividing lower temperature by given number
celcius = lower;
while (celcius <= upper) {
farenheit = celcius * 9/5 + 32;
printf("%d\t%d\n", celcius, farenheit);
celcius = celcius + step;
}
}
输出:
1610612736 1073741824
1073741824 1073741824
-1073741824 1073741824
1073741824 536870912
-1073741824 536870912
1073741824 0
-2147483648 0
-2147483648 -2147483648
536870912 -1610612736
-2147483648 0
那么,数字魔术背后发生了什么以及如何使它发挥作用?
答案 0 :(得分:1)
两个问题:首先,您正在执行整数除法,这将导致商被截断。在计算中乘以9./5。,而不是9/5。前者给出实际结果,而后者执行整数除法
您的第二个问题是使用%d作为格式说明符。您需要用于float
的%f。阅读printf
的手册页以获取更多详细信息。
答案 1 :(得分:0)
希望这可以为您提供帮助
#include <stdio.h>
int main(int argc,char **argv)
{
double celcius, farenheit;
double lower, upper, step;
lower = -273.15;
upper = 0;
step = lower / -10; // Dividing lower temperature by given number
celcius = lower;
while (celcius <= upper) {
farenheit = celcius * 9/5 + 32;
printf("%5.2f\t%5.2f\n", celcius, farenheit);
celcius = celcius + step;
}
return 0;
}