Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Для того чтобы дать 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.

Типы данных и операторы

Как правило, при выполнении математических расчетов по обе стороны от знака равенства используют данные одного типа. Например, если складывают два числа типа float, тип переменной, которой присваи- вают результат, тоже должен быть определен как float. Это показано в следующем примере:

main()

{

float cost, shipping, total; cost = 56.09;

shipping = 4.98;

total = cost + shipping; printf("Общая стоимость составляет сумму %.2f \ долларов", total);

}

Результат работы программы, представленный на экране монитора, выглядит так: Общая стоимость составляет сумму 61.07 долларов

Можно использовать и данные разных типов в правой и левой частях выражения. Отображаемое на экра- не значение будет определяться в зависимости от типа переменной в левой части выражения. Для приме- ра приведен слегка измененный вариант той же программы:

main()

{

int total;

float cost, shipping; cost = 56.09;

shipping = 4.98;

total = cost + shipping; printf("Общая стоимость составляет сумму %d долларов", total);

}

В операции сложения участвуют две переменные типа float (cost и shipping), но полученный результат присваивается целочисленной переменной total. Если сложить эти числа на калькуляторе, то в результате получим 61.07, но так как переменная total— целочисленная, то и результат будет преобразован в целое число. Использование указателя формата %d задает отображение на экране целого числа 61.

Рис. 6.3. Математические операции выполняются до того, как данные преобразуются к заданному типу переменной

Обратите внимание, вначале выполняется математическое действие, а затем происходит присваивание значения (рис.6.3). Если бы заданные значения преобразовывались в целые числа до их сложения, то результат оказался бы равен 60 (56+4).

Можно складывать два целых числа, определив сумму как float:

main()

{

int cost, shipping; float total;

cost = 56;

shipping = 4;

total = cost + shipping;

printf("Общая стоимость составляет сумму %.2f \

долларов", total);

}

В этом случае, в соответствии с типом переменной total и указателем формата %f, результат сложения будет представлен числом с плавающей точкой. Но вследствие того, что оба слагаемых являлись целыми числами, в десятичной части будут проставлены нули— 60.00.

Данные float и int можно объединять и в правой части уравнения, причем в случае сложения и вычитания полученные результаты будут отображаться в соответствии с заданным типом переменной в левой части. Посмотрите на следующую программу:

main()

{

int shipping; float total, cost; cost = 56.09;

shipping = 4;

total = cost + shipping;

printf("Общая стоимость составляет сумму \

%.2f долларов", total);

}

Здесь выполняется сложение двух переменных типа int и float, с последующим отображением полученного результата в виде значения типа foat (60.09).

Аналогичные правила соблюдаются и при выполнении деления. Но имейте в виду: если вы хотите, чтобы переменная, содержащая результат деления и определенная как float, имела значимые цифры в десятич- ной части, необходимо, чтобы хотя бы у одного из участвующих в делении чисел (литералов) также име- лась дробная часть. На рис.6.4 продемонстрировано, как одно и то же действие выполняется трижды. Ка- ждый раз результат деления определен как тип float. Однако в первом случае ни одно из чисел не имеет знаков после точки, так что при отображении результата в десятичной части стоят нули.

Рис. 6.4. Деление литералов