Оператор перехода goto

Оператор switch

Если в программе нужно реализовать выбор из более, чем двух вариантов, то можно использовать инструкцию множественного ветвления (переключатель).

Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений.

Формат оператора:

switch ( выражение )

{

case константное_выражение_1: [оператор_1];

case константное_выражение_2: [оператор_2];

case константное_выражение_n: [оператор_n];

[default: оператор_n + 1];

}

Оператор выбора является обобщением условного оператора. Выполнение оператора начинается с вычисления выражения (оно должно быть целочисленным), а затем управление передается первому оператору из списка, помеченного константным выражением, значение которого совпало с вычисленным. После этого, если выход из переключателя явно не указан, последовательно выполняются все остальные ветви. Затем управление передаётся оператору, следующему за оператором выбора. Если значение выражения не совпадает ни с одним константным выражением, то выполняется оператор n + 1.

Значение выражения и констант должны быть одного и того же типа. Тип может быть любым целочисленным. В качестве константы допускается использование списка констант (например, case1: case3: case5: [оператор_1];), а в качестве оператора – составной оператор.

Если константы представляют диапазон чисел, то вместо списка можно указать первую и последнюю константу диапазона, разделив их тремя точками (справедливо для некоторых сред программирования, например, MinGW).

Выход из переключателя обычно выполняется с помощью операторов breakилиreturn. Оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do. Оператор return выполняет выход из функции, в теле которой он записан.

Таблица 6. Оператор выбора (блок-схема)

Неполная форма записи Полная форма записи
выбор выбор-иначе
       

Оператор безусловного перехода используется для изменения последовательности выполнения операторов.

Формат оператора:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор.

Метка – это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.

Использование оператора безусловного перехода оправданно, как правило, в двух случаях:

- принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;

- переход из нескольких мест функции в одно (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).

Во всех остальных случаях следует привести алгоритм к структурному виду, то есть преобразовать его так, чтобы он мог быть записан с помощью базовых конструкций.

Использование оператора безусловного перехода считается плохим стилем программирования, т.к. нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и один выход.

Пример: Дано число m (1 £ m £ 7). Вывести на экран название дня недели, который соответствует этому номеру.

блок-схема программа
//switch; #include <conio.h> #include <iostream> using namespace std;   int main() { setlocale(LC_ALL,"Rus"); int n; metka : cout<<"\nВведите номер дня недели: "; cin>>n; switch (n) { case 1 : cout<<"\nПонедельник";break; case 2 : cout<<"\nВторник";break; case 3 : cout<<"\nСреда";break; case 4 : cout<<"\nЧетверг";break; case 5 : cout<<"\nПятница";break; case 6 : cout<<"\nСуббота";break; case 7 : cout<<"\nВоскресенье";break; default : cout<<"\nНеверный ввод\n"; goto metka; } _getch(); return 0; }

 

Результат работы программы:

Введите номер дня недели: 12

 

Неверный ввод

 

Введите номер дня недели: 2

 

Вторник


Лабораторная работа № 3
Программирование алгоритмов разветвляющейся структуры

ЦЕЛЬ РАБОТЫ: приобретение навыков программирования вычислительных разветвляющихся процессов с использованием условного, составного операторов, оператора выбора (множественного ветвления) и оператора безусловного перехода.

Выполнение работы:в соответствии с вариантом составить и реализовать программы.

Задание I

Решить задачу с использованием конструкции ветвления:

1. Расстояние от дома до школы S км. До начала урока осталось t минут. Ученик идет со скоростью v. Определить, придёт ли он раньше звонка, после звонка или во время.

2. Даны действительные числа x, y и z. Найти min(x, y, z).

3. Вычислить значение функции

4. Возвести в квадрат большее из трёх заданных чисел.

5. Определить, есть ли среди трёх заданных чисел чётные.

6. Вывести на экран три заданных числа в порядке убывания.

7. Определить, принадлежит ли точка А(а1, а2) кольцу, определяемому окружностями: x2 + y2 = 1 и x2 + y2 = 16.

8. Вычислить значение функции

9. Две окружности заданы координатами центра и радиусами. Сколько точек пересечения имеют эти окружности?

10. В два сосуда, один из которых имеет форму шара радиуса R1, а другой – форму куба с ребром А, доверху налита вода. Сравните количество воды в сосудах.

11. Вычислить значение функции:

12. Даны три произвольных действительных числа. Можно ли построить треугольник с такими длинами сторон?

13. Какая из точек A(a1, a2) или B(b1, b2) находится дальше от начала координат?

14. Две прямые заданы уравнениями: a1x + b1y+ c1 =0 и a2x + b2y+ c2 =0. Определить, пересекаются ли они.

15. Попадёт ли тока А(a1, a2) в окружность заданного радиуса с центром в начале координат?

16. Вычислить значение функции
где a = 2.8, b = - 0.3, c = 4.

17. В заборе выпилена дыра прямоугольной формы с известными размерами. Определить, пройдёт ли в эту дыру мяч заданного радиуса.

18. Две окружности заданы координатами центра и радиусами. Определить, пересекаются ли они, касаются друг друга или не имеют общих точек.

19. В григорианском календаре каждый год, номер которого делится на 4, является високосным, за исключением тех, которые делятся на 100 и не делятся на 400 нацело. Определить число дней в году по номеру года. Т.о. 1900 г. - не високосный, 2000 г. – високосный.

20. Определить, есть ли среди четырёх заданных чисел кратные пяти.

21. Вычислить значение функции , где а = -0.5, b = 2.

22. Из трех действительных чисел a, b и c выбрать те, модули которых больше 4.

23. Даны три произвольных действительных числа. Можно ли построить треугольник с такими длинами сторон? Если да, то вывести на экран является ли заданный треугольник равносторонним, равнобедренным или разносторонним.

24. Даны действительные числа x и y. Найти U = max2 (x2y, xy2).

25. Решить квадратное уравнение.

Задание II

Решить задачу с использованием конструкции выбора:

1. Дано число c. Распечатать величину этого числа в словесной форме, учитывая его знак. Предусмотреть, что -7 ≤ с ≤ 7.

2. Дано число m (1 £ m £ 12).Определить, сколько дней в месяце с номером m. Год не високосный.

3. С клавиатуры вводится натуральное число n – количество граней выпуклого многогранника. В зависимости от значения n вывести на экран фразу «Выпуклый многогранник имеет n граней», согласовав окончание слова "грань" с числом n. Предусмотреть, что 0 ≤ n ≤ 50. Если выпуклого многогранника с заданным количеством граней не существует, выдать соответствующее сообщение.

4. С клавиатуры вводится цифра m (от 1 до 4). Вывести на экран названия месяцев, соответствующих времени года с номером m (считать зиму временем года № 1).

5. С клавиатуры вводится натуральное число n – количество граней выпуклого многогранника. В зависимости от значения n вывести на экран в словесной форме название правильного выпуклого многогранника или сообщить, что правильного выпуклого многогранника с таким количеством граней не существует.

Предусмотреть, что 4 ≤ n ≤ 20.

Примечание. Существует пять выпуклых правильных многогранников: тетраэдр (4 грани); гексаэдр или куб (6 граней); октаэдр (8 граней); додекаэдр (12 граней); икосаэдр (20 граней)

6. Дано натуральное число n < 30. Вывести на экран фразу «мне n лет (год или года)» соответственно.

7. Найти значение функции:

8. Дано число m (1 £ m £ 12).Определить, к какому времени года относится месяц с номером m.

9. Вводится целое число . Если C > 0, то вывести на экран название этого числа в словесной форме. В противном случае сообщить, что число отрицательное.

10. С клавиатуры вводится натуральное число n – количество углов многоугольника. В зависимости от значения n вывести на экран название многоугольника или сообщить, что многоугольника с таким количеством углов не существует.

Предусмотреть, что 0 ≤ n ≤ 6.

11. С клавиатуры вводится натуральное число n. В зависимости от значения остатка r при делении числа n на 7 вывести на экран число n в виде n = 7k + r, где r представить в словесной форме.

12. Дано число m. Определить полугодие, на которое приходится месяц m и количество дней в этом месяце. Предусмотреть, что 1 ≤ m ≤ 12. Год не високосный.

13. Дано число n. Напечатать фразу "Мы успешно сдали n экзаменов", согласовав окончание слова "экзамен" с числом n. Предусмотреть, что 1 ≤ n ≤ 20.

14. Определить время года, к которому относится месяц m и определить количество дней в этом месяце. Предусмотреть, что 1 ≤ m ≤ 12. Год високосный.

15. Дано число c. Распечатать величину этого числа в словесной форме. Предусмотреть, что 0 ≤ с ≤ 7.

16. Даны два числа D – день и М – месяц. Определить К – порядковый номер того дня високосного года, который имеет дату D и M.

17. Даны три числа D, M и G, определяющие день, месяц и год. Проверить образуют ли они правильную дату и вывести соответствующее сообщение. Например, 31.06.90 - неправильная дата. Год не високосный.

18. С клавиатуры вводится цифра от 0 до 9.Вывести на экран название этой цифры в словесной форме.

19. В понедельник фирма работает с 9-00 до 16-00; во вторник, среду, четверг, пятницу – с 8-00 до 19-00; в субботу – с 10-00 до 15-00; воскресенье – выходной. По заданному номеру дня недели определить часы работы.

20. Найти значение функции: где a = 4.

21. С клавиатуры вводится натуральное число n. В зависимости от значения остатка r при делении числа n на 5 вывести на экран число n в виде n = 5k + r, где r представить в словесной форме.

22. На первом курсе студенты четырёх групп сдают зачёт по информатике. На втором курсе группа № 1 сдаёт экзамен по дисциплине «Информационные технологии в экономике», группа № 2 – экзамен по дисциплине «Информационные технологии в физике», группа № 3 – экзамен по дисциплине «Информационные технологии в географии», группа № 4 – экзамен по дисциплине «Информационные технологии в математических исследованиях». Задать с клавиатуры номер курса и номер группы и вывести на экран сообщение, какой зачёт или экзамен группа будет сдавать.

23. С клавиатуры задано целое число N < 5. Если оно положительное, то вывести на экран его название в словесной форме. В противном случае найти квадрат этого числа.

24. Студенты убирают яблоки. Нормы следующие: студент 1 курса должен собрать в день не менее 50 кг яблок, студент второго курса – не менее 60 кг в день, студент 3 курса – не менее 70 кг в день. Зная курс, на котором учится студент, определить, выполнил ли он дневную норму.

25. Дано число m (1 £ m £ 12).Определить, сколько дней в месяце с номером m. Учесть високосный или не високосный год.

Задания для самостоятельной работы

1. Определить D и М-дату К-го по счету дня високосного года. Месяц вывести в словесной форме. D - день, М - месяц. Предусмотреть, что 1 ≤ К ≤ 366.

2. Компания по снабжению электроэнергией взимает плату с клиентов по тарифу:

· 7 р. за 1 кВт/ч за первые 250 кВт/ч;

· 17 р. за кВт/ч, если потребление свыше 250, но не превышает 300 кВт/ч;

· 20 р. за кВт/ч, если потребление свыше 300 кВт/ч.

Потребитель израсходовал n кВт/ч. Подсчитать плату.

3. Школьники сдают нормы по прыжкам в длину. Если длина прыжка больше 2,50 м, то оценка – «5», если от 2 м до 2,5 м - оценка «4»; от 1,5 м до 2 м - оценка «3»; если меньше 1,5 м – «2». Выставить школьнику оценку, если известна длина его прыжка. Примечание: 1 м = 100 см.

4. При покупке товара на сумму от 200 до 500 руб предоставляется скидка 3%, при покупке товара на сумму от 500 до 800 – скидка 5%, при покупке товара на сумму от 800 до 1000 руб – скидка 7%, свыше 1000 руб – скидка 10%. Покупатель приобрел 8 рулонов обоев по цене Х1 и две банки краски по цене Х2. Сколько он заплатил?

5. Студенты убирают урожай помидоров. При сборе до 50 кг в день работа оплачивается из расчёта 30 руб. за 1 кг; при сборе от 50 до 75 кг в день – 50 руб. за 1 кг; при сборе от 75 до 90 кг в день – 65 руб. за 1 кг; при сборе свыше 90 кг в день – 70 руб. за 1 кг плюс 120 руб. премия. Студент собрал X кг за день. Определить его заработок.

6. Ученики начальной школы сдают технику чтения. В 1 классе скорость чтения до 20 слов в мин считается низкой, от 21 до 40 слов в мин – средней, от 41 до 50 – выше среднего, более 51 слова в мин – высокой. Во втором классе скорость чтения до 30 слов в мин считается низкой, от 31 до 60 слов в мин – средней, от 61 до 70 – выше среднего, более 71 слова в мин – высокой. Задать с клавиатуры номер класса и количество прочитанных учеником в минуту слов. Оценить скорость чтения.

7. Студенты убирают яблоки. Студентам 1 курса при сборе до 50 кг в день работа оплачивается из расчёта 30 коп. за 1 кг; при сборе от 50 до 75 кг в день – 50 коп. за 1 кг; при сборе от 75 до 90 кг в день – 65 коп. за 1 кг; при сборе свыше 90 кг в день – 70 коп. за 1 кг плюс 20 руб премия. Студентам 2 курса при сборе до 60 кг в день работа оплачивается из расчёта 35 коп. за 1 кг; при сборе от 61 до 80 кг в день – 55 коп. за 1 кг; при сборе от 81 до 95 кг в день – 65 коп. за 1 кг; при сборе свыше 95 кг в день – 70 коп. за 1 кг плюс 30 руб премия.

Студент собрал X кг яблок за день. Определить его заработок.

8. С клавиатуры задаётся целое число А > -5. Для положительного однозначного числа определить, является ли оно чётным; для положительного двузначного определить, кратно ли оно 3; для положительного трёхзначного числа определить, кратно ли оно 5; для числа, большего 999, определить, кратно ли оно 10. Если число А < 0, то вывести на экран его название в словесной форме.

9. Школьники сдают нормы по прыжкам в длину. Для учеников 5 класса нормы следующие: если длина прыжка больше 2,50 м, то оценка - 5, если от 2 м до 2,5 - оценка 4; от 1,5 м до 2 м - оценка 3; если меньше 1,5 м - 2. Нормы для учеников 6 класса: если длина прыжка больше 3,0 м, то оценка - 5, если от 2,5 м до 3,0 - оценка 4; от 2,0 м до 2,5 м - оценка 3; если меньше 2,0 м – оценка 2. Ученики других классов прыжки не сдают.

Выставить школьнику оценку, если известны номер его класса и длина прыжка.

10. Школьники сдают нормы по прыжкам в длину. Для учеников 2 класса минимальная длина прыжка должна быть не менее 1,2 м; для учеников 3 класса – не менее 1,5 м; для 4 класса – не менее 1,7 м; для 5 класса не менее 2,0 м.

Зная номер класса и длину прыжка ученика, определить, сдан ли норматив.

11. С клавиатуры задаётся натуральное число N < 100. Если оно однозначное, то вывести на экран его название в словесной форме. Если число двузначное, то сообщить об этом и определить остаток от деления его на 2, 3, 5.

12. Компания по снабжению электроэнергией взымает плату с клиентов по тарифу:

ü 7 р. за 1 кВт/ч за первые 250 кВт/ч;

ü 17 р. за кВт/ч, если потребление свыше 250, но не превышает 300 кВт/ч;

ü 20 р. за кВт/ч, если потребление свыше 300 кВт/ч.

Существуют три категории потребителей. Тариф 1 категории составляет 75% общей стоимости, тариф 2 категории – половину общей стоимости. Остальные оплачивают полностью.

Потребитель израсходовал n кВт/ч. Подсчитать плату, зная его категорию.

13. С клавиатуры задано натуральное число N < 10000. Сообщить, является ли оно однозначным, двузначным, трёхзначным или четырёхзначным. В каждом случае определить, чётное оно или нечётное.

14. Ученики начальной школы сдают технику чтения. Нормы следующие: в 1 классе ребёнок должен читать не менее 20 слов в минуту; во втором классе – не менее 50 слов в мин; в 3 классе – не менее 60 слов в мин, в 4 классе – не менее 70 слов в минуту. Задавая с клавиатуры номер класса и количество прочитанных учеником в минуту слов, определить, сдана ли техника чтения.

15. Даны три целых числа определяющие дату: год, месяц, день. Считая, что год не високосный, определить дату следующего дня.

Контрольные вопросы

1. Что такое составной оператор?

2. Какова полная (неполная) форма команды ветвления?

3. Каков алгоритм выполнения команды ветвления?

4. Каков алгоритм выполнения команды множественного ветвления (выбора)?

5. Какие операторы сравнения используются в C++?

6. Что называется простым условием? Приведите примеры.

7. Что такое составное условие? Приведите примеры.

8. Какие логические операторы допускаются при составлении сложных условий?

9. Каков результат применения оператора логическое "И" (&&)?

10. Каков результат применения оператора логическое "ИЛИ" (||)?

11. Каков результат применения оператора логическое отрицание (!)?

12. Каков общий вид инструкции «Ветвление»?

13. Каков алгоритм выполнения условной (тернарной) операции (?:)?

14. Каков общий вид инструкции «Выбор»?

15. Может ли оператор ветвления содержать внутри себя другие ветвления?