Теорія до екзамену Технології програмування Отенко

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
Кібербезпека
Кафедра:
ЗІ

Інформація про роботу

Рік:
2024
Тип роботи:
Теорія
Предмет:
Технологія програмування та створення програмних продуктів
Група:
КБ 14

Частина тексту файла (без зображень, графіків і формул):

1.)Букви, цифри і символи пропуску мови СІ великі та малі букви латинського алфавіту (А...Z, a...z); арабські цифри (0...9); символ пропуску(пробіл або табуляція) 2.)Розділювачі та спеціальні символи алфавіту мови СІ Розділювачі: . ‘ , [ ] ( ) { } + – / % \ ; : ? < = > | ~ ^ & * # ! _ Спеціальні символи: \n – символ нового рядка; \r – символ повернення каретки; \t – символ горизонтальної табуляції; \v – символ вертикальної табуляції; \b – символ повернення на крок; \f – символ переведення формату; \\ – зворотний слеш; \  – апостроф; \  – лапки; \0 – нуль-символ; \ddd – байтове значення у вісімковому представленні; \xdd – байтове значення у шістнадцятковому представленні 3.)Цілі константи і константи з плаваючою крапкою Ціла константа – це десяткове, вісімкове чи шістнадцяткове число, яке представляє ціле значення. Десяткова константа має наступний формат представлення: <цифри> Кожна ціла константа має тип, що визначає її представлення у пам’яті (див. 1.2) Десяткові константи можуть мати тип int (цілий знаковий тип) або long (довгий цілий знаковий тип). Якщо значення десяткової константи більше максимального значення, яке може бути представлено типом int, то дана константа представляється типом long. Можна явно визначити для любої цілої константи тип long, дописавши до неї суфікс l або L. Наприклад, константа із значенням 10 буде мати тип long тільки у тому випадку, якщо її записати як 10L Константа з плаваючою крапкою – це дійсне десяткове додатне число. Воно містить цілу частину, дробову частину і експоненту. Такі константи мають наступний формат представлення: [<цифри>] [ . <цифри>] [<e>[ - ]<цифри>] де <цифри> – одна чи більше десяткових цифр (від 0 до 9); < е > – ознака експоненти, яка задається як Е або е. Зауваження: а) або ціла або дробова частина константи може бути відсутня, але не обидві одночасно. б) або десяткова крапка з дробовою частиною або експонента може бути відсутня, але не обидві одночасно. Константи з плаваючою крапкою завжди специфікують додатні значення. Для формування від’ємного значення застосовується операція “унарний мінус”. Приклади констант з плаваючою крапкою: 15.75 1.575Е1 1575е-2 -0.0025 -.175Е-2 Усі константи з плаваючою крапкою мають тип double 4.)Символьні константи і символьні рядки Символьна константа – це літера, цифра, знак пунктуації чи спеціальний символ, обрамлений апострофами. Символьна константа має наступну форму представлення: ' <символ> ' <символ> може бути довільним символом (у тому числі довільним спеціальним символом), за виключенням символів апострофа ('), зворотного слеша (\) і нового рядка (\n). Символи апострофа, зворотного слеша і нового рядка представляються відповідними спеціальними символами – ' \' ' , ' \\ ' та ' \n '. Приклади символьних констант: ' а ' - мала літера а; ' ? ' - знак питання; ' \b ' - символ повернення на крок. Усі символьні константи мають тип int. Символьні рядки – це послідовність символів обрамлених подвійними лапками “abc123” 5.) Ідентифікатори,ключові слова і коментарі. Ідентифікатор – це послідовність букв, цифр і символів підкреслення, яка починається з букви або символа підкреслення. Ідентифікатори вживаються для іменування різних об’єктів: типів констант, змінних, функцій тощо. Допустиме довільне число символів у ідентифікаторі, однак лише перші 32 символи розглядаються компілятором як такі, що мають значення. Приклади правильних ідентифікаторів: a temp1 top_of_page Компілятор мови Сі розглядає букви верхнього і нижнього регістрів як різні символи. Тому наступні ідентифікатори є різними: add ADD aDD Ключові слова – наперед визначенні індетифікатори, які мають спеціальне значення для компілятора мови Сі. Ключові слова не можна використовувати як ідентифікаториж auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, register, restrict, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while. Класи пам*яті: auto, extern, register,static. Типи даних :typedef,union,char,unsigned,double,enum,float,int,long,short,signed,struct,void. Оператори : switch,break,case,continue,default,while,do,else,for,goto,return. Операція : sizeof Коментар – це послідовність символів, яка сприймається компілятором мови Сі як окремий символ пропуску та ігнорується. Синтаксис коментаря має наступний вигляд: /* < символи > */ Приклад коментаря: /* це коментар */ Коментарі можуть займати більше одного рядка програмного тексту: /* Коментар може займати декілька рядків */ Коментарі не можуть містити вкладених коментарів тому наступний приклад буде помилковим: /* Неприпустимі /* вкладені */ коментарі */ 6.)Загальна структура програми мови СІ. Cтандартні заголовочні файли включаються у вихідну програму за допомогою директиви препроцесора #include. У файлі stdio.h (standart input/output header – заголовний файл вводу/ виводу) містяться оголошення функцій (прототипи) вводу/виводу, зокрема для стандартних бібліотечних функцій printf та scanf. У файлі math.h знаходяться прототипи стандартних бібліотечних математичних функцій За допомогою функції scanf відбувається зчитування значень із стандартного пристрою вводу (клавіатури) і присвоєння їх змінним вихідної програми. За допомогою функції printf здійснюється вивід інформації на дисплей. Синтаксис виклику функції printf має наступний вигляд #include <stdio.h> /* включення файлів stdio.h та math.h */ #include <math.h> /* у вихідну програму*/ void main(void) /* визначення головної функції*/ { int x = 5; /* визначення змінної х (оголошення з ініціалізацією значення */ double y, z; /* оголошення змінних у та z*/ scanf( “%lf”, &y ); /* зчитування з клавіатури значення типу double та присвоєння його змінній y */ z=x+pow(y,2); printf(“x = %d, z = %lf ”, x, z ); /* вивід на дисплей значень змінних x та z */ } 7.)Час життя та область дії об*єкта Об*єкт створюється ,коли зустрічається його визначення і знищується коли його ім*я виходить із області видимості. Оголошення використовуються для визначення інтерпретації,що надається кожному ідентифікатору(імені).Це означає що потрібно задати тип ідентифікатора щоб повідомити компілятор,до якого виду об*єктів відноситься ім*я . Приклад: Char symbol Int number = 1 Double sqrt Глобальні змінні створюються та ініціалізуються(тільки) один раз й живуть “живуть” до завершення програми 8.)Простір імен. Це перелік об*ктів імена яких в межах спільної області дії повинні бути унікальними. В перший простір імен входять змінні ,функції,формальні параметри функції, елементи списку переліку і оголошення імен типу Другий простір імен це теги Третій простір імен утворюють елементи структури і об*єднання. Четвертий простір імен утворюють мітки операторі 9.)Базові типи даних мови СІ Базові типи Назва Довжина, байт Діапазон значень  Цілі знакові типи  Символьний Цілий Короткий цілийДовгий цілий сhar int short або short int long або long int 1 2 або 4 2 4 –128...127 – 32768...32767 – 231....231 –1  Цілі беззнакові типи  Символьний Цілий Короткий Цілий Довгий цілий unsigned char unsigned або unsigned int unsigned short unsigned long 1 2 або 4 2 4 0...255 0...65535 – 232….232 –1  Типи з плаваючою комою   Плаваючий Плаваючий довгий float double або long float 4 8 – 231....231 –1 10-38...1038   10.)Описувачі мови СІ Описувачі в мові Сі дозволяют оголосити наступні об'єкти: прості змінні, масиви, покажчики і функції. У найпростішому випадку, якщо оголошується проста змінна базового типу, або структура, або об'єднання, описувачем є ідентифікатор. При цьому об'єкту присвоюється тип, заданий специфікацією типу. Складний описувач – це ідентифікатор, доповнений більш ніж однією ознакою типу масив, покажчик або функція. 11.) Оголошення простої змінної. Змінні оголошуються за допомогою оператора наступної форми: тип ім'я_змінної; де тип - це тип даних, що зберігаються в змінній; а ім'я_змінної - це її ім'я. Оголосити можна змінну будь-якого дійсного типу. Важливо підкреслити, що можливості змінної визначаються її типом. Всі змінні повинні бути оголошені до їх застосування. Це потрібно для того, щоб повідомити компілятор про тип даних, що зберігаються в змінній, перш ніж він спробує правильно скомпілювати будь-який оператор, в якому використовується змінна. 12.)Оголошення змінної перелічуваного типу. Такий тип задається переліком усіх елементів множини допустимих значень. Кожне значення іменується певним ідентифікатором і зазначається у списку, який береться у круглі дужки. Ідентифікатор перелічуваного типу треба оголосити у програмі в розділі type. Синтаксис оголошення перелічуваного типу такий: type <ідентифікатор типу> = (<ідентифікатор_1>,<ідентифікатор_2>,...,<ідентифікатор_n>); Тут <ідентифікатор типу> - це ідентифікатор перелічуваного типу; <ідентифікатор_1>.....<ідентифікатор_n> — допустимі значення перелічуваного типу. 13.)Оголошення структури. Оголошення структури починається з ключового слова struct і містить список оголошень, укладений у фігурні дужки:  struct імя_структури {  список оголошень;  };  імя_структури іноді називають тегом структури.  Перераховані в структурі змінні називаються елементами. Елементами структур можуть бути:  - Змінні та масиви базових типів,  - Змінні та масиви для користувача типів, крім типу самої структури імя_структури,  - Покажчики на будь-які типи, включаючи і тип самої структури імя_структури,  - Функції.  14.)Оголошення об*єднання Оголошення об*єднання подібне до оголошення структури:задається шаблон об*єднання та перелічуються відповідні змінні.Шаблон об*єднання можна оголошувати окремо або одночасно з оголошенням змінних.У разі автономного оголошення шаблону об*єднання застосовують синтаксичну конструкцію,аналогічну до шаблону структури,але починають її ключовим словом union Union тег_об*єднання { тип_поля1 ім*я поля1; тип_поля2 ім*я_поля2; . . . тип_поляk ім*я _поляk; змінні з типом об*єднання можна оголошувати спільно з оголошенням шаблону або пізніше.У декларації typedef можна сумістити оголошення шаблону об*єднання та його найменування..Оголошуючи змінну з типом об*єднання ,можна відразу проініціалізувати цю змінну,тобто записати у її ділянку певне початкове значення. 15.)Оголошення масиву. Масиви повинні бути оголошені явно,щоб компілятор міг виділити для кожного з них ділянку пам*яті відповідного обсягу.Оголошення масивів виконують через таку синтаксичну конструкцію: тип_елементів ім*я масиву[кількість_елементів]; тут тип тип_елементів - довільний допустимий для СІ простий чи складений тип; ім*я масиву – ідентифікатор,що відповідає правилам запису імен; квадратні дужки [] – обов*язкова ознака масиву; кількість_елементів – константа чи константний вираз,що визначає розмірність даного масиву; Приклад оголошення масивів: double arr[15] масив з 15-ти дійсних чисел int vector[4*N] масив з 4*N цілих чисел, N – константа Оголошуючи масиви,можна відразу ініціалізувати їх елементи.Застосовуючи дві форми ініціалізації. 1)із значенням кількості елементів масиву. 2)без зазначення кількості елементів масиву. 16.)Оголошення покажчика(змінної). Всі вказівники-змінні обов*язково повинні бути оголошені.Для цого застосовують таку синтаксичну конструкцію базовий_тип *ім*я_вказівника; базовий_тип - тип об*єктів програми,адреси яких може зберігати даний вказівник. * - ознака того,що наступна змінна є вказівником. ім*я_вказівника – звичайний ідентифікатор Приклади оголошень вказівників: char * pc; вказівник на дані типу char usigned *pl, *p2; два вказівника на дані з типом usigned long * q, h, w; q – вказівник, h і w – звичайні змінні 17.)Оголошення функції. Синтаксис: [<специфікація класу пам’яті>] [<специфікація типу>] <оголошувач> ( [<список аргументів>] ); Оголошення функції специфікує ім’я функції, тип значення що повертається і, можливо, типи її аргументів та їх числові значення. Ці атрибути функції необхідні для перевірки компілятором мови Сі коректності звертання до неї до того, як вона визначена. Якщо <оголошувач> функції представляє собою ідентифікатор (ім’я функції), то оголошується функція, тип значення якої, що повертається, заданий специфікацією типу. Функція не може повертати масив чи функцію, однак може повертати покажчик на ці об’єкти. Якщо специфікація типу в оголошенні функції пропущена, то передбачається тип int. На зовнішньому рівні може бути також пропущена специфікація класу пам’яті (див. класи пам’яті), а на внутрішньому рівні хоча б одна із специфікацій – класу пам’яті чи типу – повинна бути присутньою. Деякі приклади оголошень функцій: add(int, int); /* приклад 1 */ double calc( ); /* приклад 2*/ void draw(void); /* приклад 3 */ void bul(int a[n][n]); /* приклад 4 */ В першому прикладі оголошується функція з іменем add, яка приймає два аргументи типу int і повертає значення типу int. В другому прикладі оголошується функція з іменем calc, яка повертає значення типу double. Список типів аргументів пустий. В третьому прикладі оголошується функція draw з типом що повертає значення void (нічого не повертається). Список типів аргументів також містить ключове слово void, що вказує на відсутність аргументів функції. В четвертому прикладі оголошується функція bul з типом що повертає значення void. Аргумент функції – двомірний масив (n – розмірність масиву) елементів цілого типу. Крім явного оголошення, функція може бути оголошена неявно, по контексту її виклику. Неявне оголошення має місце в тому випадку, коли функція викликається без попереднього оголошення чи визначення. В цьому випадку компілятор мови Сі вважає, що функція, яка викликається, має тип значення що повертається int і клас пам’яті extern. Визначення функції, якщо воно є далі в тому ж самому файлі, може перевизначити тип значення що повертається і клас пам’яті. 18.)Оголошення типу. Існують 2 особливих види оголошення в яких оголошується не змінна чи функція,а тип даних 1ий вид оголошення типу дозволяє визначити тег та елементи структури об*єднання чи перелічуваного типу.Після такого оголошення тег можна використати в оголошенні змінних та функцій для посилання на цей тип. 2ий вид оголошення типу використовує ключове слово typedef .Це оголошення дозволяє присвоїти осмислені імена типам,що існують в мові СІ чи створюються користувачем. 19.)Абстрактні імена типів та їх використання. Абстрактні імена типів використовуються в трьох випадках : в списках типів аргументів при оголошенні функцій, в операціях перетворення типу та в операції sizeof. Абстрактними іменами для базових, перелічуваних, структурних типів та об’єднань є відповідні специфікації типу. 20.)Ініціалізація базових типів та покажчиків. В СІ є 5 базових типів : char, int, float, double, void. На їх основі формуються інші типи даних. Їх розмір є різним. При оголошенні змінної вона може бути проініціалізoвана. Для цього потрібно після її оголошення поставити знак рівності й константу, тобто загальна форма ініціалізації має такий вигляд: тип ім'я_змінної = константа Ініціалізація покажчиків реалізується трьома простими кроками. Приклад : int var = 5; // просте оголошення змінної int *ptrVar; // оголошення покажчика, просте поки він ні на що не вказує ptrVar = &var; // тепер покажчик посилається на адресу в пам’яті, де зберігається число 5; 21.)Ініціалізація складених типів Складні типи характеризуються способом структуризації даних – одне значення складного типу складаються х безлічі значень даних, які організовуються складний тип. До складних типів відносять структури та об’єднання. Ініціалізація полей структури здійснюється за допомогою присвоєння значень елементам структури в процесі оголошення змінної, яка відноситься до типу структури. Вона здійснюється наступним способом : struct ім’яСтруктури ім’я Змінної = {значенняЕлемета1, Значення елемента2, … , ЗначенняЕлементаn} ; 22.)Рядкові ініціалізатори Існує спеціальна форма ініціалізації масива типу char – за допомогою символьного рядка. Наприклад, оголошення char code [] = “abcd’ ініціалізує масив code чотирма символами – ‘a’, ‘b’, ‘c’, ‘d’ та символ ‘ ‘ який закінчує рядок. Символьним рядком можна ініціалізувати не лише масив типу char, а й покажчик на тип char. 23.)Первинні вирази та та операції. Операція Назва Операція Назва  ! Логічне НІ && Логічне І  ~ Зворотний код || Логічне АБО  + Додавання; унарний плюс , Послідовне виконання  – Віднімання; унарний мінус ? : Умовна операція  * Множення; значення за адресою + + Інкремент  / Ділення – – Декремент  % Остача від ділення = Просте присвоювання  << Зсув вліво + = Присвоювання з додаванням  >> Зсув вправо – = Присвоювання з відніманням  < Менше * = Присвоювання з перемноженням  <= Менше чи рівне / = Присвоювання з діленням  > Більше % = Присвоювання з залишком від ділення  >= Більше чи рівне >> = Присвоювання з зсувом вправо  = = Рівне << = Присвоювання з зсувом вліво  ! = Не рівне & = Присвоювання з порозрядним І  & Порозрядне І; адресація | = Присвоювання з пороз-рядним АБО  | Порозрядне АБО ^ = Присвоювання з пороз-рядним АБО з виключенням (Присвоювання з порозрядним додаванням за модулем 2)  ^ Порозрядне АБО з виключенням (порозрядне додавання за модулем 2) sizeof Розмір об’єкту   24.)L-вирази. L-вираз - вираз, який посилається на комірку пам'ті і тому має зміст у лівій частині. До L-виразів належать : 1) Ідентифікатори цілого, плаваючого, перелічуваного типів,покажчиків, структур та об'єднань. 2) Індексні вирази за винятком тих, значення яких має тип масив. 3) Вирази вибору елемента, якщо елементом є L-вираз. 4) Вирази непрямої адресації. 5) L-вираз у дужках 6) Вираз перетворення типу змінної, якщо розмір результата не перевищує розмір початкового. Перелічувані L-вирази також називають модифікованими L-виразами. Крім того існують немодифіковані L-вирази. Їх адреса може бути отримана, але використовуватися в лівій частині бінарної операції присвоєння вони не можуть. До них відносяться ідентифікатори масивів, функцій, а також змінних, оголошених з модифікатором const. 25.)Операція унарний мінус(плюс),обернений код,логічне заперечення,sizeof Операція унарного мінуса виконує арифметичне заперечення свого операнда. Операнд має бути цілим або плаваючим значенням. Тип результату співпадає з перетвореним типом операнда. Операція унарного плюса не змінює значення свого операнда. Операція використовується для того, щоб заборонити компілятору реорганізувати дужкові вирази. Обернений код — це спосіб представлення двійкових цілих чисел зі знаком. Для переведення десяткового числа в обернений код спочатку необхідно перевести його у двійкове представлення не зважаючи на знак, потім, якщо число від'ємне, обернути всі біти (замінити 0 на 1 і навпаки). Логічне заперечення використовується для того, щоб інвертувати значення аргумента. Якщо оператору передали істину, то він поверне не істину і навпаки. sizeof – унарний оператор, який повертає довжину в байтах змінної або типа, взятого в дужки. 26.) Мультиплікативні та адитивні операції. До мультиплікативних операцій відносяться операції множення *, ділення / і отримання залишку від ділення %. Операндами операції % повинні бути цілі значення. Операції множення * і ділення / виконуються над цілими і плаваючими операндами. До адитивних операцій відносяться додавання ( +) і віднімання (-). Їх операндами можуть бути цілі і плаваючі значення. В деяких випадках адитивні операції можуть також виконуватися над адресними значеннями. Над операндами виконуються перетворення за умовчанням. Типом результату є тип операндів після перетворення. 27.) Операції зсуву Порозрядні оператори зсуву – оператори зсуву вправо >>, який переміщує біти вправо і зсуву вліво <<, який переміщує біти вліво. Позиції бітов, звільнених за допомогою операції зсуву, заповнюються нулями. 28.) Операції відношення. Операції відношення порівнюють між собою два значення. До операцій відношення належать операції : > - більше; < - менше; == - рівне; != - не рівне; >= - більше рівне; <= - менше рівне. Результатом порівняння є значення істини (не 0) або не істини (0). 29.) Операції адресації Операції адресації тісно пов'язані з поняттям покажчика. Покажчик - це змінна, яка призначена для збереження адреси об'єкта деякого типу. Синтаксис : [<специфікація типу>] *<описувач>; . Специфікація типу задає тип змінної, на яку посилається покажчик, а символ '*' визначає саму змінну як покажчик. Приклад застосування покажчика : дамо покажчику ім'я p, то можемо записати вираз p = &abc; // присвоєння адреси abc змінній p де &abc - константа типу покажчик, адреса змінної abc, а p - змінна типу покажчик. В такому випадку p вказує на abc. Якщо в змінній p міститься посилання на змінну abc, тоді для доступу до значення цієї змінної можна скористатися операціїє "непрямої адресації": val = *p; // визначення значення на яке вказує p Отже, останні два оператори стають еквівалентні виразу val = abc; 30.) Порозрядні операції. Порозрядні операції виконуються тільки над операндами цілих типів. До них належать: ~ (інверсія); << (зсув вліво) >> (зсув вправо); & (порозрядне І); ^ (побітове АБО з виключенням); | (порозрядне АБО). Використання порозрядних операцій дає змогу оперувати окремими бітами даних, перевіряти або змінювати їх значення. Порозрядні операції виконуються окремо над кожною парою бітів, що записані в однакових за номером розрядах двох операндів, які вступають в порозрядну операцію. . Результат порозрядного І буде нульовим, якщо хоча б один з бітів 0. Якщо обидва біти рівні 1, то результат дорівнює не нуль. Результат побітового АБО з виключенням буде нульовим, якщо обидва біта будуть рівні, у всіх інших випадках результат дорівнює не нуль. Результат порозрядного АБО буде нульовим, якщо обидва біта будуть рівні 0, у всіх інших випадках результат дорівнює не нулю. 31.) Логічні операції. В С існує три логічні операції: Логічна операція І && - значення істине, якщо обидві умови істинні. Логічна операція АБО || - значення істине, якщо хоча б одна умова істинна. Логічна операція НЕ ! або логічне заперечення Логічні операції утворюють складне (складене) умова з декількох простих (два або більше) умов. Ці операції спрощують структуру програмного коду. 32.) Операція послідовного обчислення. Оператор послідовного обчислення обчислює два свої операнди послідовно в напрямку зліва направо. Синтаксис : вираз, вираз-присвоєння. Лівий операнд послідовного обчислення обраховується як вираз типу void. Результат операції має той самий тип і значення, що і правий операнд. Оператор послідовного обчислення зазвичай використовується для обрахунку двох і більше виразів там, де дозволяється лише 1 вираз. 33.) Умовна операція Умовна операція - єдина тернарна операція, тобто вона має 3 операнди. Синтаксис : <операнд 1>?<операнд 2>:<операнд 3>; . Операнд 1 являє собою ціле, плаваюче значення або покажчик. В умовній операції спочатку обчислюється операнд 1 і порівнюється з нулем. Якщо значення - не нуль, то обчислюється операнд 2 і він є результатом. Якщо ж операнд - нуль, то обчислюється операнд 3 і він є результатом. 34.) Операції простого та складного присвоєння Для скороченою записи виразів в мові програмування С є спеціальні операції, які називаються операціями присвоювання. С існує п'ять операцій привласнення, не рахуючи основну операцію присвоювання: =. += операція присвоювання-складання; -= операція присвоювання-віднімання; *= операція присвоювання-множення; /= операція присвоювання-ділення; %= операція присвоювання-залишку від ділення; При операціїї присвоювання-складання та присвоювання-віднімання результат зберігається у змінній, над якою виконується дія. При присвоювання-множення та присвоювання-ділення резульат дії присвоюється змінній, над якою виконується дія. При присвоювання-залишку від ділення залишок зберігається в змінній. 35.) Пріорітет та асоціативність. Пріоритет операцій – черговість виконання операцій у виразі, за умови, що у виразі немає явної вказівки порядку проходження виконання операцій (за допомогою круглих дужок). Якщо операції мають однаковий пріоритет, то черговість виконання таких операцій визначається відповідно до властивості асоціативності. Асоціативність – напрямок виконання операцій у разі, якщо операції мають однаковий пріоритет. Побічний ефект виражається в неявному зміні значення змінної в процесі обчислення виразу. Всі операції присвоювання можуть викликати побічний ефект. Виклик функції, в якій змінюється значення будь-якої зовнішньої змінної, або шляхом явного привласнення, або через покажчик, також має побічний ефект. 36.) Перетворення типі операндів за замовченням Перетворення типів мають місце в присвоюваннях, викликах функцій і при виконанні операцій. Якщо в виразах зустрічаються операнды різних типів, то вони перетворюються до загального типу відповідно до деякого набору правил. Загалом, автоматично здійснюються тільки такі перетворення, що мають зміст, такі, наприклад, як перетворення цілого в дійс0не. Вирази ж, позбавлені змісту, такі, наприклад, як використання змінної типу float в масивах як індекса, заборонені. Мова програмування C не може безпосередньо додати подібні операнди, спочатку відбувається зведення їх до одного типу. Для цього існують правила перетворення арифметичних типів. Загальний принцип такий: перейти від операнда меншого типу до більшого, щоб не втратити точності обчислень.  37.) Пустий та складений оператори, оператор-вираз, оператори переходу і повернення Пустий оператор. Синтаксис: ; Його виконання не змінює стан програми. Складений оператор. Синтаксис: { <оголошення> . . <оператор> . . } Оператор-вираз. Синтаксис: <вираз> ; Оператор переходу goto. Синтаксис: goto a; a: <оп>; За допомогою оператора goto можна перейти з однії точки в програмі до іншої. Не можно перейти з однієї функції в іншу. Оператор повернення return. Синтаксис: return [<вираз>]; Завершує виконання функції і передає виконання у функцію після виклику. Якщо є вираз, його значення обислюється і повертається в точку повернення. 38.) Умовний оператор Умовний оператор if задає умову, за якої тіло буде виконуватись. Синтаксис: if (<вираз>) <оператор1>; [else <оператор1>:] Якщо присутнє else то у разі не істини виразу виконується тіло else. 39.) Оператор покрокового циклу for Синтаксис: for( [<ініціалізація>]; [<умовний вираз>]; [<корекція>]) <oператор> Тіло оператора циклу for виконується до тих пір, поки <умовний вираз> не стане false або рівним 0. Якщо він із самого початку false, то тіло циклу не буде виконано жодного разу. <Ініціалізація> і <корекція> використовуються для ініціалізації і модифікації параметрів циклу чи інших значень. Оператор for – це цикл з передумовою: рішення, виконати в черговий раз тіло циклу чи ні, приймається до початку його проходження. Тому може бути так, що тіло циклу не буде виконано ні разу. 40.) Оператор цикл з передумовою. Оператор циклу while визначає операції, які циклічно виконуються до тих пір, поки вираз, що перевіряється не стане false або рівним 0. Оператор while – це цикл з передумовою; рішення, чи виконувати в черговий раз тіло циклу, приймається перед початком його проходження. Синтаксис оператора: while (вираз) <oператор> 41.) Оператор цикл з постумовою Оператор do while визначає дії, які циклічно виконуються до тих пір, поки вираз не стане false, чи рівним 0. Оператор do while – цикл з післяумовою; рішення, виконувати чи не виконувати в черговий раз тіло циклу, приймається після його проходження. Тому тіло циклу буде виконуватись по крайній мірі один раз. Форма запису: do <оператор> while (вираз) 42.) Оператори контролю над виконанням циклу Оператори break і continue контролюють роботу циклу. Оператор break можна використовувати з любою із трьох форм. Вона приводить до того, що управління програмою “ігнорує” залишок і поновлює виконання програми з оператора, що знаходиться за циклом. Якщо оператор break знаходиться в середині деякої сукупності вкладених структур, його дія розповсюджується тільки на саму внутрішню структуру, в якій він безпосередньо знаходиться. Оператор continue може використовуватись в любій з трьох форм. Його виконання приводить до такої зміни логіки програми, що решту операторів циклу пропускаються. Для циклів while чи for в слід за цим починається новий крок, а для циклу do while перевіряється умова на виході, і потім, якщо вона виявляється істинною, виконується наступна ітерація. 43.) Оператор перемикач Загальна структура оператора switch: switch(цілий вираз) { case константа1: <оператори> (необов’язкові) case константа2: <оператори> (необов’язкові) . . . . default: <оператори> (необов’язкові) } Управління в програмі передається оператору, у якого в якості міток використовується значення деякого виразу. Потім в процесі проходження програми будуть виконуватись оператори, що залишились, поки не відбудеться новий перехід. Як вирази, так і мітки повинні мати значення цілого типу (включаючи тип char); мітки повинні бути константами чи константними виразами. Якщо деякому значенню виразу не відповідає ніяка мітка, управління передається оператору з міткою default (якщо такий є в програмі). В протилежному випадку управління передається оператору, що знаходиться за оператором switch. 44.) Визначення функції. Визначення функції специфікує ім’я функції, атрибути її формальних параметрів, і тіло функції, що містить оголошення і оператори. У визначені функції також може задаватися клас пам’яті функції і тип значення що повертається. Синтаксис визначення функції: [<специфікація класу пам’яті>] [<специфікація типу>] <ім’я функції>( [<список аргументів>] ) [<оголошення аргументів>] <тіло функції> У визначенні функції допускається вказівка специфікації класу пам’яті static чи extern. Наявність списку аргументів і оголошень не є обов’язковою. Змінні, відмінні від аргументів, оголошуються в середині тіла функції. Функції повинні мати той же тип, що і значення, які вони повертають в якості результатів. По замовчуванню передбачається що функції мають тип int. Якщо функція має інший тип, він повинен бути вказаний і в програмі що викликається, і в самому визначені функції. 45.) Формальні параметри функції та типи значень, що нею повертаються. Якщо фунція використовує аргументи, то в ній повинні бути об’явлені змінні, які будуть приймати значення аргументів. Дані змінні називаються формальними параметрами функцій. Вони поводять себе як і будь які інші локальні змінні у функції. Вони оголошуються в круглих дужках, яка йдуть за іменем функції. 46.) Виклик функції. Фактичні аргументи. Виклик функції передає управління і фактичні аргументи (якщо вони є) заданій функції. Синтаксично виклик функції має вигляд: <вираз> ([<список виразів>]); <вираз> обчислюється, і його результат інтерпретується як адреса функції. Вираз повинен мати тип функція. <список виразів>, в якому вирази ідуть через кому, представляє собою перелік фактичних аргументів, що передаються функції. Список виразів може бути пустим. При виконанні виклику функції відбувається присвоєння значень фактичних аргументів формальним параметрам. Перед тим кожен фактичний аргумент обчислюється, над ним виконуються необхідні перетворення, і він копіюється в стек. Перший фактичний аргумент відповідає першому формальному параметру, другий – другому і т.д. Фактичний аргумент – конкретне значення, присвоєне цій змінній програмою що здійснює виклик. Фактичний аргумент може бути константою, змінною чи більш складним виразом. 47.) Рекурсивні виклики функції. Функція називається рекурсивною, якщо під час її виконання можливий повторний її виклик безпосередньо (прямий виклик) або шляхом виклику іншої функції, в якій міститься звертання до неї (непрямий виклик). Прямою (безпосередньою) рекурсією називається рекурсія, при якій всередині тіла деякої функції міститься виклик тієї ж функції. Непрямою рекурсією називається рекурсія, що здійснює рекурсивний виклик функції шляхом ланцюга викликів інших функцій. При цьому всі функції ланцюга, що здійснюють рекурсію, вважаються також рекурсивними. Якщо функція викликає сама себе, то в стеку створюється копія значень її параметрів, як і при виклику звичайної функції, після чого управління передається першому оператору функції. При повторному виклику цей процес повторюється. 48.) Іменовані константи та макровизначення Рядок #define визначає іменовану константу. Синтаксис: #define <ідентифікатор> <текст> Після такого рядка при будь якій появі ідентифікатора він буде замінюватись на текст. Якщо використати рядок #undef, то попереднє визначення буде відмінено. Якщо рядок має такий вигляд #define <ідентифікатор>(<параметри>) <текст> то він є макровизначенням. 49.) Операції склеювання лексем і перетворення аргументів макровизначень. За допомогою макровизначень можна склеювати лексеми та перетворювати аргументи. Приклад склеювання лексем : #define Glue (a, b) a##b при макровиклику відбудеться наступне: Glue (d, 2) -> d2 При перетворенні аргументів опертанд перетворюється в текствоий рядок. Приклад: #define A(a) #a При макровиклику: A(3) -> #3 -> “3” 50.) Директиви умовної компіляції До директив умовної компіляції наежать : #if, #ifdef, #ifndef. Синтаксис: #if <обмежений константний вираз> [<текст>] [#elif <о.к.в.> <текст>] #endif0 о.к.в. не можуть бути плаваючими константами.
Антиботан аватар за замовчуванням

22.01.2018 17:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!