Лекція 5. Змінні. Функції та аргументи. Власні функції
1. Змінні та константи
Змінна - це проіменована область пам'яті, в якій зберігається значення певного типу. У змінної є ім'я (ідентифікатор) і значення. Ім'я служить для звернення до області пам'яті, в якій зберігається значення. Під час виконання програми значення змінної можна змінити. Перед використанням будь-яка змінна повинна бути описана:
тип список_змінних;
Наприклад:
int a, bc, f;
float g, u, h12;
За місцем оголошення змінні в мові С можна розділити на три класи: локальні, глобальні і формальні параметри функції.
Локальні змінні оголошуються всередині функції і доступні тільки в ній.
Глобальні змінні описуються перед всіма функціями і доступні з будь-якого місця програми.
Формальні параметри функції описуються в списку параметрів функції.
Константи - це величини, які не змінюють свого значення в процесі виконання програми. Оператор опису константи має вигляд:
сonst тип ім'я=значення;
Константи в мові С++ можуть бути цілими, дійсними, символьними або строковими. Зазвичай компілятор визначає тип константи за зовнішнім виглядом, але існує можливість і явного задання типу, наприклад:
const double pi = 3.141592653589793
2. Операції та вирази
Вираз задає порядок виконання дій над даними і складається з операндів (констант, змінних, звернень до функцій), круглих дужок і знаків операції: a+b*sin(cos(x)). Операції поділяються на унарні (наприклад,-с) і бінарні (наприклад, а+b).
Звичайна операція присвоювання має вигляд:
ім'я_змінної = значення;
де значення - це вираз, змінна, константа або функція.
Виконується операція так. Спочатку обчислюється значення виразу зазначеного в правій частині оператора, а потім його результат записується в область пам'яті, ім'я якої зазначено зліва. Наприклад, запис a=b означає, що змінній а присвоюється значення b. Якщо a і b змінні різних типів, відбувається перетворення типів: значення в правій частині перетворюється в тип змінної левої частини. Слід враховувати, що при цьому можна втратити інформацію або отримати інше значення.
В С існує можливість присвоювання декільком змінним одного і того ж значення. Така операція називається множинним присвоєнням і в загальному вигляді може бути записана так:
ім'я_змінної1 = ім'я_змінної2 = .. = ім'я_змінноїN = значення;
Запис a=b=c=3.14159/6; означає, що змінним a, b і c було присвоєно одне і те ж значення 3.14159/6.
Операції +=, -=, *=, /= називають складальними присвоєннями. У таких операціях при обчисленні виразу, що стоїть справа використовується значення переменної з лівої частини, наприклад так:
x += p; // Збільшення x на p, те семе що і x = x + p.
x -= p; // Зменшення x на p, те семе що і x = x - p.
x *= p; // Множення x на p, те семе що і x = x*p.
x /= p; // Ділення x на p, те семе що і x = x/p.
Операції +, -, *, / відносять до арифметичних операцій. Їх призначення зрозуміле і не потребує додаткових пояснень.
Операції інкременту ++ та декременту -- теж відносять до арифметичних, оскільки вони виконують збільшення і зменшення на одиницю значення змінної. Ці операції мають дві форми запису префіксная (операція записується перед операндом) і постфіксну (операція записується після операнда). Так, наприклад оператор p = p + 1; можна представити в префіксній формі ++p; і в постфіксній p++;. Ці форми відрізняються при використанні їх у виразах. Якщо знак декремента (інкремента) передує операнду, то спочатку виконується збільшення (зменшення) значення операнда, а потім операнд бере участь у виразі. Наприклад,
x = 12;
y = ++x; // В змінну y буде записано значення 13.
Якщо знак декремента (інкремента) слідує після операнда, то спочатку операнд бере участь у виразі, а потім виконується збільшення (зменшення) значення операнда:
x = 12;
y = x++; // В змінну y буде записано значення 12.
Операція цілочисельного ділення / повертає цілу частину частки (дробова частина відкидається) в тому випадку якщо вона застосовується до цілочисельних операндів, в іншому випадку виконується звичайне ділення: 11/4 = 2 або 11.0/4 = 2.75. Операція залишок від ділення % застосовується тільки до цілочисельних операндів: 11%4 = 3.
3. Використання функцій
Підпрограма - іменована, логічно закінчена група операторів мови, яку можна викликати для виконання будь-яку кількість разів з різних місць програми. У мові С підпрограми реалізовані у вигляді функцій. Функція приймає параметри і повертає єдине скалярне значення.
Заголовок_функції
{
тіло_функції
}
Заголовок функції має вигляд:
тип імя_функції ([список параметрів])
тип - тип значення, що повертає функція; список параметрів - список переданих у функцію величин, які відокремлюються комами, кожному параметру повинен передувати його тип.
У випадку, якщо функції розміщені після функції main, структура програми буде такою (заголовки функцій повинні бути описані до функції main()). Випереджаючі заголовки функцій називають прототипами функцій.
директиви компілятора
...
Тип_результату f1 (Список_змінних);
int main (Список_змінних)
{
Оператори основної функції, серед яких можуть бути оператори виклику функції f1
}
Тип_результату f1 (Список_змінних)
{
оператори
}
Для того, щоб функція повернула якесь значення, в ній повинен бути оператор return значення;
Для виклику функції необхідно вказати ім'я функції і в круглих дужках список переданих у функцію значень.
Параметри, вказані в заголовку функції, називаються формальними. Параметри, що передаються у функцію, називаються фактичними.
При зверненні до функції фактичні параметри передають своє значення формальним і більше не змінюються. Типи, кількість і порядок слідування формальних і фактичних параметрів повинні збігатися. За допомогою оператора return з функції повертається єдине значення.
Під рекурсією в програмуванні розуміється виклик функції з тіла її самої. У рекурсивних алгоритмах функція викликає саму себе до виконання повної умови. В якості прикладу розглянемо функцію знаходження факторіала:
# include <iostream>
long int factorial (int n)
{
if (n <= 1) return n;
else
return n* factorial(n - 1);
}
int main ()
{
int i;
long int f;
cout << "i =";
cin >> i;
f = factorial (i);
cout << i << "! =" << f << endl;
return 0;
}