И в том и в другом случае инструкции, находящиеся под управлением
Большая часть вычислений выполняется в теле цикла. Температура по Фаренгейту переводится в температуру по Цельсию и присваивается переменной
celsius = 5 * (fahr-32) / 9;
Причина, по которой мы сначала умножаем на 5 и затем делим на 9, а не сразу умножаем на 5/9, связана с тем, что в Си, как и во многих других языках, деление целых сопровождается
Этот пример прибавил нам еще немного знаний о том, как работает функция
printf("%d\t%d\n", fahr, celsius);
печатает целое
В функции
Кстати,
Желая сконцентрировать ваше внимание на самом Си, мы не будем много говорить о вводе-выводе до главы 7. В частности, мы отложим разговор о форматном вводе. Если вам потребуется ввести числа, советуем прочитать в параграфе 7.4 то, что касается функции
Существуют еще две проблемы, связанные с программой преобразования температур. Одна из них (более простая) состоит в том, что выводимый результат выглядит несколько неряшливо, поскольку числа не выровнены по правой позиции колонок. Это легко исправить, добавив в каждый из спецификаторов формата %d указание о ширине поля; при этом программа будет печатать числа, прижимая их к правому краю указанных полей. Например, мы можем написать
printf("%3d%6d\n", fahr, celsius);
чтобы в каждой строке первое число печатать в поле из трех позиций, а второе - из шести. В результате будет напечатано:
0 -17
20 -6
40 4
60 15
80 26
100 37
Вторая, более серьезная проблема связана с тем, что мы пользуемся целочисленной арифметикой и поэтому не совсем точно вычисляем температуры по шкале Цельсия. Например, 0°F на самом деле (с точностью до десятой) равно -17.8°С, а не -17. Чтобы получить более точные значения температур, нам надо пользоваться не целочисленной арифметикой, а арифметикой с плавающей точкой. Это потребует некоторых изменений в программе.
#include ‹stdio.h›
/* печать таблицы температур по Фаренгейту и Цельсию для
fahr = 0, 20,…, 300; вариант с плавающей точкой */
main
{
float fahr, celsius;
int lower, upper, step;
lower = 0; /* нижняя граница таблицы температур */
upper = 300; /* верхняя граница */
step = 20; /* шаг */
fahr = lower;
while (fahr ‹= upper) {