Програмування мовою С
Структура програми написаної мовою програмування СІ.
Прокоментувати програму та вказати результат.
Програма на С складається із сукупності фуекцій, одна з яких повинна називатись main(). Описані функції складаються з із заголовку і тіла функції. Заголовок містить оператори (директиви) передпроцесора, наприклад, #include та і’мя функції. Ім’я пізнається по круглим дужкам, які можуть бути порожніми. Тіло функції береться у фігурні дужки і складається із ряду операторів, кожний з яких закінчується крапкою з комою (мал. 1).
Проста програма, написана, з врахуванням вимог стандарту ISO/ANSI C, повинна мати наступний формат:
#include <stdio.h>
int main(void)
{
оператори
return 0;
}

Мал. 1. Структура програми
Поняття СІ-машини. Сутність передпроцесора. Макровизначення
та макрофункції. Прокоментувати програму та вказати результат.
Сі-Машина
Сі- машину можна зобразити так:

Передпроцесор
  Передпроцесор є першим кроком в побудові вихідного коду Сі-програми на стадії компіляції – це унікальна частина компіляторів мови Сі.
До певної міри перед передпроцесор має свою власну мову, яка є потужним засобом програмування. Памятай, що всі директиви (інструкції) передпроцесора починаються з символа #.
Використання передпроцесора надає програмісту такі переваги:
Полекшена розробка програмного забезпечення,
Код легко читається,
Код легко модифікувати
Сі-код лекше портувати на інші машини (архітектури).
Передпроцесор також дозволяє нам модифікувати мову. Наприклад, замінити блок { ... } на такий як у мові PASCAL, тобто begin... end . Це робиться так:
    #define begin {
#define end }
Під час компіляції всі всі входження begin та end будуть замінені відповідними позначеннями { або } і тому інші частини компілятора небудуть знати про цю підміну.
#define
define використовується для оголошення констант чи макровизначень. Наприклад:
    #define <macro> <replacement name>
 
 
#define FALSE 0
#define TRUE !FALSE
Також можна записувати невеликі функції використовуючи #define. Наприклад:
   #define max(A,B) ( (A) > (B) ? (A):(B))
Це означає, що де би непоставити рядок max(C,D) цей текст буде замінено таким рядком як оголошено зверху. Отхе, якщо в коді написати щось таке:
   x = max(q+r,s+t);
то після передпроцесора ми отримаємо, якщо на цей код можна було би подивитись:
   x = ( (q+r) > (r+s) ? (q+r) : (s+t));
Ще один приклад #define:
#define Deg_to_Rad(X) (X*M_PI/180.0)
/* перетворення градусів в радіани */
 
#define LEFT_SHIFT_8 <<8
#undef
Ця команда відміняє макровизначення. Для перепризначення макровизначення його необхідно спочатку відмінити.
#include
Ця директива включає додаткові файли в код. У неї є 2 форми:
#include <file> або #include ``file''
<file> вказує компілятору де знаходяться системні файли, а також назву цих файлів. UNIX-системи зберігають файли у директоріїusrinclude.
``file'' виконує те саме, що і вищеописаний, але використовується для модулів написаних вручну (так прийнято для підвищення читабельності коду).
#if
#if оголошує цілочисельну константу. Воно обовязково завершується дируктивою #endif.
Можна також встановити команду else. Ще одним прикладом використання #if є:
#ifdef
-- if defined and
#ifndef
-- if not defined
Це зручно використовувати для перевірки результатів макровизначень.
Наприклад, для встановлення розміру integer для портування програми з TurboC (MSDOS) на Unix (чи іншу архітектуру) . Нагадаю, що TurboC використовує 16 біт/integer ,а UNIX 32 біти/integer.
Це виконується так:
  #ifdef TURBOC
  #define INT_SIZE 16
#else
#define INT_SIZE 32
#endif
Ще один приклад:
  #if SYSTEM == MSDOS
  #include <msdos.h>
#else
#include ``default.h''
#endif
#error
Дозволяє генерувати код помилки
  #ifdef OS_MSDOS
  #include <msdos.h>
#elifdef OS_UNIX
#include ``default.h''
#else
#error Wrong OS!!
#endif
Характеристика типів даних мови програмування СІ.
Перетворення типів даних. Прокоментувати програму та вказати результат.
Типи даних визначають діапазон допустимих значень та набір допустимих операцій.
В мові СІ є стандартний набір типів даних.

Цілочисельні: char, int, short, long, signed,unsigned, const, volatile.
Дійсні: float, double, long double.
Перелічення enum.
Для задання вказівників та масивів ключових слів немає.
Структури (struct) – це комбінований тип, це об'єкт в середині якого можна описати поля різних типів.
Об'єднання (union) – це об'єкт, який дозволяє в різні моменти часу зберігати дані різних типів.
Тип
Розмір 16 (32)
Діапазон

char
1
-128..127

unsigned char
1
0..256

short [int]
2
-215 .. 215-1

unsigned short
2
0 .. 216-1

int
2(4)
-215 .. 215-1

unsigned [int]
2(4)
0 .. 216-1

long [int]
4(4)
-231 .. 231-1

unsigned long
4(4)
0 .. 232-1

Згідно формату IEEE усі від'ємні дані зберігаються в пам'яті комп'ютера у доповняльному коді.
Для цілочисельних даних допустимі усі операції.
Тип
Розмір
Діапазон
P
M

float
4
3.4e-38 .. 3.4e+38
8
23

double
8
1.7e-308 .. 1.7e+308
11
52

long double
10
3.4e-4932 .. 3.4e+4932
15
64

Для задання порядку виконистовується спосіб вирівнювання на середину діапазону: float -127, double – 1023, long double – 16383.
У форматах float та double старша одиниця в мантисі не зберігається.
Перетворення типів даних
розширення
char -> int -> long 8->16->32
Для знакових розширення відбувається шляхом розмноження знакового розряду в старших байтах. Для беззнакових старші розряди заповнюються "0".
Зменшення
long -> int -> char 32->16->8
Перетворення відбувається шляхом відкидання старших байт.
3.
short -> int 16 -> 16
int -> unsigned 16 -> 16
long -> unsigned long 32 -> 32
Не змінює побітового представлення, але дані інтерпретуються згідно інших форматів.
4. Цілі -> Дійсні
Перетворення цілих в дійсні відбувається через тип long.
Перетворення коректне, якщо діапазон дозволяє.
5. Дійсні -> Дійсні
З менших в більші перетворення однозначні. Перетворення з більших в менші відбувається шляхом заокруглення.
6. Дійсні -> Цілі
Перетворення відбувається через тип long. Перетворення відбувається шляхом відкидання дробової частини.
Поняття покажчика в мові програмування СІ. Покажчики та
масиви. Адресна арифметика. Прокоментувати програму та вказати результат.
Мова програмування С відзначається своєю гнучкістю серед інших мов. Це, зокрема, добре видно при роботі із вказівниками. Вказівник – це змінна, що містить адресу певного об’єкту (не плутати з ООП().

специфікатор тип * ідентифікатор[=конст,&змінна],[,…];
Приклад:
int *my_pointer;
int *my_pointer=5;
int *my_pointer=&x;
Вказівник займає 2,4 або 6 байт. У реальному режимі вказівник займає 2 або 4 байти. 2 байти для near (перехід в одному сегменті), 4 для far та huge(нормалізований вказівник) для міжсегментного переходу. В захищеному режимі вказівник займає 6 байт.
Над вказівниками можна виконувати ряд цілочисельних операцій та порівнянь. Дві основні операції – це отримання адреси (&) та звертання за адресою (*). Перед використанням вказівники слід ініціалізувати. Стандарт ANSI C дозволяє використовувати нетиповані вказівники:
void *my_pointer;
Вказівники та масиви тісно повязані між собою. Назва масиву є адресою першого елемента:
my_array==&my_array[0];
В мові С не контролюється вихід за межі масиву.
При використанні вказівників для роботи із масивами слід мати на увазі,що додавання 1 до вказівника, перемістить його на наступний елемент, незалежно скільки байт займає цей елемент. Різниця вказівників дає результат,що рівний кількості елементів (лише для вказівників однакового типу). Доступ до елементів масиву можна здійснювати як за допомогою вказівників
k=*(my_array+5);
так і за допомогою класичного запису:
k=my_array[5];
Записи k=my_array[5] та k=5[my_array] рівнозначні
k=*(my_array+5)(( k=*(5+my_array)
оскільки від перестановки доданків сума не міняється.
Операції мови програмування СІ та їх пріоритет. Порядок
обчислення виразів. Побічні ефекти. Перетворення та приведення типів. Прокоментувати програму та вказати результат.

Порядок обчислення виразів.
= a=b=c=0; <
+ -/ % *
/-для цілих – буде тільки ціла частина
%- виключно для цілочисельних даних – залишок від ділення
Інкрементні, декрементні ++,-- цілочисельні, одномісні і застосовуються до операторів в памяті
а++; --в;
Префіксна операція передбачає спершу зміну обєкту, а пізніше участь нового значення в обрахунку решти виразу
Пост