
- •Лабораторная работа №4 операторы
- •Арифметические операторы
- •Деление нацело
- •Типыданныхи операторы
- •Выражения
- •Приоритет операторов и порядок вычислений
- •Используемые алгоритмы обработки данных
- •Счетчики
- •Операторы инкремента
- •Аккумуляторы
- •Операторы присваивания
- •Присваивание начального значения
- •Проектирование программы
- •Остерегайтесь логических ошибок
- •Ищите образцы
- •Диагностические проблемы
Аккумуляторы
Аккумулятор также увеличивает значение переменной. Но, в отличие от счетчика, который всегда увеличивает значение переменной на одну и ту же величину, аккумулятор может иметь произвольный шаг (и способ) изменения при каждой новой операции. В общем виде синтаксис аккумулятора таков:
variable = variable + other_variable;
Аккумулятор получил такое название оттого, что он накапливает значение переменной. Посмотрите на следующий пример:
int total, number;
total = 0;
scanf("%d", &number);
total = total + number;
Допустим, что переменной number присвоено значение 10. После выполнения инструкции
total=total+number;
переменная total приобретает значение 10, так как компьютер выполнил операцию сложения, используя следующие значения:
total=0+10;
Теперь предположим, что снова происходит ввод данных с помощью функции scanf() и выполняется новая операция суммирования, но на этот раз переменной number присвоено значение 15:
scanf("%d", &number);
total = total + number;
теперь компьютер использует в вычислениях следующие значения:
total = 10 + 15;
Произошло накопление значений переменной number.
В Листинге 7приведен текст программы, в которой вводятся три значения и вычисляется их среднее арифметическое. Для расчета среднего арифметического пользуются простым математическим выражением:
average = (A + B + C) / 3
В программе мы использовали аккумулятор, чтобы подсчитать сумму трех чисел, и счетчик для определения количества введенных значений (чтобы продемонстрировать работу счетчика).
Листинг 7. Программа, использующая счетчик и аккумулятор для вычисления среднего арифметического трех чисел.
/*average1.c*/
main()
{
float number, total, count, average;
total = 0.0;
count = 0.0;
printf("Введите первое число: ");
scanf("%f", &number);
total += number;
++count;
printf("Введите второе число: ");
scanf("%f", &number);
total += number;
++count;
printf("Введите третье число: ");
scanf("%f", &number);
total += number;
++count;
average = total / count;
printf("Среднее арифметическое равно %f", average);
}
Операторы присваивания
Приводимые ниже операторы присваивания являются сокращенной записью различных типов аккумуляторов.
Оператор |
Пример |
Эквивалент |
+= |
total += amount |
total = total + amount |
–= |
total –= discount |
total = total – discount |
*= |
total *= tax_rate |
total = total * tax_rate |
/= |
total /= count |
total = total / count |
%= |
total %=count |
total = total % count |
Каждый из них выполняет операции, используя в качестве общего элемента переменную, имеющую присвоенное начальное значение. Чтобы понять, как действуют эти операторы, посмотрите на рис.11. Оператор как бы копирует переменную и арифметический символ левой части уравнения в правую часть. Инструкция
total *= rate;
соответствует инструкции
total = total * rate;
Рис.11.
Оператор присваивания
Присваивание начального значения
Очень важно, чтобы все счетчики и аккумуляторы имели присвоенное начальное значение. Вы помните, что оба алгоритма увеличивают (или уменьшают) текущее значение переменной на определенную величину. Если не присвоить начальное значение, то эта величина будет прибавлена к случайному содержимому области памяти, зарезервированной для переменной. Инициализация переменной очищает содержимое памяти, так же как нажатие клавиши Clear на калькуляторе.
В качестве примера обратимся к Листингу 7, содержащему программу расчета среднего арифметического значения трех чисел. Допустим, в области памяти, отведенной для переменной total, содержится случайное значение 1827. Если переменной не было присвоено начальное значение
total = 0;
то, когда мы вводим первое число 75, первый аккумулятор должен будет выполнить следующую математическую операцию:
total = 1827 + 75
Присваивание начального значения 0 дает уверенность в том, что математические расчеты будут выполнены правильно:
total = 0 + 75