
- •12. Класи пам'яті даних 100
- •13. Робота з файлами 106
- •14. Посилання 111
- •Склад мови
- •Алфавіт мови
- •Лексеми
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Символьні рядки
- •Знаки операцій, роздільники, коментарі
- •Типи даних
- •Класифікація типів даних
- •Цілочислові типи
- •Дійсні типи
- •Оголошення змінних і констант
- •Переліки
- •Структура програми
- •Функція main
- •Область дії змінної
- •Введення і виведення даних
- •Функції стандартної математичної бібліотеки
- •Вирази і операції
- •Поняття виразу, операнда, операції
- •Порядок виконання операцій
- •Арифметичні операції
- •Порозрядні операції
- •Операції порівняння
- •Логічні операції
- •Операції присвоєння
- •Умовна операція
- •Операція визначення розміру sizeof
- •Узгодження типів у виразах
- •Умовні оператори
- •Оператори
- •Умовний оператор if
- •Оператор вибору switch
- •Оператори циклу
- •Цикл з параметром. Оператор for
- •Цикл з передумовою. Оператор while
- •Цикл з постумовою. Оператор do while
- •Оператори переходу
- •Використання псевдовипадкових чисел
- •Одновимірні масиви
- •Багатовимірні масиви
- •Символьні рядки
- •Вказівники
- •Оголошення вказівника, операції, пов’язані з вказівниками
- •Адресна арифметика
- •Void – вказівники, типізація вказівників
- •Звертання до елементів масивів через вказівники
- •Масиви символьних рядків і масиви вказівників
- •Динамічне виділення пам’яті
- •Структури і об’єднання
- •Оголошення і ініціалізація структур
- •Звертання до елементів структур
- •Перейменування типів
- •Об’єднання
- •Поля бітів
- •Директиви препроцесора
- •Призначення директив препроцесора
- •Директива включення #include
- •Директиви макропідстановок #define I #undef
- •Директиви умовної компіляції
- •Директиви #ifdef, #ifndef
- •Функції
- •Структура функції
- •Виклик функцій. Прототипи функцій
- •Взаємодія фактичних і формальних параметрів функцій
- •Inline – функції
- •Масиви і символьні рядки як параметри функцій
- •Використання кваліфікатора const в оголошеннях параметрів
- •Багатовимірні масиви як параметри функцій
- •Опрацювання структур у функціях
- •Вказівники на функції
- •Рекурсивні функції
- •Класи пам'яті даних
- •Клас пам'яті, час існування і видимість об’єкта
- •Область дії глобальних і локальних змінних
- •Специфікатори класів пам'яті
- •Специфікатори глобальних змінних
- •Багатофайлові програми
- •Робота з файлами
- •Звертання до файлів
- •Послідовний запис до файлу і послідовне читання з файлу
- •Файли з довільним доступом
- •Посилання
- •Призначення посилань
- •Передача аргументів функцій як посилань
Оператори переходу
В мові С++ реалізовано чотири оператори переходу: goto, break, continue, return. Всі вони змінюють послідовний порядок виконання операторів і передають управління не наступному, а певному встановленому оператору програми.
Оператор goto передає управління іншому оператору програми, позначеному заданою міткою. Його синтаксис такий:
goto мітка;
/* оператори програми */
мітка: оператор
Міткою у мові С++ може бути довільний ідентифікатор, який не збігається з іншими ідентифікаторами програми. Мітка відокремлюється від оператора, який вона позначає, двокрапкою.
Оператор goto використовують рідко. Вважається, що він заплутує програму і робить її незрозумілою. Перехід можна виконувати як у напрямку кінця програми, так і у напрямку її початку, тому відповідну мітку в програмі знайти не легко. Єдина заборона – не можна переходити з однієї функції в іншу.
Знайдемо машинний нуль, тобто числове значення, менше якого неможливо задати точність алгоритму.
#include <iostream>
using namespace std;
int main() {
double b = 1.;
M: b /= 2;
if ( b + 1 > 1 ) goto M;
cout << b << endl; // 1.11022e-16
}
Оператор break призначений для переривання роботи оператору switch і всіх трьох операторів циклу for, while i do while. При виконанні оператора break всередині оператора switch управління буде передано оператору, наступному за оператором вибору. При виконанні оператора break всередині оператора циклу, виконання оператора циклу припиняється без перевірки умови завершення циклу, управління передається до оператора, наступного за оператором циклу.
Оператор переходу continue може виконуватися тільки в тілі операторів циклу. Його призначення – перервати поточне виконання операторів тіла циклу і перейти до нової ітерації циклу. При цьому всі оператори тіла циклу, записані після оператора continue, пропускаються. Якщо continue виконується в операторі for, то відразу після нього обчислюється вираз ітерації, а потім перевіряється умова виконання циклу. Якщо continue виконується всередині циклів while i do while, то відразу відбувається перехід на наступну перевірку умови виконання циклу.
Знайдемо кількість чисел, які діляться без залишку на 7 в інтервалі від 1 до 100.
#include <iostream>
using namespace std;
int main() {
int i, n;
for ( i = 1, n = 0; i <= 100; ++i ) {
if ( i % 7 ) continue;
n++;
}
cout << n << endl;
}
Оператор return завершує роботу функції, ф якій він виконується. Керування програмою повертається до оператора, з якого була викликана функція. Оператор має дві форми запису:
return; // без повернення значення
return вираз; // зі значенням, що буде повернене
Перша форма застосовується в функціях, які не повертають значення – такі функції мають тип void. Друга форма запису застосовується, коли функція повинна повернути значення певного типу. В цьому випадку вираз задає значення, яке повертає функція. Отримане значення передається в точку виклику функції.
Функція main починає і закінчує роботу всієї програми. Тому виконання оператора return всередині функції main призводить до завершення роботи програми.