- •2. Основні елементи мови с
- •3.1 Алфавіт мови програмування
- •3.2Лексеми
- •3.3Ключові слова
- •3.4Ідентифікатори
- •3.5 Класифікація типів даних
- •3.6 Літерали
- •3.7 Оператори
- •3.8 Коментарі
- •3.9 Директиви препроцесора
- •3.10 Організація програми
- •3. Операції та вирази
- •4.1 Загальні відомості
- •4.2 Арифметичні операції
- •4.3 Операції приведення типів
- •(Тип) ідентифікатор,
- •4.4 Операції присвоєння
- •4.5 Операції інкремента і декремента
- •4.6 Операції порівняння
- •4.7 Операції зсуву
- •4.8 Порозрядні операції
- •4.9 Логічні операції
- •4.10 Операція sizeof
- •Sizeof ( Вираз ),
- •4.11 Операція послідовного обчислення
- •4.12 Операція умови (?:)
- •Операнд-1 ? Операнд-2 : Операнд-3
- •4.13 Адресні операції
- •Тип * ім'я_покажчика;
- •4. Прості типи даних
- •5.1 Оголошення змінних
- •[ Модифікатори ] тип ім’я_змінної;
- •5.2 Час існування та область видимості змінних
- •5.3 Цілі типи даних
- •5.4 Дійсні типи даних
- •5. Оператори керування
- •5.1 Оператор розгалуження if
- •If ( Вираз ) true-оператор;
- •5.2 Оператор розгалуження if-else
- •If ( Вираз ) true-оператор; else false-оператор;
- •5.3 Оператор множинного розгалуження switch
- •5.4 Оператор циклу for
- •For ( Вираз 1 ; Вираз 2 ; Вираз 3 ) тіло циклу
- •5.5 Оператор циклу while
- •While ( Вираз ) тіло циклу
- •5.6 Оператор циклу do while
- •Тіло циклу while ( Вираз ) ;
- •5.7 Оператор break
- •5.8 Оператор continue
- •6 Введення та виведення даних
- •7.1 Функція виведення printf
- •Int printf( стрічка форматування, змінна1, змінна2, ... );
- •7.2Функція введення scanf
- •Int scanf (стрічка форматування, адреса змінної1, адреса змінної2, ... );
- •9.1 Введення та виведення у файл
- •7 Масиви
- •7.1 Загальні поняття
- •7.2 Одновимірні масиви
- •Тип даних ім’я змінної [n];
- •7.3 Багатовимірні масиви
- •6. Функції
- •6.1 Основні поняття
- •{Тіло функції}
- •6.2 Область видимості
- •6.3 Порожній тип void
- •6.4 Передача аргументів у функцію
- •6.5 Рекурсивні функції
- •6.6 Прототипи функцій
- •8. Рядки в с
- •4.1 Прототипи
- •4.2 Функції перетворення буферів
- •4.3 Функції перевірки літер
- •4.4 Рядок символів
- •4.5 Операції з рядками:
- •4.6 Символьні константи
- •9. Покажчики
- •5.1 Визначення та ініціалізація покажчиків
- •5.2 Визначення покажчиків:
- •5.3 Масиви
- •5.6 Копіювання рядка
- •5.7 Посилання та оператор &
- •5.9 Посилання в якості результатів функції
- •5.10 Покажчики на функцію
- •Тип_функціі (* імя_покажчика) (специфікація_параметрів);
- •5.11 Покажчики на void
- •5.12 Арифметика покажчиків
- •10. Структури, об’єднання, перерахування
- •7.1 Структури
- •7.2 Ключове слово typedef
- •7.3 Об’єднання
- •7.4Перераховуваний тип (Enum)
- •Enum dataType
- •Enum day
- •11 Динамічне виділення пам'яті
4.2 Арифметичні операції
До арифметичних операцій відносяться операції додавання (+), віднімання (-), множення (*), ділення (/) і визначення залишку від ділення (%).
Типи операндів арифметичних операцій, крім операції (%), можуть відрізнятися, і для них справедливі правила перетворення типів. Операндами операції (%) повинні бути цілі числа. Типом результату є тип операндів після перетворення.
Відомості про арифметичні операції зведені в таблиці.
Таблиця 4.2– Арифметичні операції
Дія |
Арифметична операція |
Алгебраїчний вираз |
Вираз мовою С |
Додавання |
+ |
t+ 9 |
t+ 9 |
Віднімання |
- |
r–f |
r–f |
Множення |
* |
ab |
a* b |
Ділення |
/ |
x/y чиx:yчи |
x / y |
Залишок від ділення |
% |
z mod w |
z % w |
Як видно з таблиці арифметичні вирази мовою С записуються в стрічку, так як в такому вигляді легче ввести програму в комп’ютер.
Операція множення (*) виконує множення операндів.
Приклад 3. Множення операндів
int k=5;
float f=0.2;
double g;
g=f*k;
Тип добутку fйkперетвориться до типу double, потім результат присвоюється змінній g.
Операція ділення (/) виконує ділення першого операнда на другий. Якщо ділене і дільник цілі, то за наявності залишку він відкидається. При спробі ділення на нуль видається повідомлення про помилку під час виконання.
Приклад 4.Операція ділення.
int a = 7, b = 5, c = 0, d;
d = a/b; /* d = 1, залишок відкинуто */
d = b/a; /* d = 0, залишок відкинуто */
Операція (%)–визначає залишок від ділення першого операнда на другий. Знак результату залежить від конкретної реалізації. Якщо другий операнд дорівнює нулю, то видається повідомлення про помилку.
Приклад 5.Визначення лишка від ділення операндів
int a = 7, b = 5, c = 0, d;
d = a % b; /* d = 2 – залишок від цілого поділу 7/5. */
d = b % a; /* d = 5 – залишок від цілого поділу 5/7. */
d = b % c; /* повідомлення про помилку */
4.3 Операції приведення типів
У виразах мовою С допускається використання операндів різних типів. При обчисленні виразу тип кожного операнда може бути перетворений до іншого типу. Перетворення типів можуть бути неявними, при виконанні операцій і викликів функцій, чиявними, при виконанні операцій приведення типів.
Неявне перетворення здійснюється автоматично для приведення операндів виразів до загального типу чи для розширення коротких величин до розміру цілих величин, використовуваних у машинних командах. Виконання перетворення залежить від специфіки операцій і від типу операнда чи операндів. Існує загальне правило: при обчисленні виразів операнди перетворяться до типу того операнда, що має найбільший розмір.
У процесі обчислення виразу операнди різних типів приводяться до єдиного за таким правилом:
- будь-яке char,shortабоenumперетворяться вintабоunsigned;
- якщо після першого кроку протиріччя в розходженні типів не усунені, то відбувається додаткове перетворення типів операндів відповідно до ієрархії типів:
int<unsigned<long< unsigned long<float<double<long double.
Оператор явного перетворення типу має вигляд: