Дробный результат
Если нужен дробный результат, хотя бы одно из двух чисел должно быть дробным:
printf("%f\n", 7 / 2.0);
printf("%.1f\n", 7.0 / 2);Выведется:
3.500000
3.5Результат имеет тип double, поэтому его выводят с помощью %f или %.1f. С %d это была бы ошибка компиляции, как вы уже знаете.
Типичная ошибка — думать, что достаточно сохранить результат в double:
double half = 7 / 2;
printf("%f\n", half);Выведется:
3.000000C сначала вычисляет 7 / 2. Оба числа целые, поэтому результат — 3, и только потом эта тройка сохраняется в half. Тип переменной слева от = не влияет на то, как вычисляется правая часть.
То же происходит и с переменными. Игрок набрал 17 очков за 4 игры. Каков средний результат?
int points = 17;
int games = 4;
double average = points / games;
printf("Среднее: %.2f\n", average);Выведется:
Среднее: 4.00Это неверно: правильный ответ — 4,25. К переменной нельзя дописать .0, но можно преобразовать её значение в double. Для этого перед ней в скобках пишут тип:
int points = 17;
int games = 4;
double average = (double)points / games;
printf("Среднее: %.2f\n", average);Выведется:
Среднее: 4.25(double)points берёт значение points как дробное число, 17.0. А дробное число, делённое на целое, даёт дробный результат. Сама переменная points остаётся int. Такое преобразование называется приведением типа (cast).
Следите, куда вы его ставите. (double)(points / games) не поможет: скобки заставляют C сначала разделить, и в 4.0 превращается только результат, 4.
Задание
- 1
Друзья делят счёт за пиццу в 50 EUR поровну. Запустите программу: она выводит
12.00, так что 2 EUR из счёта потерялись. Исправьте вычислениеeachс помощью(double), чтобы программа выводилаКаждый платит: 12.50 EUR. - 2
Пиццы были разрезаны на 18 кусков. На следующей строке выведите цену одного куска. На этот раз запишите 18 прямо в вычисление как дробное число,
18.0:Один кусок: 2.78 EUR