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



如果这是一个愚蠢的问题,我想提前道歉,因为我只是一个C的初学者。本练习告诉您创建一个打印转换图表的程序华氏-摄氏度(尽管我是用另一种方式来做的)。我查找了解决方案(http://www.eng.uerj.br/~fariasol/straineas/LABPROG/C_language/Kernihan_and_Ritchie/solved-exers/ssolved-essers.html/krx115.html),我想知道我是否可以用不同的方式做同样的事情,而不明确地说"上"、"下"one_answers"步"。这就是我想到的:

 #include <stdio.h>
    int conv(int cel, int fahr);
main() {
    int c, f;
    f = 0;
    for (c = 0; c <= 100; c = c + 5) {
            printf("%dt%dn", c, conv(c, f));
    }
}


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

然而,这只是打印一列0到100和一列所有0。我做错了什么?

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

fahr = (fahr-32) * (5/9);

整数除法中的5/90,整值是0(由于与0相乘而)。

正如评论中所提到的,上面的表达式应该是-

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

根据计算fahrenheit 的公式

您已经用(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("TemptCenttFahrn");
    for(n=0; n<=200; n+=10)
        printf("%dt%dt%dn", 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

相关内容

最新更新