- •2. Основні елементи мови с
- •3.1 Алфавіт мови програмування
- •3.2Лексеми
- •3.3Ключові слова
- •3.4Ідентифікатори
- •3.5 Класифікація типів даних
- •3.6 Літерали
- •3.7 Оператори
- •3.8 Коментарі
- •3.9 Директиви препроцесора
- •3.10 Організація програми
- •3. Операції та вирази
- •4.1 Загальні відомості
- •4.2 Арифметичні операції
- •4.3 Операції приведення типів
- •(Тип) ідентифікатор,
- •4.4 Операції присвоєння
- •4.5 Операції інкремента і декремента
- •4.6 Операції порівняння
- •4.7 Операції зсуву
- •4.8 Порозрядні операції
- •4.9 Логічні операції
- •4.10 Операція sizeof
- •Sizeof ( Вираз ),
- •4.11 Операція послідовного обчислення
- •4.12 Операція умови (?:)
- •Операнд-1 ? Операнд-2 : Операнд-3
- •4.13 Адресні операції
- •Тип * ім'я_покажчика;
- •4. Прості типи даних
- •5.1 Оголошення змінних
- •[ Модифікатори ] тип ім’я_змінної;
- •5.2 Час існування та область видимості змінних
- •5.3 Цілі типи даних
- •5.4 Дійсні типи даних
- •5. Оператори керування
- •5.1 Оператор розгалуження if
- •If ( Вираз ) true-оператор;
- •5.2 Оператор розгалуження if-else
- •If ( Вираз ) true-оператор; else false-оператор;
- •5.3 Оператор множинного розгалуження switch
- •5.4 Оператор циклу for
- •For ( Вираз 1 ; Вираз 2 ; Вираз 3 ) тіло циклу
- •5.5 Оператор циклу while
- •While ( Вираз ) тіло циклу
- •5.6 Оператор циклу do while
- •Тіло циклу while ( Вираз ) ;
- •5.7 Оператор break
- •5.8 Оператор continue
- •6 Введення та виведення даних
- •7.1 Функція виведення printf
- •Int printf( стрічка форматування, змінна1, змінна2, ... );
- •7.2Функція введення scanf
- •Int scanf (стрічка форматування, адреса змінної1, адреса змінної2, ... );
- •9.1 Введення та виведення у файл
- •7 Масиви
- •7.1 Загальні поняття
- •7.2 Одновимірні масиви
- •Тип даних ім’я змінної [n];
- •7.3 Багатовимірні масиви
- •6. Функції
- •6.1 Основні поняття
- •{Тіло функції}
- •6.2 Область видимості
- •6.3 Порожній тип void
- •6.4 Передача аргументів у функцію
- •6.5 Рекурсивні функції
- •6.6 Прототипи функцій
- •8. Рядки в с
- •4.1 Прототипи
- •4.2 Функції перетворення буферів
- •4.3 Функції перевірки літер
- •4.4 Рядок символів
- •4.5 Операції з рядками:
- •4.6 Символьні константи
- •9. Покажчики
- •5.1 Визначення та ініціалізація покажчиків
- •5.2 Визначення покажчиків:
- •5.3 Масиви
- •5.6 Копіювання рядка
- •5.7 Посилання та оператор &
- •5.9 Посилання в якості результатів функції
- •5.10 Покажчики на функцію
- •Тип_функціі (* імя_покажчика) (специфікація_параметрів);
- •5.11 Покажчики на void
- •5.12 Арифметика покажчиків
- •10. Структури, об’єднання, перерахування
- •7.1 Структури
- •7.2 Ключове слово typedef
- •7.3 Об’єднання
- •7.4Перераховуваний тип (Enum)
- •Enum dataType
- •Enum day
- •11 Динамічне виділення пам'яті
{Тіло функції}
де тип– тип даних значення, яке повертається функцією у місце виклику;
ім’я функції– ідентифікатор, за допомогою якого здійснюється виклик функції;
параметр1, параметр2,…– список параметрів функції. Кожен параметр складається з типу даних та ідентифікатора, як і будь-яке оголошення змінної (наприклад: int x). Змінні які оголошені в якості параметра є локальними для даної функції. Вони приймають значення аргументів функції при виклику.
тіло функції– це блок операторів у фігурних дужках {}.
Тип кожного аргументу функції повинен відповідати типу відповідного параметра, оголошеного при визначенні функції.
Приклад 6.1.Використання стандартних функцій та функцій визначених у програмі.
#include <stdio.h>
#include <stdlib.h>
int add (int a, int b)/*визначення функції add*/
{
int q;
q=a+b;
return (q);
}
int main ()
{
int t;
t = add (7, 4);/*виклик функції add*/
printf( "Suma = %i \n", t);/*виклик функції printf з бібліотеки stdio.h*/
system("PAUSE");/*виклик функції system з бібліотеки stdlib.h*/
return 0;
}
Результат роботи програми:
На початку програми здійснюється визначення функції add. Далі здійснюється визначення функціїmain. Функціяmainпочинається з оголошення змінноїt типуint. Після цього, здійснюється виклик функціїadd. Подібність виклику та визначення функції зображено на рис. 6.1.
Рисунок 6.1 – Визначення та виклик функції
При виклику функції addу якості аргументів їй передаються два значення: 7 і 4, які відповідають параметрамint атаint b.
Значення обох аргументів при виклику (7 і 4) будуть скопійовані в локальні змінні int атаint b.
У функції addоголошується інша локальна зміннаint q, якій присвоюється результат виразуq=а+b.
Наступний рядок коду: return (q);завершує роботу функціїadd, і повертає значення у функціюmain. Програма продовжує роботу з того ж місця, в якому вона була перервана викликом функціїadd. Значення змінноїqв цей момент дорівнює 11, і воно стає значенням функції, що викликається. Потім це значення присвоюється зміннійt(рис. 6.2).
Рисунок 6.2 – Повернення значення функції
6.2 Область видимості
Видимість змінних, оголошених у функції обмежується тілом функції, тобто вони є локальними змінними функції і не можуть бути використані поза нею. Наприклад, у попередньому прикладі було б неможливо використовувати змінні a,bабоqбезпосередньо у функціїmain, так як вони є локальними змінними функціїadd. Крім того, було б неможливо використовувати зміннуtу функціїadd, так як вона є локальною змінною функціїmain.
У випадку необхідності видимості змінної, як у межах функції так і поза нею, потрібно використати глобальну змінну. Для створення глобальної змінної потрібно її оголосити поза межами функції.
Приклад 6.2.Види виклику функцій.
#include <stdio.h>
#include <stdlib.h>
int sub (int a, int b)
{
int q;
q=a-b;
return (q);
}
int main ()
{
int x=2, y=1, t;
t = sub(7, 4);
printf("First %i \n", t);
printf("Second %i \n", sub(7, 4));
printf("Third %i \n", sub (x, y));
t = 4 + sub(x, y);
printf("Fourth %i \n", t);
system("PAUSE");
return 0;
}
Результат роботи програми:
У прикладі 6.2 створена функція sub, яка повертає різницю значень аргументів. В програмі продемонстровано чотири варіанти виклику функціїsub.
Перший варіант виклику:
t = sub(7, 4);
printf("First %i \n", t);
Другий варіант виклику:
printf("Second %i \n", sub(7, 4));
У цьому варіанті функція subвикликається в якості аргументу функціїprintf.
Третій варіант виклику:
printf("Third %i \n", sub(x, y));
У цьому варіанті замість числових літералів (7, 4) в якості аргументів функції sub виступають змінніxтаy.
Четвертий варіант виклику:
t = 4 + sub(x, y);
printf("Fourth %i \n", t);
У цьому варіанті показано можливість роботи з функцією, як зі звичайною змінною такого ж типу, який повертає функція.