ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.12.2021
Просмотров: 155
Скачиваний: 3
Програмування.
Напрям - 6.050201 – “Системна інженерія”
Тема: Апаратне забезпечення комп’ютера
Лабораторна робота №3. Оператори вибору
Мета і задачі:
Навчитися створювати та відлагоджувати програми з розгалуженням обчислювальних процесів використовуючи оператори вибору на мові програмування С.
Теоретичні відомості і методичні вказівки
Мова програмування С включає три види керуючих структур (операторів), які працюють на основі вибору альтернатив: оператор if (конструкція if – else), тернарний оператор (?:) і оператор switch (конструкція switch – case).
Умовний оператор if (конструкція if – else)
Конструкція з одиночним оператором if призначена для виконання команди або блоку команд залежно від того, істинним або хибним є заданий логічний вираз – “умова”. Загальний формат такої конструкції має наступний вигляд:
if ( Вираз ) true-оператор;
else false-оператор;
Якщо логічний вираз є істинним, виконуватимуться дії з переліку дій 1, якщо хибним – з переліку дій 2, тобто записані в блоці оператора else. Загальна схема програми оператора if-else представлена на рис 1.
Рисунок 1 – Загальна схема програми оператора if-else
Приклад:
printf (“Введіть свій вік: ”);
scanf (“%i”, &Age);
if (Age >= 18)
{
printf (“Ви – повнолітня людина\n”);
}
else
{
printf (“Ви – неповнолітня людина\n”);
}
Якщо немає необхідності вказувати перелік дій, які треба виконати в разі хибності умови, то оператор if записується:
if ( Вираз ) true-оператор;
Така конструкція відповідає схемі програми, представленій на рисунку 2.
Рисунок 2 – Загальна схема програми оператора if
Логічний вираз, який обробляється оператором if, може набувати двох значень: “істина” і “неправда”, однак взагалі, з точки зору компілятора істинним є будь-яке ненульове значення, а хибним – нульове. Це означає, що перевірку виду:
if (x <> 0) ...
(“якщо x не дорівнює нулю”) можна замінити на більш стислу, хоча й менш наочну:
if (x) ...
В цьому випадку, якщо змінна x містить довільне число, яке відрізняється від нуля, воно буде вважатись таким, що дорівнює значенню “істина” з відповідними наслідками.
Аналогічно, умова виду:
if (x == 0) ...
може бути замінена на
if (!x) ...
(читається “якщо не-ікс”). Тоді нульове значення змінної x, яке символізує “хибність”, операцією логічного заперечення – “!” – буде перетворене в “істину” і навпаки.
Приклад:
printf (“Введіть стартовий капітал фірми, грн: ”);
scanf (“%i”, &StartMoney);
if (!StartMoney)
{
printf (“Якщо капіталу немає, неможливо працювати далі\n”);
}
else
{
...
Тернарний оператор (?:)
Тернарний оператор дозволяє замінити конструкцію if – else більш компактним записом. Формат тернарного оператора має наступний вигляд:
(логічний вираз) ? дія 1 : дія 2;
Після перевірки значення логічного виразу в разі його істинності виконується дія 1, а в разі хибності – дія 2.
Приклад:
(Age >= 18) ? printf (“Повнолітній”) : printf (“Неповнолітній”);
Оператор множинного розгалуження swicth
В деяких задачах виникає необхідність перевірки цілочисельної змінної або виразу на рівність ряду сталих (константних) значень. Таку перевірку можна здійснити за допомогою структури з декількох конструкцій if – else, наприклад:
if (DayNumber == 1) printf (“Понеділок”);
else if (DayNumber == 2) printf (“Вівторок”);
else if (DayNumber == 3) printf (“Середа”);
else if (DayNumber == 4) printf (“Четвер”);
else if (DayNumber == 5) printf (“П’ятниця”);
else if (DayNumber == 6) printf (“Субота”);
else printf (“Неділя”);
Однак, таку структуру можна реалізувати більш компактно і наочно за допомогою оператора switch, який має наступний формат:
switch ( Вираз )
{
case константний вираз 1: набір операторів 1; break;
case константний вираз 2: набір операторів 2; break;
case константний вираз n: набір операторів n; break;
default : набір операторів по замовченню;
}
Конструкція switch – case працює наступним чином. Цілочисельний вираз послідовно порівнюється із константним значенням 1, 2 і т. д. Якщо деяке значення k співпадає із значенням виразу, то виконується відповідна дія k, після чого оператор break передає управління за межі блоку switch. Якщо серед констант не знайшлось рівної виразу, то управління передається на мітку default. За відсутності цієї мітки управління передається за межі блоку switch.
На рис. 3 представлена загальна схема програми оператора множинного розгалуження switch.
Рисунок 3 – Загальна схема програми оператора множинного розгалуження switch
Таким чином, реалізація перевірки з прикладу про дні тижня на основі оператора switch матиме наступний вигляд:
swicth (DayNumber)
{
case 1: printf (“Понеділок”); break;
case 2: printf (“Вівторок”); break;
case 3: printf (“Середа”); break;
case 4: printf (“Четвер”); break;
case 5: printf (“П’ятниця”); break;
case 6: printf (“Субота”); break;
default: printf (“Неділя”);
}
Порядок виконання і звітування
-
Створити програму на мові С згідно варіанту використавши середовище програмування Dev-C++ 4.0.
-
Відкомпілювати та відлагодити програму.
-
Розробити набір тестів і перевірити роботу програми на них.
-
Відповісти на контрольні запитання.
-
До кожної програми скласти схему програми.
-
Зробити висновки.
-
Звіт по лабораторній роботі має складатися з титульної сторінки, схем програм, лістингів програм, висновків по роботі.
Варіанти завдань
Варіант 1.
Написати програму, яка запитує в користувача номер дня тижня і виводить відповідну номеру назву дня тижня.
Варіант 2.
Написати програму, яка обчислює скільки сірників потрібно щоб скласти «ґрати» N x N, у діапазоні 0<N<200.
Наприклад при N=2 відповідь 12.
Перевіряти відповідність вхідних даних заданому діапазону.
Варіант 3.
Написати програму перевірки знання дати початку другої світової війни, у випадку правильної відповіді виводити напис «правильно», у випадку неправильної відповіді програма повинна робити підказку користувачеві, і тільки після п'яти неправильних відповідей виводити правильну відповідь.
Варіант 4.
Написати програму обчислення вартості покупки з урахуванням знижки. Знижка в 3% надається якщо вартість покупки більше 500 гривень, в 5% якщо вартість більше 1000 гривень.
Варіант 5.
Написати програму обчислення вартості катання на ковзанах у льодовому комплексі. Вхідні дані - час перебування на ковзанці, вид картки (VIP-картка - 20% знижка від базової вартості за годину, Premium-картка - 10% знижка від базової вартості за годину, Base-картка - базова вартість за годину).
Варіант 6.
Написати програму, яка запитує в користувача ступінь двійки, і виводить на екран число в цьому ступені. Якщо введено негативне число виводиться повідомлення про помилку.
Варіант 7.
Написати програму, яка запитує в користувача чотиризначне число. Знайти частку перших двох цифр цього числа розділених на різницю останніх двох. У випадку введення не чотиризначного числа вивести повідомлення про помилку.
Варіант 8.
Написати програму, яка після введеного із клавіатури числа (у діапазоні від 1 до 99), що позначає грошову одиницю, дописує слова «копійка» у правильній формі. Наприклад 5 копійок, 3 копійки тощо.
Варіант 9.
Написати програму, яка запитує в користувача п'ятизначне число. Знайти добуток останніх трьох цифр цього числа розділених на суму перших двох. У випадку введення не п'ятизначного числа вивести повідомлення про помилку.
Варіант 10.
Написати програму рішення квадратного рівняння ax2+bx+c=0 . Вхідні дані - a, b, c. Вихідні дані - корінь рівняння. У випадку якщо коефіцієнт при другому ступені невідомого дорівнює нулю, виводити відповідне повідомлення.
Варіант 11.
Написати програму, яка запитує в користувача номер дня (1-30) червня поточного року і виводить відповідну номеру назву дня тижня.
Підсумок
Після виконання лабораторної роботи студент повинен:
-
Знати таблиці істинності для логічних операцій та побітових логічних операцій.
-
Вміти використовувати логічні операції для написання програм з розгалуженням обчислювальних процесів на мові програмування С.
-
Вміти створювати програми з розгалуженням обчислювальних процесів використовуючи оператори вибору if, if-else, switch на мові програмування С.
Контрольні питання
-
Які оператори вибору існують в мові С ?
-
Яку роль відіграє оператор if при написанні програм ?
-
Який тип виразу має оператор умови ?
-
Як виконується робота оператора if ?
-
Чи обов’язково повинні бути присутні всі гілки оператора if ?
-
Чи допускається вкладеність операторів if ?
-
Яка глибина вкладень допускається ?
-
Скільки операторів може містити кожна з гілок оператора if ?
-
Що потрібно зробити, коли в кожній гілці треба виконати не один, а більше операторів?
-
Яке правило застосовується щоб уникнути неоднозначності використання зарезервованого слова else?
-
Яку роль виконує оператор switch ?
-
Який тип виразу має “селектор” оператора switch ?
-
Скільки міток може містити кожна з гілок оператора switch ?
-
Як виконується робота оператора switch ?
-
Коли ефективно використовувати оператор switch ?
-
Скільки операторів може мати кожна з гілок оператора switch ?
-
Якого типу можуть бути мітки в операторі switch ?
-
Оператори вибору використовують оператори відношення. Які оператори відношення Ви знаєте ?
-
Які типи операндів допустимі в операторах відношення, і який результат будуть мати ці відношення ?
-
Якого типу операнди можуть бути використані в операторах відношення ?
-
Яким чином виконується порівняння рядкових даних ?
-
Які логічні операції виконуються в мові С ?
-
Який пріоритет мають логічні операції порівняно з операціями відношення ?
-
Чи мають місце якісь особливості при виконанні логічних операцій ?
-
Яка різниця між моделями повного обчислення логічних виразів і за короткою схемою?
-
В яких випадках доречна коротка схема обчислення логічних виразів ?
-
В яких випадках доречна повна схема обчислення логічних виразів ?
-
Який пріоритет мають логічні операції порівняно з арифметичними операціями?
-
В основі яких алгоритмів лежать оператори відношення ?
-
Побудуйте таблиці істинності логічних функцій НІ, АБО, ТА.
Контрольні вправи
-
З допомогою операторів вибору і присвоювання записати фрагмент програми, який обчислює значення змінної n по наступному правилу:
[n+1 при і=1 або і=5,
n : = [a+b при і=7 або і=12,
[a-b в інших випадках.
-
З допомогою операторів вибору і присвоювання записати фрагмент програми, який обчислює значення змінної n по наступному правилу
[n+1 при a>0 i b=0,
n : = [a+b при a<=0 i b=0,
[a-b в інших випадках.
-
З допомогою операторів вибору і присвоювання записати фрагмент програми, який обчислює значення змінної n по наступному правилу:
[1 при і=1 або 2 або 7,
n : = [2 при і=10,
[0 в інших випадках.
-
Зобразити фрагмент схеми програми, який відповідає наступному фрагменту програми:
if ( c<3 ) if ( c == 2) a++; else b++; a += 1;
-
Зобразити фрагмент схеми програми, який відповідає наступному фрагменту програми:
if ( c<3 ) if ( c == 2) a++; b++; a += 1;
-
Зобразити фрагмент схеми програми, який відповідає наступному фрагменту програми:
if ( c<3 ) if ( c == 2) a++; else b++; if ( c<2 ) c++; a += 1;
-
Зобразити фрагмент схеми програми, який відповідає наступному фрагменту програми:
if ( c<3 ) if ( c == 2) a++; else b++; if ( c<2 ) c++; else a += 1; { c++; b++; }
-
Ввести і надрукувати значення елементів масиву дійсного типу з розміром 10. Обчислити і надрукувати кількість негативних елементів масиву.
-
Ввести і надрукувати значення елементів масиву дійсного типу з розміром 20. Обчислити і надрукувати індекс найменшого елементу масиву.
-
Ввести і надрукувати значення елементів масиву цілого типу з розміром 20. Обчислити і надрукувати середнє арифметичне для елементів масиву. Постарайтесь, щоб дробова частина в результаті не загубилась.
-
Ввести і надрукувати значення змінних a, b, c дійсного типу. Обчислити і надрукувати, скільки поміж них відмінних від нуля.
-
Ввести і надрукувати значення змінних a, b цілого типу. Обчислити, чи рівні вони один одному, і надрукувати відповідь.
-
Ввести і надрукувати значення змінних a, b, c дійсного типу. Обчислити кількість позитивних значень серед заданих і надрукувати відповідь.
-
Ввести і надрукувати значення змінних x дійсного типу. Обчислити і надрукувати, значення функції y =| x |.
-
Вивести і надрукувати значення x дійсного типу. Обчислити і надрукувати значення у:
[ +1 при х > 0,
Y = [ 0 при х = 0,
[ -1 при x < 0.