Оператори передачі управління 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Оператори передачі управління



В C++ є чотири оператори, що змінюють природний порядок виконання обчислень:

q оператор безумовного переходу goto;

q оператор виходу із циклу break;

q оператор переходу до наступної ітерації циклу continue;

q оператор повернення з функції return.

Оператор goto

Оператор безумовного переходу goto має формат:

goto мітка; У тілі тієї ж функції повинна бути присутнім рівно одна конструкція виду:

мітка: оператор;

Оператор goto передає керування на позначений оператор. Мітка — це звичайний ідентифікатор, областю видимості якого є функція, у тілі якої він заданий.

Застосування goto порушує принципи структурного й модульного програмування, по яких всі блоки, з яких складається програма, повинні мати тільки один вхід й один вихід.

У кожному разі не слід передавати керування усередину операторів if, switch і циклів. Не можна переходити усередину блоків, що містять ініціалізацію змінних, на оператори, розташовані після її, оскільки в цьому випадку ініціалізація не буде виконана:

int k;...

goto metka;...

{int a = 3, b = 4;

 k = a + b;

metka: int m = k + 1;...

}

Після виконання цього фрагмента програми значення змінної m не визначене.

Оператор break

Оператор break використається усередині операторів циклу або switch для забезпечення переходу в крапку програми, що перебуває безпосередньо за оператором, усередині якого перебуває break.

Приклад. Програма обчислює значення гіперболічного синуса речовинного аргументу х із заданою точністю eps за допомогою розкладання в нескінченний ряд.

sh х = 1 + х3/3! + х5/5! + х7/7! +...

Обчислення закінчується, коли абсолютна величина чергового члена ряду, що додає до суми, стане менше заданої точності.

#include<iostream.h>

#include<math.h>

int main () {

const int MaxIter = 500;                 //обмежник кількості ітерацій

double x, eps;

cout<<”\n Уведіть аргумент і точність: ”;

cin>> x >> eps;

bool flag = true;                              //ознака успішного обчислення

double y = x, ch = x;                      //сума й перший член ряду

for (int n = 0; fabs(ch) > eps; n++) {

ch *= x * x / (2 * n + 2)/(2 * n + 3); //черговий член ряду

y += ch;

if (n>MaxIter) {

           cout<<”/n Ряд розходиться!”;

           flag = false; break; }

}

if (flag) cout<<”/n Значення функції: ”<<y;

return 0;

}

Оператор continue

Оператор переходу до наступної ітерації циклу continue пропускає всі оператори, що залишилися до кінця тіла циклу, і передає керування на початок наступної ітерації.

Оператор return

Оператор повернення з функції return завершує виконання функції й передає керування в крапку її виклику. Вид оператора:

return [ вираз ];

Вираз повинне мати скалярний тип. Якщо тип значення, що повертає функцією, описаний як void, вираз повинен бути  відсутнім.

___________________________________________________________________

 

Типи циклів.

Оператор for.

1. Типи циклів.

Для зручності, а не по необхідності, в C++ є три різних оператори циклу -

while, do while й for.

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

2. Оператор for.

Оператор for переважніше для організації циклів з лічильниками.

Цикл із параметром має наступний формат:

for (ініціалізація; вираз; модифікації) оператор;

Ініціалізація використається для оголошення й присвоєння початкових значень величинам, використовуваним у циклі. У цій частині можна записати трохи операторів, розділених комі (операцією «послідовне виконання»), наприклад, так:

for (int i = 0, j = 2;...

int k, m;

for (k = 1, m = 0;...

Областю дії змінних, оголошених у частині ініціалізації циклу, є цикл1. Ініціалізація виконується один раз на початку виконання циклу.

Вираз визначає умова виконання циклу: якщо його результат, наведена до типу bool, дорівнює true, цикл виконується. Цикл із параметром реалізований як цикл із передумовою.

Модифікації виконуються після кожної ітерації циклу й служать звичайно для зміни параметрів циклу. У частині модифікацій можна записати трохи операторів через кому. Простий або складовій оператор являє собою тіло циклу. Кожна із частин оператора for може бути опущена (але крапки з коми треба залишити на своїх місцях!).

Приклад (оператор, що обчислює суму чисел від 1 до 100):

for (Int i = 1, s = 0; 1<=100; i++) s += i;

Приклад (програма друкує таблицю значень функції в=х2+1 в введеному діапазоні):

#Include <stdio.h>  

Int main(){

float Xn, Xk, Dx, X;

printf (“Уведіть діапазон і крок зміни аргументу: ");

scanf (“%f%f%f”, &Xn, &Xk, &Dx);

printf (“| X | Y |\n");

for (X = Xn; X<=Xk; X+=Dx)

printf (" | %5.2f | %5.2f |\n”, X*X + 1);

return 0;

}

Приклад (програма знаходить всі дільники цілого позитивного числа):

#Include <iostream.h> Int main(){

Int num, half, div;

cout << “\n Уведіть число: "; cin >> num;

for (half = num / 2, div = 2; div <= half; div++)

if (!(num %div))cout << div <<"\n";

return 0;

}

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

Любою цикл while може бути наведений до еквівалентному йому циклу for і навпаки за наступною схемою:

for (b1: b2; bз) оператор b1;

while (b2){ оператор; bз;}

 Часто, що зустрічаються помилки, при програмуванні циклів — використання в тілі циклу неініціалізованих змінних і невірний запис умови виходу із циклу.

Щоб уникнути помилок, рекомендується:

q перевірити, чи всім змінним, що зустрічається в правій частині операторів присвоювання в тілі циклу, привласнені до цього початкові значення (а також чи можливо виконання інших операторів);

q перевірити, чи змінюється в циклі хоча б одна змінна, вхідна в умову виходу із циклу;

q  передбачити аварійний вихід із циклу по досягненню деякої кількості ітерацій;

q і, звичайно, не забувати про те, що якщо в тілі циклу потрібно виконати більше одного оператора, потрібно містити їх у фігурні дужки.

Оператори циклу взаємозамінні, але можна привести деякі рекомендації з вибору найкращого в кожному конкретному випадку.

___________________________________________________________________

 

Обробка масивів.

Одновимірні масиви

Масив утворюється рядом елементів одного типу. Для вказівки компілятору про необхідність обробки даних у вигляді масиву використовуються оголошення. При оголошенні масиву компілятор повідомляється про кількість і тип елементів, що входять до складу масиву.

Оголошення масиву

Синтаксис:

<специфікація типу><декларатор> {<консm. вираз>]; <специфікація типу><декларатор> [];

Тут квадратні дужки - це термінальні символи. Оголошення масиву визначає тип масиву і тип кожного елемента. Воно може визначати також число елементів в масиві. Змінна типу масив розглядається як покажчик на елементи масиву. Оголошення масиву може представлятися в двох синтаксичних формах, вказаних вище. <Декларатор> задає ім'я змінної. Квадратні дужки, наступні за декларатором, модифікують декларатор на тип масиву. <Константний вираз>, укладений в квадратні дужки, визначає число елементів в масиві. Кожний елемент має тип, що задається <специфікатором типа>, який може специфікувати будь-який тип, виключаючи void і тип функції.

В другій синтаксичній формі опущений константний вираз в квадратних дужках. Ця форма може бути використана тільки тоді, коли масив ініціалізується або оголошений як формальний параметр, або оголошений як посилання на масив, явно визначений десь в програмі.

Наприклад:

Int days[] = {31, 28, 31, ЗО, 31, 31};

При використанні порожніх квадратних дужок для ініціалізації масиву компілятор підраховує кількість елементів в списку і встановлює розмір масиву рівним цьому числу.

Типу масив відповідає пам'ять, яка потрібна для розміщення всіх його елементів. Елементи масиву з першого до останнього запам'ятовуються в послідовних зростаючих адресах пам'яті. Між елементами масиву в пам'яті розриви відсутні. Елементи масиву запам'ятовуються один за одним послідовно, а доступ до них здійснюється за допомогою цілочисельного індексу (або шляхом вказівки зсуву).

Наприклад:

int scores[10], game;

char *name[20];

В першому прикладі оголошується змінна типу масив з ім'ям scores з 10 елементів типу int. Змінна з ім'ям game оголошена як проста змінна цілого типу.

В другому прикладі оголошений масив покажчиків. Масив складається з 20-ти елементів, кожний з яких є покажчиком на величину типу char.

В мові Сі перший елемент має індекс 0, тому останній елемент масиву має індекс, рівний n - 1.

Значення елементам масиву можна привласнювати, використовуючи індекс масиву, або порядковий номер.

___________________________________________________________________

 

 

Оператори while, do while.

1. Оператори while, do while.

Один прохід циклу називається ітерацією. Перевірка умови виконується на кожній ітерації або до тіла циклу (тоді говорять про цикл із передумовою), або після тіла циклу (цикл із післяумовою). Різниця між ними полягає в тому, що тіло циклу з післяумовою завжди виконується хоча б один раз, після чого перевіряється, чи треба його виконувати ще раз. Перевірка необхідності виконання циклу із передумовою робиться до тіла циклу, тому можливо, що він не виконається жодного разу.

Змінні, що змінюються в тілі циклу й використані при перевірці умови продовження, називаються параметрами циклу. Цілі параметри циклу, що змінюються з постійним кроком на кожній ітерації, називаються лічильниками циклу.

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

Цикл завершується, якщо умова його продовження не виконується. Можливо примусове завершення як поточної ітерації, так і циклу в цілому. Для цього служать оператори break, continue, return й goto (див. тему «Оператори передачі керування»). Передавати керування ззовні усередину циклу не рекомендується.

 

 

Начальные установки  
Начальные установки  

                       а                                                                       б

          

               
 
 
 

 

 


Схеми операторів циклу: а - цикл із передумовою; б - цикл із післяумовою

Для зручності, а не по необхідності, в C++ є три різних оператори циклу -

while, do while й for.

Оператор do while звичайно використають, коли цикл потрібно обов'язково виконати хоча б раз (наприклад, якщо в циклі виконуються введення даних).

Оператором whiIe зручніше користуватися у випадках, коли число ітерацій заздалегідь не відомо, очевидних параметрів циклу немає або модифікацію параметрів зручніше записувати не наприкінці тіла циклу.

 

 



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 160; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.104.238 (0.029 с.)