Структура на програма в C - Част 6 - goto, switch, break и continue клаузи

Подобни документи
Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

Структура на програма в C - Част 9 - низове от символи, C-string

Структура на програма в C - Част 2 - типове, функции

C++

Lush Green

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет

Виртуални функции

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Системи за управление на версии - Работа с git

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Lush Green

Програмиране на Паскал

Анализ и оптимизация на софтуерни приложения

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/

Microsoft Word - Primer2_4.doc

ВТОРА ГЛАВА

4

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението

Университет - библиотека - образование и дигиталният достъп University - Library - Education and Digital Access

Лабораторно упражнение 6 Тема: Оператори за цикли в езика C++. Реализиране на циклични алгоритми I. Цел на лабораторното упражнение Да се затвърдят зн

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23

СЪЗДАВАНЕ НА СЪДЪРЖАНИЕ, ИНДЕКСЕН УКАЗАТЕЛ И ВМЪКВАНЕ НА ПОЛЕТА I. СЪЗДАВАНЕ НА СЪДЪРЖАНИЕ Съдържанието се създава по съществуващ в Word форматен стил

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр

Лекция Класификация с линейна обучаваща машина Обучаващата машина може да бъде дефинирана като устройство, чиито действия са повлияни от миналия опит

ЕВРОПЕЙСКИ СЪЮЗ Европейки фонд за регионално развитие Инвестираме във вашето бъдеще ОПЕРАТИВНА ПРОГРАМА Развитие на конкурентоспособността на българск

ЦИРКУЛЯРНА ПОЩА (MAIL MERGE)

Анализ и оптимизация на софтуерни приложения

Address Book

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

Какво трябва да знаете, за да осигурите безопасна употреба на перилните и почистващи препарати вкъщи На етикетите на почистващите продукти за дома ско

Проф

doll Механична кукла Механичните кукли автоматично повтарят предварително зададена последователност от движения. В Япония има традиции в изработката н

ИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври

Microsoft Word - zada4a 1.doc

105SL_Quick_Reference_Guide

PowerPoint Presentation

Препис:

Структура на програма в C Част 6 - goto, switch, break и continue клаузи Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 21 април 2019 г. И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 1 / 24

Съдържание 1 Етикети 2 goto клауза 3 switch клауза 4 break клаузa 5 continue клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 2 / 24

Съдържание 1 Етикети 2 goto клауза 3 switch клауза 4 break клаузa 5 continue клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 3 / 24

Етикети В C преди всяка клауза може да се постави идентификатор наречен етикет, който служи за идентифициране на клаузата Фигура 1: Синтактична диаграма на етикет И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 4 / 24

Етикети Особеност на идентификаторите на етикети е, че те са видими във цялото тяло на функцията, в която са дефинирани int main() { // 'label1', 'label2', 'label3' and 'label4' scopes' start here int a = 10; label1: a = 1; { label2: a = 2; if (a == 2) { label3: a = 3; label4: a = 4; return 0; // 'label1', 'label2', 'label3' and 'label4' scopes' end here Фрагмент 1: Област на видимост на етикети И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 5 / 24

Съдържание 1 Етикети 2 goto клауза 3 switch клауза 4 break клаузa 5 continue клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 6 / 24

goto клауза goto клаузата е клауза за преход, която указва коя е следващата клауза, която да бъде изпълнена Клаузата започва с ключовата дума goto последвана от етикет, който определя следващата клауза за изпълнение Фигура 2: Синтактична диаграма на goto клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 7 / 24

goto клауза. Примери int main() { int a = 10; goto skip; // OK, 'skip' is visible in the whole function body a = a + 1; skip: a = a + 1; printf("%d\n", a); // prints '11' Фрагмент 2: Пример за goto клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 8 / 24

goto клауза. Примери int main() { int a = 10; start: a = a + 1; if (a < 12) { goto start; printf("%d\n", a); // prints '12' Фрагмент 3: Пример за goto клауза Използването на goto клаузи не е препоръчително, тъй като почти винаги, могат да бъдат заместени с клаузи за цикли, които по-лесно се разбират от програмиста И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 9 / 24

Съдържание 1 Етикети 2 goto клауза 3 switch клауза 4 break клаузa 5 continue клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 10 / 24

switch клауза switch клаузата e клауза за избор, която на базата на стойността на целочислен израз, избира между нула или повече клаузи След изпълнение на избраната клауза, изпълнението продължава с клаузата след нея Клаузите, между които се избира, се обозначават със специални етикети, наречени случаи (cases) Случаите съдържат константна целочислена стойност, при която обозначената клауза да бъде изпълнена Фигура 3: Синтактична диаграма за дефиниране на switch клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 11 / 24

switch клауза int a = 2; switch (a) { // the value of the expression is 2 case 3: printf("three!\n"); case 2: printf("two!\n"); // this clause is selected case 1: printf("one!\n"); // this clause is executed next printf("go!\n"); // this clause is executed last Фрагмент 4: Пример за switch клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 12 / 24

switch клауза Случаи могат да се дефинират само в тялото на switch клаузата Подобно на етикетите, случай може да бъде сложен пред всяка клауза в тялото на switch клаузата Специален случай е случая по подразбиране (default case), който не съдържа стойност. Клаузата обозначена като случай по подразбиране се избира само ако няма съвпадение с други случаи Фигура 4: Синтактична диаграма за дефиниране на случай (case) И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 13 / 24

switch клауза int a = 7; switch (a) { // the value of the expression is 7 case 3: printf("three!\n"); case 2: printf("two!\n"); case 1: printf("one!\n"); printf("go!\n"); // no clause is selected, because there is no case that matches Фрагмент 5: Пример за switch клауза без случай по подразбиране И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 14 / 24

switch клауза int a = 7; switch (a) { // the value of the expression is 7 case 3: printf("three!\n"); case 2: printf("two!\n"); case 1: printf("one!\n"); default: printf("go!\n"); // this clause is selected, // because there is no other case that matches Фрагмент 6: Пример за switch клауза със случай по подразбиране И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 15 / 24

switch клаузa Тялото на switch не може да съдържа дублиращи се случаи int a = 7; switch (a) { case 3: printf("start!\n"); case 3: printf("three!\n"); // ERROR, duplicate case case 2: printf("two!\n"); case 1: printf("one!\n"); default: printf("go!\n") default: printf("finish!\n"); // ERROR, duplicate case Фрагмент 7: Пример за switch клауза със случай по подразбиране И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 16 / 24

Съдържание 1 Етикети 2 goto клауза 3 switch клауза 4 break клаузa 5 continue клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 17 / 24

break клаузa break клаузата е клауза за преход, която може да бъде използвана само в тялото на цикъл или switch Ако break клаузата се намира в тялото на цикъл, тя оказва следващата клауза за изпълнение да бъде тази след клаузата на цикъла Ако break клаузата се намира в тялото на switch, тя оказва следващата клауза за изпълнение да бъде тази след switch клаузата Фигура 5: Синтактична диаграма за break клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 18 / 24

break клаузa int a = 10; while (a) { if (a == 5) { break; // break from the loop a = a - 1; printf("%d\n", a); /* prints '5' */ Фрагмент 8: Пример за break клауза в тяло на while цикъл И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 19 / 24

break клаузa int a = 10; switch (a) { case 10: a = a - 1; break; // break from the switch a = a - 1; break; printf("%d\n", a); /* prints '9' */ Фрагмент 9: Пример за break клауза в тяло на switch И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 20 / 24

Съдържание 1 Етикети 2 goto клауза 3 switch клауза 4 break клаузa 5 continue клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 21 / 24

continue клаузa continue клаузата е клауза за преход, която може да бъде използвана само в тялото на цикъл След изпълнението ѝ следващата клауза е автоматично генерирана празна клауза в края на тялото на цикъла Казано по друг начин, изпълнението на всички клаузи до края на тялото на цикъла се пропуска Фигура 6: Синтактична диаграма за continue клауза И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 22 / 24

continue клаузa int a = 4; while (a) { a = a - 1; if (a == 1) { continue; printf("%d\n", a); /* prints '3', '2', '0' */ int a = 4; while (a) { a = a - 1; if (a == 1) { goto end; printf("%d\n", a); end: ; /* prints '3', '2', '0' */ Фрагмент 10: Пример за continue клауза в тяло на while цикъл и еквивалент с goto И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 23 / 24

continue клаузa int i = 0; for (i = 0; i < 5; i++) { if (i == 2) { continue; printf("%d\n", i); /* prints '0', '1', '3', '4' */ int i = 0; for (i = 0; i < 5; i++) { if (i == 2) { goto end; printf("%d\n", i); end: ; /* prints '0', '1', '3', '4' */ Фрагмент 11: Пример за continue клауза в тяло на for цикъл и еквивалент с goto И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 24 / 24