Лекція 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;

}

Остання зміна: Thursday 28 May 2020 02:49 AM