C编程语言(第二版):练习1-15(摄氏到华氏转换) - 我的解决方案出了什么问题?

时间:2015-12-27 15:54:16

标签: c

如果这是一个愚蠢的问题,我想提前道歉,因为我只是一个C的初学者。 此练习告诉您创建一个打印转换图表的程序 华氏度 - 摄氏度(虽然我正在做相反的方式)使用一个函数。我查找了解决方案(http://www.eng.uerj.br/~fariasol/disciplinas/LABPROG/C_language/Kernighan_and_Ritchie/solved-exercises/solved-exercises.html/krx115.html),并想知道我是否可以以不同的方式做同样的事情/没有明确说明“上限”,“下限”和“步骤”。这就是我想出的:

 #include <stdio.h>

    int conv(int cel, int fahr);

main() {
    int c, f;
    f = 0;
    for (c = 0; c <= 100; c = c + 5) {
            printf("%d\t%d\n", c, conv(c, f));
    }
}





int conv(int cel, int fahr)
{
        fahr = (fahr-32) * (5/9);
        return fahr;
}

但是,这只会打印一个0到100的列和一个全0的列。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您需要声明类型为floatdouble的变量。你得到0总是因为在这个表达式中 -

fahr = (fahr-32) * (5/9);
整数除法中的

5/90,整数值为0,因为与 0相乘)。

另外在评论中提到,上面的表达应该是 -

 far=cel*(9/5)+32                   // convert  Celsius to fahrenheit

根据公式计算华氏度

答案 1 :(得分:1)

您已使用(5/9)进行整数除法,其分数为0。还不清楚你要转换的方向,所以这个例子转换两种方式并打印一个表。

#include <stdio.h>

int convF2C(int fahr)
{
    return (fahr - 32) * 5 / 9;                 // multiplies before division
}

int convC2F(int cent)
{
    return 32 + cent * 9 / 5;                   // multiplies before division
}

int main(void)
{
    int n;
    printf("Temp\tCent\tFahr\n");
    for(n=0; n<=200; n+=10)
        printf("%d\t%d\t%d\n", n, convF2C(n), convC2F(n));
    return 0;
}

节目输出:

Temp    Cent    Fahr
0       -17     32
10      -12     50
20      -6      68
30      -1      86
40      4       104
50      10      122
60      15      140
70      21      158
80      26      176
90      32      194
100     37      212
110     43      230
120     48      248
130     54      266
140     60      284
150     65      302
160     71      320
170     76      338
180     82      356
190     87      374
200     93      392