
- •Технология программирования ветвящихся процессов
- •Программирование простых ветвлений
- •Программирование ветвления с элементарным условием
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Оператор безусловной передачи управления
- •Правила составления и использования
- •Операторы условной передачи управления
- •Укороченный оператор условного перехода
- •Правила записи и выполнения
- •Полный оператор условного перехода
- •Правила записи и использования
- •Составление программы по условно-линейной схеме варианта 1
- •Составление программы по условно-линейной схеме варианта 2
- •Программирование ветвлений с составными условиями
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Правила составления и выполнения логических выражений
- •Составление программы по условно-линейной схеме варианта 1
- •Составление программы по условно-линейной схеме варианта 2
- •Программирование сложных ветвлений
- •Программирование сложных многоузловых ветвлений
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Программа по левой условно-линейной схеме
- •Программа по правой условно-линейной схеме
- •Программирование сложных однооузловых ветвлений
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Правила составления и использования
- •Программа по левой условно-линейной схеме «множественное ветвление»
- •Программа по центральной условно-линейной схеме «множественное ветвление»
- •Программа по правой условно-линейной схеме «последовательное ветвление на два»
- •Заключение
- •Вопросы для контроля
Правила составления и использования
-
Метки ni задаются пользователем произвольно (желательно по нарастанию) и не могут повторяться.
-
В одном операторе switch может быть не более 257 вариантов выбора.
-
Отсутствие операторов break позволяет получить чистую структуру оператора switch. В этом варианте после выбора нужной ветви будут последовательно выполнены все ниже расположенные варианты, включая default, если он имеется.
-
Элемент по умолчанию может быть не последним в теле оператора switch. При этом, если оператор break в его ветви отсутствует, то будут последовательно выполнены все ниже расположенные варианты.
-
Использование чистого оператора switch при отсутствии некоторых операторов ветвей позволяет выполнять передачу управления на одну ветвь по нескольким разным меткам, записанным выше.
-
Метками оператора goto помечать ключевые слова case и default запрещается – они сами выполняют функцию меток.
Так, фрагмент программы
int a, b;
. . .
switch ( a – b )
{
case 0:
case 1:
case 2:
x=96.;
default:
y=3;
case 5:
z=12;
}
d=6.;
предписывает в случае, если (а - b) равно нулю, единице или двойке вычисление х, а затем y, z, d. Если (a - b) равно 5 – вычисляется z и d. Если (а - b) не равно 0, 1, 2, 5 – вычисляется y, z и d.
Представленный фрагмент позволяет судить о возможностях оператора switch, но не соответствует стандартной структуре «выбор» и используется как специфический.
С учетом изложенного, запрограммируем решение задачи.
Идентификация переменных представлена в табл. 4.9.
Таблица 4.9
Обозначение в алгоритме |
Баз |
k |
Балл |
Ст |
N |
Обозначение в программе |
baz |
kbaz |
ball |
St |
n |
С учётом таблицы идентификации на основании схем алгоритма запишем программы решения задачи.
Программа по левой условно-линейной схеме «множественное ветвление»
Особенность левой условно-линейной схемы – сохранение естественного порядка расчета при выполнении отдельных условий и нарушение этого порядка, когда условия не выполняются. Программирование такого варианта требует использования полной структуры «множественный выбор».
/* Множественное ветвление. switch */
#include<stdio.h>
#include<stdlib.h>
main( )
{
float baz, kbaz, st;
int ball, n;
scanf("%f %f %d", &baz, &kbaz, &ball);
switch(ball)
{
case 0:
st = 0;
n = 0;
break;
case 2:
st = 0;
n = 2;
break;
case 3:
st = 0;
n = 3;
break;
case 4:
st = baz;
n = 4;
break;
case 5:
st = baz + kbaz*baz;
n = 5;
break;
default:
printf("Error");
}
printf("\n baz=%.2f kbaz=%.2f ball=%d ",baz, kbaz, ball);
printf("\n st=%.2f n=%d", st, n);
}
3
Пять
строк численных значений вводимых
переменных позволяют проверить все
возможные вычислительные ветви (= 0,
= 2, = 3, = 4, = 5).
300. 0.25 2
300. 0.25 3
300. 0.25 4
300. 0.25 5
Результаты решения представлены в приложении 4.7 (а, б, в, г, д).
Внимание! Сообщение «Error» в строке выводимых данных свидетельствует о вводе в качестве балла любого непредусмотренного задачей значения.