Exam

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 53

Зміст

1.Мова С як мова програмування високого рівня. Структурне та об’єктно-орієнтоване програмування. Переваги та недоліки.................................................................................2
2.Структура програми мовою С. Етапи створення та виконання програми............................................................................................................................................................................. 4
3.Алфавіт і лексеми мови С. Коментарі............................................................................................................................................................................................................................................ 5
4.Склад мови С. Константи та змінні С............................................................................................................................................................................................................................................ 6
5.Керуючі послідовності мови С......................................................................................................................................................................................................................................................... 9
6.Типи даних у С.................................................................................................................................................................................................................................................................................. 10
7.Сумісність типів. Перетворення типів......................................................................................................................................................................................................................................... 11
8.Перелічувальний тип....................................................................................................................................................................................................................................................................... 12
9.Приведення типів............................................................................................................................................................................................................................................................................. 13
10.Перейменування типів (typedef).................................................................................................................................................................................................................................................. 15
11.Оголошення і визначення............................................................................................................................................................................................................................................................. 16
12.Змінні. Описання змінних. Ініціалізація. Область дії і клас пам’яті.................................................................................................................................................................................... 17
13.Ліводопустимі вирази. Структура програми............................................................................................................................................................................................................................ 19
14.Базові конструкції мови С. Оператор «вираз», складений оператор (блок), пустий оператор........................................................................................................................................20
15.Операції. Позначення операцій. Пріоритет операцій.............................................................................................................................................................................................................. 21
16. Оператори: пустий, складений, оператор-вираз, умовний оператор if............................................................................................................................................................................... 23
17.Оператор-перемикач switch.......................................................................................................................................................................................................................................................... 24
18.Оператори повтору С. Цикл з передумовою............................................................................................................................................................................................................................. 25
19. Оператори повтору С. Цикл з післяумовою............................................................................................................................................................................................................................. 26
20. Оператори повтору С. Цикл з лічильником............................................................................................................................................................................................................................. 27
21.Оператори керування ходом програми: goto, break, continue, return................................................................................................................................................................................... 28
22.Одновимірні масиви. Описання, ініціалізація, операції над масивами............................................................................................................................................................................... 29
23.Двовимірні масиви. Описання, ініціалізація, операції над масивами.................................................................................................................................................................................. 30
24.Функції в С. Призначення, описання функцій. Виклик функцій......................................................................................................................................................................................... 31
25.Формальні і фактичні параметри, передача параметрів за адресою і за значенням......................................................................................................................................................... 32
26.Прототипи функції......................................................................................................................................................................................................................................................................... 33
27.Передача багатовимірних масивів в функції............................................................................................................................................................................................................................ 34
28.Передача масивів і рядків у функції........................................................................................................................................................................................................................................... 35
29.Глобальні та локальні імена. Класи пам’яті, область видимості, тривалість існування................................................................................................................................................. 36
30.Символи та рядки. Операції над рядками. Функції для роботи з рядками......................................................................................................................................................................... 38
31. Функції вводу-виводу в мові С. Форматний вивід.................................................................................................................................................................................................................. 41
32.Структура як тип і сукупність даних. Операції над структурами. Бітові поля.................................................................................................................................................................. 43
33.Об’єднання як тип даних.............................................................................................................................................................................................................................................................. 45
34.Графічні можливості С.................................................................................................................................................................................................................................................................. 46
35.Директиви препроцесора. Вказівки компілятору.................................................................................................................................................................................................................... 47
1.Мова С як мова програмування високого рівня. Структурне та об’єктно-орієнтоване програмування. Переваги та недоліки

С – це мова програмування загального призначення, що не є мовою Структурне програмування - парадигма програмування, в основі
дуже високого рівня і не призначена для певної області застосування. якої лежить уявлення програми у вигляді ієрархічної структури
Але відсутність в ній обмежень та її загальність роблять її зручнішою блоків. Для передачі управління використовуються три конструкції:
і ефектівнішою для багатьох завдань, у порівнянні з мовами, що • послідовне виконання — одноразове виконання операції в порядку
вважаються потужнішими. С дозволяє маніпулювати бітами, байтами запису їх (операцій) в тексті програми;
та адресами, тобто тими базовими елементами даних, з якими працює • розгалуження — виконання певної операції або декількох операцій
комп'ютер. На відміну від більшості мов високого рівня, С майже в залежності від стану певної, наперед заданої умови;
відсутній контроль помилок у процесі виконання програми. • цикл — багаторазове виконання операції або групи операцій за
Наприклад, не перевіряється порушення меж масивів. Інша важлива умови виконання деякої наперед заданої умови. Така умова
особливість — це мала кількість ключових слів, що складають називається — умова продовження циклу.
команди мови. У С89 визначено 32 ключові слова, причому в С99 !При цьому безумовна передача управління, наприклад, оператором
додано лише 5 слів. Мови високого рівня зазвичай мають значно goto забороняється.
більше ключових слів, наприклад, у більшості версій мови Basic їхня Переваги:
кількість перевищує сотню!Н езважаючи на її низькорівневі  підвищується надійність програм (завдяки хорошому
можливості, мова проектувалася для машинно-незалежного структуруванню при проектуванні, програма легко піддається
програмування. Сумісна зі стандартами та машинно-незалежно тестуванню та не створює проблем при налагодженні);
написана мовою C програма, може легко компілюватися на великій  підвищується ефективність програм (структурування програми
кількості апаратних платформ та операційних систем з мінімальними дозволяє легко знаходити та коригувати помилки, а окремі
змінами, що робить її одною з найшвидших мов. Мова стала підпрограми можна переробляти (модифікувати) незалежно від
доступною для великої кількості платформ, від вбудованих інших);
мікроконтролерів до суперкомп'ютерів. C підтримує процедурну,  зменшується час та вартість програмної розробки;
узагальнену, і об'єктно-орієнтовану парадигми програмування, і  покращується читабельність програм.
багато інших парадигм. C має можливості для структурного
програмування, а увесь виконуваний код міститься у функціях.
Недоліки: • збільшується швидкість написання (на старті можна швидко
 непропорційне зростання складності програми при збільшенні створити потрібні компоненти всередині програми, щоб отримати
об'єму коду програми; мінімально працюючий прототип)
 процеси і дані існують окремо один від одного, таким чином, крім
функціональної декомпозиції, існує структура даних, що Недоліки:
знаходиться на другому плані.  складно зрозуміти та почати працювати. (підхід ООП набагато
 складність створення паралельних програм. складніший за звичайне процедурне програмування — потрібно
знати багато теорії, перш ніж буде написано хоч один рядок коду)
Об’єктно-орієнтоване програмування - парадигма програмування,  потребує більше пам'яті (об'єкти в ООП складаються з даних,
в якій основними концепціями є поняття об'єктів та класів. У рамках інтерфейсів, методів та багато іншого, а це займає набагато більше
даного підходу програма являє собою описання об'єктів, їх пам'яті, ніж проста змінна, також при використанні стандартних
властивостей (або атрибутів), сукупностей (або класів), відносин між бібліотек класів в невеликих програмах)
ними, способів їхньої взаємодії та операцій над об'єктами (або  іноді продуктивність коду буде нижчою (через особливості
методів). ООП має багато плюсів, і саме тому цей підхід підходу частина речей може бути реалізована складніше, ніж
використовує більшість сучасних програмістів. могла бути, тому буває таке, що ООП-програма працює
Переваги: повільніше, ніж процедурна (хоча із сучасними потужностями
• візуально код стає простішим, і його легше читати (коли все процесорів це мало кого хвилює))
розбито на об'єкти і вони мають зрозумілий набір правил, можна
відразу зрозуміти, за що відповідає кожен об'єкт і з чого він
складається) !Мабуть, найбільш відомим прикладом об'єктно-орієнтованої мови
• менше однакового коду (якщо у звичайному програмуванні одна програмування є мова C++, яка розвинулася з імперативної мови С. Її
функція рахує символи, що повторюються, в одномірному масиві, прямим нащадком і логічним продовженням є мова С#.
а інша — у двомірному, то у них більша частина коду буде
однаковою. У ООП це вирішується успадкуванням)
• складні програми пишуться простіше (кожну велику програму
можна розкласти на кілька блоків, зробити їм мінімальне
наповнення, а потім щоразу докладно наповнити кожен блок)
2.Структура програми мовою С. Етапи створення та виконання програми.

Основними частинами типової структури програми на С  Ім'я функції - це колективне ім'я групи описів і
є такі: операторів, укладених в блок (фігурні дужки), за ім'ям
 директиви препроцесорної обробки(управляють функції в круглих дужках вказуються параметри функції.
перетворенням тексту до його компіляції) ; Перед ім’ям функції вказується її тип, що повертає
 опис зовнішніх змінних (вихідних даних і функція.
результатів) та функцій (визначають дані або стан  на початку програми додаються бібліотеки, що
програми, що використовується); використовуються в програмі.
 функції програми (визначають поведінку чи дії
програми); Етапи розв’язку задачі на ЕОМ:
 головна функція — програми, що має вигляд main() 1. Постановка задачі;
(ім'я main фіксоване і всіх програм на Сі завжди однаково.) 2. Формалізація задачі – це процесс конкретизації проблеми
до кінцевого числа термінів ( структур даних ) і
визначення взаємозв’язків між ними.
3. Складання алгоритму (алгоритмізація) – це процес
складання алгоритму, який розв. задану задачу.
4. Написання програми (програмування) до 15% роботи
Структурність мови: 5. Відлагодження (дебаг) – пошук та виправлення
 Мова Сі є блочно-структурованою. Кожен блок синтаксичних помилок.
розміщається в фігурних дужках {}. 6. Тестування – пошук та виправлення семантичних помилок.
 Основним блоком у програмі консольного застосування 7. Оформлення результатів
на мові Сі є головна функція, що має ім'я main ().
 Кожна дія в мові Сі закінчується символом "крапка з
комою" -;.
 Як дія може виступати виклик функції або здійснення
деяких операцій.
3.Алфавіт і лексеми мови С. Коментарі

Під час написання програм дозволено використовувати 3) Константи:


такі символи: 1. Числові(цілі і дійсні);
 цифри 0..9, 2. Символьні;
 латинські великі та маленькі літери а..z, A..Z, 3. Рядкові;
 знаки + = _ - () * & % #! | . , : ; ‘ “/? { } ~ \ [ ] ^ < > пробіл 4. Перелічувальні;
 кирилицю (у коментарях), службові недруковані символи 5. Вказівники.
(табуляція, перехід на новий рядок тощо). 4) Операції :
 1. Знаки операції(задають дії над операндами);
Лексеми – лексична одиниця мови (неподільна), що 2. Операції зсуву;
складається з дозволених символів, яка виділяється і 3. Порозрядні операції;
розпізнається компіляторами. З лексем побудовано 4. Операції відношення;
змістовні конструкції мови (оператори, вирази, 5. Логічні операції;
визначення, описи тощо). Різновиди: 6. Операції присвоєння;
7. Операції вибору компонентів структурного об’єкта;
1) Ідентифікатори (надання об’єктам імен); int x = 5; 8. Операції з компонентами класа;
o Послідовність букв або знаків, підкреслень, цифр 9. Операції приведення типів;
o Регістр має значення 10. Операції new, delete
o Зарезервоване слово не може бути ідентифікатором 5) Пунктуація(розділювачі);
Коментар - пояснювальний текст
2) Зарезервовані слова (службові) –мають фіксований o Однорядковий // коли весь текст коментаря
смисл. Викликаються: міститься в один рядок
А) для оголошення типів (int, float, char); o Багаторядковий - /* багато рядків */
Б) позначення операторів (for, goto); printf("Input double\n");// Input real number
В) Керування доступом (public, private, protected). if (i<1) /* a teper perevirjaemo,
Список службових слів : asm, break, case, char, class, catch, chy menshe ce chislo за 1*/
const, continue, default, delete, do, double, else, enum, extern, Зауваження
float, for, friend, goto, inline, int, long, new, operator, private, 1) У коментарях дозволено будь-які символи
protected, public, regist, return, short, signed, size of, static, 2) Вкладені коментарі не дозволені ( /*xyz/*abc*/qwe*/ -
struct, switch, template, this, try, typecode, typeid, union, помилка! )
unsigned, virtual, void, volatile, while
4.Склад мови С. Константи та змінні С.
Лексеми (елементи конструкції з символів) до них область видимості збігається з областю дії. Винятком є
відносяться ідентифікатори, ключові слова, знаки ситуація, коли у вкладеному блоці описана змінна з таким
операцій, константи, роздільники (дужки, крапка, же ім’ям. У цьому випадку зовнішня змінна у вкладеному
кома, символи пропуску).(отсилка до 3) блоці невидима, хоча він і входить до її області дії. Проте до
Змінна — це іменована область пам’яті, у якій зберігаються цієї змінної, якщо вона глобальна, можна звернутися,
дані визначеного типу. Змінна має ім’я, розмір та інші застосовуючи операцію доступу до області видимості —
атрибути, такі як видимість, час існування тощо. Ім’я “::“.
змінної служить для звертання до області пам’яті, у якій Залежно від області дії змінна може бути локальною або
зберігається її значення. Перед використанням будь-яка глобальною.
змінна повинна бути описана, при цьому для неї Локальна змінна визначена всередині блока. Область її дії
резервується деяка область пам’яті, розмір якої залежить обмежена початком опису змінної та кінцем блока,
від конкретного типу змінної. Під час виконання програми включаючи усі вкладені блоки. Змінна, визначена поза
змінна може приймати рiзнi значення. будь-яким блоком, називається глобальною, і областю її дії
[клас пам’яті] [const] тип ім’я [ініціювання]; вважається файл, у якому вона визначена від початку опису
(модифікатор const вказує, що змінна не може змінювати до його кінця.
своє значення, у цьому випадку її називають типізованою Клас пам’яті визначає час існування та область видимості
або просто константою const int n = 20, m = 5, k = 4; — програмного об’єкта, тобто змінної. Якщо клас пам’яті не
ініціювання констант n, m, k цілого типу;) зазначений явно, то він визначається компілятором,
(char sf = 'f', st[ ] = "Мудрость лишь в истине."; — виходячи, з контексту оголошення. Час існування змінної
ініціювання символьних змінних) може бути постійним і тимчасовим.
!Якщо тип значення, що ініціюється, не збігається з типом Клас пам’яті задають такі специфікатори:
змінної, то виконуються перетворення типу. auto — автоматична змінна, для якої пам’ять виділяється у
Кожна змінна повинна мати своє ім’я, причому в одному стеку і за необхідності ініціюється кожного разу при
блоці не може бути двох змінних з однаковим ім’ям. виконанні оператора, що містить її визначення.
Область видимості ідентифікатора - частина тексту extern означає, що змінна визначена в іншому місці
програми, з якої можна здійснити звичайний доступ до програми (в іншому файлі або далі по тексту) і
зв’язаної з ідентифікатором області пам’яті. Найчастіше використовується для створення змінних, доступних в усіх
модулях програми, де вони оголошені. При ініціюванні беззнакової змінної, тобто змінної, що приймає тільки
змінної у тому ж операторі, спеціфікатор extern ігнорується; додатні значення, необхідно використовувати ключове
static — статична змінна, що має постійний час існування. слово unsigned. За замовчуванням будь-який цілий тип
Вона ініціюється один раз при першому виконанні вважається знаковим, і тому немає потреби у
oпeратора, що містить визначення змінної. Залежно від використанні ключового слова signed.
розташування оператора, описані статичні змінні можуть  Символьний тип даних char застосовується у випадку,
бути глобальними і локальними. Глобальні статичні змінні коли змінна містить інформацію про код ASCII або для
видимі тільки у тому модулі, в якому вони описані; побудови таких більш складних конструкцій, як рядки,
register — аналогічний до специфікатора auto, але пам’ять символьні масиви тощо. Дані типу char також можуть
видiляється по можливості в регістрах процесора і за бути знаковими і беззнаковими.
відсутності такої можливості у компілятора змінні Стандарт C визначає три типи даних для збереження дійсних
обробляються як auto. значень змінних: float, double та long double (типи з
!Опис змінної може виконуватися у формі оголошення або плаваючою крапкою). Тип float, як правило, використовують
визначення. Оголошення інформує компілятор про тип для збереження не дуже великих дробових чисел.
змінної і класи пам’яті, а визначення містить, крім цього,  Змінна типу void не має значення, оскільки множина
вказівку компілятору про виділення пам’яті відповідно до значень цього типу порожня. Такі змінні необхідні для
типу змінної. У C більшість оголошень є одночасно і узгодження синтаксису. Тип void використовується для
визначеннями. Змінна може бути оголошена багаторазово, визначення функцій, що не повертають значення, для
а визначена тільки в одному місці програми, оскільки вказівки порожнього списку аргументів функції, а також
оголошення тільки описує властивості змінної, а визначення як базовий тип для покажчиків i в операції приведення
зв’язує її з конкретною областю пам’яті. типів.
основні типи змінних. void minmax(int*x, int k, int*min, int&max);.
 Цілі змінні (типу int, long, short) необхідні для Константи
збереження цілих значень і можуть бути знаковими і  Цілі константи: десяткові, вісімкові, шістнадцяткові.
беззнаковими. Знакові змінні застосовують для подання o Десяткова:
як додатних, так і від’ємних чисел, при цьому один біт Послідовність цифр (0 - 9), що починаються з цифри,
(найстарший) виділяється під знак. Для оголошення відмінної від нуля.
Приклад: 1, -29, 385. Виняток – число 0. '\012' (вісімковий код символу - всі символи мають свої
Якщо десяткова константа виходить за межі діапазону - номери - коди, які можуть бути і вісімковими, і
2147483648.. 4294967295, виникає помилка компіляції десятковими, і 16-річними).
(переповнення розрядної сітки)  Строкова константа - це послідовність символів,
o Вісімкова: укладена в лапки, наприклад: «Це рядкова константа»
Послідовність цифр (0 - 7), яка завжди починається з 0. Лапки не входять у рядок, а лише обмежують її. Технічно
Приклад: 00, 071, -052, -03. рядкова константа є масив символів, і за цією ознакою
o Шістнадцяткова: може бути віднесена до розряду складних об'єктів мови Сі.
Послідовність шістнадцяткових цифр (0 - 9 і A - F), якій Перераховані константи вводяться через ключове слово
передує присутній 0x або 0X. Наприклад (різні константи):
Приклад: 0x0, 0x1, -0x2AF, 0x17. 5 // ціла константа
 Константа з фіксованою або плаваючою точкою 5u // u або U визначає unsigned
Приклади речових констант 5L // l або L визначає long
 Фіксована точка 05 // вісімкова
345. 0х5 // шістнадцяткова
3.14159 5.0 // з плаваючою комою
 Плаваюча точка: 5.0F // f або F визначає float
2.1Е5 (2.1*10^5) 5.0L // l або L визначає long double
.123ЄЗ '5' // символьна константа, код 53
4037е-5 'A' // символьна константа, код 65

 Символьна константа – це один символ, наприклад: "A" // символьна константа з кодом 97

'z'. \ 0 // NULL символ закінчення рядка

Односимвольні константи мають тип char, займають 1 байт. '\N' // символ керування висновком - переклад рядка

Наприклад: "5" // рядкова константа (рядок з двох символів - 5 та 0)

'z'(символ z) "Рядок з перекладом каретки \ n" // Рядкова константа з

'*' (символ *) текстом та перекладом на новий рядок.

'\n' (модифікатор, перехід на новий рядок)


5.Керуючі послідовності мови С

Заслуговують уваги послідовності, що починаються зі знака «\», їх називають керуючими або escape-послідовностями. Символ зворотної
косої риски «\» використовується для запису кодів,що не мають графічного зображення, для запису символiв, а також для виведення
символьних констант, якщо їх коди заданi у вісімковому та шістнадцятковому вигляді

Керуючі послідовності можуть також застосовуватись у рядкових константах. Так, якщо всередині рядка потрібно записати лапки, то
перед ними слід розташувати зворотну косу риску («\»), за якою компілятор відрізняє їх від лапок, що обмежують рядок:
Всі керуючі символи, при використанні, обрамляются подвійними лапками, якщо необхідно вивести якесь повідомлення, то керуючі
символи можна записувати відразу в повідомленні, в будь-якому його місці. Нижче показаний код програми, використовує керуючі
символи.

У рядку 9 у вихідний потік надходять дві табуляції \t\t, після чого друкується повідомлення control characters C++. У рядку 10 керуючий
символ \r повертає каретку в початок рядка і друкує повідомлення cppstudio.com, причому дане повідомлення займе місце двох
табуляцій з рядка 9. Після цього каретка буде переведена на новий рядок, так як в кінці повідомлення рядка 10 варто символ \n. У рядку
11 перше і останнє слова повідомлення обрамлені одинарними і подвійними лапками відповідно. У рядку 12 у вихідний потік зсуваються
керуючі символи \a, ці символи запускають спікер комп'ютера.

6.Типи даних у С

Обробка даних різного типу є головною метою будь-якої операціях. Для опису основних типів мови C
програми. Кожне з даних характеризується класом використовують такі службові слова:
пам’яті, ім’ям, типом і значенням. Імена дозволяють  int (цілий);
ідентифікувати дані, тобто відрізняти їх між собою.  char (символьний);
Програміст обирає тип кожної величини, що  float (дійсний);
використовується для подання реальних об’єктів. Тип задає  double (дійсний з подвійною точністю);
множину можливих значень даних і способи їх зберігання,  void (порожній, не має значення).
перетворення та використання. Типи int, char називають цілими, а
Обов’язкове оголошення типу даних типи float та double — дійсними з плаваючою крапкою.
дозволяє компілятору робити перевірку допустимості Код, що формує компілятор для обробки цілих величин,
різних конструкцій програми. відрізняється від коду для величин з плаваючою крапкою.
Усі типи даних мови C можна розділити на основні (базові) Для уточнення внутрішнього подання та діапазону значень
і складені. Основні типи визначені для представлення стандартних типів мова C використовує чотири
цілих, дійсних,.На основі цих типів вводиться опис специфікатори типу:
складених типів, до яких належать масиви, перелічення,  short (короткий);
функції, структури, посилання, покажчики, об’єднання.  long (довгий);
Основні типи даних часто називають арифметичними,  signed (знаковий);
тому що їх можна використовувати в арифметичних  unsigned (беззнаковий).
Тип Розмір, байт unsigned int (32 розряди) 4
unsigned short int 2 Char 1
short int 2 Float 4
unsigned long int 4 Double 8
long int 4 long double 10
int (16 розрядів) 2 Перелічувальний тип - тип, який створюється користувачем
за допомогою слова enum. Наприклад:
int (32 розряди) 4
enum notes {d = 1, re, mi, fa} k;
unsigned int (16 розрядів) 2 enum season {winter, sring, summer, autumn} g;

7.Сумісність типів. Перетворення типів.

Приведення (перетворення) типів— це зміна типу програми таким чином, що програма буде
сутності одного типу даних в інший, що може виконуватись коректно.
відбуватися різними способами, явно чи неявно. Явне перетворення типів, це таке приведення типів
1. Char даних, яке задається в явному вигляді в рамках
Int  int програми (замість того, щоб відбулося неявне
Enum перетворення типів компілятором).
2. Складні -> unsigned
3. Int <= unsighned <= long <= unsigned
Long <= float <= double <= long double
Приведення типів буває явне і неявне. Неявне Існує кілька видів явного перетворення.
перетворення типів, також відоме як примусове, це  з перевіркою
автоматичне перетворення типів при компіляції. Перед перетворенням виконується перевірка під час
Деякі мови програмування дозволяють виконання програми, яка визначає чи може вихідний тип
компіляторам здійснювати перетворення; інші вмістити початкове значення. Якщо ні, повертається
вимагають здійснити його явно. помилка.
У виразах зі мішаними типами змінних, данні одного  без перевірки
або декількох підтипів можуть при необхідності
бути перетворені до супертипу під час виконання
Перевірка не виконується. Якщо вихідний тип не може f*3 – I -> float
містити початкове значення, результат буде не d + s -> double
визначений.
 по бітовому шаблону (отсилка к 9)
Бітове представлення вихідних даних копіюється, і
інтерпретується по новому відповідно до вихідного типу,
в який перетворюється значення.
С + 1.0 -> double
C – s/i -> int
e + 1 -> int
8.Перелічувальний тип

При застосуванні великої кількості логічно взаємозалежних enum Months {January = 1, February, Marth, April, May, June, July,
констант C доцільно користуватися константами перелічення. Тип August, September, October, November, December};
перелічення має вигляди:
Якщо значення константи перелічення не визначено, то воно на
enum {список іменованих констант}; — неiменоване перелічення, одиницю більше значення попередньої константи. За
enum [ім’я] {список іменованих констант}; — iменоване замовчуванням перша константа має значення 0. Тоді у першому
перелічення. прикладі константи одержать значення:Anton = 0, Ivan = 1, Piter = 2,
де enum—службове слово (enumerate—перелічувати); а у другому — значення: January = 1, February = 2, Marth= З тощо.
ім’я— ім’я списку констант; Іменовані перелічення задають унікальний цілочисловий тип і
список іменованих констант— розділена комами послідовнiсть можуть використовуватися як специфікації типу для визначення
iдентифікаторів або іменованих констант вигляду: змінних

ім’я константи = значення константи. Зауваження по перелічувальному типу:


Наприклад: 1) Ім’я типа і перелічувальні константи мусять бути унікальними
enum {Anton, Ivan, Piter}; всередині локальної областіж;
2) Імена перерахованих констант мусять бути унікальними. А  enum negative {no, yes} c; // повторно оголошено "no" та
значення можуть повторюватися; "false"
3) Значення констант можутьбути задані виразами;  int i, j = tru; // можливе перетворення з перечислювальної на
4) При описанні типу, його ім’я може бут опущене; ціле
 enum {doo = 2, re = doo * doo, mi = re-doo};  a = off; // вірно
 enum {fals, tru};
 i = a; // вірно, i стає 1
 enum {one, two, three, fo} numb;
 q = a; // два різні типи наводяться в цілісного
5) Можливе неявне перетворення перелічувальних значень в  b = (q? no: yes) // вірно
ціле і навпаки: 6) Значеннями перелічувальних типів не можуть бути константи
 enum boolean {fals, tru} q; стандартних типів
 enum signal {off, on} a = on; // a відразу ініціалізовані в on enum {1, 2}; // не можна, 1 и 2 - цілі числа
 enum answer {no, yes, maybe = 1} b;

9.Приведення типів.
Приведення (перетворення) типів - в програмуванні це можна приводити з пониженням типів: посилання на
зміна типу сутності одного типу даних в інший, що може базовий клас може вказувати на його похідні (дочірні)
відбуватися різними способами, явно чи неявно. класи.

Це використовується з ціллю скористатися деякими Неявне перетворення типу


особливостями ієрархій типів або представленнями типу. Неявне перетворення типів, також відоме як примусове, це
Одним із прикладів такої ситуації є використання невеликих автоматичне перетворення типів при компіляції. Деякі мови
цілих чисел, які зберігаються в більш компактному форматі програмування дозволяють компіляторам здійснювати
змінної і приводяться в тип з більшим діапазоном значень перетворення; інші вимагають здійснити його явно.
для проведення арифметичних операцій. В об'єктно- У виразах зі мішаними типами змінних, дані одного або
орієнтованому програмуванні, дозволяє програмам декількох підтипів можуть при необхідності бути
приводити об'єкти різного типу до їх спільного перетворені до супертипу під час виконання
батьківського типу, для спрощення операцій з ними. В програми таким чином, що програма буде виконуватись
об’єктно-орієнтованому програмуванні, об'єкти також
коректно. Наприклад, приведений нижче код є правильним Хоча змінні d, l і i належать до різних типів даних, вони
для мови C: будуть автоматично перетворюватись в один тип даних
кожен раз коли буде виконуватись операція порівняння або
double d; присвоювання. Таке неявне приведення типів може
привести до небажаних наслідків. При перетворенні чисел з
long l;
плаваючою комою в цілі може відбуватися втрата точності,
int i; оскільки дробова частина числа буде відкинута (з
округленням в бік нуля). І навпаки, при перетворенні цілого
if (d > i) d = i;
значення до числа з плаваючою комою також може

if (i > l) l = i; відбуватися втрата точності, оскільки тип, що представляє


дрібне число не може вмістити і представити точно дане
if (d == l) d *= 2; ціле число (наприклад, тип float в стандарті IEEE 754 може
мати одинарну точність, яка не може коректно представити
ціле число 16777217, в той час як 32-ух бітний тип integer
може).

Важливі примітки:

1. Приведення float до int призводить до усічення,


тобто відкидання дробової частини;
2. Приведення double до float призводить до
округлення числа;
3. Приведення long до int призводить до втрати
надлишкових верхніх розрядів.
Розширення типів
Окремим випадком неявного приведення типів є
розширення типу, при якому компілятор автоматично
розширяє двійкове представлення об'єктів цілого типу або
типу з плаваючою комою. Розширення зазвичай
//якби тут відбулося неявне перетворення типів (як при
відбувається із типами, які менші ніж вбудований
написанні виразу "result = da + db + dc"), результат би
тип АЛП цільової платформи, на якій виконується програма.
дорівнював 10
Це відбувається перед арифметичними і логічними
операціями для того, щоб ці операції стали можливими,
Існує кілька видів явного перетворення.
або більш ефективними, у випадку коли АЛП, може
 з перевіркою
працювати більше ніж з одним типом даних. C і C++
виконують таке розширення для об'єктів логічного, Перед перетворенням виконується перевірка під час

символьного, широкого символьного, перечислення, і виконання програми, яка визначає чи може вихідний

короткого цілого типів, які перетворюються в int, і для тип вмістити початкове значення. Якщо ні,

об'єктів типу float, які розширюються до типу double. На повертається помилка.

відміну від інших від інших перетворень типів, розширення  без перевірки

ніколи не призводить до втрати точності або зміни Перевірка не виконується. Якщо вихідний тип не може

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


визначений.
Явне перетворення типу
 по бітовому шаблону
Явне перетворення типів, це таке приведення типів даних,
Бітове представлення вихідних даних копіюється, і
яке задається в явному вигляді в рамках програми (замість
інтерпретується по новому відповідно до вихідного
того, щоб відбулося неявне перетворення типів
типу, в який перетворюється значення. Це
компілятором).
відбувається також при використанні псевдонімів.

double da = 3.3;

double db = 3.3;

double dc = 3.4;

int result = (int)da + (int)db + (int)dc; //result == 9


10.Перейменування типів (typedef).

Мова С дозволяє визначати імена нових типів даних за Далі можна створити матеріальну змінну, використовуючи
допомогою ключового слова typedef. Насправді тут не balance:
створюється новий тип даних, а визначається нове ім'я
існуючого типу. Він дозволяє полегшити створення balance past_due;
машинно-незалежних програм. Єдине, що потрібно при
переході на іншу платформу, - це змінити оператор typedef. Тут past_due - це речова змінна типу balance, іншими
Він також може допомогти документувати код, дозволяючи словами - типу float.
призначати змістовні імена стандартних типів даних.
Стандартний вид оператора typedef наступний: Можна використовувати typedef для створення імен для
typedef тип ім'я; більш складних типів. наприклад:
де тип - це будь-який існуючий тип даних, а ім'я - це typedef struct {
нове ім'я для даного типу. Нове ім'я визначається на додаток float due;
до існуючого імені типу, а не заміщає його. int over_due;
char name [40];
Наприклад, можна створити нове ім'я для float, } client; / * Тут client - це ім'я нового типу * /
використовуючи
typedef float balance; client clist [NUM_CLIENTS]; / * Визначення масиву
структур типу client * /
Даний оператор повідомляє компілятору про необхідність
розпізнавання balance як іншого імені для float. Використання typedef може допомогти при створенні більш
легкого для читання і більш переносимого коду. Але треба
пам'ятати, що насправді не створюються ніякі нові типи
даних
11.Оголошення і визначення.

Оголошення – указання класу памяті, типу, імя


Визначення – виділяє пам'ять під змінну і зв’язує з нею Змінні можуть бути оголошені:
модифікатор
Оголошення є визначенням якщо:  всередині функцій;

1)описує змінну;  у визначенні параметрів функцій;

2)містить ініціатор;  за межами усіх функцій.

3)вказує на функцію включаючи її тіло;


4) описує обєднання /структуру, включно з їхніми компонентами; В залежності від місця оголошення в програмі, змінні

5)описує клас, включаючи компонентию. класифікуються наступним чином:

Оголошення не є визначенням, якщо:


 локальні змінні (оголошуються всередині функцій);
1)описує прототип функції
 формальні параметри (є параметрами функцій);
2)містить модифікатор екстерн
 глобальні змінні (оголошуються за межами функцій).
3)описує імя класа
4)описує естетичний компонент класу
5)описує імя типу, що вводиться користувачем через тайпдеф
Змінна може мати до 1024 символи будь-якого імені

Приклади оголошень:
int a, b, c;
char sym;
bool f_is;
float x, y;
double z;
12.Змінні. Описання змінних. Ініціалізація. Область дії і клас пам’яті

Змінна - це деяка величина, яка під час виконання програми може


набувати різних значень float salary; /*зарплата на місяць*/
Опис змінних зазвичай здійснюється на початку програми за float summa; /*зарплата на рік*/
допомогою операторів опису. float itog; /*зарплата до видачі*/
Оператор опису змінних має таку загальну форму запису: Ініціалізація змінних
<тип> <список імен змінних>; Надання змінної початкового значення під час компіляції програми
де <тип> визначає тип значень, які можуть набувати змінних називається ініціалізацією. При описі змінних можна повідомити
списків. Як <тип> використовується одне з ключових слів int, float, компілятор про необхідність їх ініціалізації. Якщо якась змінна зі
double або char; списку імен змінних ініціалізується, то у списку вона повинна бути
<список імен змінних> - це перерахування імен змінних, вказана у вигляді:
відокремлених друг від друга комою; <ім'я >= <константа>
Крапка з комою є ознакою кінця оператора. Між ключовим або
словом, що визначає тип змінних та списком їх імен повинен бути <ім'я> = <константний вираз>
хоча б один пробіл. Оператори опису відпрацьовуються на етапі або
компіляції програми та містять інформацію визначення <ім'я> = <ім'я>
інтерпретації кожного імені змінної. Наприклад, у програмі є
наступні оператори опису: де:
float salary,summa,itog; <ім'я> - ім'я змінної, якою компілятором має бути встановлене
int time, count; початкове значення до виконання програми;
char znak, litera; <константа> - визначає конкретне значення, що встановлюється;
Ці оператори містять інформацію для компілятора про те, що <константний вираз> – вираз, що складається лише з констант та
змінні salary, summa та itog прийматимуть речові значення типу знаків операцій, наприклад, 60+60.
float в діапазоні від 3.4е-38 до 3.4+38 і для кожної з цих змінних Константні висловлювання в Сі обчислюються під час компіляції, а
потрібна область пам'яті 4 байта. не під час виконання програми, тому можна використовувати
Кожен із змінних time, count вимагає пам'ять 4 байти і цю пам'ять скрізь, де може стояти константа. Приклади операторів опису з
слід інтерпретувати як цілі числа типу int. ініціалізацією змінних:
Значення змінних з іменами znak, litera слід інтерпретувати як char backslach = '\', litera = 'T';
символьні, тобто. ціла кількість однобайтової області пам'яті цих int cows = 32, goats = 14;
змінних розглядаються як код відповідного символу ASCII. Один float alfa, beta, gamma=1.7e-12;
опис можна розбити на кілька описів, наприклад, з метою
коментування фізичного змісту змінних програми. Оператори:
Звернемо увагу на те, що в останньому операторі опису Змінна, визначена поза всіма блоками, називається глобальною, і
ініціалізована лише змінна gamma, хоча з першого погляду може областю її дії вважається файл, в якому вона визначена від початку
здатися, що всі три. Тому краще уникати змішування змінних, що опису до кінця.
ініціалізуються і неініціалізуються, в одному операторі опису. Крім ВАЖЛИВО: До глобальної змінної можна звернутися з локальної
того, бажано початкове значення змінної записувати константою області видимості. До локальної змінної не можна звернутися з
відповідного типу, хоча Сі допускає і розбіжність типів. Наприклад, глобальної області видимості, тому що локальна змінна існує лише
можна допустити такий оператор опису: в момент виконання функції тіла. При виході з неї локальні змінні
int cows = 3.2e+1, goats = 1.4e+1; зникають. Комп'ютерна пам'ять, яка під них відводилася,
звільняється. Коли так функція буде знову викликана, локальні
який еквівалентний другому оператору вищенаведеної групи, змінні буде створено заново.
проте при цьому компілятор повинен витратити додатковий час на Кожна змінна належить до певного класу пам'яті. Клас пам'яті
перетворення речовинних констант до цілого типу. дозволяє встановити два факти. По-перше, визначити, які функції
Розглянемо ще кілька прикладів ініціалізації змінних. У коментарях мають доступ до змінної. ( Межі доступності змінної
вказуються випадки, коли форма ініціалізації допускається тільки в характеризують її область дії ). По-друге, визначити, як довго
мові C++: змінна перебуває у пам'яті. У мові Сі є чотири класи пам'яті:
автоматичний, статичний, зовнішній та регістровий. Визначення
int i = 5; класу пам'яті змінної залежить від того, де змінна описана і яке
int i(5); //Тільки в с++ використовується слово. Нижче наводиться таблиця властивостей
int a = abs(-3); //використовується математична функція abs класів пам'яті
double price = 109.99; discount = 0.16;
double sale_price = price * discount;
double sale_price (price * discount); //Тільки в с++
int val = get_value(); //Використовується функція користувача,
//Повертає число

Якщо глобальної статичної змінної не встановлено початкове


значення, вона ініціалізується нулем. У решті випадків значення не
визначено.
Області дії є частиною програми, в якій його можна
використовувати для доступу до пов'язаної з ним областю пам'яті.
Залежно від сфери впливу змінна може бути локальною або
глобальною.
Локальна змінна визначена всередині блоку. Область її дії
обмежена початком опису змінної та кінцем блоку, включаючи всі
вкладені блоки.
13.Ліводопустимі вирази. Структура програми

Всім змінним відповідають області пам`яті, з яких можна


прочитати і в які можна записати їх значення. Ліводопустимим
називається такий вираз, який дозволяє як зчитувати значення
об`єкту, який він визначає, так і змінювати його. Назва
походить від того, що ліводопустимий вираз може
використовуватись в лівій частині виразу присвоєння. Наступні об`єкти ніколи не можуть бути ліводопустимими:
Відповідно,праводопустимий вираз може використовуватись  Ім`я функції;
тільки в правій частині виразу присвоєння.  Ім`я масиву (але елемент масиву або посилання на нього є
Ліводопустимі вирази: ліводопустимим);
 Імена змінних, описані як арифметичні вирази, вказівники,  Константа перераховуючого типу;
перелічувальні(инам) або об`єднання;  Виклик функції.
 Вирази в круглих дужках, причому тоді і тільки тоді коли вираз  Вирази з операціями. Мова Сі має сім типів операцій. Далі ми
є ліводопустимим; розглянемо арифметичні і логічні операції, операції відношень,
int i = (int g = 10, g+2); заперечення, інкременту та декременту а також порозрядні
 Змінні з індексами; операції.
 Виклики функцій, що повертають вказівники на об’єкт;
 Уточнені імена компонентів структур; Основними частинами типової структури програми на С є
 Вираз, який визначає поле (expr.field) такі:
 , причому якщо expr теж є ліводопустимим;  директиви препроцесорної обробки(управляють
 Вираз, який задає непрямий вибір поля (expr−>field); перетворенням тексту до його компіляції) ;

 Непрямий вираз *expr.


 опис зовнішніх змінних (вихідних даних і результатів) та
функцій (визначають дані або стан програми, що
використовується);
 функції програми (визначають поведінку чи дії програми);
 головна функція — програми, що має вигляд main() (ім'я
main фіксоване і всіх програм на Сі завжди однаково.)

14.Базові конструкції мови С. Оператор «вираз», складений оператор (блок), пустий оператор.

Будь-який вираз, що закінчується крапкою з комою, є оператором. блоку, тобто. використовуються зі своїми значеннями,
Оператор-вираз привласненими ним усередині цього блоку, а не в іншому місці
Виконання оператора виразу полягає у обчисленні виразу. програми.
Отримане значення виразу ніяк не використовується, тому If (i< 0){
зазвичай такі вирази викликають побічні ефекти. i++;
Зауважимо, що викликати функцію, яка не повертає значення, x+=y;
можна тільки за допомогою оператора виразу. }
Приклади:
++ і;
<Вираз>; Порожній оператор:
x = y + 3; Порожній оператор складається лише з точки з комою. Під час
x++; виконання цього оператора нічого не відбувається. Він зазвичай
f(x); використовується у таких випадках:
- в операторах do, for, while, if у рядках, коли місце оператора не
Блоком називається послідовність операторів, укладених у фігурні потрібно, але за синтаксисом потрібний хоча б один оператор;
дужки { та }. - за необхідності передати керування на фігурну дужку (за
Оператори блоку виконуються послідовно в порядку їхнього допомогою оператора goto).
запису всередині блоку. На початку блоку можуть бути описані For(i = 0; i < n; a[i++]=0);
внутрішні змінні. І тут кажуть, що це змінні локалізовані всередині
15.Операції. Позначення операцій. Пріоритет операцій.
1) Бінарний плюс +;
 Унарні (операції над одним операндумом) &, *, -, +, ~, !, ++, –-, 2) Бінарний мінус -;
sizeof;  Мультиплікативні: (типу множення)
 Бінарні (над двума операндумом) +, -, *, /, %, <<, >>, &, :, ^, 1) Множення для арифметичних типів *
<, >, <=, ==, >=, !=, &&, ||, =,*=, /=, %=, +=, -=, <<=, >>=, &=, 2) Ділення арифметичне /
|=, ^=, ., ->, ,, (), []; 3) Залшок від ділення %
 Тернарні(три операндуми) ?: .
Унарні:
 Взяття адреси &
 Звернення за адрессою * Операції зсуву:
 Унарний мінус - <<Зсув вліво(побітового предст.) 1 <<2 = 4
 Унарний плюс + >>Зсув вправо 1>>2 = 0
 Інверсія (побітова інверсія) ~ Порозрядні операції:
 Логічне заперечення !  Порозрядна коніюниція бітових представлень операндів &
 Інкремент(незастосовується для констант) ++х – перфіксна  Порозрядна диз’юнкція бітових представлень | (aбо)
х++ - постфіксна  Порозрядне виключення ^
 Декремент – Операції відношення:
Бінарні: <, <= ,> , >=, ==, != - арифметичні типи вказівників
 Адитивні : Логічні оперції:
&&, ||, !A
Операції присвоєння:
=, *=, /=, +=, -=, <<=, >>=, &=, |=, ^=
Операції вибору по множників структурованог об’єкта
 Прямий вибір компонента структури
 Опосередковане звернення до компонента структури через
вказівник
Операції з компонентами класа
.* пряме звернення до компонента класа
->* опосередковане звернення до классу через вказівник
:: указання області видимості
Операції з адресами та покажчиками:
Додаткові операції:
& — одержання адреси: видає адресу змінної, ім’я якої
sizeof() — знаходить розмір (у байтах) операнда, розташова¬ного
роз¬ташоване праворуч від позначення операції;
праворуч від назви операції;
* — непряма адресація (розіменування): видає значення, записане
за адресою, на яку посилається покажчик.
(type) — операція приведення типу перетворює наступне за нею
Операції обробки окремих бітів застосовують для обробки даних
значення в тип, визначений ключовим словом, укладеним у круглі
як послідовностей бітів (розрядів), кожний з яких набуває значення
дужки, наприклад:
0 або 1.
i = i+(int)*3.14;
Тернарна
?: — триарна (з трьома операндами) операція, що має вигляд:
вираз1? вираз2 : виразЗ;,
тут, якщо результат обчислення першого операнда (вираз1) не
дорівнює 0 («істина»), то результатом операції буде значення
дру¬гого операнда (вираз2), інакше — третього операнда (виразЗ).
Наприклад, знаходження найбільшої з двох величин а і b,
мож¬ливо здійснити операцією: max = (b> а)? b : а;.
Основні операції мови C
Порядок
№ Операції виконання

1 () ,[], {} ->,::,. . Л -> П

2 ! ~ +(унарний) - ++ — & * (type) П -> Л

3 Sizeof, new, delete П -> Л

4 .*, -*, * * / % Л -> П

5 + – Л -> П

6 << >> Л -> П

7 < <= > >= Л -> П

8 == != Л -> П

9 & Л -> П

10 ^ Л -> П

11 | Л -> П

12 && Л -> П

13 || Л -> П

14 ?: П -> Л

15 = += *= -= /= %= П -> Л

16 , Л -> П

16. Оператори: пустий, складений, оператор-вираз, умовний оператор if.


(Отсилка до 14)

Умовний оператор:
а) if (неповний) (<вираз>) <оператор>
if (x < y) min = x;
У записі оператора if друга частина (тобто else) може бути відсутня і тоді, якщо вираз приймає значення «неправда», виконується
зразу наступний оператор програми, що розташований за умовним. Таку конструкцію називають “пропуск оператора”.
b) if… else (повний)
if (<вираз>)<операнд1>
else <операнд2>
if (x < y) min x;
else min = y;
Зауваження:
1) Умовний вираз після if завжди береться в круглі дужки();
2) Кожний else відноситься до того if, який перед ним;
3) If ( int i = fun(t)) a-=1
else a+=1 (всередині дужок може бути оголошена лише 1 змінна)
4) Вкладеність умовного оператора існує
5) Умовні вирази необов’язково повині містити операції відношення

17.Оператор-перемикач switch.

Хоча конструкція if-else-if може виконувати численні перевірки, ньому може заплутатися навіть авторка через деякий час. З цією
вона не дуже елегантна. Код дуже важкий для сприйняття і в метою має оператор прийняття рішень switch, що виконує дії,
ґрунтуючись на порівнянні значення зі списком констант символів включає інший оператор switch, може містити аналогічні
або цілих чисел. У разі виявлення збігу виконується оператор або константи.
оператори, асоційовані з цим значенням. Оператор switch має  Якщо в операторі switch використовуються символьні
такий вигляд: константи, вони автоматично перетворюються на цілі.
switch (выражение)  Всі мітки case мусять бути унікальними;
{
Оператор switch часто використовується для обробки команд
case константа1:
клавіатури типу роботи з меню. Як показано нижче, функція menu()
последовательность операторов
відображає меню для програми перевірки орфографії та викликає
break;
відповідні процедури:
case константа2:
void menu(void)
последовательность операторов
{
break;
char ch;
case константа3:
последовательность операторов break;
printf("1. Check Spelling\n");
...
printf("2. Correct Spelling Errors\n");
default:
printf("3. Display Spelling Errors\n");
последовательность операторов
printf("Strike Any Other Key to Skip\n");
}
printf (" Enter your choice: ");
Оператор default виконується, якщо не знайдено відповідності,
default необов'язковий і, якщо його немає, то у разі відсутності ch = getche(); /* чтение клавиатуры */
збігів нічого не відбувається.
switch(ch) {
Коли виявляється збіг, оператори, асоційовані з відповідним case, case '1':
виконуються доти, доки не зустрінеться оператор break. У випадку check_spelling();
default (або останнього case, якщо немає default), оператор switch break;
закінчує роботу при виявленні кінця. case '2':
correct_errors();
Слід знати про три важливі моменти оператора switch: break;
case '3';
 switch відрізняється від if тим, що він може виконувати display_errors();
лише операції перевірки суворої рівності, у той час як if break;
може обчислювати логічні вирази та стосунки. default :
 Не може бути двох констант в одному операторі switch, що printf("No option selected");
мають однакові значення. Звичайно, оператор switch, що }
}
18.Оператори повтору С. Цикл з передумовою.
Цикл – багаторазове проходження по одному і тому ж коду
програми. Цикли необхідні програмісту для багаторазового Реалізується оператор while таким чином: якщо значення виразу-
виконання одного і того ж коду, поки істинно якась умова. Якщо умови не дорівнює нулю («істина»), то виконується тіло циклу, а в
умова завжди істинно, то такий цикл називається нескінченним, у протилежному випадку, тобто коли значення виразу дорівнює
такого циклу немає точки виходу. нулю («неправда»), — цикл не працює і керування передається
Оператори циклу використовують для здійснення багаторазового наступному за циклом while оператору. Цикл з пере-думовою
повторення деякої послідовності дій. Кожен цикл складається з може не виконуватися жодного разу.
тіла циклу, тобто операторів, що виконуються декілька разів. Один Зауваження:
прохід циклу називається ітерацією. У мові C++ існують три 1) В тілі цикла обов’язково мусять бути оператори, які
оператори циклу: while, dowhile, for. змінюють значення виразу;
Оператор циклу з передумовою while виконується, якщо умова 2) Цикл не виконається ні разу, якщо з самого початку
перевіряється до початку циклу, і має вигляд: значення виразу дорівнює нулю;
while (<вираз>){ 3) Тип виразу повинен бути арифметичним або таким, що
<оператор>; приводить до нього;
} 4) Значення виразу обчислюється перед кожною ітерацією
Example: циклу;
S = 1+1+1+1….+1 5) Якщо в тілі цкла більше одного оператора, то потрібно
main(){ використовувати складений опер.;
int s = 0; i = 1; n = 15; 6) В () після while можна вводити описання змінної, областю
while ( i <= n){ дії якої є цикл.
s+=1; Оператор while зручно застосовувати у випадках, коли
i++;} кількість ітерацій заздалегідь не відома.
19. Оператори повтору С. Цикл з післяумовою.

Цикл – багаторазове проходження по одному і тому ж коду


програми. Цикли необхідні програмісту для багаторазового
виконання одного і того ж коду, поки істинно якась умова. Якщо Зауваження:
умова завжди істинно, то такий цикл називається нескінченним, у 1) В тілі цикла повинні бути оператори, що змінюють вираз в
такого циклу немає точки виходу. сторону нуля;
Оператори циклу використовують для здійснення багаторазового 2) Цикл виконується принаймі один раз;
повторення деякої послідовності дій. Кожен цикл складається з 3) Тип виразу цілочисельний, або такий, що приводиться до
тіла циклу, тобто операторів, що виконуються декілька разів. Один нього;
прохід циклу називається ітерацією. У мові C++ існують три 4) Вираз обчислюється після кожної ітерації циклу;
оператори циклу: while, dowhile, for. 5) В тілі цикла потрібно використовувати {}

Оператор циклу з післяумовою dowhile звичайно застосовується у У процесі виконання оператора do while спочатку здійснюється
випадках, коли тіло циклу виконується хоча б один раз, і має таку вхід до тіла циклу і виконується оператор, що являє собою тіло
форму запису: циклу (цей оператор може бути простим або складеним); далі
do { перевіряється вираз і, якщо він правдивий («істина»), — цикл
<оператор> повторюється, а коли вираз помилковий («неправда») —
}while(<вираз>); здійснюється вихід з циклу.

20. Оператори повтору С. Цикл з лічильником.


Цикл – багаторазове проходження по одному і тому ж коду програми. Оскільки в операторі for перевірка виразу-умови відбувається перед
Цикли необхідні програмісту для багаторазового виконання одного і того циклом, то у випадку помилкової умови цикл може жодного разу не
ж коду, поки істинно якась умова. Якщо умова завжди істинно, то такий виконуватися.
цикл називається нескінченним, у такого циклу немає точки виходу. Оператор for може використовувати декілька змінних, що керують
Оператори циклу використовують для здійснення багаторазового циклом, а будь-які вирази можуть бути відсутніми, наприклад:
повторення деякої послідовності дій. Кожен цикл складається з тіла
int n, у;
циклу, тобто операторів, що виконуються декілька разів. Один прохід
for (int к = 0, n = 20; к <= n; k++, n--)
циклу називається ітерацією. У мові C++ існують три оператори
y = k * n;
циклу: while, dowhile, for.
Оператор циклу з параметром for має форму запису вигляд: або

int = і;
for ([вир1; вир2; вирЗ]) оператор;,
for (; і < 4; i++)
де вир1 — вираз ініціювання, що використовується для встановлення
початкового значення параметра, це вираз присвоювання; .....................

вир2 — вираз умови, що визначає умову повторення циклу; Операторам циклів с параметром for слід віддати перевагу при
вирЗ — вираз ітерації, який визначає крок зміни параметра, що організації циклів з лічильниками.
керує циклом, після кожного виконання. Зауваження:
Вирази вир1, вир2 та вирЗ — необов’язкові параметри, які 1) може бути відсутній будь-який іх виразів, але крапки з комами
розділяються символом «;». лишаються;
Оператор циклу for реалізується таким чином: for(;;);
 виконується вираз ініціювання (виконання цієї нотації може бути 2) якщо відсутній <вираз1>, то не відбувається ініціалізація змінної;
здійснено до оператора for); 3) якщо відсутній <вираз3>, то не відбувається зміна зманної циклу;
 обчислюється вираз-умова; for ( i; i<=n){ s+=i;}
 якщо умовний вираз приймає значення «істина» — виконуються 4) якщо відсутній вираз2, то немає етапу перевірки і цикл стає
оператори циклу; нескінченним. В цьому впадку за рез перевірки буде не нуль;
 обчислюється вираз ітерації; 5) у виразі1 може бути записано декілька операторів розділених
 знову перевіряється умова; комою;
 як тільки умова прийме значення 0 («неправда»), керування 6) у виразі1 може бути виконане оголошення змінної, але лише однієї
передається оператору, що розташований за оператором (область дії змінної – тіло циклу)
циклу for. 7) ініціалізація виконується лише 1 раз на початку цикла;
8) вираз3 також може складатися з декількох операторів розділених 9) використання дійсних чисел може спричинити некеровані ітерації;
комою

21.Оператори керування ходом програми: goto, break, continue, return.

Оператори передачі керування: Оператор break застосовується в двох випадках. По-перше, в


1)Goto (перериває послідовний хід обчислення) операторі switch з його допомогою переривається виконання
Перед будь-яким оператором в С може бути мітка «М;» послідовності case .У цьому випадку оператор break не передати
роспізнаються лише управління за межі блоку. По-друге, оператор break
goto <мітка>; використовується для негайного припинення виконання циклу
Мітка - це коректний ідентифікатор С, що завершується без перевірки його умови, в цьому випадку оператор break
двокрапкою. Накладається обмеження мітки і goto – мають бути в передає управління оператору, наступного після оператора циклу.
рамках 1 функції. Коли всередині циклу зустрічається оператор break, виконання
Зауваження : циклу безумовно (тобто без перевірки будь-яких умов.)
А) Не варто передавати керування в switch,if, цикли; Припиняється і керування передається оператору, наступному за
Б) Не можна переходити в середину блока, що містить ним. Якщо написати break поза циклом чи switch – помилка
ініціалізацію змінних на оператори, що розташовані після неї, 3)Continue (цей оператор перериває поточну операцію
оскільки в цьому випадку не буде виконана астина коду; цикла і повертає на початок)
Крім goto, в мові С є інші оператори управління (наприклад Можна сказати, що оператор continue трохи схожий на break.
break, continue), тому необхідності в застосуванні goto практично Оператор break викликає переривання циклу, a continue -
немає. В результаті надмірного використання операторів goto переривання поточної ітерації циклу і здійснює перехід до
програма погано читається. Тобто оператор goto дуже наступної ітерації. При цьому всі оператори до кінця тіла циклу
непопулярний, більш того, вважається, що в програмуванні не пропускаються. У циклі for оператор continue викликає
існує ситуацій, в яких не можна обійтися без оператора goto. Але виконання операторів збільшення і перевірки умови циклу. У
в деяких випадках його застосування все ж доречно. Іноді, при циклах while і do-while оператор continue передає управління
вмілому використанні, цей оператор може виявитися вельми операторам перевірки умов циклу.
корисним, наприклад, якщо потрібно залишити глибоко вкладені 4)return (оператор, який виконує вихід із функції)
цикли . Return [ <вираз>];
2) break
Перериває виконання методу, в якому він знаходиться і повертає Якщо метод не передбачає повернення значення, то виклик цього
керування методу, який його викликав. Якщо метод має оператору не є обов’язковим.
повертати значення, то при виклику оператора слід вказати
значення, що повертається, виклик оператору є обов’язковим.
22.Одновимірні масиви. Описання, ініціалізація, операції над масивами.
Масив являє собою кінцеву іменовану послідовність величин од-  Елемент масиву (значення елемента масиву) – значення, що
ного типу, які розрізняються за порядковим номером. Опис ма- зберігається у певному осередку пам'яті, розташованої межах
сивiв у програмі відрізняється від опису простої змінної наявністю масиву, і навіть адресу цієї осередки пам'яті.
після імені квадратних дужок «[ ]», в яких задається кількість Кожен елемент масиву характеризується трьома величинами:
елементів масиву (розмірність). Слід нагадати, що у мові C o адресою елемента - адресою початкового осередку пам'яті, в
нумерація елементів масиву починається з 0. Можливі масиви якій розташований цей елемент;
будь-якого типу,можливо, наприклад, описати массив масивів, o індексом елемента (порядковим номером елемента у
массив рядків. <тип елементів><ім’я масива> [<кількість масиві);
елементів>] o значенням елемента.
Стандартний вид оголошення одновимірного масиву наступний:  Адреса масиву – адреса початкового елемента масиву.
тип ім'я_змінної [розмір];
 Ім'я масиву – ідентифікатор, який використовується для
В одномірному масиві повний розмір масиву в байтах
звернення до елементів масиву.
обчислюється так:
глянемо одновимірні масиви, оголошення яких допускає одну з
загальне число байт = sizeof (базовий тип) * число елементів
таких форм запису:
У С відсутня перевірка меж масивів. Можна вийти за один кінець <тип> <ім’я> [n];
масиву і записати значення в будь-яку змінну, що не відноситься <тип> <ім’я> [n] = {значення};
до масиву, або навіть код програми. Одномірні масиви насправді є <тип> <ім’я> [ ] = {значення};
списками інформації одного типу. Наприклад, таблиця. показує, як  Розмір масиву – кількість елементів масиву
масив а знаходиться в пам'яті, якщо він починається з адреси 1000  Розмір елемента – кількість байт, які займає один елемент
і оголошений наступним чином: char а [7]; масиву.
Операції над масивами: При оголошенні одновимірного масиву, коли масив відразу
1) Усі операції над масивами виконуються поелементно. iніціюється, можна не вказувати його розмір. Якщо ж ініціювання
Допускається лише порівняння (==,!=) масивів, та заодно не здійснюється під час оголошення масиву, то кількість індексів
відбувається порівняння не елементів масиву, які адрес. слід задати обов’язково константним виразом. Наприклад:
( Сортування масивів; пошук максимального елемента) float m [6];
Характеристики масива: float m [6] - {3.4, 4.5, 5.6, 6.7, 8.9, 10.3};
float m[ ]- {3.45, 4.56, 5.67, 6.78);
У випадку, коли float mas [10]= {2.2,34.56};, останні вісім 2) Формування елементів массиву за допомогою певного
елементів масиву одержать значення 0. математичнг співвідношення;
Методи заповнення массивів: 3) Генератор випадкових чисел.
1) З клавіатури;
23.Двовимірні масиви. Описання, ініціалізація, операції над масивами.

Масив це структура даних, представлена у вигляді групи


осередків одного типу, об'єднаних під одним єдиним ім'ям.
Масиви використовуються для обробки великої кількості
однотипних даних. Осередок даних масиву називається
елементом масиву. Елементами масиву можуть бути дані будь- Двовимірні масиви зберігаються у вигляді матриці, де перший
якого типу. Масиви можуть мати як одне, так і більше одного індекс відповідає за рядок, а другий -за стовпець. Це означає, що
вимірювань. Залежно від кількості вимірювань масиви діляться правий індекс змінюється швидше лівого, якщо рухатися по
на одномірні масиви, двовимірні масиви, тривимірні масиви і так масиву в порядку розташування елементів в пам'яті.
далі до n-мірного масиву. Число байт в пам'яті, необхідних для розміщення двовимірного
С дозволяє створювати багатовимірні масиви. Найпростішим масиву, обчислюється таким чином:
видом багатовимірного масиву є двовимірний масив. число байт = розмір другого виміру * розмір першого виміру *
Двовимірний масив - це масив одновимірних масивів. sizeof (базовий тип)
Двовимірний масив оголошується наступним чином: Значення елементів багатовимірного масиву може бути задані
тип імя_массиву [розмір другого виміру] [розмір першого константними значеннями при оголошенні, укладеними у фігурні
виміру]; дужки {}. Однак у цьому випадку зазначення кількості елементів у
Отже, для оголошення двовимірного масиву цілих з розміром рядках та стовпцях має бути обов'язково вказано у квадратних
10 на 20 слід написати: дужках []. Однак частіше потрібно вводити значення елементів
int d [10] [20]; багатовимірного масиву у процесі виконання програми. Для цього
він зручно використовувати вкладений параметричний цикл (For).
Операції над массивами:
2) Сортування масивів;
3) Пошук максимального елемента.
(характеристики отсилка к 22)
24.Функції в С. Призначення, описання функцій. Виклик функцій.

Функція – це послідовність описів і операторів, яку можна викликає. Параметри, котрі зазначаються у заголовку опису
викликати певну кількість разів із будь-якого місця програми. функції, як відомо, називаються формальними, а параметри, які
Функція може повертати певне значення в точку виклику.Функція записані у операторах виклику функції — фактичними.
є підпрограмою, яка може міститися в основній програмі, а може Example:
бути створена окремо в бібліотеці. // функція MyFunction
Описання та виклик функції // параметр x - передається за значенням (параметр-значення)
// параметр y - передається за адресою
Як мінімум, у програмі завжди присутня функція main() // параметр z - передається за посиланням
оголошення повинне бути в тексті програми до її виклику. void MyFunction(int x, int* y, int& c)
Прототип (оголошення функції) задає імя, тип значення, що {
повертає функція, список параметрів, які може приймати функція, x = 8; // значення параметра змінюється тільки в межах тіла
пишемо його на початку програми, описуючи функцію функції
Визначення функції містить тіло функції (ті оператори, які *y = 8; // значення параметра змінюється також за межами
функції
реалізуються в функції). c = 8; // значення параметра змінюється також за межами функції
<клас памяті > <тип результату > < імя функції > (< список return;}
параметрів >) throw (список виключень){ Змінні, що описані у тілі функції, називаються локальними або
<тіло функції> автоматичними. Вони існують тільки під час роботи функції, а
} після реалізації функції система видаляє локальні змінні і звільняє
Виклик функції виконується наступним чином: funcName (arg1,..); пам’ять. Тобто між викликами функції вміст локальних змінних
де, funcName– ім'я функції; arg1,..- аргументи функції (значення знищується, тому ініціювання локальних змінних треба робити
або змінні) щоразу під час виклику функції. За необхідності збереження цих
Примітка: функції можуть не мати параметрів, тоді в круглих значень, їх треба описати як статичні за допомогою службового
дужках нічого писати не треба. слова static.
Дивимося приклад: Розрізняють системні (в складі систем програмування) і власні
1 // вызов функции синуса функції.
2 sin( 60 );  Системні функції зберігаються в стандартних бібліотеках, і
Виклик функції виконується записом її імені, а потім круглих користувачеві не потрібно вдаватися в подробиці їх
дужок (). Якщо функція приймає аргументи, то в круглих дужках реалізації. Досить знати лише їх сигнатуру. Прикладом
передаються аргументи, в порядку, зазначеному в оголошенні системних функцій, використовуваних раніше, є функції
функції. printf () і scanf ().
Механізм передачі параметрів є основним засобом обміну ін-  Власні функції - це функції, написані користувачем для
формацією між функцією, що викликається, та функцією, яка вирішення конкретної підзадачі.
Розбиття програм на функції дає наступні переваги:  Використання функцій полегшує читання і розуміння
 Функцію можна викликати з різних місць програми, що програми і прискорює пошук і виправлення помилок.
дозволяє уникнути повторення програмного коду.  З точки зору викликає програми функцію можна
 Одну і ту ж функцію можна використовувати в різних представити як якийсь "чорний ящик", у якого є кілька
програмах. входів і один вихід. З точки зору викликає програми
 Функції підвищують рівень модульності програми і неважливо, яким чином проводиться обробка інформації
полегшують її проектування. всередині функції. Для коректного використання функції
досить знати лише її сигнатуру.

25.Формальні і фактичні параметри, передача параметрів за адресою і за значенням.

Параметри, що вказуються в заголовку процедури(функції) при її Щоб функція могла змінити значення змінної, треба передавати
описі, називаються формальними параметрами. адресу цієї змінної. Тоді з функції можна буде звертатись за
Параметри, що вказуються при виклику функції, називаються вказаною адресою та оперувати безпосередньо з її значенням, а
фактичними параметрами. не копією занесеною в стек. Очевидно, що відповідний
Коректність передачі параметрів ґрунтується на їхньому порядку формальний параметр функції повинен бути вказівником,
перерахування в заголовку функції і сумісності по присвоюванню базовий тип якого збігається з типом змінної.
між відповідними фактичними і формальними параметрами. 1. При виклику функції:
Сфера дії імен параметрів такая ж, як і локальних даних.Багато а) виконується виділення пам'яті під формальні параметри і
функцій мають кілька параметрів. Задача програміста – локальні дані (у чи стеці в спеціальній області пам'яті для
переконатися, що параметри, що він указує при виклику локальних даних);
(фактичні параметри), відповідають за змістом формальним б) виконується копіювання значень фактичних параметрів у
параметрам. Компілятор може перевірити тільки очевидні пам'ять, виділену для формальних параметрів.
випадки — неправильне число чи параметрів несумісність типів. 2. Під час роботи функції:
По механізму передачі параметри розрізняються: а) зміна значень формальних параметрів не робить ніякого
а) передача за значенням (value); впливу на вміст комірок пам'яті фактичних параметрів.
В тілі функції опрацьовуються копії значень фактичних 3. При закінченні функції
параметрів, занесені в стек. А значення самих фактичних а) пам'ять, виділена під формальні параметри і локальні дані,
параметрів не змінюється очищається;
б) передача за адресою (по посиланню) б) нові значення формальних параметрів, отримані в процесі
роботи функції, губляться разом з очищенням пам'яті.
26.Прототипи функції.
Компілятор С контролює правильність звертання функції та void Print ( double, double, double);
застосування значення, яке вона повертає, тому опис функцій Дозволено також вказувати і прототипі імена параметрів,
повинен передувати звертаню до неї. Однак розташовувати відмінних від тих, що використовуються в описі функції.
функції програми в потрібному порядку (так, щоб кожну void Print ( double q, double l, double u);
функцію, яка викликає інші функції, записати після тих функцій, Стандарт мови С дозволяє записувати порожній список
які вона викликає) складно, а часто й зовсім неможливо (зокрема параметрів у прототипі функції
у разі перехресних викликів між функціями). Оскільки кожна Тип_значення_функції імя_функції ();
функція є автономною програмною одиницею, то вкладення Але практика показала, що таких оголошень треба уникати, бо
функцій не допускається. Крім цього, бажано, щоб першими в компілятор не отримує інформацію про кількість і склад
програмі були записані ті функції, які розкрвають алгоритм формальних параметрів, тому він не може проконтролювати
розв’язання задачі, а функції, які деталізують окремі кроки, правильність запису фактичних параметрів у викликах функцій
розміщувались після них. та у разі потреби перетворити їх до типів відповідних
Довільний порядок запису функцій у С-програмах забезпечується формальних параметрів.
використанням прототипів функцій. Прототип функції відтворює Прототипи бібліотечних функцій
рядок її заголовка і закінчується знаком крапка з комою, тобто Практично кожна С-програма використовує у своїй роботі ті чи
має таку форму: інші бібліотечні функції. Це функції, тексти яких попередньо
Тип_значення_функції імя_функції відкомпільовані, а їхні об’єктні коди зберігаються у стандартній
(оголошення_типів_параметрів); або користувацькій бібліотеці. Прототипи стандартних
Прототипи функцій треба вказувати перед першим звертанням до бібліотечних функції С поділені на окремі групи за призначенням
функцій. Найчастіше всі прототипи або їх більшу частину та записані у спеціальних заголовних файлах із розширенням *.h.
вказують на початку програми. Можна також вказувати Наприклад у файлы stdio.h зiбранi прототипи всiх функцsй
прототипи безпосередньо перед викликаючою функціє. Оскільки високорiвневого буферизованного введення-виведення даних, у
прототип функції надає повну інформацію про параметри та файл conio.h прототипи функцій для обміну данними через
значення, яке повертає, то компілятор може перевірити консольні пристої… У разі використання тих чи інших
правильність звертання до функції, опис яких у тексті пограми бібліотечних функцій необхідно підключити до тексту програми
розташовано нижче. У списку параметрів прототипу функції заготовочні файли, в яких записані прототипи тих функцій.
можна вказувати тільки типи параметрів, опускаючи їх імена. #include <time.h>
Наприклад: Зауваження:
1. Якщо функція нічого не повертає в прототипі указyвати 3. Якщо необхідно оголосити змінний список параметрів, то
void; використовується «…».
2. Визначення функцій має відповідати прототипу по
кількості, типу параметрів та смислу;
27.Передача багатовимірних масивів в функції.

При використанні аргумента-масива в функцію передається над оригіналом даних, тому вихідний масив (або значення
вказівник на його перший елемент, тобто масив завжди змінної) може бути змінено функцією, що викликається.
передається адресою.
У наступному прикладі за допомогою функції підраховується
Для передачі багатовимірного масива в функцію:
сума елементів двох двовимірних масивів. Розмірність масиву
- якщо є інформація про його розмір (що є константою), то відома на етапі компіляції.
проблем з передачею немає:
const int n=5, m=6;
void print34 ( int m[3][4] ) {
for ( int i=0; i<3; i++ ) int sum (const int *a, const int nrow,
for ( int j=0; j<4; j++ ) const int ncol)
printf ( “%d “, m[i][j] ) ; {
} int i, j, s = 0;

- якщо ж потрібно передавати кожного разу різні матриці в одну і for ( i = 0; I < nrow; i++ )
ту ж функцію, то рішення виду for ( j = 0; j < ncol; j++ )
s += a[ i * ncol + j ] ;
void print34 (int m[][], int n, int m) не працює.
return s;
Потрібно передавати масив як вказівник на масив } //sum ()

void print34 ( int * m, int n, int m ) main()


{
Тоді далі до елемента матриці можна звертатись як до елемента int b[2][2] = { {2, 2}, {4, 3} };
вектора: int c[3][3] = { {1,1,1}, {2,2,2},
{3,3,3} };
m [i][j] в матриці == m [i * n + j] у векторі.
printf ( "summa b: %d", sum ( &b[0][0],
Якщо в функцію передається адреса змінної (або адреса 2, 2 ) );
масиву), то всі операції, що виконуються у функції з даними, що printf ( "\nsumma c: %d", sum ( &c[0]
знаходяться в межах видимості зазначеної адреси, виробляються [0], 3, 3 ) );
} // main ()

28.Передача масивів і рядків у функції.

Для передачі масиву чисел в функцію потрібно передати як і у випадку з числами (п. 1).
покажчик на цей масив чисел. Рядок символів можна передавати у функцію двома способами:
Покажчиком на масив чисел є:
 ім’я масиву;  як char*;
 адреса першого елементу масиву.  як char[].

Використовують дві форми оголошення формального параметра Приклад. Функція, що повертає кількість символів ‘+’ (плюс) в
фукції, який повинен відповідати массиву: рядку. Ознакою кінця рядка є символ ‘\0’. Тому не потрібно
передавати у функцію довжину рядка.
1) тип елементів імя_масиву[], наприклад int vec[];
2) тип_елементів *імя_вказівника. Наприклад int *py; Спосіб 1. Визначення функції GetNPlus(). Передача рядка як char
*.
Обидві форми равнозначні та оголошують формальний
параметр,що є вказівнком на початок массиву. Перша форма // (char s[]) можна записати
візуально підкреслюює, що функція опрацьовує маисв, а друга
int GetNPlus(char *s) {
зазначає, що для робот из елементами массиву char *s2;
int n = 0; // кількість символів - результат
Приклад. Нехай потрібно описати функцію SumArrayInts(), що
s2 = s;
отримує масив з цілих чисел і знаходить суму елементів цього while (*s2!='\0'){
if (*s2=='+') n++;
масиву. Функція отримує 2 параметри:
s2++;
 масив цілих чисел; }
return n;
 кількість елементів у масиві.
}// Функція, що повертає кількість символів '+' в рядку
Спосіб 1. Передача масиву як int A[].
Спосіб 2. Визначення функції GetNPlus2(). Використання індексів
Спосіб 2. Передача масиву як int *A.
для доступу до символів рядка. // доступ до символів рядка за
Рядок символів є масивом елементів типу char. Тому, передача індексом
рядка символів у функцію в якості параметру виконується так само
int GetNPlus2(char *s){
int i=0; }
int n=0; return n;
while (s[i]!='\0') { }
if (s[i]=='+') n++;
i++;
29.Глобальні та локальні імена. Класи пам’яті, область видимості, тривалість існування.
Глобальні та локальні імена Зовнішній (external).
int i = 2; // глобальна змінна (помітна у кожному ділянці коду 1. Автоматичний (automatic)
програми) Зона дії автоматичної змінної обмежена блоком або функцією, де
int sum() вона описана. Вона починає існувати після звернення до функції та
{ зникає після виходу з неї. Автоматичні змінні не займають область
int k = 2; // локальна змінна (видна лише усередині функції sum()) пам'яті. Значення автоматичної змінної не може бути змінено
return i+k; іншими функціями і в цих функціях може бути змінні з таким же
} ім'ям.
Змінна k називається локальною, і її область видимості визначена
функції, що відкриває і закриває фігурними дужками sum() – {…}. 2. Зовнішній (external)
Змінна i - глобальна, вона описана поза будь-якими функціями у Зовнішні змінні вводяться як протилежні до автоматичного. Це
програмі. Її область видимості та дії – вся програма без глобальні змінні і до них можна звертатись іменами з будь-якої
обмеження. функції. Оскільки зовнішні змінні доступні скрізь, їх можна
**Функції в С-програмах можна описувати лише на зовнішньому використовувати зв'язок між функціями.
рівні, тому всі функції мають глобальний час існування. Клас пам'яті extern у Сі використовуємо у двох випадках:
-- якщо змінна оголошується у програмі нижче, ніж посилання неї;
Класи пам'яті - Якщо змінна оголошена в іншому модулі.
Клас пам'яті задає місце розташування об'єкта в оперативній #include <stdio.h>
пам'яті і встановлює для нього час існування, тобто час, протягом int x=145;/*Опис зовнішньої змінної*/
якого об'єкт зберігається в оперативній пам'яті, і область main()
видимості, яка визначає частину програми, де можна {
використовувати цей об'єкт. Клас пам'яті можна не вказувати, тоді extern int x,y;
він встановлюється компілятором автоматично за місцем printf("x=%d y=%d\n",x,y);
оголошення об'єкта в програмі. }
У мові Сі існує чотири класи пам'яті: int y=541; /*Опис зовнішньої змінної*/
Автоматичний (Automatic);
реєстровий (register); 3. Реєстровий (register)
Статичний (static);
Регістрову змінна розміщується в регістрі, а не в оперативній 3) Локальні - видимі у блоці, де оголошено об'єкт
пам'яті. Компілятор може зробити змінну регістрової, якщо
дозволяють умови (регістри не зайняті, і на думку компілятора це Тривалість існування
не призведе до збільшення витрат). Регістрові змінні визначаються 1) Глобальні – ці об'єкти існують протягом усього часу виконання
за допомогою службового слова register перед типом: програми;
register int x = 20; 2) Локальні - пам'ять для таких об'єктів виділяється з входом в
Оскільки реєстрова змінна немає адреси, то до неї не застосовна блок, де вони оголошені, коли ж завершуються виконання блоку -
операція взяття адреси. Аргументи функції також можуть бути ці об'єкти свою невизначені і пам'ять звільняється (локальні дані
задані як register. Усередині функції вони будуть поводитися так зберігаються в області пам'яті, яка називається стеком).
само, як і регістрові змінні.
Застосовувати register можна тільки до вказівників і цілого типу.
Використовувати register можна і за умови вказівки формальних
параметрів функцій.
Приклади:
register int nVar;
int func(register int var);
4. Статичний (static)
Статичні змінні, подібно до автоматичних, локальні в тій функції
або блоці, де вони описані. Різниця у тому, що статичні змінні не
зникають, коли функція (блок) завершує роботу, та його значення
зберігаються для наступних викликів функції.
Модифікатор static можна також застосовувати до глобальних
змінних. В цьому випадку область видимості такої змінної
обмежується файлом, в якому вона оголошена. Т. е. Якщо функція
оголошена як static, то вона видна лише у своєму файлі. З іншого
файлу до static функції не можна звернутися.

Область видимості
Область видимості змінної – це ділянка коду (функція, цикл,
простір імені), у якому ця змінна оголошена (прописана). Поза цією
ділянкою – компілятор її не бачить (вона недоступна).
За областю видимості:
1) Глобальні – видимі в межах однієї програми;
2) Частково глобальні – видимі в межах одного програмного
файлу;
30.Символи та рядки. Операції над рядками. Функції для роботи з рядками.
Символи та рядки Праворуч від знака присвоювання записано рядкову константу.
 Символ - елементарна одиниця, певний набір, певний зміст. У Наприкінці рядка автоматично додається нуль ('\0'). Константи
мові програмування передбачено використання символьних символьних рядків поміщаються до класу статичної пам'яті.
констант. Третій спосіб:
 Символьна константа - це ціле значення (типу int) представлено Неявна вказівка, що масив використовується. У лівій частині від
як символу, поміщеного в одинарні лапки, наприклад 'a'. знака привласнення вказується вказівник на символ:
 Рядок у мові Сі є одномірним масивом символів, останнім char *s="Другий варіант ініціалізації";
елементом якого є символ кінця рядка – нуль. Усі бібліотечні функції, призначені для роботи з рядками, можна
char ім'я[довжина]; поділити на три групи:
**Завершальний нуль \0 є частиною рядка, тобто його останнім  введення та виведення рядків;
символом.Тому необхідно оголошувати символьні масиви на один  перетворення рядків;
символ більше, чим потрібно для самого рядка.  обробка рядків.
**Примітка: Введення та виведення
1. Лапки не є елементом рядка. Для введення та виведення строкової інформації можна
2. Довжина порожнього рядка дорівнює 1 за рахунок використовувати функції форматованого введення та виведення
завершального нуля. (printf та scanf). Для цього в рядку формату під час введення або
3. Рядок може бути порожнім, а символ - ні. виведення строкової змінної необхідно вказати специфікатор типу
4. Максимальна довжина рядка – 255. %s.
**Якщо в оголошенні вказано розмір масиву, а довжина char str[31] = "";
ініціалізуючого рядка перевищує вказаний розмір, то зайві printf("Введіть рядок: ");
символи відкидаються: scanf("%30s",str);
char code [3] = "abcd"; // Тільки три перші символи заносяться до printf("Ви ввели: %s",str);
масиву, символ d і \ 0 відкидаються. Недоліком функції scanf при введенні рядкових даних є те, що
роздільниками цієї функції є:
Оголошення рядків  переклад рядка,
Перший спосіб:  табуляція;
Оголошення масиву символів (не забудьте додати місце для  пробіл.
завершального нуля): Для введення та виведення рядків у бібліотеці stdio.h містяться
char s[40+1]; спеціалізовані функції gets та puts.
Другий спосіб: Функція gets призначена для введення рядків і має наступний
Присвоїти рядковій змінній початкове значення (при цьому заголовок:
довжину рядка компілятор може обчислити сам): char * gets (char * buffer);
char s[] = "Приклад ініціалізації рядка"; Функція puts призначена для виведення рядків і має наступний
заголовок:
int puts(const char *string); Функція Пояснення
Функція gets не контролює вихід за кордон. Замість неї
об'єднує рядок s2 з рядком s1. Результат
використовується функція fgets з трьома параметрами: strcat(S1, S2)
char*fgets(char*buffer, int size,stdin); зберігається в s1
де buffer – рядок для запису результату, size – максимальна об'єднує n символів рядка s2 з рядком s1.
кількість байт, яке запише функція fgets, stdin читання з клавіатури strncat(S1, S2, N)
Результат зберігається в s1
потрібно вказати.
char str[102] = ""; Порівняння рядків
printf("Введіть рядок: "); порівнює рядок s1 з рядком s2 і повертає
fgets(str, 102, stdin);
результат типу int: 0 - якщо рядки еквівалентні,
printf("Ви ввели:"); strcmp(S1, S2)
puts(str); >0 - якщо s1<s2, <0 – якщо s1>s2 З урахуванням
регістру
Перетворення рядків
порівнює n символів рядка s1 з рядком s2 і
 double atof (const char *string); // Перетворення рядка в
число типу double повертає результат типу int: 0 - якщо рядки
strncmp(S1, S2, N)
 int atoi (const char * string); // Перетворення рядка в число еквівалентні, >0 - якщо s1<s2, <0 – якщо s1>s2 З
типу int урахуванням регістру
 long int atol (const char * string); // Перетворення рядка в
порівнює рядок s1 з рядком s2 і повертає
число типу long int
 long long int atoll (const char *string); // Перетворення рядка результат типу int: 0 - якщо рядки еквівалентні,
stricmp(S1, S2)
в число типу long long int >0 - якщо s1<s2, <0 – якщо s1>s2 без урахування
Функція Пояснення регістру
визначає довжину вказаного рядка, без урахування порівнює n символів рядка s1 з рядком s2 і
StrLen(ім'я_рядка)
нуль-символу strnicmp(S1, S2, повертає результат типу int: 0 - якщо рядки
Копіювання рядків N) еквівалентні, >0 - якщо s1<s2, <0 – якщо s1>s2 без
виконує побайтне копіювання символів з рядка s2 урахування регістру
STRCPY(S1, S2)
в рядок s1 Обробка символів
виконує побайтное копіювання n символів з рядка повертає значення true, якщо с є буквою або
strncpy(S1, S2, N) isalnum(с)
s2 в рядок s1. повертає значення s1 цифрою, і false в інших випадках
Конкатенация строк ISALPHA(с) повертає значення true, якщо с є буквою, і false в
Функція Пояснення Функція Пояснення
інших випадках якого символу рядка s2 в рядку s1
повертає значення true, якщо с є цифрою, і false Функції перетворення
isdigit(с)
в інших випадках atof(S1) перетворить рядок s1 в тип double
повертає значення true, якщо с є буквою atoi(S1) перетворить рядок s1 в тип int
ISLOWER(с)
нижнього регістру, і false в інших випадках
atol(S1) перетворить рядок s1 в тип long int
повертає значення true, якщо с є буквою
ISUPPER(с) Функції стандартної бібліотеки вводу / виводу <stdio>
верхнього регістру, і false в інших випадках
зчитує символ с зі стандартного потоку введення,
повертає значення true, якщо с є пробілом, і falseGetChar(c)
isspace(с) повертає символ у форматі int
в інших випадках
зчитує потік символів зі стандартного пристрою
якщо символ с, є символом нижнього регістра, то
gets(s) введення в рядок s доти, поки не буде натиснута
функція повертає перетворений символ с у
ToUpper(с) клавіша ENTER
верхньому регістрі, інакше символ повертається
без змін.
Функції пошуку
пошук першого входження символа с в рядку s. У
разі вдалого пошуку повертає покажчик на місце
strchr(s,с)
першого входження символу с. Якщо символ не
знайдено, то повертається нуль.
визначає довжину початкового сегмента рядка s1,
strcspn(S1, S2)
який містить символи, що не входять в рядок s2

повертає довжину початкового сегмента рядка s1,


strspn(S1, S2) який містить тільки ті символи, які входять в рядок
s2

strprbk(S1, S2) Повертає покажчик першого входження будь-


31. Функції вводу-виводу в мові С. Форматний вивід.
1. «Класичний» введення/висновок
У мові С визначено три стандартні потоки введення/виводу: Форматне виведення заданої інформації на екран виконує функція:
 stdin - стандартний пристрій введення (клавіатура);
іnt printf (рядок_формату, список виразів_виведення) ;
 stdout – стандартний пристрій виведення (екран);
яка перетворює значення виразів, заданих у списку виведення,
 stderr – стандартний пристрій для виведення повідомлення
про помилки (також екран). відповідно до специфікацій, записаних у рядку формату, і передає
Найпростіше введення/виведення: результат перетворення у стандартний вихідний потік stdout, який
 getch() – введення одного символу без його відображення здебільшого пов'язаний з виведенням на екран. Функція повертає
на екрані;
цілочислове значення. За умови успішного завершення це
 getche() - Введення одного символу з відображенням його
на екрані; значення дорівнює загальній кількості виведених символів. У разі
 putchar(int c) - Виведення одного символу на екран. виникнення помилки в процессі виведення даних printf() повертає
Всі ці функції вимагають увімкнення заголовного файлу <conio.h>. від’ємне значення.
Всі інші функції введення/виводу визначені в заголовку <stdio.h>.
Першим параметром функції printf() є рядок_формату –
2. Введення/виведення з екрана
символьний рядок, до складу якого можуть входити три групи
Для введення та виведення на екран використовуються функції
scanf та printf відповідно, прототипи яких мають такий вигляд: символів:
scanf ( );  звичайні ASCII-символи – вони виводяться без змін;
printf();  керуючі символи (ескейп послідовності) – виконують
Специфікація формату, що складається з обов'язкових та
відповідну дію;
необов'язкових полів, має такий вигляд:
%[прапори] [ширина] [.точність] тип  специфікації формату – задають інтерпретацію і форму
%d – надрукує десяткове ціле; зображення відповідного за порядком параметра зі списку
%u – надрукує десяткове ціле без знака; виведення; значення цього параметра буде підставлене замість
%f - надрукує речове число як 123.456789, зазвичай прим. для типу
специфікації формату в рядок виведення.
float;
%e - надрукує речове число в E-форматі, зазвичай прим. для типу Якщо специфікації формату відсутні, то рядок формату
double; виводиться як звичайний символьний рядок. Наприклад якщо
%s - друкує рядок; рядок формату printf() буде таким:
%c – надрукує символ;
Printf(“\t Почнемо! \n Введіть своє ім’я – “);
Щоб виводити великі числа, наприклад, з типом long int, можна
то на екран виведеться наступний текст:
скористатися специфікатором %ld.
Почнемо!
Введіть своє ім’я - _
Для зчитування даних у мові C використовується функція scanf. Її
використання схоже на функцію prinf - спочатку визначається
форматний рядок, потім передаються змінні, в які необхідно
записати результат. Наприклад, для зчитування двох цілих чисел
функція викликається так:

scanf("%d%d", &a, &b);

Основна відмінність функції scanf в тому, що при зчитуванні чисел


(або значень типу char) їй необхідно передавати адреси змінних (у
мові C всі параметри передаються за значенням, тому щоб функція
scanf могла модифікувати змінну, необхідно передати адресу цієї
змінної в функцію). Тому перед назвами змінних пишемо знак
амперсанда ("&").

Якщо у форматному рядку зустрічається пробіл, то він означає, що


буде зчитане будь-яке число пробілових символів, можливо навіть
нульове.
32.Структура як тип і сукупність даних. Операції над структурами. Бітові поля.

ТИП СТРУКТУРА Ініціалізація полів структури може здійснюватися двома


Структура - це об'єднання кількох об'єктів, можливо, різного типу способами:
під одним ім'ям, яке є типом структури. Як об'єкти можуть • присвоєння значень елементам структури у процесі оголошення
виступати змінні, масиви, покажчики та інші структури. Структури змінної, що належить до типу структури;
дозволяють трактувати групу пов'язаних між собою об'єктів як struct Ім'яСтруктури Ім'яЗмінної={ЗначенняЕлементу1,
безліч окремих елементів, бо як єдине ціле. ЗначенняЕлементу_2, }
ІНІЦІАЛІЗАЦІЯ СТРУКТУР Ім'я елемента структури є складовим. Для звернення до елементу
структури необхідно вказати ім'я структури та ім'я самого
елемента. Вони поділяються точкою:
Ім'яЗмінної.ІмяЕлементуСтруктури
printf("%d %s %d",bd.day, bd.month, bd.year);
• присвоєння початкових значень елементам структури за
допомогою функцій введення-виводу (наприклад, printf() та
scanf()).
• Ім'я структурної змінної може бути вказано під час оголошення
1. У першому випадку опис структури визначає новий тип, ім'я
структури. В цьому випадку воно розміщується після закриває
якого можна використовувати так, як і стандартні типи.
фігурної дужки }. Область видимості такої структурної змінної
2. В іншому випадку опис структури служить визначенням змінних.
визначатиметься місцем опису структури.
ДОСТУП ДО ЕЛЕМЕНТІВ СТРУКТУРИ
Доступ до елементів структури чи об'єднання можна здійснити за
ТИПИ І КІЛЬКІСТЬ ПОЛІВ СТРУКТУРІ
допомогою покажчиків. І тому необхідно ініціалізувати покажчик
Примітка:
адресою структури чи об'єднання.
1. Кількість та тип полів – будь-які.
При цьому звернення до полів структури через покажчик буде
2. Вкладенность структур дозволена, тобто елементом структури
виглядати як:
може
покажчик->поле \ (*покажчик).поле
бути іншою структурою.
покажчик - покажчик на структуру чи об'єднання;
3. Якщо деякі поля мають однакові типи, їх ідентифікатори можуть
поле - поле структури чи об'єднання;
бути перераховані через кому.
Доступ до елементів структур відбувається за допомогою
уточнюючих імен:
ОПЕРАЦІЇ НАД СТРУКТУРАМИ
<ім'я структури>. <ім'я поля>
Набір операцій над структурами як єдиним цілим досить
обмежень:
- передача структури у функцію як аргумент, };
- повернення структури як значення функції Структура point містить два бітові поля. Перше поле x має ширину 5
- отримання адреси біт.. Друге поле - y - має ширину 3 біта.
- присвоювання однієї структури іншої, якщо вони мають **Особливістю бітових полів є те, що не можна отримати їхню
однаковий тип. адресу
Усі операції відбуваються над полями структур відповідно до їх
типу.

БІТОВІ ПОЛЯ
Бітові поля - це особливий вид полів структури (можуть бути будь-
якого типу). При роботі з бітовими полями кількість бітів, що
виділяється для зберігання кожного поля, відокремлюється від
імені двокрапкою.
тип імені: КількістьБіт

Працюючи з бітовими полями необхідно уважно стежити, щоб


значення змінної не зажадало пам'яті більше, ніж під неї виділено.
Бітові поля можуть бути будь-якого цілого типу.
<спеціфікація типу> [<ідентифікатор>]:<константний вираз>;
Бітові поля структур використовуються:
- для економії пам'яті, оскільки дозволяють щільно запакувати
значення;
- організації зручного доступу до регістрів зовнішніх пристроїв, у
яких різні біти можуть мати самостійне функціональне
призначення.
**Битове поле неспроможна існувати саме собою. Воно може бути
лише елементом структури чи об'єднання. Наприклад, у межах
структури бітові поля мають таку форму визначень:
struct point
{
unsigned int x:5;
unsigned int y:3;
33.Об’єднання як тип даних

Об'єднаннями називають складний тип даних, що дозволяє елемента структури (. і - & gt;). Не виконуються операції
розміщувати в тому самому місці оперативної пам'яті дані різних порівняння,
типів. Розмір оперативної пам'яті, необхідний зберігання спроба порівняння наводити до синтаксичної помилки.
об'єднань, визначається розміром пам'яті, необхідним розміщення
даних типу, що вимагає максимальної кількості байт. Коли Примітки:
використовується елемент меншої довжини, ніж найдовший 1. Значення поточного елемента втрачається, коли другому
елемент об'єднання, цей елемент використовує тільки частина елементу об'єднання надається значення.
відведеної пам'яті. Всі елементи об'єднання зберігаються в одній 2. Жодне з полів об'єднання може бути оголошено з класом
області пам'яті, починаючи з однієї адреси. пам'яті static.
union Ім'яОб'єднання 3. Коли оголошується об'єднання, то з ним визначається набір
{ типів значень, які можуть зберігатися в цьому об'єднанні. У кожний
тип ИмяОбъекта1; момент часу об'єднання може зберігати значення лише одного
тип ИмяОбъекта2; типу з набору.
... 2. Контроль за тим, значення якого типу зберігається на даний
тип Ім'яОб'єкта; момент в об'єднанні, лежить на програмісті.
}; 3. Об'єднання використовують для економії пам'яті в тих випадках,
коли відомо, що більше одного поля одночасно не потрібне. Обсяг
Об'єднання застосовуються для таких цілей: пам'яті, виділеної під об'єднання, залежить від реалізації системи.
• для ініціалізації об'єкта, якщо в кожний момент часу лише один із 4. Значення потокового елемента втрачається, коли іншому
багатьох об'єктів є активним; елементу об'єднання присвоюється значення.
• для інтерпретації представлення одного типу даних як іншого 5. Результат звернення не до того елемента об'єднання, який був
типу. останнім розташований у пам'яті, невизначений.
Наприклад, зручно використовувати об'єднання, коли необхідно 6. Деякі об'єднання не можуть бути легко перенесені на інші
речове число типу float представити у вигляді сукупності байтів комп'ютерні платформи.

Операції над об'єднаннями: У порівнянні зі структурами на об'єднання накладаються певні


- присвоювання тотожних об'єднань, обмеження:
- операція обчислення адреси об'єднання (&amp;) 1. об'єднання може ініціалізуватися лише значенням його першого
- доступ до елемента об'єднання за допомогою операцій доступу елемента;
до 2. об'єднання не може містити бітові поля;
3. об'єднання не може містити віртуальні методи, конструктори,
деструктори та операцію присвоювання;
4. об'єднання не може входити до ієрархії класів.

34.Графічні можливості С.

Знайомство з мовою програмування С не обмежується лише Якщо не заданий ніякий шлях, то пошук здійснюється в поточному
написанням звичайних консольних програм. Використовуючи каталозі.
графічні можливості, які в С підтримуються можна зробити Початок координат знаходиться у верхньому лівому куті, вісь 0х
программу більш наглядною. Для робот из графікою в С була направлена вліво, а вісь 0у вниз. Координати вираховуються в
розроблена бібліотека <graphics.h>. Дана бібліотека дозвляє легко пікселях
виводити графічні обєктти с потрібним дозволом та глубиною У бібліотеці міститься велика кількіть різних функцій:
кольору. Дана бібліотека дозволяє віводить на екран наступні gotoxy () поміщає курсор текстового екрану в точку з
елементи графіки: точки, прямі та ламані лінії, прямокутники, координатами х, у. Якщо хоча б одна з координат недійсна, то
многокутники, кола,еліпси, дуги, сектори, а також текстові ніяких дій не виконується.
надписи. setcolor () встановлює поточний колір малювання рівним
Для роботи в графічному режимі треба підключити бібліотеку: кольором, заданим параметром color. Список допустимих кольорів
#include <graphics.h> для кожного відеоадаптера може бути знайдений в описі функції
Функція initgraph () використовується для ініціалізації графічної setpalette ().
системи і завантаження відповідного графічного драйвера. ellipse () малює еліпс з використанням поточного кольору. Центр
Функція initgraph () завантажує в пам'ять графічний драйвер, що еліпса розташовується в точці х, у. Довжина радіусів за
відповідає номеру, на який вказує параметр driver. Без графічного напрямками х і у задається аргументами xr і yr. Та частина еліпса,
драйвера, завантаженого в пам'ять, ніякі графічні функції не яка фактично виводиться на екран, задається величинами start і
можуть виконуватися. Використовуваний графічними функціями end, вимірюється в градусах. Якщо параметр start дорівнює 0, a end
режим відео задається у вигляді числа, на яке вказує параметр - 360, то еліпс буде зображений цілком.
mode. Нарешті, шлях до драйвера може бути заданий в рядку path.
#include <graphics.h>
int main() circle(x, y, radius);
{ getch();
int gd = DETECT, gm; closegraph();
int x = 320, y = 240, radius; return 0;
}
initgraph(&gd, &gm, "C:\\TC\\BGI");
for ( radius = 25; radius <= 125 ; radius =
radius + 20)

35.Директиви препроцесора. Вказівки компілятору.


Препроцесор — це спеціальна програма, що опрацьовує текстовий їхня дія починається з точки програми, де вони записані, і до кінця
файл С-програми перед компіляцією. Він входить як обов’язковий файлу, якщо не визначено інакше.
компонент до складу компілятора і середовища програмування
Є чітко визначений список ключових слів:
мови С. Результатом роботи препроцесора є готовий до компіляції
• define - задає макровизначення (макроси) або константу
текст програми, в якому реалізовані всі задані директиви
• undef - скасовує попереднє значення
(інструкції) попереднього опрацювання програми. • include - вставляє текст із вказаного файлу (імпортує)
Директиви препроцесора - інструкції, записані у вихідному тексті • if – здійснює умовну компіляцію при істинності конст. вирази
програми, і призначені до виконання препроцессором Сі. • elif - гілка умовної компіляції, утворена злиттям else та if
Директивою препроцесора називається рядок у коді, який • endif – кінець гілки умовної компіляції
виглядає таким чином • ifdef – здійснює умовну компіляцію, якщо константа визначена
# Ключове_слово параметри. • ifndef - здійснює умовну компіляцію при невизначеності
константи
Директиви препроцесора використовуються для того, щоб: • else - гілка умовної компіляції при помилковості висловлювання
 полегшити модифікацію вхідних програм і зробити їх • line - препроцесор змінює номер поточного рядка та ім'я файлу
незалежнішими від різних реалізацій мови, комп'ютерів та для компіляції
середовищ; • error - освітлення повідомлення із зупинки компіляції
 замінювати лексеми у тексті програми; • pragma – дія, що залежить від конкретної реалізації компілятора
 вставлення у файл вміст іншого файлу; • warning – освітлення повідомлення без зупинки компіляції
 встановити режими умовної компіляції, • якщо ключове слово не вказано, директива ігнорується
 заборонити компіляцію певної частини вхідного файлу • якщо вказане слово не існує, виводиться повідомлення про
тощо. помилку

Примітка: Директиви #if, #elif, #else, #endif синтаксис:


1. Деякі директиви можуть містити аргументи.  #if <обмежений-константний-вираз> [<текст>]
2. Директиви можуть бути записані будь-де вхідного файлу, але  [#Elif <обмежений-константний-вираз> <текст>]
 [#Elif <обмежений-константний-вираз> <текст>]
 [#Else <текст>]
 #endif
це директиви, які керують умовною компіляцією. Вони дозволяють
виключити з процесу компіляції будь-які частини вихідного файлу
через перевірку певних умов (константних виразів).

**Порожня директива, складається з рядка зі знаком #. Ця


директива завжди ігнорується.

Вказівки компілятора
Вказівки компілятора (прагма) – інструкції, записані у вихідному
тексті
програми та призначені для управління діями компілятора мови у
певних ситуаціях.

**В Сі прийнято записувати ідентифікатори іменованих констант і


макровизначення символами верхнього регістру, щоб відрізняти їх
від імен змінних та функцій, але це не є вимогою.

Іменовані константи - ідентифікатори, які замінюють числові чи


текстові константи чи довільну послідовність символів.
Макровизначення - ідентифікатори, які становлять певну
послідовність дій, задану операторами чи виразами мови Сі.
(макровизначення можуть мати аргументи. Звертання до
макровизначення називається макровикликом).

You might also like