
- •1 Основні елементи мови с
- •1.1 Алфавіт мови програмування
- •1.2 Лексеми
- •1.3 Ключові слова
- •1.4 Ідентифікатори
- •1.5 Класифікація типів даних
- •1.6 Літерали
- •1.7 Оператори
- •1.8 Коментарі
- •1.9 Директиви препроцесора
- •1.10 Організація програми
- •2 Операції та вирази
- •2.1 Загальні відомості
- •2.2 Арифметичні операції
- •2.3 Операції приведення типів
- •2.4 Операції присвоєння
- •2.5 Операції інкремента і декремента
- •2.6 Операції порівняння
- •2.7 Операції зсуву
- •2.8 Порозрядні операції
- •2.9 Логічні операції
- •2.10 Операція sizeof
- •2.11 Операція послідовного обчислення
- •2.12 Операція умови (?:)
- •2.13 Адресні операції
- •3 Прості типи даних
- •3.1 Оголошення змінних
- •3.2 Час існування та область видимості змінних
- •3.3 Цілі типи даних
- •3.4 Дійсні типи даних
- •4 Оператори керування
- •4.1 Оператор розгалуження if
- •4.2 Оператор розгалуження if-else
- •4.3 Оператор множинного розгалуження switch
- •4.4 Оператор циклу for
- •4.5 Оператор циклу while
- •4.6 Оператор циклу do while
- •4.7 Оператор break
- •4.8 Оператор continue
- •5 Функції
- •5.1 Основні поняття
- •5.2 Види виклику функцій
- •5.3 Область видимості
- •5.4 Порожній тип void
- •5.5 Передача аргументів у функцію
- •5.6 Рекурсивні функції
- •5.7 Прототипи функцій
- •6 Покажчики
- •6.1 Визначення та ініціалізація покажчиків
- •6.2 Визначення покажчиків
- •6.3 Масиви
- •6.4 Операції порівняння
- •6.5 Копіювання рядка
- •6.6 Покажчики на функцію
- •6.7 Покажчики на void
- •6.8 Арифметика покажчиків
- •7 Масиви
- •7.1 Загальні поняття
- •7.2 Одновимірні масиви
- •7.3 Багатовимірні масиви
- •8 Рядки в с
- •8.1 Рядки
- •8.2.Створення рядків
- •8.3 Прототипи
- •8.3 Функції перетворення буферів
- •8.4 Функції перевірки літер
- •8.5 Операції з рядками
- •9 Структури, об’єднання, перерахування
- •9.1 Структури
- •9.2 Бітові поля
- •9.3 Ключове слово typedef
- •9.4 Об’єднання
- •9.5 Перераховуваний тип
- •10 Введення та виведення даних
- •10.1 Функція виведення printf
- •10.2Функція введення scanf
- •10.3 Введення та виведення у файл
- •11 Динамічне виділення пам'яті
2.4 Операції присвоєння
Операція простого присвоєння використовується для заміни значення лівого операнда, значенням правого операнда. При присвоюванні відбувається перетворення типу правого операнда до типу лівого операнда.
Приклад 2.7. Операція простого присвоєння.
int t;
char f = 'a';
long z = 10;
t = f + z; /* t = 107 */
Значення змінної f перетворюється до типу long, обчислюється вираз f+z, результат перетворюється до типу int і потім присвоюється змінній t.
Крім простого присвоєння, є ціла група операцій присвоєння, що поєднують просте присвоєння з однією з бінарних операцій. Такі операції називаються складеними операціями присвоєння і мають вигляд:
(операнд-1) (бінарна операція) = (операнд-2) .
Складене присвоєння по результату еквівалентно наступному простому присвоєнню:
(операнд-1) = (операнд-1) (бінарна операція) (операнд-2).
Кожна операція складеного присвоєння виконує перетворення, що здійснюються відповідною бінарною операцією.
Відомості про складені операції присвоювання представлені у табл.
Таблиця 2.3 – Складені операції присвоювання
Лексема |
Пояснення складеної операції присвоєння |
*= |
помножити та присвоїти |
/= |
поділити та присвоїти |
%= |
залишок від ділення та присвоїти |
+= |
додати та присвоїти |
-= |
відняти та присвоїти |
&= |
порозрядне логічне «І» та присвоїти |
|= |
порозрядне логічне «АБО» та присвоїти |
>>= |
зсув вправо та присвоїти |
<<= |
зсув вліво та присвоїти |
^= |
порозрядне логічне «виключне АБО» та присвоїти |
Приклад 2.8. Види арифметичних операцій.
int a = 1, b = 3, c = 6, d = 16, e = 9;
a + = 2; /*еквівалентно виразу a = a + 2; */
b - = c; /* еквівалентно виразу b = b - c;*/
c / = 3; /*еквівалентно виразу c = c / 3; */
d >> = 4; /*еквівалентно виразу d = d >> 4; */
e % = a; /* еквівалентно виразу e = e % a;*/
2.5 Операції інкремента і декремента
Операції інкремента (++) і декремента (--) є унарними операціями присвоєння. Ці операції відповідно збільшують чи зменшують значення операнда на одиницю. Операнд може бути цілого чи дійсного типу чи бути покажчиком.
Операції інкремента і декремента мають дві форми запису: префіксна, коли операнд розташовується після знака операції (наприклад, ++а, --а); постфіксна, коли операнд розташовується перед знаком операції (наприклад, а ++, а --).
У випадку префіксної форми запису зміна операнда відбувається до його використання у виразі і результатом операції є збільшене чи зменшене значення операнда.
У випадку постфіксної форми запису операнд спочатку використовується для обчислення виразу, а потім відбувається зміна операнда.
Приклад 2.9. Операції інкремента (постфіксна).
int f = 1, d;
d = (f++)*5;
Приклад 2.10. Операції інкремента (префіксна).
int f = 1, d;
d = (++ f) * 5;
У прикладі 2.9 спочатку відбувається множення f * 5, а потім збільшення f на одиницю. У результаті вийде d = 5, f = 2.
У прикладі 2.10 спочатку значення f збільшується на одиницю, а потім використовується в операції множення. У результаті одержимо d = 10, f = 2.
У випадку, якщо операції збільшення чи зменшення використовуються не у виразі, а як самостійні оператори, префіксна і постфіксна форми запису стають еквівалентними.
F++; /* еквівалентно */ ++f;