Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

Деление нацело

Оператор % используется для расчета остатка от деления нацело. Если вы используете оператор деления (/) для целочисленных данных, то результат деления тоже всегда будет целым числом. Например, при делении 12 на 5 (12/5) вы получите 2, а не 2.4. Дробная часть, равная в данном случае 0.4, при делении целых чисел отбрасывается.

Разумеется, нередко возникает необходимость узнать значение остатка от деления. Пока мы имеем дело с целыми числами, мы не можем использовать значение 0.4, так как это число относится к типу float. Мы же определили результат деления как целое. В этом случае получается, что число 12 состоит из двух чисел 5, а лишняя двойка просто игнорируется. Число 2 в данном случае является остатком от деления нацело, для получения которого и используется оператор %. Остаток от деления нацело также всегда является целым числом.

В качестве примера приведен Листинг 6.2. В этой программе подсчитывается количество банкнот достоинством в двадцать, десять, пять и один доллар, необходимых для уплаты определенной суммы. Наиболее существенным, на что следует обратить внимание в этом примере, является алгоритм, то есть способ использования операции деления нацело при выполнении задачи, решение которой в другом случае потребовало бы произведения более сложных расчетов. Как и все прочие алгоритмы, данный алгоритм выглядит очень простым, стоит только понять его основную идею.

Листинг 6.2. Программа, в которой используется оператор получения остатка от деления нацело.

/*change.c*/

main()

{

int amount, twenties, tens, fives, ones, r20, r10;

printf

("Введите необходимую сумму: ");

scanf("%d", &amount);

twenties = amount / 20;

r20 = amount % 20; /*r20 - остаток от деления на двадцать*/

tens = r20 / 10;

r10 = r20 % 10; /*r10 - остаток от деления на десять*/

fives = r10 / 5;

ones = r10 % 5;

putchar('\n');

printf("Для того чтобы дать %d \

долларов сдачи, используйте:", amount);

printf("%d банкнот(ы) достоинством 20 долларов", twenties);

printf("%d банкнот(ы) достоинством 10 долларов", tens);

printf("%d банкнот(ы) достоинством 5 долларов", fives);

printf("%d банкнот(ы) достоинством 1 доллар", ones);

}

Если вы ввели, например, значение 57, то получите следующий результат:

Для того чтобы дать 57 долларов сдачи, используйте:

2 банкнот(ы) достоинством 20 долларов

1 банкнот(ы) достоинством 10 долларов

1 банкнот(ы) достоинством 5 долларов

2 банкнот(ы) достоинством 1 доллар

Рис. 6.2 иллюстрирует работу этой программы. Количество двадцатидолларовых банкнот рассчитывается с помощью инструкции twenties = amount/20. Так как и переменная amount, и переменная twenties относятся к типу int, результат деления окажется целым числом. Он показывает, сколько раз число 20 содержится в значении переменной amount. Для компьютера результат — это просто некая величина, которую следует занести в память. Для нас же значение переменной twenties представляет значимую информацию, так как сообщает, сколько надо взять банкнот достоинством 20 долларов, чтобы дать сдачу.

Рис. 6.2. Как работает программа, использующаяоператор остатка от деления нацело

Теперь, когда мы знаем, что нужны две банкноты по 20 долларов, встает вопрос: как определить нужное количество десятидолларовых купюр? Вспомните, как поступают в таких случаях в реальной жизни. После того как мы отняли от общей суммы два раза по 20 долларов, надо взять сумму остатка и посмотреть, сколько банкнот по 10 долларов могло бы в нее войти. Программа поступает аналогичным образом. Для того чтобы определить размер остатка, используется оператор %. В инструкции r20 = amount % 20 переменной r20 присваивается значение, полученное в остатке после деления переменной amount на 20. Для нас это число означает сумму, оставшуюся после того, как из общей суммы вычли столько раз по 20, сколько это было возможно. Два раза по 20 долларов составляет сумму 40 долларов, вычитаем ее из общей суммы и получаем 17 долларов. Значение 17 присваивается переменной tens.

Та же процедура, которая описана для переменной twenties, повторяется для переменных tens и fives. Значение переменной ones равно остатку после деления на 5.