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

1) Элементы языка С++

Алфавит. В алфавит языка С++ входят:

  • латинские буквы: от а до z (строчные) и от А до Z (прописные);

  • десятичные цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;

  • специальные символы: " { } , | [ ] ()+-/% \ ;': ?< = >_ ! & # * ~ ^ .

К специальным символам относится также пробел.

В комментариях, строках и символьных константах могут использоваться и другие знаки (например, русские буквы).

Из символов алфавита формируются ЛЕКСЕМЫ — единицы текста программы, которые при компиляции воспринимаются, как единое целое и не могут быть разделены на более мелкие элементы. К лексемам относятся идентификаторы, служебные слова, константы, знаки операций, разделители.

Идентификаторы. Последовательность латинских букв, цифр, символов подчеркивания (_), начинающаяся с буквы или символа подчеркивания, является идентификатором. Например:

В12 rus hard_RAM_disk MAX ris__32

В отличие от Паскаля в Си/Си++ различаются прописные и строчные буквы. Это значит, что, например, flag, flag, Flag, FlAg — разные идентификаторы.

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

asm

else

operator

template

auto

enum

private

this

break

extern

protected

throw

case

float

public

try

catch

for

register

typedef

char

friend

return

typeid

class

goto

short

union

const

if

signed

unsigned

continue

inline

sizeof

virtual

default

int

static

void

delete

long

struct

volatile

do

new

switch

while

double

2) Типы данных в С++ и их объявление. Модификаторы.

Типы данных

В Си/Си++ имеется четыре базовых арифметических (числовых) типа данных. Из них два целочисленных — char, int — и два плавающих (вещественных) — float и double. Кроме того, в программах можно использовать некоторые модификации этих типов, описываемых с помощью служебных слов — модификаторов. Существуют два модификатора размера — short (короткий) и long (длинный) — и два модификатора знаков — signed (знаковый) и unsigned (беззнаковый). Знаковые модификаторы применяются только к целым типам.

Анализируя данные таблицы, можно сделать следующие выводы:

  • если не указан базовый тип, то по умолчанию подразумевается int;

  • если не указан модификатор знаков, то по умолчанию подразумевается signed;

  • с базовым типом float модификаторы не употребляются;

  • модификатор short применим только к базовому типу int.

В качестве логических величин в Си/Си++ выступают целые числа. Интерпретация их значений в логические величины происходит по правилу: равно нулю — ложь (в Паскале — false), не равно нулю – истина (в Паскале — true).

Тип данных

Размер (байт)

Диапазон значений

char

1

-128...+127

int

2

-65536…+65535

unsigned char

1

0...255

unsigned

int

2

0…131070

short int

2

-32768…32767

unsigned short int

2

0...65535

long int

4

-2147483648 ...2147483647

unsigned long int

4

0...4294967295

float

4

±(3.4Е-38...3.4Е+38)

double

8

±(1.7Е-308...1.7Е+308)

long double

10

+(3.4Е-4932...1.1Е+4932)

3) Описание переменных в С++. Описание констант в С++. Пример.

Описание переменных в программах на Си/Си++ имеет вид:

имя_типа список_переменных;

Примеры описаний:

char symbol,ее;

unsigned char code;

int number,row;

unsigned long long_number;

float x,X,cc3;

double e,b4;

long double max_num;

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

тип имя_переменной = начальное_значение

Например:

float pi=3.14159,с=1.23; unsigned int year=2000;

Константы. Запись целых констант. Целые десятичные числа, начинающиеся не с нуля, например: 4, 356, —128.

Целые восьмеричные числа, запись которых начинается с нуля, например: 016, 077.

Целые шестнадцатеричные числа, запись которых начинается с символов Ох, например: OxlA, 0x253, OxFFFF.

Тип константы компилятор определяет по следующим правилам: если значение константы лежит в диапазоне типа int то она получает тип int; в противном случае проверяется, лежит ли константа в диапазоне типа unsigned int, в случае положительного ответа она получает этот тип; если не подходит и он, то пробуется тип long и, наконец, unsigned long: Если значение числа не укладывается в диапазон типа unsigned long, то возникает ошибка компиляции.

Диапазон шестнадцатеричных констант

Диапазон восьмеричных констант

Тип

0x0-0x7FFF

0-077777

Int

0X8000-0XFFFF

0100000-0177777

Unsigned int

0X10000-0X7FFFFFFF

0200000-017777777777

Long

0X80000000-0XFFFFFFFF

020000000000-037777777777

Unsigned long

Запись вещественных констант. Если в записи числовой константы присутствует десятичная точка (2.5) или экспоненциальное расширение (1Е-8), то компилятор рассматривает ее как вещественное число и ставит ей в соответствие тип double. Примеры вещественных констант: 44. 3.14159 44Е0 1.5Е-4.

использование суффиксов. Программист может явно задать тип константы, используя для этого суффиксы. Существуют три вида суффиксов: F (f) - float; U(u) —unsigned; L(l) — long (для целых и вещественных констант). Кроме того, допускается совместное использование суффиксов l и L в вариантах UL или LU

Примеры:

3.14159F — константа типа float, под которую выделяется 4 байта памяти;

3.14L — константа типа long double, занимает 10 байт;

50000U — константа типа unsigned int, занимает 2 байта памяти (вместо четырех без суффикса);

0LU — константа типа unsigned long, занимает 4 байта;

24242424UL — константа типа unsigned long, занимает 4 байта.

Запись символьных и строковых констант. Символьные константы заключаются в апострофы. Например:'А','а','5',' + '. Строковые константы, представляющие собой символьные последовательности, заключаются в двойные кавычки. Например: "result", "введите исходные данные".

Особую разновидность символьных констант представляют так называемые управляющие символы. Их назначение — управление выводом на экран. Как известно, такие символы расположены в начальной части кодовой таблицы ASCII (коды от 0 до 31) и не имеют графического представления. В программе на Си они изображаются парой символов, первый из которых ' \ '. Вот некоторые из управляющих символов:

' \n' — переход на новую строку;

' \t' — горизонтальная табуляция;

' \а' — подача звукового сигнала;

' \b' – возврат на шаг (на один символ назад)

' \v' – вертикальная табуляция

' \r' – возврат курсора к началу новой строки

' \f' – перевод (прогон) страницы

' \ddd' – символ набора кодов ПВЭМ в восьмеричном представлении

' \xddd' – символ набора кодов ПВЭМ в шестнадцатеричном представлении

Управляющие символьные последовательности являются частным случаем эскейп-последовательностей (ESC-sequence), с помощью которых можно задать символьную константу указанием ее кода. Код символа можно указать в восьмеричном или в шестнадцатеричном представлении. Формат восьмеричного представления:' \ddd'. Здесь ddd - восьмеричная цифра (от 0 до 7). Формат шестнадцатеричного представления:' \xhh' (или ' \Xhh'), где h — шестнадцатеричная цифра (от 0 до F). Например, константа, соответствующая заглавной латинской букве А, может быть представлена тремя способами

'А', ' \101 ', '\х41' .

Именованные константы (константные переменные). Как и в Паскале, в программе на Си/Си++ могут использоваться именованные константы. Употребляемое для их определения служебное слово const принято называть квалификатором доступа. Квалификатор const указывает на то, что данная величина не может изменяться в течение всего времени работы программы. В частности, она не может располагаться в левой части оператора присваивания. Примеры описания константных переменных:

const float pi=3.14159; const int iMIN=l, iMAX=1000;

Определение констант на стадии препроцессорной обработки программы. Еще одной возможностью ввести именованную константу является использование препроцессорной директивы #define в следующем формате:

#define <имя константы> <значение константы> Например:

#define iMIN I #define iMAX 1000

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

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

X=iMAX-iMIN; то в результате препроцессорной обработки он примет вид:

Х=1000-1;

При этом идентификаторы iMAX и iMIN не требуют описания внутри программы.

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

enum {A,B,C,D};

В результате имени А будет сопоставлена константа 0, имени В — константа 1,С — 2, D — 3. По умолчанию значение первой константы равно нулю.

Для любой константы можно явно указать значение. Например:

enum {A=10,B,C,D};

к результате будут установлены следующие соответствия: А=10, В=11, C=12, D=13.

Возможен и такой вариант определения перечисления:

enum {A=10,B=20,C=35,D=100};если перечисляемому типу дать имя, то его можно использовать при писании переменных. Например:

enum metal {Fe,Co,Na,Cu,Zn};

metal Metl,Met2; Здесь идентификатор metal становится именем типа (определенным пользователем). После такого описания в программе возможны следующие операторы:Metl=Na; Met2=Zn;

4) Управляющие символы в С++. Запись символьных и строковых констант. Пример.

Особую разновидность символьных констант представляют так называемые управляющие символы. Их назначение — управление выводом на экран. Как известно, такие символы расположены в начальной части кодовой таблицы ASCII (коды от 0 до 31) и не имеют графического представления. В программе на Си они изображаются парой символов, первый из которых ' \ '. Вот некоторые из управляющих символов:

' \n' — переход на новую строку;

' \t' — горизонтальная табуляция;

' \а' — подача звукового сигнала;

' \b' – возврат на шаг (на один символ назад)

' \v' – вертикальная табуляция

' \r' – возврат курсора к началу новой строки

' \f' – перевод (прогон) страницы

' \ddd' – символ набора кодов ПВЭМ в восьмеричном представлении

' \xddd' – символ набора кодов ПВЭМ в шестнадцатеричном представлении

Управляющие символьные последовательности являются частным случаем эскейп-последовательностей (ESC-sequence), с помощью которых можно задать символьную константу указанием ее кода. Код символа можно указать в восьмеричном или в шестнадцатеричном представлении. Формат восьмеричного представления:' \ddd'. Здесь ddd - восьмеричная цифра (от 0 до 7). Формат шестнадцатеричного представления:' \xhh' (или ' \Xhh'), где h — шестнадцатеричная цифра (от 0 до F). Например, константа, соответствующая заглавной латинской букве А, может быть представлена тремя способами

'А', ' \101 ', '\х41' .

Запись символьных и строковых констант. Символьные константы заключаются в апострофы. Например:'А','а','5',' + '. Строковые константы, представляющие собой символьные последовательности, заключаются в двойные кавычки. Например: "result", "введите исходные данные".

5) Операции в С++. Приоритеты операций и порядок вычислений в С++. Пример.

+ сложение, - вычитание, * умножение, / деление (аналог div), % деление по модулю (аналог mod), ++ -увеличение на единицу(инкремент), -- уменьшение на единицу(декремент), == равно, != не равно, ! не , && логическое умножение(И конъюнкция), & поразрядная конъюнкция, || логическое сложение (ИЛИ дизъюнкция), | поразрядная дизъюнкция, ~ поразрядное отрицание НЕ, ^ поразрядное исключающее ИЛИ

Рассмотрим особенности выполнения операции деления. А делимое и делитель целые числа, то и результат целое число в этом случае операция / действует аналогично Div в Паскале, например, значение выражения 5/3 будет равно 2, а при вычислении 1/5 получится 0.

Если хотя бы один из операндов имеет вещественный тип, то и результат будет вещественным. Например, операции 5./3, 5./3., 5/3. дадут вещественный результат 1.6666.

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

х=х+1; х++; ++х.

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

а=3; b=2;

с=а++*b++;

В результате выполнения переменные получат следующие значения: а =4, b=3, с= 6. Второй пример:

а=3; b=2;

с=++а*++b;

Результаты будут такими: а = 4, b = 3, с = 12.

Операции отношения.>, <, >=, <= Как уже говорилось раньше, в стандарте Си нет логического типа данных. Поэтому результатом операции отношения является целое число: если отношение истинно — то 1, если ложно — то 0. Примеры отношений:

а<0, 101>=105, 'а'=='А, 'а'! = 'А'

Результатом второго и третьего отношений будет 0 — ложь; результат четвертого отношения равен 1 — истина; результат первого отношения зависит от значения переменной а.

Логические операции. Логическое выражение, соответствующее системе неравенств 0 < х < 1 в программе на Си запишется в виде следующего логического выражения:

х>0 && х<1

Операция присваивания. может несколько раз входить в выражение. например:

а=b=с=х+у;

В языке Си имеются дополнительные операции присваивания, совмещающие присваивание с выполнением других операций. Среди них: +=, -=, /=, *=, %=. Приоритет у них такой же, как и у простого присваивания. Примеры использования этих операций: I

а+=2 эквивалентно а=а+2,

х-=а+b эквивалентно х=х-(а+Ь),

р /=10 эквивалентно р=р /10,

m*=n эквивалентно m=m*n,

г%=5 эквивалентно г=г%5.

Заметим, что вместо выражения а=а+2 предпочтительнее писать в программе а+=2, поскольку второе выражение будет вычисляться быстрее.

Операция явного преобразования типа (операция «тип»). Применение этой операции имеет следующий формат:

(имя_типа) операнд

Операндом могут быть константа, переменная, выражение в результате значение операнда преобразуется к указанному типу Примеры использования преобразования типа:

(long)8, (float)1, (int)x%2

Например:

float с;

int a=l, b=2;

с=(float)a/b;

В результате переменная с получит значение 0,5. Без преобразования типа ее значение стало бы равно 0.

Операция sizeof. Эта операция имеет две формы записи:

sizeof(выражение) sizeof(тип)

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

Пример:

sizeof(int) результат — 2

sizeof(1) результат — 2

sizeof (0.1) результат — 8

sizeof(1L) результат — 4

sizeof(char) результат — 1

sizeof('a') результат — 2

Операция «запятая». Эта необычная операция используется для связывания нескольких выражений в одно. Несколько выражений, Разделенных запятыми, вычисляются последовательно слева направо. В качестве результата такого совмещенного выражения принимается значение самого правого выражения. Например, если беременная х имеет тип int, то значение выражения (Х=3, 5*х) Будет равно 15, а переменная х примет значение 3.

Операция «условие ?:». Это единственная операция, которая имеет три операнда. Формат операции:

выражение1 ? выражение2 : выражениеЗ

Данная операция реализует алгоритмическую структуру ветвления. Алгоритм её выполнения следующий: первым вычисляется значение выражения 1, которое обычно представляет собой некоторое условие. Если оно истинно, т. е. не равно 0, то вычисляете выражение 2 и полученный результат становится результатом операции. В противном случае в качестве результата берется значение выражения 3.

Пример 1. Вычисление абсолютной величины переменной Я можно организовать с помощью одной операции:

Х<0 ? -X : X;

Пример 2. Выбор большего значения из двух переменных а и b

max=(a<=b)?b:a;

Пример 3. Заменить большее значение из двух переменных а и b на единицу:

(a>b)?a:b=l;

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

6) Операция преобразования типа. Операция sizeof. Пример.

Операция явного преобразования типа (операция «тип»). Применение этой операции имеет следующий формат:

(имя_типа) операнд

Операндом могут быть константа, переменная, выражение в результате значение операнда преобразуется к указанному типу Примеры использования преобразования типа:

(long)8, (float)1, (int)x%2

Например:

float с;

int a=l, b=2;

с=(float)a/b;

В результате переменная с получит значение 0,5. Без преобразования типа ее значение стало бы равно 0.

Операция sizeof. Эта операция имеет две формы записи:

sizeof(выражение) sizeof(тип)

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

Пример:

sizeof(int) результат — 2

sizeof(1) результат — 2

sizeof (0.1) результат — 8

sizeof(1L) результат — 4

sizeof(char) результат — 1

sizeof('a') результат — 2

7) Операнды в С++. Операции отрицания и дополнения. Пример.

Операнд — это сущность, с которой оператор выполняет какие-либо действия. 

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

Пример: 

double u = 5; u = -u; /* переменной u присваивается ее отрицание, т.е. u принимает значение -5 */ 

Операция логического отрицания "НЕ" (!) вырабатывает значение 0, если операнд есть истина (не нуль), и значение 1, если операнд равен нулю (0). Результат имеет тип int. Операнд должен быть целого или плавающего типа или типа указатель.

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

Пример: 

char b = '9'; unsigned char f; b = ~f; 

Шестнадцатеричное значение символа '9' равно 39. В результате операции ~f будет получено шестнадцатеричное значение С6, что соответствует символу 'ц'.

8) Операции разадресации и адреса в С++. Пример. 

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

Рассмотрим типичные ситуации, когда указатель содержит недопустимый адрес:

  • указатель является нулевым; 

  • указатель определяет адрес такого объекта, который не является активным в момент ссылки; 

  • указатель определяет адрес, который не выровнен до типа объекта, на который он указывает; 

  • указатель определяет адрес, не используемый выполняющейся программой.

Операция адрес (&) дает адрес своего операнда. Операндом может быть любое именуемое выражение. Имя функции или массива также может быть операндом операции «адрес», хотя в этом случае знак операции является лишним, так как имена массивов и функций являются адресами. Результатом операции адрес является указатель на операнд. Тип, адресуемый указателем, является типом операнда.

Примеры:

1

2

3

4

5

6

7

int t, f=0, * adress;

adress = &t /* переменной adress, объявляемой как

указатель, присваивается адрес переменной t */

* adress =f; /* переменной находящейся по адресу, содержащемуся

в переменной adress, присваивается значение

переменной f, т.е. 0 , что эквивалентно

t=f; т.е. t=0; */

9) Мультипликативные операции в С++. Пример

Мультипликативные операции *, / и % группируют слева направо. Выполняются обычные арифметические преобразования.

мультипликативное_выражение: выражение * выражение выражение / выражение выражение % выражение

Бинарная операция * определяет умножение. Операция * ассоциативна и выражения с несколькими умножениями на одном уровне могут быть реорганизованы компилятором. Бинарная операция / определяет деление. При делении положительных целых округление осуществляется в сторону 0, но если какой-либо из операндов отрицателен, то форма округления является машинной зависимой. На всех машинах, охватываемых данным руководством, остаток имеет тот же знак, что и делимое. Всегда истинно, что (a/b)*b + a%b равно a (если b не 0).

Бинарная операция % дает остаток от деления первого выражения на второе. Выполняются обычные арифметические преобразования. Операнды не должны быть числами с плавающей точкой.

10) Операции сдвига. Логические операции в С++. Пример.

Операции сдвига осуществляют смещение операнда влево (<<) или вправо (>>) на число битов, задаваемое вторым операндом. Оба операнда должны быть целыми величинами. Выполняются обычные арифметические преобразования. При сдвиге влево правые освобождающиеся биты устанавливаются в нуль. При сдвиге вправо метод заполнения освобождающихся левых битов зависит от типа первого операнда. Если тип unsigned, то свободные левые биты устанавливаются в нуль. В противном случае они заполняются копией знакового бита. Результат операции сдвига не определен, если второй операнд отрицательный.

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

Отметим, что сдвиг влево соответствует умножению первого операнда на степень числа 2, равную второму операнду, а сдвиг вправо соответствует делению первого операнда на 2 в степени, равной второму операнду.

Примеры:

1

2

3

4

int i=0x1234, j, k ;

k = i<<4 ; /* k="0x0234" */

j="i<<8" ; /* j="0x3400" */

i="j">>8 ; /* i = 0x0034 */

Операция присваивания. может несколько раз входить в выражение. например: а=b=с=х+у;

В языке Си имеются дополнительные операции присваивания, совмещающие присваивание с выполнением других операций. Среди них: +=, -=, /=, *=, %=. Приоритет у них такой же, как и у простого присваивания. Примеры использования этих операций: I

а+=2 эквивалентно а=а+2,

х-=а+b эквивалентно х=х-(а+Ь),

р /=10 эквивалентно р=р /10,

m*=n эквивалентно m=m*n,

г%=5 эквивалентно г=г%5.

Заметим, что вместо выражения а=а+2 предпочтительнее писать в программе а+=2, поскольку второе выражение будет вычисляться быстрее.

int i=0x1234, j, k ; 

k = i<<4 ; /* k = 0x0234 */ 

j = i<<8 ; /* j = 0x3400 */ 

i = j>>8 ; /* i = 0x0034 */

Логические операции.

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

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

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

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

Операция логического ИЛИ (||) выполняет над операндами операцию включающего ИЛИ. Она вырабатывает значение 0, если оба операнда имеют значение 0, если какой-либо из операндов имеет ненулевое значение, то результат операции равен 1. Если первый операнд имеет ненулевое значение, то второй операнд не вычисляется.

К логическим операциям относятся операция логического И (&&) и операция логического ИЛИ (||).

Логическое выражение, соответствующее системе неравенств 0 < х < 1 в программе на Си запишется в виде следующего логического выражения:

х>0 && х<1

11) Простое присваивание. Составное присваивание в С++. Пример. 

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

Пример: 

int t; 

char f; 

long z; 

t=f+z; 

Значение переменной f преобразуется к типу long, вычисляется f+z ,результат преобразуется к типу int и затем присваивается переменной t.

Кроме простого присваивания, имеется целая группа операций присваивания, которые объединяют простое присваивание с одной из бинарных операций. Такие операции называются составными операциями присваивания и имеют вид: 

(операнд-1) (бинарная операция) = (операнд-2) . 

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

(операнд-1) = (операнд-1) (бинарное операция) (операнд-2) . 

Отметим, что выражение составного присваивания с точки зрения реализации не эквивалентно простому присваиванию, так как в последнем операнд-1 вычисляется дважды. 

Каждая операция составного присваивания выполняет преобразования, которые осуществляются соответствующей бинарной операцией. Левым операндом операций (+=) (-=) может быть указатель, в то время как правый операнд должен быть целым числом. 

Примеры: 

double arr[4]={ 2.0, 3.3, 5.2, 7.5 } ; double b=3.0; b+=arr[2]; /* эквивалентно b=b+arr[2] */ arr[3]/=b+1; /* эквивалентно arr[3]=arr[3]/(b+1) */ 

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