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

Вопросы

  1. В чем смысл выражения «чистый вход— чистый выход»?

  2. Почему после ввода с использованием функции getchar() нет необ- ходимости нажимать клавишу Enter?

  1. Назовите два способа использования функции getchar().

  2. Что такое оператор получения адреса?

  3. Какие преимущества дает использование функции scanf()?

  4. Что такое преобразователи символов?

  5. Почему для ввода строки лучше использовать функцию gets(), а не

scanf()?

  1. В чем преимущества и недостатки форматированного ввода при по- мощи scanf()?

  2. Является ли необходимым присваивание всем переменным началь- ных значений?

  3. Какие трудности могут возникнуть при использовании функции

scanf() для ввода значения переменной типа char?

Упражнения

  1. Напишите программу, в которой вводится, а затем отображается на экране монитора в одной строке ваше имя и номер телефона.

  2. Напишите программу, в которой вводится число, а затем на экран выводится адрес области памяти, куда было записано это число.

  3. Напишите программу, в которой вводятся три числа, а затем эти числа отображаются на экране в порядке, обратном тому, в котором их вводили.

  4. Напишите программу, в которой используются функции getchar(), gets() и scanf().

  5. Объясните, почему следующая программа написана неправильно:

6. main()

7. {

  1. char initial;

  2. initial = gets();

  3. puts(initial);

}

Глава 6

ОПЕРАТОРЫ

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

В процессе обработки программа превращает данные, которые мы вводили в компьютер, в информацию, которую компьютер представляет нам. Различие между данными и информацией трудноуловимо, но очень существенно. «Данные»— это, так сказать, исходный материал, символы и числа, которые не могут быть использованы как конечный продукт. «Информация»— это конечный продукт, ради получения которого и была написана программа.

Превращение данных в информацию может осуществляться различными способами. Для чисел, например, обработка зачастую включает некоторые математические операции. Скажем, вам надо умножить стои- мость заказанных товаров на ставку налога, а затем добавить полученную сумму налога к сумме заказа. Эти две операции показаны на рис.6.1, они могут быть описаны как:

налог на продажи = стоимость заказа Ф ставка налога общая сумма заказа = стоимость заказа + сумма налога

Рис. 6.1. Процесс вычисления общей суммы заказа

Для того чтобы выполнить вычисления, превращающие данные в информацию, необходимы операторы. Оператором называется символ, который говорит компьютеру, как следует обрабатывать данные. В этой главе вы познакомитесь с арифметическими операторами, операторами приращения и операторами при- сваивания.

Арифметические операторы

При математических вычислениях используются следующие арифметические операторы: Оператор Функция оператора

+ сложение

– вычитание

    • умножение

/ деление

% получение остатка от деления нацело

Обратите внимание, что процедура умножения обозначается символом «звездочка» (а не символом «x»),

а процедура деления— символом «прямая косая черта» (а не обратная «\»).

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

накладных расходов с помощью арифметических операторов. В этом примере не имеет смысла присваи- вать переменной точное значение в виде литерала, например:

sales_tax = 4500;

напротив, величину накладных расходов требуется вычислить. При записи математических операций имя переменной всегда помещают слева от знака «равно», а арифметические операторы— справа:

sales_tax = amount * tax_rate; price = cost + shipping + insurance; per_unit = total / count;

Эти инструкции говорят компилятору, что следует выполнить три операции:

      • присвоить переменной sales_tax значение, полученное в результате умножения значения пере- менной amount на значение переменной tax_rate;

      • присвоить переменной price значение, полученное из суммы значений трех переменных: cost, shipping и insurance;

      • присвоить переменной per_unit значение, полученное в результате деления total на count.

Компьютер выполнит математические операции, указанные в правой части, а потом присвоит полученное значение переменной в левой части. Что касается правой части выражения, то она может содержать лю- бые комбинации переменных, констант и литералов, например:

sales_tax = amount * 0.06; price = 56.90 + shipping + 7.87; per_unit = 156.65 / 12.50;

Листинг 6.1 демонстрирует использование операторов в программе. В приведенном фрагменте необходи- мо ввести имя и адрес покупателя, а также стоимость его заказа. Затем программа рассчитывает стои- мость транспортировки (10процентов от суммы заказа) и налог на продажи (6 процентов от суммы зака- за). Наконец, весь список накладных расходов отображается на экране с помощью функций puts() и printf().

Листинг 6.1. Программа расчета и отображения накладной.

/*invoice.c*/

#define TAX_RATE 0.06

#define SHIPPING 0.10 main()

{

char name[15], address[20], city[15], state[3], zip[6];

float order, total, tax, ship; printf("Имя покупателя: "); gets(name);

printf("Адрес: "); gets(address); printf("Город: "); gets(city); printf("Штат: "); gets(state); printf("Индекс:"); gets(zip);

printf("Сумма заказа: "); scanf("%f", &order);

tax = order * TAX_RATE; ship = order * SHIPPING; total = order + tax + ship; puts("\n\n\n\n");

puts(" НАКЛАДНАЯ\n"); printf("%s\n%s\n%s, %s %s\n", name, adress, city, state, zip);

printf("\t\t\t\t%-10s\t%10.2f\n", "Заказ:", order); printf("\t\t\t\t%-10s\t%10.2f\n", "Налог:", tax); printf("\t\t\t\t%-10s\t%10.2f\n", "Транспортировка:", ship);

printf("\t\t\t\t\t\t_ \n); printf("\t\t\t\t%-10s\t%10.2f","Всего: ",total);

}

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

Оператор % используется для расчета остатка от деления нацело. Если вы используете оператор деления (/) для целочисленных данных, то результат деления тоже всегда будет целым числом. Например, при делении 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, то получите следующий результат: