Деление целых чисел
В делении в C есть подвох. Попробуйте угадать, что выведет эта инструкция:
printf("%d\n", 7 / 2);Выведется:
3Не 3,5, а 3. Если разделить два целых числа, результат тоже будет целым: C отбрасывает дробную часть. Он не округляет, а просто отрезает её, поэтому 19 / 10 — это 1, а 2 / 3 — это 0. Такое деление называется целочисленным.
Оно работает как деление с остатком из начальной школы: сколько раз одно число помещается в другом. Остаток даёт оператор % (программисты называют его modulo, «по модулю»):
printf("%d\n", 7 / 2);
printf("%d\n", 7 % 2);
printf("%d\n", 10 % 5);Выведется:
3
1
0Двойка помещается в семёрку три раза (3 × 2 = 6), и остаётся 1. Когда деление выполняется нацело, остаток равен 0. Так можно отличить чётные числа от нечётных: чётное число при делении на два даёт остаток 0, нечётное — 1.
Не путайте две роли знака %. Внутри форматной строки он начинает спецификатор формата, например %d. Вне кавычек, между двумя числами, он считает остаток. В printf("%d\n", 7 % 2); первый % — часть %d, а второй считает.
Целочисленное деление удобно, например, для времени. 135 минут — это 2 часа (135 / 60) и 15 минут (135 % 60):
int minutes = 135;
printf("%d ч %d мин\n", minutes / 60, minutes % 60);Выведется:
2 ч 15 мин% работает только с целыми числами. С double, например 7.5 % 2, программа не компилируется, и компилятор сообщает invalid operands to binary expression ('double' and 'int'). Операнды — это значения по обе стороны оператора, а double для % не подходит.
Задание
- 1
Четыре друга заказали пиццы, разрезанные всего на 18 кусков. Сколько целых кусков достанется каждому? Посчитайте по переменным и выведите:
Кусков каждому: 4 - 2
Сколько кусков останется? Посчитайте с помощью
%и выведите на следующей строке:Кусков осталось: 2 - 3
Пиццерия говорит, что доставка займёт 75 минут. Ниже создайте переменную
deliveryтипаintсо значением75и выведите это время в часах и минутах, посчитанных с помощью/и%:Доставка через 1 ч 15 мин