如果这是一个愚蠢的问题,我想提前道歉,因为我只是一个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。我做错了什么?
您需要声明类型为float
或double
的变量。你总是得到0
,因为在这个表达式中-
fahr = (fahr-32) * (5/9);
整数除法中的5/9
是0
,整值是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