Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике1.doc
Скачиваний:
61
Добавлен:
02.05.2014
Размер:
1.3 Mб
Скачать

Аккумуляторы

Аккумулятор также увеличивает значение переменной. Но, в отличие от счетчика, который всегда увеличивает значение переменной на одну и ту же величину, аккумулятор может иметь произвольный шаг (и способ) изменения при каждой новой операции. В общем виде синтаксис аккумулятора таков:

variable = variable + other_variable;

Аккумулятор получил такое название оттого, что он накапливает значение переменной.

Посмотрите на следующий пример:

inttotal,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.

Операторы присваивания

Приводимые ниже операторы присваивания являются сокращенной записью различных типов аккумуляторов.

Оператор

Пример

Эквивалент

+=

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

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

Очень важно, чтобы все счетчики и аккумуляторы имели присвоенное начальное значение. Вы помните, что оба алгоритма увеличивают (или уменьшают) текущее значение переменной на определенную величину. Если не присвоить начальное значение, то эта величина будет прибавлена к случайному содержимому области памяти, зарезервированной для переменной. Инициализация переменной очищает содержимое памяти, так же как нажатие клавиши Clear на калькуляторе.

Преобразования типов данных

Разнообразие типов данных в языке C++ дает программисту возможность выбирать вариант, соответствующий конкретной потребности. Однако такое разнообразие, с дру­гой стороны, усложняет задачу компьютера. Например, сложение двух чисел типа short может выполняться с помощью иных машинных команд, чем сложение двух чисел типа long.

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

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

main()

{

inttotal;

floatcost,shipping;

cost = 56.09;

shipping = 4.98;

total = cost + shipping;

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

сумму %d долларов", total);

}

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

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

При выполнении операций производится автоматическое преобразование типов, чтобы привести операнды выражений к общему типу или чтобы расширить короткие величины до размера целых величин, используемых в машинных командах. Выполнение преобразования зависит от специфики операций и от типа операнда или операндов.

Рассмотрим общие арифметические преобразования.

1. Операнды типа float преобразуются к типу double.

2. Если один операнд long double, то второй преобразуется к этому же типу.

3. Если один операнд double, то второй также преобразуется к типу double.

4. Любые операнды типа char и short преобразуются к типу int.

5. Любые операнды unsigned char или unsigned short преобразуются к типу unsigned int.

6. Если один операнд типа unsigned long, то второй преобразуется к типу unsigned long.

7. Если один операнд типа long, то второй преобразуется к типу long.

8. Если один операнд типа unsigned int, то второй операнд преобразуется к этому же типу.

Таким образом, можно отметить, что при вычислении выражений операнды преобразуются к типу того операнда, который имеет наибольший размер.

Проблемы, которые могут возникать при преобразовании типов данных:

Преобразование

Возможные проблемы

Данные с плавающей точкой большей размерности в данные с плавающей точкой меньшей размерности

Потеря точности (значащих цифр). Величина преобразуемых данных может превышать допустимый диапазон целевого типа, тогда результат будет неопределенным

Данные с плавающей точкой

в целочисленные данные

Потеря дробной части. Величина преобразуемых данных может превышать допустимый диапазон целевого типа, тогда результат будет

неопределенным

Целочисленные данные большей размерности в целочисленные данные меньшей размерности, например, тип long в тип short

Исходное значение может не укладываться в

допустимый диапазон целевого типа. Обычно копируются только младшие разряды

Функции языка C++

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