Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си++ Занятие 3.doc
Скачиваний:
6
Добавлен:
12.11.2019
Размер:
118.78 Кб
Скачать

2.1 Операция присваивания

Операция присваивания обозначается символом "=", ее простейший вид L = r.

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

Примером адресного выражение является имя переменной. Примерами неадресного выражения могут быть выражения, например, a + b, а также константы, которые могут стоять только справа. Отметим, что в С/С++ возможна такая запись:

A = b = c = в = у+2.

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

Примеры потери результата:

int i;

char ch;

i=3.14;

ch = 777;

здесь i получает значение 3, так как теряется дробная часть числа 3,14, а значение 777 слишком велико, и потому не может быть размещено в char-переменной. Отметим, что максимальное число, которое можно записать в один байт – это 377.

Существует так называемая комбинированная операция присваивания вида: a оп= b, здесь "оп" является знаком одной из бинарных операций:

+ - * / % >> << & | ^ && ||

Выражение a оп= b эквивалентно выражению a = а оп b.

Примеры.

а += 2 означает а = а+2;

s / = a означает s = s / a.

выражение а += 2 выполняется быстрее, чем а = а + 2 и потому компактная запись предпочтительнее. Дело в том, что прежде чем приступить к вычислению, заданному операцией "+", необходимо вычислить адрес операнда а. В первом выражении адрес вычисляется один раз, а во втором – дважды. Подобная экономия на вычислении адресов операндов является характерной чертой языка С.

Следующий пример демонстрирует еще один прием компактной записи вычислений:

Выражение (а=b)+=с эквивалентно двум операторам:

a=b; a = a + c.

2.2 Бинарные арифметические операции

Бинарными арифметическими операциями являются:

+ сложение;

  • Вычитание;

* умножение;

/ деление;

% деление по модулю (остаток от деления).

Рассмотрим выражения, в которых используются разнотипные данные, именно в этом случае проявляются особенности вычисление при помощи компьютера. Как известно, данные (как операнды, так и результат) должны быть размещены в памяти компьютера, причем объем занимаемой памяти зависит от типа данных. Если при вычислении тип операндов отличается от типа результата, то это следует учитывать при распределении памяти (объявлении переменных).

Пример.

Результат выражения i*f преобразуется к типу double (к большему из двух типов), затем результат присваивается переменной g.

int i = 5;

double g, f = 0.2;

g = f*i;

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

int k=10, m=3, x;

x = k/m; // x=3;

int L=10;

double p=3, z;

z = L / p; // z =3,33333..

Пример. Операция а % b применяется только к целым операндам и дает остаток от деления а на b.

x = 10 % 3; // x=1

y = 2 % 3; // y = 2

z = 12 % 2; // z= 0

2.3 Операции увеличения (++) и уменьшения (--)

Во многих алгоритмах в цикле требуется наращивание (или уменьшение) значения переменных на единицу, такие переменные называют счетчиками. Назначение счетчиков различно и используются они настолько часто, что во многих языках программирования существует специальный оператор увеличения значения переменной на единицу, называемый инкрементом. Оператор var ++ выполняет то же действие, что и оператор var = var +1.

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

В языке допускается префиксная или постфиксная формы операций инкремента и декремента, и от того, какая форма используется, зависит результат выражения.

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

Пример.

#include <stdio.h>

int main()

{

int x=3, y=3;

printf("Значение префиксного выражения: %d\n", ++x);

printf("Значение постфиксного выражения: %d\n", y++);

printf("Значение x после приращения: %d\n", x);

printf("Значение у после приращения: %d\n", у);

return 0;

}

Результат работы программы:

Значение префиксного выражения: 4

Значение постфиксного выражения: 3

Значение x после приращения: 4

Значение у после приращения: 4

Пример.

int t=1, s=2, z, f;

z = (t++)*5; //z=5, t = 2

f = (++s) / 3; // s=3, f=1.

Вначале вычисляется t*5, а затем t++. Аналогично вначале вычисляется s++, а затем s/3.

Если операции увеличения и уменьшения используются как самостоятельные операторы, префиксная и постфиксная формы записи становятся эквивалентными.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]