
- •Введення
- •1. Структура та обсяг дисципліни
- •2. Основи програмування на мові с
- •2.1 Найпростіші конструкції мови
- •2.2 Типи даних
- •2.4 Операції мови с
- •2.5 Структура простої с програми
- •2.6 Організація введення-виведення
- •2.7 Компіляція в системі Linux
- •2.8 Організація розгалужень в програмі
- •2.9 Організація циклів
- •2.10 Оператор break
- •2.11 Оператор continue
- •2.11 Масиви
- •2.12 Функції
- •2.13 Вызов функции с переменным числом параметров
- •2.14 Рекурсивні функції
- •2.15 Читання і запис текстових файлів
- •2.16 Структури даних
- •2.17 Перелік|перерахування| (enumeration)
- •2.18 Об'єднання (union)
- •3. Операційні системи і системне програмування
- •3.1. Поняття операційної системи
- •4. Корисні команди Linux
- •4.1. Загальні|спільні| команди
- •4.1.1. Команда arch – виведення архітектури комп'ютера
- •4.1.2. Команда clear – очищення екрану
- •4.1.3. Команда date
- •4.1.9. Команда uptime – інформація про роботу системи
- •4.1.10. Команда users – інформація про користувачів
- •4.1.11. Команди w, who і whoami інформація про користувачів
- •4.1.12. Команда xf8config – настройка графічної підсистеми
- •4.2. Команди для роботи з текстом
- •4.2.1. Команди diff і cmp
- •4.2.2. Команди grep і egrep – текстовий фільтр
- •4.2.3. Команди more и less – посторінкове виведення
- •4.2.4. Команди head і tail – виведення начала і хвоста файлу
- •4.2.5. Команда wc – підрахунок слів у файлі
- •5. Захист інформації в інформаційних системах
- •5.1 Основні завдання забезпечення безпеки
- •5.2 Базові поняття криптографії
- •5.2.1 Поняття криптографічного алгоритму і протоколу
- •5.2.2 Криптосистеми з секретним ключем
- •5.2.3 Криптосистеми із відкритим ключем
- •5.2.4. Гибридні криптосистеми
- •5.2.5. Цифрові підписи
- •5.2.6. Сертифікати
- •5.3. Принципи аутентифіекації і керування доступом
- •5.3.1. Основи аутентифікації
- •5.3.2. Основи керування доступом
- •5.4. Аутентифікація та керування доступом в unix
- •5.4.1. Облікові записи користувачів
- •5.4.2. Аутентифікація
- •5.4.3. Керування доступом
- •6. Програмний інтерфейс unix. Системні виклики і функції стандартних бібліотек
- •6.1. Підтримка програмування в oc unix. Вивчення передачі інформації
- •6.2. Змінні оточення
- •6.3. Обробка помилок
- •6.4. Правила формування і засоби розбору командних рядків
- •7. Операції над файлами
- •7.1 Файлові операції posix
- •7.2. Збирання інформації про атрибути файла
- •7.3. Операції над каталогами
- •Література
2.8 Організація розгалужень в програмі
Усі дії в програмі виконують оператори. Найпростіший оператор – оператор присвоювання ми вже розглядали раніше у зв’язку з описом змінних.
Якщо оператори завжди виконуютьмя в одній і тій же послідовності, то говорять, що програма або дялянка програми лінійна. Реальні програми мають нелінійну організацію. Для створення таких програм використовуються оператори розгалужень і цикли. Найчастіше для розгалужень використовують оператори if и switch.
Оператор if
Синтаксис оператора if визначається таким чином
if(вираз)
оператор1;
[else
оператор2]
де обчислене значення виразу має бути логічного типу, оператор1 і оператор2 можуть бути будь-якими операторами мови С.
Порядок обчислення оператора такий. Спочатку обчислюється значення виразу. Потім, якщо набуте значення істинно, то виконується оператор1, інакше, якщо в операторі if присутня гілка else, то виконується оператор2, якщо гілки else немає, то не виконується нічого.
Наступний фрагмент програми ілюструє обчислення Y за формулами:
Y=a-x, якщо x<a; Y=a,якщо x=a; Y=a+x,якщо x>a.
if(x<a)
Y=a-x;
else
if(x==a)
Y=a;
else
Y=a+x;
Ми розглянули приклад використовування оператора if, коли при виконанні умови і при невиконанні вибирався тільки один внутрішній оператор. Проте часто вибір варіанта передбачає деякий ланцюжок дій. Припустимо, необхідно при значенні X>0 надати нові значення дл яY і Z за відповідними формулами. У цьому випадку потріьно буде замінити внутрішнього оператора на блок. Блок – це послідовність операторів (і описів), узята у фігурні дужки. Нижче наведений оператор if, що містить блок.
if(X>0)
{
Y=2;
Z=X-1;
}
Оператор switch
Оператор switch використовують для організації в програмі множини гілок обчислень. Якщо умова вибору варіанта може бути представлена константою, то оператор switch представляє розгалуження в програмі значно простіше, ніж це можна реалізувати ланцюжком операторів if – else – if.
Синтаксис оператора має такий вигляд.
switch(вираз)
{
case константа1 : Послідовність операторів
case константа1 : Послідовність операторів
...
case константаN : Послідовність операторів
[default: Послідовність операторів]
}
Обчислене значення виразу може бути будь-якого простого типу. Константи повинні мати тип, сумісний з типом виразу.
Робота оператора відбуваєтьмя таким чином.
Обчислене значення виразу послідовно порівнюється зі всіма константами. Якщо знайдений збіг значень в деякій гілці, то відповідна послідовність операторів виконується. У цьому випадку оператор switch не передбачає вихід за свої межі, тому виконуватимуться всі послідовності операторів, розташовані нижче. Якщо такий алгоритм не відповідає розв’язуваній задачі, є можливість в кінці послідовностей операторів записати оператор break (розглянуто пізніше), який завершує роботу оператора switch.
Якщо значення виразу не збіглося ні з однією константою, то управління передається гілці default, а при її відсутності оператор switch не виконує ніяких дій.
Наступний приклад дозволяє вибрати один з п’яи варіантів обчислення Y залежно від значення деякої змінної P.
switch(P)
{
case 1 : Y=x+a; break;
case 2 : Y=x+a+b; break;
case 3 : Y=x+a+b+c; break;
case 4 : Y=x+a+b+c+d; break;
default : Y=0;
}