ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.09.2024

Просмотров: 19

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ЛЕКЦІЯ 8. ЦИКЛИ

План

1. Цикл for.

2. Цикл while.

3. Цикл do while.

Оператори циклу призначені для багатократного повторення послідовності директив. Мова С підтримує три форми операторів циклу: for, while, do while.

1. Цикл for

Форма оператора циклу for має наступний вигляд:

For (вираз 1; вираз 2; вираз 3) { w; }

Вираз 1 визначає початкове значення змінної, яка називається управляючим параметром циклу.

Вираз 2 визначає умову продовження (або завершення) виконання оператора циклу.

Вираз 3 змінює значення управляючого параметра циклу.

W – блок операторів. Блок операторів W називається тілом циклу.

Зауваження. Якщо тіло циклу складається з одного оператора, то цей оператор можна у фігурні дужки не брати. Можливі наступні варіанти оператора циклу for:

for (; вираз 2; вираз 3) {W;}

for (вираз ; ; вираз 3) {W;}

for (вираз 1; вираз 2;) {W;}

for (; ;) {W;}

Задача 1. Видати на екран 20 разів повідомлення «Добрий ранок, студент!».

Програма 1. Виводить повідомлення «Добрий ранок, студент!» 20 разів.

void main()

{ clrscr();

S; S; S; S; S; S; S; S; S; S;

S; S; S; S; S; S; S; S; S; S;

getch(); }

В представленій програмі кожний символ S треба замінити на директиву cout << “ Добрий ранок, студент!\n“. Оператор циклу дозволяє код програми для даної задачі записати коротше.

Програма 2. Виводить повідомлення «Добрий ранок, студент!» задане число раз. В програмі використовувати оператор циклу.

void main()

{ int i, n;

clrscr();

cout << "Введи число виведень повідомлення: ";

cin >> n;

for ( i = 1; i <= n; i++) // Початок циклу for.

cout << "Добрий ранок, студент! \n"; // Виведення тексту на екран.

getch(); }

Після запуску даної програми комп'ютер виводить на екран монітора n рядків з текстом «Добрий ранок, студент!».

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


Оператор циклу for в програмі f_1 виконується таким чином:

  1. управляючому параметру циклу i привласнюється 1; значення i порівнюється із змінною n;

  2. якщо i менше або рівне n, то виконується блок операторів, ув'язнений між фігурними дужками. Після виконання останнього оператора з блоку, управління передається на початок оператора циклу. Оператор циклу збільшує значення змінної i на 1, потім виконується крок 2 і т. д.;

  3. якщо значення змінної i більше n, то управління передається на перший оператор, який слідує після тіла циклу.

Розглянемо різні варіанти вживання циклу for на простих задачах.

Програма 3. Виводить на екран цілі числа від 1 до заданого числа n (моделюється процес рахунку).

void main()

{ int i, s, n; // i, n параметри циклу;

// s для формування порядкового числа. clrscr();

cout << "Введи число, до якого треба виводити n= ";

cin >> n;

s = 0;

for (i = 1; i <= n; i++)

{ s = s + 1; // В s формується число, що виводиться.

cout << "Це " << s << "\n";

} cout << “ Виведення чисел від 1 до ” << n << “ завершений! \n”; getch(); }

Приведемо результат роботи програми для n = 4.

Введи число, до якого треба виводити n = 4

Це 1

Це 2

Це 3

Це 4

Виведення чисел від 1 до 4 завершений!

Програма 4. Виводить на екран цілі числа від 1 до n.

void main()

{ int i, n;

clrscr();

cout << "Введи число, до якого треба виводити n= ";

cin >> n;

for (i = 1; i <= n; i++) // В тілі циклу використовується i.

cout << "Це " << i << "\n";

getch();

}

Програма 5. Виводить на екран цілі числа від заданого числа n до 1.

void main()

{ int i, n;

clrscr();

cout << "Введи число, до якого треба виводити n= ";

cin >> n;

for (i = n; i >= 1; i--) // Значення параметра i зменшується.

cout << "Це " << i <<"\n";

getch(); }

Програма 6. Виводить на екран цілі числа від n1 до n2 з кроком dt (n1 <= n2, dt > 0).

void main()

{ int i, n1, n2, dt;

clrscr();

cout << "Введи число, від якого треба виводити n1 = ";

cin >> n1;

cout << "Введи число, до якого треба виводити n2 = ";

cin >> n2;

cout << "Введи крок для видачі чисел dt = ";


cin >> dt;

for (i = n1; i <= n2; i = i + dt) // Значення i міняється з кроком dt.

cout << "Це " << i << "\n";

getch(); }

Програма 7. Для управління циклом використовуються два параметри.

void main()

{ float i, j;

clrscr();

for (i = -10, j = 0; i + j <= 0; i++, j++ )

cout << i << " + “ << j << “= " << (i+j) << "\n";

cout << “\tРабота циклу завершена\n”;

getch(); }

Приведемо результат роботи програми.

-10 + 0 = -10

-9 + 1 = -8

-8 + 2 = -6

-7 + 3 = -4

-6 + 4 = -2

-5 +5 = 0

Робота циклу завершена


2. Цикл while

Оператор циклу while має наступний вигляд:

while ( <умова>) { W; }

Тут <умова> – будь-який вираз, допустимий в мові С; W послідовність операторів.

<умова> приймає значення ІСТИНА, якщо значення виразу не рівне нулю. Інакше <умова> приймає значення БРЕХНЯ. Тіло циклу виконується, якщо <умова> приймає значення ІСТИНА. Інакше програма виходить з циклу і виконує перший оператор, який слідує за тілом циклу.

Програма 8. Введення чисел з клавіатури в режимі діалогу.

void main()

{int k;

clrscr();

cout << "Введи число (Ctrl + z Enter – вихід з програми): ";

scanf("%d" &k);

while (!feof(stdin) ) // Початок циклу. Цикл виконується доти

// поки не буде введений символ Ctrl + z.

{ cout << "\n Ви ввели число " << k

<< "\nДля продовження введення натискуй Enter"; getch(); clrscr();

cout << "Введи число (Сtrl + z Enter – вихід з програми): ";

scanf("%d" &k);

} }

Програма моделює роботу в режимі діалогу з користувачем.

Зауваження. Функція feof(stdin) повертає значення 0, якщо з клавіатури вводиться число, і значення, не рівне 0, при введенні комбінації символів Ctrl + z.

Програма 9. Виводить цифри, які формують ціле число.

void main()

{ long а;

clrscr();

cout << " Введи число а = ";

cin >> а;

clrscr();

cout << “Число “ << а << “Складається з цифр:”;

while (а != 0 )

{cout << а % 10 << “\n”; // Виводить останню цифру числа.

а = а / 10; // Відкидає останню цифру числа.

}

getch(); }

Програма 10. Обчислює суму цифр заданого цілого числа.

void main()

{ long а;

int s = 0;

clrscr();

cout << "Введи число а = " ;

cin >> а;

while (а != 0 )

{

s = s + а % 10; // Обчислює і додає останню цифру числа до s.

а = а / 10; } // Відкидає останню цифру числа.

cout << "сума s= " << s << "\n";

getch(); }

Програма 11. Шаблон меню.

void main(void)

{ int iv = 0;

int до; while ( !iv )

{ clrscr();

cout << "\n\nКоманды меню:\n\n";

cout << "1 Команда\n";

cout << "2 Команда\n";

cout << "3 Команда\n";


cout << "4 Команда\n";

cout << "5 Вихід\n";

cout << "\nВведи команди меню: ";

scanf("%d",&k);

switch (k)

{

case 1 : cout << "Ви вибрали 1-у команду ";

getch();

break;

case 2 : cout << "Ви вибрали 2-у команду ";

getch();

break;

case 3 : cout << "Ви вибрали 3-у команду ";

getch();

break;

case 4 : cout << "Ви вибрали 4-у команду ";

getch();

break;

case 5 : cout << " \n\n Ви вийшли з програми!!!.\n ";

cout << " Тисни будь-кого клавишу\n ";

iv = 1;

break;

default : cout << "Команда меню з номером" << k

<< "отсутствует\n";

} }

getch(); }

3. Цикл do – while

Оператор циклу do while має наступний вигляд:

do

{ W; }

while ( <умова>)

Тут <умова> – будь-який вираз, допустимий в мові С; W послідовність операторів.

<умова> приймає значення ІСТИНА, якщо значення виразу не рівне нулю, БРЕХНЯ інакше. Тіло циклу виконується, якщо <умова> приймає значення ІСТИНА.

ітерації.

Складати програму, яка обчислює значення змінної по деякій ітераційній формулі yk+l = f(yk), - достатньо проста задача. Для цього необхідно: оголосити змінну у; коректно задати початкове значення; в блоці операторів записати за правилами мови вираза y = f(у).

Тривалість обчислення в циклі виразу у = f(у) визначається заданою точністю . Точність обчислень контролюється за допомогою нерівності |yk+l-yk|. Тут уk, уk+1 - значення у, яке обчислюється на кроках ітерації k і k + 1. Загальний вид циклу, який обчислює вираз із заданою точністю, має наступний вигляд:

y = x;

do

{y1 = у; II В y1 засилає значення у з попереднього кроку.

y= f(у); // На поточному кроці у визначається по формулі.

} while (fabs(у - yl)> ер); II Виконувати цикл до заданої точності.