МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний Університет “Львівська політехніка”
Кафедра “Телекомунікації”
ІНСТРУКЦІЇ РОЗГАЛУЖЕННЯ В ПРОГРАМАХ МОВОЮ С.
Методичні вказівки до лабораторної роботи з курсу
«Інформатика, ч.І»
для студентів спеціальності
«Телекомунікації»
Львів 2004
“Інструкції розгалуження в програмах мовою С”. Методичні вказівки до лабораторної роботи з курсу “Інформатика, ч.І” для студентів спеціальності “Телекомунікації”: Львів 2004. 8с.
Автори: старший викладач Єрмакова Н.А.,
доцент Чайковський І.Б.
Рецензент: професор, д.т.н. Тимченко О.В.
У лабораторній роботі розглянуто властивості інструкцій розгалуження алгоритмів прорам, складених мовою програмування С.
Методичні вказівки розглянуто на засіданні кафедри “Телекомунікації” Національного університету “Львівська політехніка” від______2004р. протокол №____.
МЕТА РОБОТИ: дослідити властивості інструкцій розгалуження алгоритмів прорам, складених мовою програмування С.
Попередні відомості.
Розгалуження в програмах виникають у випадках, коли необхідне прийняття рішень, наприклад, для уникнення аварійних ситуацій і перевірки допустимих значень вхідних даних. Оператори розгалуження розрізняють як безумовні, умовні (які можуть складати багаторівневі розгалуження) і перемикачі (розгалуження на декілька паралельних гілок).
1. Оператор Goto (використовується рідко!) реалізує безумовний перехід на помічену інструкцію:
goto мітка;
Мітка повинна бути розташована всередині біжучої функції. Мітка може стояти перед будь-яким потрібним оператором і мати вигляд:
ідентифікатор:
Частіше ідентифікатор мітки вибирають і записують вликими літерами. Мітка використовується тільки як об'єкт переходу для goto.
2. Умовні оператори:
if (вираз) оператор
if (вираз) оператор_1 else оператор_2
Вираз повинний бути арифметичного або вказівникового типу. Обчислюється вираз, і якщо він ненульовий, то виконується перший оператор. Якщо вираз нульовий, керування передається на наступну (після крапки-коми) інструкцію.
Якщо використовується else, то другий оператор виконується, якщо вираз нульовий.
Дозволяються вкладені багаторівневі конструкції типу (if – else if – else … if – else), тоді слід потурбуватися про те, щоб логіка була прозорою, і рекомендується використовувати дужки для точного визначення послідовності.
Оператори можуть бути складеними, тобто представляти собою групу операторів, тоді ця група повинна бути обмежена фігурними дужками.
3. Оператор Switch (перемикач) використовують, коли можна визначити спільну ознаку для декількох паралельних гілок розгалуження:
switch (вираз) оператор
Оператор switch викликає передачу керування на один з декількох операторів в залежності від значення виразу. Вираз повинний бути арифметичного або вказівникового типу. Будь-який оператор всередині switch може бути помічений однією або більше мітками case таким чином:
case константний_вираз :
де константний_вираз повинний бути того ж типу, що і вираз-перемикач; всередині контсантного виразу проводяться звичайні арифметичні перетворення. В одному операторі switch жодні дві константи, помічені case, не можуть мати однакове значення. Також може бути не більше, ніж одна мітка виду:
default:
Після виконання оператора switch, проводиться обчислення його виразу та порівняння його з кожною case константою. Якщо одна з констант дорівнює значенню виразу-перемикачу, то управління передається на вираз, що слідує за відповідною міткою case. Якщо жодна case константа не відповідає виразу та є мітка default, то управління передається на вираз, якому вона передує. Якщо нема відповідних варіантів case та default відсутній, то не виконується жоден з операторів в операторі switch. Для виходу зі switch використовується оператор break.
4. Оператор Break:
break;
викликає завершення найменшого охоплюючого оператора while, do, for або switсh; керування передається на оператор, який слідує за завершеним.
ЗАВДАННЯ
1. Здійснити роботу програми, яка ілюструє розгалуження умовними операторами:
#include <stdio.h>
#include <conio.h>
void main()
{int a=2,b=0,c=1;
printf("\n\n");
if(a > 0 && b < -3) c = b*b/a; printf("c=%d\n",c); /*c=1*/
a = ++c/a + a%c;
b+= c*c;
if(a < b || a < 0) {c *= a; printf("c=%d\n",c);} /*c=2*/
else if (c++ == 2) printf("c=%d\n",c);
if(b < a && a == 2) c = 2*a +1;
else { c = (b--) + a; a = 0; }
printf("c=%d\n",c); /*c=5*/
a = b = 2;
if(c >= 3) if(a < 0 || a > c) c = 0;
else { a = 1; c = 7; printf("c=%d\n",c); } /*c=7*/
if(c > 0 && c < 10) {if(a > 0) printf("c=%d\n",c++);} /*c=7*/
else c = 10;
if(c <= 5) if((a = b + 1) > 2) c %= 2;
printf("c=%d\n",c); /*c=8*/
a = 3; b = -1;
if(b > 0) c = 1;
else if(b < -10) { c = -1; printf("c=%d\n",c); }
else if( b <= -3 ) c = 2;
else c = b*b + 10; printf("c=%d\n",c); /*c=11*/
getch();
}
2. Здійснити роботу програми:
/* Виводить запрошення "Продовжуєте (Так/Ні)" та інтерпретує відповідь користувача, ілюструє використання циклу do-while та перемикача switch.
В о з в р а т:
YES (0), якщо вибір - Так;
NO (1), якщо вибір - Ні ;
ESC (2), якщо натиснуто Esc (Ключ). */
#include <stdio.h> /* прототип функції puts(), putchar() */
#include <bios.h> /* прототип функції bioskey() */
#define YES 0
#define NO 1
#define ESC 27
int main(void)
{
char ch;
puts("Продовжуєте (Так/Ні). Esc - відмовитися від вибору");
do
{
ch = bioskey(0);
switch(ch) {
case 'т': case 'Т':
case 'n': case 'N':
puts("Так");
return(YES);
case 'н': case 'Н':
case 'y': case 'Y':
puts("Ні");
return(NO);
case ESC:
break;
default:
putchar('\a');
}
}
while(ch != ESC);
puts("Відміна вибору");
return(ESC);
}
3. Здійснити роботу програми «Простий калькулятор», в якій вводяться: перше число, знак арифметичної операції, друге число. Програма розпізнає знак арифметичної операції та виконує її, після чого друкує результат.
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{
char *expr,op;
float a,b,res;
printf("\nEnter expression:");
scanf("%f%c%f",&a,&op,&b);
switch (op)
{ case '-': res = a-b; break;
case '+': res = a+b; break;
case '*': res = a*b; break;
case '/': res = a/b; break;
default: res = 0; printf("\n illegal operation\n"); break;
}
printf("=%f\n",res);
getch();
}
Контрольні запитання.
Призначення оператора безумовного розгалуження, формат мітки.
Конструкція оператора умовниого розгалуження if.
Конструкція оператора умовного розгалуження іf – else.
Що таке складений оператор?
Як організувати багаторівневі розгалуження?
Призначення перемикача.
Які властивості виразу, за яким працює перемикач?
Призначення оператора Break.
Призначення оператора Default.
Список рекомендованої літератури.
Керниган, Ритчи. Программирование на С. М. – 1984, 1990.
Березин А.К., Березина В.И. Программирование на С и С++. М. – 1996.
Підписано до друку 14.05.2004. Папір офсетний. Друк офсетний.
Умов.-друк. арк. 0,38. Формат 60х84 1/16. Наклад 100 прим. Зам. 1050.
Віддруковано в НВМ Поліграфічного технікуму УАД
79008, м. Львів, пл. Митна, 1