ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.09.2024
Просмотров: 21
Скачиваний: 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 виконується таким чином:
-
управляючому параметру циклу i привласнюється 1; значення i порівнюється із змінною n;
-
якщо i менше або рівне n, то виконується блок операторів, ув'язнений між фігурними дужками. Після виконання останнього оператора з блоку, управління передається на початок оператора циклу. Оператор циклу збільшує значення змінної i на 1, потім виконується крок 2 і т. д.;
-
якщо значення змінної 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 Виконувати цикл до заданої точності.