将负数除以C

时间:2018-11-12 02:58:36

标签: c integer output floating negative-number

嗨,我是编程方面的新手。我从《 C编程语言(第二版)》一书开始学习C,并停留在第一个示例中,在该示例中,我们练习编写一个简单的程序,该程序将包含摄氏度a的温度值从低到高打印在2列(选项卡)中。华氏温度。

我遇到问题是因为尝试为以下代码编辑这些代码:

  1. 摄氏是主要系统。
  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

那么,数字魔术背后发生了什么以及如何使它发挥作用?

2 个答案:

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