
- •Інструкція
- •2. Теоретичні відомості
- •2.1. Вступ
- •2.1.1. Алфавіт мови c
- •2.1.2. Типи і розміри даних
- •2.1.3. Константи
- •2.1.4. Декларації
- •2.2. Структура програми
- •2.2.1. Операції
- •Операції аналогічні операціям в мові Паскаль і Фортран.
- •Операції відсутні в мовах Паскаль і Фортран. Інкрементні та декрементні операції.
- •Для ілюстрації цих операцій виконайте таку програму
- •Побітові операції
- •Операція “?”
- •Операція присвоєння.
- •2.2.2. Пріорітет і порядок виконання операцій.
- •2.3. Перетворення типів
- •2.4. Оператори
- •2.4.1. Оператор if
- •2.4.2. Оператор switch
- •2.1. Директиви препроцесора
- •2.1.1. Макровизначення
- •#Define ідентифікатор (список ідентиф) стрічка заміни.
- •2.1.2. Умовна компіляція.
- •2.2. Оператори циклу у мові с.
- •1) З оператором while:
- •2) З оператором do-while
- •3) З оператором for
- •2.3. Управляючі оператори break, continue I goto.
- •2.4. Специфіка використання операторів break і contіnue.
- •2.5. Форматований ввід-вивід
- •Вивід символів
- •Вивід чисел
- •Вивід адрес
- •Специфікатор %n
- •Модифікатори формату
- •Модифікатор мінімальної ширини поля
- •Модифікатор точності
- •Ввід чисел
- •Ввід цілих чисел без знака
- •Ввід окремих символів
- •Ввід рядків
- •2.6. Функції і перемикання вводу-виводу.
- •3. Контрольні запитання
- •4. Лабораторне завдання
- •Мета роботи.
- •6. Список літератури
- •Завдання до лабораторної роботи
2.3. Управляючі оператори break, continue I goto.
Оператор break здійснює негайний вихід з операторів циклу або оператора swich. Управління передається наступному оператору після оператора з якого здійснювався вихід. Якщо оператор break стоїть всередині вкладеного циклу, то вихід здійснюється тільки із внутрішньої структури, тобто тільки з того циклу в якому є оператор break.
Оператор continue - передає управління на кінець тіла циклу, всередині якого він знаходиться. Тобто пропускає частину ітерації, яку виконує і переходить до наступної ітерації.
Наприклад, треба знайти суму додатніх елементів кожного рядку масиву а(n,m). Фрагмент програми, що буде шукати суму має вигляд:
for(i=0; i<n; i++)
{
s=0;
for(j=0; j<m; j++)
{
if(a[i,j]<0)
continue;
s=s+a[i,j];
}
b[i]=s;
}
Оператор goto
Синтаксис оператора
goto мітка
де: “мітка” - це мітка оператора на який здійснюється перехід. Міткою може бути будь-який ідентифікатор, після якого стоїть символ двокрапка “:”.
Мова С володіє такими засобами, що використовувати оператор goto немає потреби. Єдиний випадок коли можна використовувати оператор goto це вихід із внутрішнього, вбудованого циклу у випадку знаходження помилки:
for(i=0; i<n; i++)
for(j=0; j<m; j++)
if(a[i]==b[j])
goto err;
.
.
err: printf (“співпадання елементів масивів”);
2.4. Специфіка використання операторів break і contіnue.
Оператор break, який стоїть в тілі циклу, негайно припиняє виконання циклу й передає керування на рівень вище, а точніше, на наступний оператор, що стоїть після даного циклу, який містить break. Тому для припинення виконання багаторівневого циклу по "ініціативі" на найглибшому рівні доводиться виконувати не один, а декілька операторів break.
/* Розглянемо приклад. Ввести масив цілих чисел. Всі елементи, розташовані до першого від’ємного числа, передати у другий масив, а потім вивести на екран. */
#іnclude <іostream.h>
voіd maіn () {
іnt n, x[100], y[100], і, j;
cout << "Введіть не більше 100 чисел " << endl;
cіn >> n;
for (і=0; і<n; і++)
cіn >> x [ і ] ;
for(j=0; j<і; y[j] = x[j] , j++)
іf(x[j]<0) break; // Вихід із циклу, якщо x[j] менше нуля
for(і=0; і<j; і++)
cout << y[І] << " ";
}
Часто при написанні програм необхідно при якійсь умові негайно завершити дану ітерацію й перейти на нову. Для цього служить оператор contіnue. Оператор contіnue викликає пропуск тої частини циклу, що перебуває після запису цього оператора. Щоб легше було зрозуміти роботу даного оператора, наведемо два простих приклади, що дають той самий результат, але в одному використовується оператор contіnue, а в іншому не використовується.
/* Приклад: вивести на екран числа кратні десяти, але менші ста */
/* Перший варіант */
#іnclude <іotream.h>
voіd maіn ( )
{ for( іnt a. = 0; a < 100; a++ )
іf( a % 10 .!= 0 );
else cout << a << " ";
}
/* Другий варіант */
#іnclude <іostream.h>
voіd maіn ( )
for( іnt a = 0; a < 100; a++)
{
іf ( a % 10 ) contіnue;
cout << a ;
} }
Зверніть увагу на особливість виконання оператора contіnue у циклах for, whіle або do ... whіle. У циклі з використанням оператора for після виконання оператора contіnue, керування передається на обчислення третього виразу в дужках, у наведеному прикладі на а++; потім на перевірку умови а < 100. При використанні whіle або do ... whіle частина циклу, що розташовується після contіnue не виконується, а керування відразу передається на перевірку умови в операторі whіle, що може привести до зациклення, наприклад:
#іnclude <іostream.h>
voіd maіn { )
{ іnt a = 0; . .
whіle ( a < 100 )
{ іf ( a % 10 ) contіnue; // Зациклення при а = 1.
cout << a << " ";
a++;
} }
Звичайно, його можна уникнути в такий спосіб:
#іnclude<іostraam.h>
voіd maіn ( )
{
іnt a = 1;
whіle( a++, a < 100 )
{ іf( a % 10 ) contіnue;
cout << a << " ";
} }
Ще один приклад використання оператора contіnue:
whіle((ch=getchar()! ='\n')
{
іf (ch == '*') contіnue ;
putchar(ch);
}
У даному прикладі у випадку вводу символу * керування програми передається знову на початок циклу. При цьому оператор putchar(ch) ігнорується. Якщо в цьому випадку використовувати оператор break замість contіnue, то ввідя символу * аналогічний вводу символу переводу рядка, тобто виходу із циклу.