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