Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Збірка ЛР.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
198.66 Кб
Скачать

Функція. Основні поняття

Принципи програмування на мові Сі базуються на понятті функції. Функція – це самостійна одиниця програми, створена для розв'язування конкретної задачі. Функції в мові Сі грають ту саму роль, що і підпрограми або процедури в інших мовах програмування. Кожна функція має ім'я і список аргументів. Після імені функції завжди ставляться круглі дужки (parenthesis) всередині яких знаходяться аргументи. Завдяки круглим дужкам легко розрізняти змінні (над якими виконуються операції) та функції (які виконують операції над змінними). Функції бувають двох видів – стандартні (бібліотечні) і створені користувачем для конкретної програми. У випадку останніх, їх необхідно оголосити в програмі і описати, що вони повинні робити.

Основна форма опису функції (definition):

тип <ім'я функції>(список параметрів);

Тип визначає тип значення, яке повертає функція з допомогою оператора return. Якщо тип не вказано, то функція по замовчуванню повертає ціле значення. Список параметрів складається з переліку типів і імен параметрів, які розділені комами. Функція може бути без параметрів, однак круглі дужки обов'язкові.

Прототипи функцій

Особливістю стандарту ANSI мови Сі є те, що для створення правильного машинного коду функції компілятору необхідно повідомити тип результату, який повертається до першого виклику функції в програмі. Також необхідно повідомити кількість і типи аргументів функції. Тому, разом з оголошенням змінних необхідно описувати прототип функції користувача. Прототип функції задається наступним чином:

тип <ім'я функції> (список параметрів);

Використання прототипу функції рівнозначно оголошенню функції (declaration). У більшості випадків прототип функції повністю співпадає з заголовком функції, але не завжди. При оголошенні функції компілятору важливо знати ім'я функції, кількість і тип параметрів і тип значення, яке повертається. При цьому імена формальних параметрів функції не грають жодної ролі і ігноруються компілятором:

int func1(int a, float b, char c);

рівнозначно int func1(int, float, char);

Якщо у функції відсутні аргументи, то при оголошенні прототипу такої функції замість аргументів необхідно писати слово void. Це повинно стосуватися і функції main(). Тому ми завжди пишемо void main(void) або int main(void), тип int може опускатися, оскільки воно використовується по замовчуванню: main(void). Але в кінці функції main() обов'язкова поява оператора return:

return 1; або return 0;

Параметри і аргументи функції

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

У мові Сі викликана функція не може змінити змінні, вказані в якості фактичних параметрів при звертанні до неї.

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

char – символьний; int – цілочисельний; float – опрацьовує дробові числа (числа з плаваючою крапкою); double – числа з плаваючою точкою подвійної довжини; void – пустий тип, який немає значення.

Типи char та int є цілими типами даних і призначені для зберігання цілих чисел. Тип char також призначений для цілих чисел, оскільки будь-який символ у комп'ютері пов'язаний з цілим числом – кодом цього символу у таблиці ASCII. Сам символ нам необхідний, коли інформація виводиться на екран, на принтер або вводиться з клавіатури.

Усі типи по замовчуванню є знаковими (signed).

Неможливо створити змінну типу vоid. Однак, введення такого типу є корисним про що ми поговоримо пізніше.

Різниця між додатними і від'ємними цілими числами полягає в тому як інтерпретується старший біт цілого числа. Якщо старший біт рівний 0 – число додатнє, якщо старший біт – 1, число від'ємне. Ціле число +3 буде мати вигляд:

0

0

0

0

0

0

1

1

Для отримання від'ємного числа –3 код змінного на зворотній (обернений) і до молодшого біту додається 1:

1

1

1

1

1

1

0

0

На основі вищевикладених типів будуються подальші типи даних. Ці типи створюються модифікаторами (modifiers), які ставляться перед основним тілом. Модифікаторами є наступні зарезервовані слова: signed – знаковий, unsigned – беззнаковий, long – довгий, short – короткий.

Тип

Розмір в байтах (бітах)

Інтервал зміни

char

1(8)

-128

127

unsigned char

1(8)

0

255

signed char

1(8)

-128

127

int

2(16)

-32768

32767

unsigned int

2(16)

0

65535

signed int

2(16)

-32768

32767

short int

2(16)

-32768

32767

unsigned short int

2(16)

0

65535

signed short int

2(16)

-32768

32767

long int

4(32)

-2147483648

2147483647

signed long int

4(32)

-2147483648

2147483647

unsigned long int

4(32)

0

4294967295

float

4(32)

3.4Е-38

3.4Е+38

double

8(64)

1.7Е-308

1.7Е+308

long double

10(80)

3.4Е-4932

3.4Е+4932

При уважному розгляді можна помітити, що типи int, short int, signed int та signed short int мають однакові границі зміни. Ці типи хоча і мають різні назви є абсолютно однаковими для даної реалізації компілятора мови.