Оператори мови Сі

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Кафедра: Автоматика і Обчислювальна Техніка
ОПЕРАТОРИ МОВИ СІ

Зміст
ХАРАКТЕРИСТИКИ ОПЕРАТОРІВ
ОПИСУ ОПЕРАТОРІВ
Порожній оператор
Оператор безумовного переходу
Оператори умовного переходу
Оператор if
Оператор if-else
Оператор if-else if
Оператор перемикач switch
Оператори циклу
Оператор циклу for
Оператор циклу з передумовою while
Оператор циклу з постусловіем do-while
ПРАКТИЧНІ ЗАВДАННЯ
Прибираємо оператор goto
Спрощуємо логічні вираження
Взаємозамінність циклів
Компактний for
Обходимося без операторів умовного переходу
ЛАБОРАТОРНІ ЗАВДАННЯ
Лінійне рівняння
Введення російської літери
Таблиця множення
ASCII-таблиця
Машинний нуль і машинний епсилон
ДОДАТКОВІ ЗАВДАННЯ
СПИСОК

Характеристики операторів

Всі оператори мови С можуть бути умовно розділені на наступні категорії:
- Умовні оператори, до яких відносяться оператор умови if і оператор вибору switch;
- Оператори циклу (for, while, do while);
- Оператори переходу (break, continue, return, goto);
- Інші оператори (оператор "вираз", порожній оператор).
Оператори в програмі можуть об'єднуватися в складені оператори за допомогою фігурних дужок. Будь-який оператор у програмі може бути позначений міткою, що складається з імені і наступного за ним двокрапки.
Всі оператори мови С, крім складених операторів, закінчуються крапкою з комою ";".

Описи операторів

Порожній оператор

Порожній оператор складається тільки з точки з комою. При виконанні цього оператора нічого не відбувається. Він зазвичай використовується в наступних випадках:
- В операторах do, for, while, if в рядках, коли місце оператора не потрібно, але з синтаксису потрібно хоча б один оператор;
- При необхідності позначити фігурну дужку.
Синтаксис мови С вимагає, щоб після мітки обов'язково слідував оператор. Фігурне ж дужка оператором не є. Тому, якщо треба передати управління на фігурну дужку, необхідно використовувати порожній оператор.
Приклад:
int main ()
{
;
{
if (...) goto a / * перехід на дужку * /
{...
}
a:;
}
return 0;
}

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

Використання оператора безумовного переходу goto в практиці програмування на мові С настійно не рекомендується, так як він ускладнює розуміння програм і можливість їх модифікацій.
Формат цього оператора наступний:
goto ім'я-мітки;
...
ім'я-мітки: оператор;
Оператор goto передає управління на оператор, позначений міткою ім'я-мітки. Приречений оператор повинен знаходитися в тій же функції, що і оператор goto, а використовувана мітка повинна бути унікальною, тобто одне ім'я-мітки не може бути використано для різних операторів програми. Ім'я-мітки - це ідентифікатор.
Будь-який оператор у складеному операторі може мати свою мітку. Використовуючи оператор goto, можна передавати управління всередину складеного оператора. Але потрібно бути обережним при вході у складений оператор, що містить оголошення змінних з ініціалізацією, оскільки оголошення розташовуються перед виконуваними операторами і значення оголошених змінних при такому переході будуть не визначені.

Оператори умовного переходу

Оператор if

Формат оператора:
if (вираз) оператор;
Виконання оператора if починається з обчислення виразу.
Далі виконання здійснюється за наступною схемою:
- Якщо вираз істинний (тобто відмінно від 0), то виконується оператор.
- Якщо вираз помилково, то виконується наступний за if оператор.
Після виконання оператора if значення передається на наступний оператор програми, якщо послідовність виконання операторів програми не буде примусово порушена використанням операторів переходу.
Приклад: if (i <j) i + +:
Оператор if-else
Формат оператора:
if (вираз) оператор-1; else оператор-2;
Виконання оператора if починається з обчислення виразу.
Далі виконання здійснюється за наступною схемою:
- Якщо вираз істинний (тобто відмінно від 0), то виконується оператор-1.
- Якщо вираз помилково (тобто дорівнює 0), то виконується оператор-2.
Після виконання оператора if значення передається на наступний оператор програми, якщо послідовність виконання операторів програми не буде примусово порушена використанням операторів переходу.
Приклад:
if (i <j) i + +:
else {j = i-3; i + +;}
Цей приклад ілюструє також і той факт, що на місці оператор-1, так само як і на місці оператор-2 можуть знаходитися складні конструкції.
Допускається використання вкладених операторів if. Оператор if може бути включений в конструкцію if або в конструкцію else іншого оператора if. Щоб зробити програму більш читабельною, рекомендується групувати оператори і конструкції у вкладених операторах if, використовуючи фігурні дужки. Якщо ж фігурні дужки опущені, то компілятор пов'язує кожне ключове слово else з найбільш близьким if, для якого немає else.
Приклади:
int main ()
{
int t = 2, b = 7, r = 3;
if (t> b)
{
if (b <r) r = b;
}
else r = t;
return (0);
}
В результаті виконання цієї програми r стане рівним 2.
Якщо ж у програмі опустити фігурні дужки, що стоять після оператора if, то програма буде мати наступний вигляд:
int main ()
{
int t = 2, b = 7, r = 3;
if (a> b)
if (b <c) t = b;
else
r = t;
return (0);
}
У цьому випадку r отримає значення рівне 3, так як ключове слово else відноситься до другого оператору if, який не виконується, оскільки не виконується умова, що перевіряється в першому операторі if.

Оператор if-else if

Наступний фрагмент ілюструє вкладені оператори if:
char ZNAC;
int x, y, z;
:
if (ZNAC == '-') x = y - z;
else if (ZNAC == '+') x = y + z;
else if (ZNAC == '*') x = y * z;
else if (ZNAC == '/') x = y / z;
else ...
З розгляду цього прикладу можна зробити висновок, що конструкції використовують вкладені оператори if, є досить громіздкими і не завжди достатньо надійними. Іншим способом організації вибору з безлічі різних варіантів є використання спеціального оператора вибору switch.

Оператор перемикач switch

Оператор switch призначений для організації вибору з безлічі різних варіантів. Формат оператора наступний:
switch (вираз)
{[Оголошення]
:
[Case константне-вираз1]: [список-операторов1]
[Case константне-вираз2]: [список-операторов2]
:
:
[Default: [список операторів]]
}
Вираз, наступне за ключовим словом switch в круглих дужках, може бути будь-яким виразом, допустимими в мові С, значення якого повинно бути цілим.
Значення цього виразу є ключовим для вибору з декількох варіантів. Тіло оператора smitch складається з декількох операторів, помічених ключовим словом case з наступним константним-виразом. Слід зазначити, що використання цілого константного вираження є істотним недоліком, властивим розглянутому оператору.
Так як константні вираз обчислюється під час трансляції, воно не може містити змінні або виклики функцій. Звичайно як константного вирази використовуються цілі або символьні константи.
Всі вирази в операторі switch повинні бути унікальні. Крім операторів, помічених ключовим словом case, може бути, але обов'язково один, фрагмент, позначений ключовим словом default.
Список операторів може бути порожнім, або містити один або більше операторів. Причому в операторі switch не потрібно укладати послідовність операторів у фігурні дужки.
Відзначимо також, що в операторі switch можна використовувати свої локальні змінні, оголошення яких знаходяться перед першим ключовим словом case, проте в оголошеннях не повинна використовуватися ініціалізація.
Схема виконання оператора switch наступна:
- Обчислюється вираз в круглих дужках;
- Обчислені значення послідовно порівнюються з константними виразами, наступними за ключовими словами case;
- Якщо одне з константних виразів збігається зі значенням висловлювання, то управління передається на оператор, позначений відповідним ключовим словом case;
- Якщо жодна з константних виразів не одно висловом, то управління передається на оператор, позначений ключовим словом default, а в разі його відсутності управління передається на наступний після switch оператор.
Відзначимо цікаву особливість використання оператора switch: конструкція зі словом default може бути не останньою у тілі оператора switch. Ключові слова case і default в тілі оператора switch істотні тільки при початковій перевірці, коли визначається початкова точка виконання тіла оператора switch. Всі оператори, між початковим оператором і кінцем тіла, виконуються незалежно від ключових слів, якщо тільки якийсь з операторів не передасть управління з тіла оператора switch. Таким чином, програміст повинен сам подбає про вихід з case, якщо це необхідно. Найчастіше для цього використовується оператор break.
Для того, щоб виконати одні й ті ж дії для різних значень вираження, можна помітити один і той же оператор декількома ключовими словами case.
Приклад:
int i = 2;
switch (i)
{
case 1: i + = 2;
case 2: i *= 3;
case 0: i / = 2;
case 4: i -= 5;
default:;
}
Виконання оператора switch починається з оператора, відміченого case 2. Таким чином, змінна i отримує значення, рівне 6, далі виконується оператор, позначений ключовим словом case 0, а потім case 4, мінлива i прийме значення 3, а потім значення - 2. Оператор, позначений ключовим словом default, не змінює значення змінної.
Розглянемо раніше наведений приклад, в якому ілюструвалося використання вкладених операторів if, переписаної тепер з використанням оператора switch.
char ZNAC;
int x, y, z;
switch (ZNAC)
{
case '+': x = y + z; break;
case '-': x = y - z; break;
case '*': x = y * z; break;
case '/': x = u / z; break;
default:;
}
Використання оператора break дозволяє в необхідний момент перервати послідовність виконуваних операторів у тілі оператора switch, шляхом передачі управління оператору, наступного за switch.
Відзначимо, що в тілі оператора switch можна використовувати вкладені оператори switch, при цьому в ключових словах case можна використовувати однакові вирази.
Приклад:
switch (a)
{
case 1: b = c; break;
case 2:
switch (d)
{
case 0: f = s; break;
case 1: f = 9; break;
case 2: f-= 9; break;
}
case 3: b-= c; break;
:
}

Оператори циклу

Оператор циклу for

Оператор for - це найбільш загальний спосіб організації циклу. Він має наступний формат:
for (вираз 1; вираз 2; вираз 3) тіло
Вираз 1 зазвичай використовується для встановлення початкового значення змінних, керуючих циклом. Вираз 2 - це вираз, що визначає умову, за якої тіло циклу буде виконуватися. Вираз 3 визначає зміна змінних, керуючих циклом після кожного виконання тіла циклу.
Схема виконання оператора for:
1. Обчислюється вираз 1.
2. Обчислюється вираз 2.
3. Якщо значення виразу 2 відмінно від нуля (істина), виконується тіло циклу, обчислюється вираз 3 і здійснюється перехід до пункту 2, якщо вираз 2 дорівнює нулю (брехня), то управління передається на оператор, наступний за оператором for.
Суттєво те, що перевірка умови завжди виконується на початку циклу. Це означає, що тіло циклу може жодного разу не виконатися, якщо умова виконання відразу буде хибним.
Приклад:
int main ()
{
int i, b;
for (i = 1; i <10; i + +) b = "i * i;" return 0;}
У цьому прикладі обчислюються квадрати чисел від 1 до 9.
Деякі варіанти використання оператора for підвищують його гнучкість за рахунок можливості використання декількох змінних, керуючих циклом.
Приклад:
int main ()
{
int top, bot;
char string [100], temp;
for (top = 0, bot = 100; top <bot; top + +, bot -)
{
temp = string [top];
string [bot] = temp;
}
return 0;
}
У цьому прикладі, реализующем запис рядка символів в зворотному порядку, для управління циклом використовуються дві змінні top і bot. Відзначимо, що на місці вираз 1 і вираз 3 тут використовуються декілька виразів, записаних через кому, і виконуваних послідовно.
Іншим варіантом використання оператора for є нескінченний цикл. Для організації такого циклу можна використовувати пусте умовний вираз, а для виходу з циклу зазвичай використовують додаткову умову і оператор break.
Приклад:
for (;;)
{
...
... break;
...
}
Так як згідно синтаксису мови С оператор може бути порожнім, тіло оператора for також може бути порожнім. Така форма оператора може бути використана для організації пошуку.
Приклад:
for (i = 0; t [i] <10; i + +);
У даному прикладі мінлива циклу i приймає значення номера першого елемента масиву t, значення якого більше 10.

Оператор циклу з передумовою while

Оператор циклу while називається циклом з передумовою і має наступний формат:
while (вираз) тіло;
В якості виразу допускається використовувати будь-який вираз мови Сі, а як тіла будь-який оператор, в тому числі порожній або складової. Схема виконання оператора while наступна:
1. Обчислюється вираз.
2. Якщо вираз помилково, то виконання оператора while закінчується і виконується наступний по порядку оператор. Якщо вираз істинний, то виконується тіло оператора while.
3. Процес повторюється з пункту 1.
Оператор циклу виду
for (вираз-1; вираз-2; вираз-3) тіло;
може бути замінений оператором while наступним чином:
вираз-1;
while (вираз-2)
{
тіло
вираз-3;
}
Так само як і при виконанні оператора for, в операторі while спочатку відбувається перевірка умови. Тому оператор while зручно використовувати в ситуаціях, коли тіло оператора не завжди потрібно виконувати.
Всередині операторів for і while можна використовувати локальні змінні, які повинні бути оголошені з визначенням відповідних типів.

Оператор циклу з постусловіем do - while

Оператор циклу do while називається оператором циклу з постусловіем і використовується в тих випадках, коли необхідно виконати тіло циклу хоча б один раз. Формат оператора має наступний вигляд:
do тіло while (вираз);
Схема виконання оператора do while:
1. Виконується тіло циклу (яке може бути складеним оператором).
2. Обчислюється вираз.
3. Якщо вираз помилково, то виконання оператора do while закінчується і виконується наступний по порядку оператор. Якщо вираз істинний, то виконання оператора триває з пункту 1.
Щоб перервати виконання циклу до того, як умова стане хибним, можна використовувати оператор break.
Оператори while і do while можуть бути вкладеними.
Приклад:
int i, j, k;
...
i = 0; j = 0; k = 0;
do {i + +;
j -;
while (a [k] <i) k + +;
}
while (i <30 & & j <-30);

Практичні завдання

Прибираємо оператор goto

Запишіть без оператора goto наступний фрагмент
m: if (A)
{
B;
goto m;
}

Спрощуємо логічні вираження

Перепишіть оператори умовного переходу так, щоб їх умови не містили логічних операцій.
if (A & & B | |! C)
D;
else if (B | | C)
E;
else
F;

Взаємозамінність циклів

Обчислити факторіал n! трьома способами за допомогою трьох видів циклу.

Компактний for

Запишіть подвійний цикл
for (int i = 0; i <5; i + +)
{
printf ("\ n");
for (int j = 0; j <4; j + +)
printf ("% 3d", i * j);
}
за допомогою одинарного циклу з тими ж лічильниками i, j.

Обходимося без операторів умовного переходу

Замініть оператор
if (A)
B;
Еквівалентним оператором циклу for.

Лабораторні завдання

Лінійне рівняння

Оператори if-else if, switch. Написати програму, яка вирішує лінійне рівняння a ∙ x + b = 0. Використовувати оператори if-else if. Логічні вирази в умовах цих операторів не повинні містити логічних операцій & & і | |. Передбачити чотири можливих результату при вирішенні рівняння:
- Немає рішення,
- Знайдено єдине рішення,
- Будь-яке число є рішенням,
- Рішення єдине, але не входить в діапазон типу змінної x.
У операторі if-else if визначити деяку змінну flag, яка приймає чотири значення, відповідних можливого результату рішення. Висновок текстової інформації з результатами вирішення організувати з використанням оператора switch, умова якого містить flag. Вихід з програми повинен бути єдиним.
Організувати перевірку коректності даних при введенні коефіцієнтів a і b.

Введення російської літери

Оператори while, switch. З клавіатури вводяться символи. Після аналізу символу програма виводить на екран одне з таких повідомлень:
- Російська голосна буква така-то,
- Російська приголосна літера така-то,
- Англійська літера така-то,
- Символ псевдографіки такий-то,
- Інший символ.
У програмі замість числових констант виду 128 використовувати символьні константи виду "А". Обробити символи з розширеним кодом. Вихід з програми відбувається після натискання клавіші Escape.

Таблиця множення

Використання подвійного циклу for. У програмі вводяться шістнадцяткові числа m і n, після чого на екран виводиться таблиця множення в шістнадцятковій системі числення наступного виду
Таблиця 1.
1
2
...
n
1
2
...
m
З таблиці повинно бути видно, що наприклад, 11 2 = 121, 12 2 = 144, 13 2 = 169.
При великих розмірах таблицю доцільно виводити у файл. Це можна зробити з командного рядка DOS за допомогою команди
tabl.exe>> tabl.txt

ASCII-таблиця

Використання подвійного циклу for. Вивести на екран ascii-таблицю без керуючих символів у наступному вигляді
Таблиця 2.
2
3
E
F
0
1
2
F
Символ з шістнадцятковим кодом 0xST знаходиться на перетині стовпця S і рядки T.
Для виведення на екран графічних уявлень керуючих символів необхідно записувати їх коди безпосередньо у відеопам'ять, без використання стандартних функцій типу printf (див. [1]).

Машинний нуль і машинний епсилон

Оператори while. Знайти машинний нуль і машинний епсилон для дійсних типів даних: float, double, long double.
Порівняти з теоретичними результатами і з довідковою інформацією в Help оболонки.
Врахувати, що в арифметичних виразах виду 1 + x> 1 компілятор використовує підвищену точність у внутрішніх обчисленнях. Тому значення 1 + x необхідно запам'ятати в допоміжній змінної того ж типу, який має змінна x.

Додаткові завдання

1. Знайдіть суму цифр цілого числа типу unsigned long. Число вводиться з клавіатури.
2. Знайдіть ймовірність щасливого шестизначного трамвайного квитка. У такого квитка сума перших трьох цифр дорівнює сумі трьох останніх.
3. З клавіатури вводиться число типу int. Знайдіть суму бітів цього числа.
4. Вивести на екран всі прості числа до N включно. Число N має тип unsigned int і вводиться з клавіатури.

СПИСОК
1. Керніган Б., Рітчі Д., Фьюер А. Мова програмування Сі: Завдання з мови Сі. М.: Фінанси і статистика, 1985. - 192с.
2. Керніган Б., Рітчі Д. Мова програмування Сі. М.: Фінанси і статистика, 1992. - 272с.
3. Подбельський В.В., Фомін С.С. Програмування на мові Сі. Учеб. посібник. М.: Фінанси і статистика, 2004. 600 с.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лабораторна робота
53.2кб. | скачати


Схожі роботи:
Оператори алгоритмічної мови Паскаль Стандартні функції і оператори роботи з рядками
Оператори й основні типи даних мови С
Програмування лінійних алгоритмів Опис синтаксису мови основні оператори
Типи даних алгоритмічної мови TURBO Pascal Стандартні функції і оператори роботи з рядками
Компактні оператори
Оператори Бейсiка
Оператори проектування
Оператори циклу
Деякі лінійні оператори
© Усі права захищені
написати до нас