Я сам только начал изучать С.
В качестве учебника выбрал тоже Керниган-Ритчи (Мне нравится

)!
Вот как раз этот пример разбирается на
http://www.intuit.ru/department/pl/cpl/1/2.html
По поводу деления 5/9 и 5.0/9.0 там говорится:
причина использования выражения 5.0/9.0 вместо выглядящего проще 5/9 заключается в том, что в языке "C", как и во многих других языках, при делении целых происходит усечение, состоящее в отбрасывании дробной части результата. Таким образом, результат операции 5/9 равен нулю, и, конечно, в этом случае все температуры оказались бы равными нулю. Десятичная точка в константе указывает, что она имеет тип с плавающей точкой, так что, как мы и хотели, 5.0/9.0 равно 0.5555....
Мы также писали 32.0 вместо 32, несмотря на то, что так как переменная fahr имеет тип float, целое 32 автоматически бы преобразовалось к типу float (в 32.0) перед вычитанием. С точки зрения стиля разумно писать плавающие константы с явной десятичной точкой даже тогда, когда они имеют целые значения; это подчеркивает их плавающую природу для просматривающего программу и обеспечивает то, что компилятор будет смотреть на вещи так же, как и Вы.
Код примера:
Код: Выделить всё
/* print fahrenheit-celsius table
for f = 0, 20, ..., 300 */
main()
{
int lower, upper, step;
float fahr, celsius;
lower = 0; /* lower limit of temperature
table */
upper =300; /* upper limit */
step = 20; /* step size */
fahr = lower;
while (fahr <= upper) {
celsius = (5.0/9.0) * (fahr -32.0);
printf("%4.0f %6.1f\n", fahr, celsius);
fahr = fahr + step;
}
}
Я делал - у меня все получалось.
Я думаю, что ошибка у murder'а здесь:
А нужно:
Код: Выделить всё
int lower, upper, step;
float fahr, celsius;
Ведь в
fahr и celsius выводится как вещественное,
а в
celsius может быть только вещественным.
Если я не прав, то буду признателен, если мне объяснят в чем .