
- •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 Динамічне виділення пам'яті
4 Оператори керування
Оператори керування обчислювальним процесом використовуються для організації: розгалуження, циклічного повторення операторів програми, а також передачі керування в необхідне місце програми залежно від виконання певних умов.
4.1 Оператор розгалуження if
Синтаксис оператора розгалуження if:
if (Вираз) true-оператор;
де «Вираз» – це вираз довільного вигляду, що інтерпретується мовою C як логічне «так» (true), тобто будь-яке відмінне від нуля значення, або «ні» (false) у випадку якщо значення виразу дорівнює нулю.
Виконання оператора if починається з обчислення виразу. Якщо значення виразу відмінне від нуля, то виконується true-оператор, а потім наступний за if оператор; якщо значення виразу дорівнює нулю, то true-оператор пропускається і керування передається наступному за if оператору, true-оператор може містити простий чи складений оператор.
Графічне представлення оператора if зображене на рисунку 4.1.
Рисунок 4.1 – Графічне представлення оператора розгалуження if
Приклад 4.1. Написати програму обчислення вартості розмови по телефону з врахуванням 20% знижки, яка надається по суботам та неділям.
#include <stdlib.h>
#include <stdio.h>
int main()
{
int time; /* тривалість розмови, хвилин */
int day; /* день тижня */
float sum; /* вартість розмови */
printf("Vveditj tryvalistj rozmovy:\n");
scanf("%i",&time);
printf("Vveditj denj tyznya (1-7):\n");
scanf("%i",&day);
sum = 2.4 * time;
if (day == 6 || day == 7)
{
printf("E znygka 20%\n"); /* повідомлення про знижку */
sum = sum * 0.8;
}
printf("Vartistj rozmovy: %3.2f\n", sum);
system("PAUSE");
return 0;
}
4.2 Оператор розгалуження if-else
Розглянутий вище оператор if можна розглядати як окремий випадок оператора if-else.
Синтаксис оператора if-else:
if (Вираз) true-оператор;
else false-оператор;
Графічне представлення оператора if-else зображене на рисунку 4.2.
Рисунок 4.2 – Графічне представлення оператора розгалуження if-else
Виконання оператора if-else починається з обчислення виразу, якщо значення виразу відмінне від нуля, то виконується true-оператор, а потім наступний за if-else оператор; якщо значення виразу дорівнює нулю, то виконується false-оператор а потім наступний за if-else оператор. Як true-оператор так і false-оператор можуть бути простим чи складеним оператором.
Приклад 4.2. Обчислити площу кільця, радіуси отвору та кільця задати з клавіатури, у випадку якщо введений радіус отвору більший за радіус кільця видати повідомлення про помилку.
#include <stdlib.h>
#include <stdio.h>
int main()
float S; /* S – площа кільця */
float R,r; /* R – радіус кільця, r – радіус
отвору */
printf("Vveditj R, r:\n");
scanf("%f %f",&R,&r); /* Введення значень радіусів */
if (r > R)
printf("Error!"); /* Виведення повідомлення
про помилку */
{
S = 3.14*(R*R - r*r); /* Обчислення площі кільця */
printf("S = %f", S); /* Виведення результату на екран */
}
system("PAUSE");
return 0;
}
Оператори if та if-else можуть бути вкладеними. У цьому випадку true-блок чи false-блок можуть містити оператори if чи if-else.
Приклад 4.3. Програма рішення рівняння ax = b.
#include <stdlib.h>
#include <stdio.h>
int main()
{
float a,b,x;
printf("Vveditj a, b:\n");
scanf("%f %f",&a, &b);
if(a!=0)
printf("x = %f\n", b/a);
else
if(b==0)
printf("xbydj-yake chislo\n");
else
printf("Rishenj nemae\n");
system("PAUSE");
return 0;
}
Для усунення неоднозначності компілятор С інтерпретує вкладені if таким чином, що гілка else належить до найближчого попереднього if.