Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Топ:
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Дисциплины:
2017-09-28 | 269 |
5.00
из
|
Заказать работу |
|
|
Некоторые часто используемые алгоритмы обработки данных содержат арифметические операторы. Многие из них применяются настолько часто, что программисты даже не думают о них как об алгоритмах. Два наиболее важных из них называются «счетчиком» и «аккумулятором».
Счетчики
Счетчик — это переменная, которая увеличивает свое значение на единицу каждый раз, когда происходит определенное событие. Алгоритм счетчика таков:
variable = variable + 1Учитель математики скажет вам, что эта формула бессмысленна, так как соответствующее уравнение не имеет решений, но в программировании на компьютере такая инструкция является вполне законной.
Рис. 6.9. Алгоритм счетчика
Компьютер сначала вычислит значение в правой части, а потом присвоит полученное значение переменной в левой части (рис.6.9). Таким образом, одна и та же переменная никогда не будет иметь два значения одновременно. С точки зрения компьютера, смысл выражения можно передать так:
Новое значение переменной равно старому значению плюс 1Давайте проследим за работой алгоритма счетчика, так, как она показана на рис.6.10. У нас есть переменная count, которой присвоено начальное значение, равное нулю:
int count;count=0;Теперь вступает в действие алгоритм
count = count + 1;
Рис. 6.10. Выполнение алгоритма счетчика
Компьютер выполняет эту инструкцию так:
count = 0 + 1К начальному значению переменной count, которое равно 0, добавлен литерал, имеющий значение 1. В результате вычислений получено значение 1, которое теперь присваивается переменной count. Значение переменной изменяется с 0 на1. Затем та же процедура повторяется снова:
count = count + 1;
Компьютер выполняет эту операцию как
count = 1 + 1К текущему значению переменной count, равному 1, прибавляется литерал со значением 1. В результате они дают 2, и это новое значение присваивается переменной. С каждым новым выполнением этой операции, значение переменной count возрастает на единицу (инкремент).
|
Разумеется, можно присвоить переменной любое начальное значение и увеличивать его на любое отличное от единицы число. Если присвоить переменной count начальное значение, равное 1, при выполнении инструкции
count = count + 2;значение переменной всегда будет нечетным числом: 1, 3, 5, 7 и так далее. Используя переменную count, можно считать пятерками, count = count + 5, или десятками, count = count + 10, или как угодно еще.
Чтобы считать в сторону уменьшения, достаточно слегка изменить алгоритм:
variable = variable - 1Теперь при каждом выполнении операции значение переменной будет уменьшаться на единицу (декремент).
Операторы инкремента
Счетчики используют настолько часто, что в языке Си существуют специальные операторы инкремента и декремента переменной. Оператор ++variable увеличивает значение переменной на единицу еще до выполнения соответствующей инструкции. Оператор выполняет то же действие, что и инструкция
variable = variable + 1;В качестве примера действия оператора инкремента, рассмотрим следующую программу:
/*count.c*/main(){int count = 0;printf("Первое значение переменной \ count равно %d", count);printf("Второе значение переменной \ count равно %d", ++count);printf("Последним значением переменной \ count является %d", count);}Результат работы программы отображается в виде сообщений:
Первое значение переменной count равно 0Второе значение переменной count равно 1Последним значением переменной count является 1Перед выполнением второй функции printf() компилятор увеличивает значение переменной count на 1. Тот же эффект был бы достигнут и при использовании инструкции
count = count + 1;printf("Второе значение переменной count равно %d\n", count);Использование оператора инкремента позволяет увеличить значение переменной без введения в текст программы отдельной инструкции присваивания.
|
Необходимо помнить, что оператор инкремента реально изменяет значение переменной. Проверьте, понимаете ли вы разницу между оператором инкремента ++count и выражением, приведенным в следующей строке:
printf("Второе значение переменной count равно %d\n", count+1);Выражение count+1 не изменяет значения, присвоенного переменной count. В результате выполнения этой инструкции значение переменной, увеличенное на единицу, только отображается на экране, но не заносится в память. Пример программы, в которой используются выражения вместо операторов инкремента, приведен в Листинге6.6.
Листинг 6.6. Использование выражений вместо операторов инкремента.
main(){int count = 0;printf("Первое значение переменной \ count равно %d", count);printf("Второе значение переменной \ count равно %d", count+1);printf("Последним значением переменной \ count является %d", count);}В результате работы программы мы увидим следующие сообщения:
Первое значение переменной count равно 0Второе значение переменной count равно 1Последним значением переменной count является 0Значение выражения count+1 представлено на экране как 1, но полученный результат не был внесен в соответствующую область памяти. Поэтому третья функция printf() вывела на экран монитора исходное значение переменной, равное 0.
Оператор инкремента можно использовать так же, как и выражение, значение которого будет присвоено переменной, стоящей в левой части инструкции присваивания. Например, следующая инструкция увеличивает значение переменной count, а затем присваивает полученное значение переменной number:
number = ++count;те же операции можно было выполнить и так:
count = count + 1;number = count;Оператор ++ можно использовать с именем переменной как инструкцию:
++number;Если же знаки ++ помещены справа от имени переменной,
variable++;то приращение значения переменной произойдет после завершения соответствующей инструкции. Посмотрите на слегка модифицированную программу из Листинга6.6:
main() { int count = 0; printf("Первое значение переменной \ count равно %d", count); printf("Второе значение переменной \ count равно %d", count++); printf("Последним значением переменной \ count является %d", count); }Оператор ++ увеличит значение переменной count после выполнения второй инструкции, использующей функцию printf(). Вторая функция printf() отобразит на экране исходное значение переменой, и сообщения, выведенные на экран, будут выглядеть так:
|
Во время выполнения первой и второй функций printf(), значение переменной равно 0 и увеличивается на 1 только перед выполнением третьей функции printf().
Используя оператор инкремента, можно сохранить начальное значение переменной в другой переменной и одновременно увеличить его, как показано в программе:
main() { int number, storage; puts("Введите значение числа:"); scanf("%d", &number); storage = number++; printf("Начальное значение числа: %d\n", storage); printf("Новое значение числа: %d", number); }В инструкции
storage = number++;мы, во-первых, присваиваем значение number переменной storage, а во-вторых, увеличиваем переменную number на единицу.
Оператор декремента работает аналогичным образом, но уменьшает значение переменной на единицу. Синтаксис использования оператора таков:
--variableуменьшает значение переменной на 1 до выполнения инструкции
variable--уменьшает значение переменной на 1 после выполнения инструкции
Аккумуляторы
Аккумулятор также увеличивает значение переменной. Но, в отличие от счетчика, который всегда увеличивает значение переменной на одну и ту же величину, аккумулятор может иметь произвольный шаг (и способ) изменения при каждой новой операции. В общем виде синтаксис аккумулятора таков:
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.
|
В Листинге 6.7 приведен текст программы, в которой вводятся три значения и вычисляется их среднее арифметическое. Для расчета среднего арифметического пользуются простым математическим выражением:
average = (A + B + C) / 3В программе мы использовали аккумулятор, чтобы подсчитать сумму трех чисел, и счетчик для определения количества введенных значений (чтобы продемонстрировать работу счетчика). В главе 9 будет показан более эффективный способ использования этих алгоритмов.
Листинг 6.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 |
Каждый из них выполняет операции, используя в качестве общего элемента переменную, имеющую присвоенное начальное значение. Чтобы понять, как действуют эти операторы, посмотрите на рис.6.11. Оператор как бы копирует переменную и арифметический символ левой части уравнения в правую часть. Инструкция
total *= rate;соответствует инструкции
total = total * rate;
Рис. 6.11. Оператор присваивания
|
|
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!