- •3 Программирование разветвляющихся алгоритмов
- •3.1 Понятие разветвляющегося алгоритма и программы
- •3.2 Операторы управления разветвляющимся вычислительным процессом
- •3.2.1 Логические выражения
- •3.2.2 Оператор if
- •If (выражение) оператор1;
- •If (выражение ) оператор1; else опертор2;
- •3.2.3 Примеры программирования
- •Тесты к задаче 1.2
- •3.2.4 Выбор из большого числа вариантов
- •4 Программирование циклических алгоритмов
- •4.1 Понятие цикла
- •Различают циклы с предусловием и циклы с постусловием.
- •В циклах с предусловием условие повторения цикла проверяется раньше, чем выполняется тело цикла, поэтому возможно, что цикл не выполнится ни разу.
- •В циклах с постусловием условие повторения цикла проверяется после выполнения тела цикла и подготовки данных для очередного шага цикла, поэтому цикл выполняется всегда хотя бы один раз.
- •В общем виде циклы с предусловием и постусловием графически можно изобразить, как показано на рис.4.1.
- •4.2 Программирование цикла с заранее известным числом повторений
- •4.3 Программирование цикла с заранее неизвестным числом повторений
- •4.3.1 Оператор цикла while
- •4.3.2 Оператор цикла do-while
- •4.4 Вложенные циклы
3.2.2 Оператор if
Оператор if называется условным оператором и используется для программирования ветвлений.
Имеет две формы записи – сокращенную и полную.
Сокращенная форма записи оператора if имеет вид:
If (выражение) оператор1;
Например, if (a>b) y=2*x;
Оператор if в полной форме называется оператором if - else и имеет следующую форму записи:
If (выражение ) оператор1; else опертор2;
Например, if (x>0 && x!=10)
y=2*x;
else
y=x*x;
Здесь выражение – выражение, которое может иметь арифметический тип или тип указателя; оператор1, оператор2 – простые или составные операторы языка.
Простой оператор – это один оператор.
Составной оператор (блок операторов) – это последовательность из нескольких любых операторов, в том числе операторов описания, заключенных в фигурные скобки.
Например, if (x<=5.6)
{ float a=2.1;
y=a*sin(x);
printf("%.4f\n",y) ;
}
Следует учитывать, что переменная, описанная в блоке, не существует вне блока.
Оператор if называется вложенным, если хотя бы один из операторов оператор1, оператор2 содержит условные операторы, и используется для программирования вложенных ветвлений.
При выполнении оператора if и if- else сначала вычисляется значение выражения выражение. Если полученное значение не равно нулю (имеет значение true), то выполняется оператор1, иначе: для оператора if - управление передаются на оператор, следующий за условным; для оператора if- else - выполняется оператор2, а затем управление передаются на оператор, следующий за условным.
Ниже приведены примеры программирования ветвлений.
Пример 1. Пример 2.
if (a>3) y=a+x; if (a<=3) { ; } else y=a+x;
Пример 3. Пример 4.
if (a>2) { z=2+3*x; if (x>0) { if (x!=5) y=3*x;
y=sin(z); else y= 4*x; }
} else y=5*x+1;
Пример 5.
if (a<=0)
{ y=5*x+1;
z++;
}
else
{ cout << " a=" << a;
if (a>7 && a<> 11
y=3*x;
else
{ y=4*x; z--;
}
}
В примерах 1 и 2 оператор y=a+x; является простым оператором. В примере 3 оператор { z=2+3*x; y=sin(z);} является составным. Кроме того, примеры 1 и 2 показывают, что неполное ветвление, в котором отсутствуют команды на ветви "Да", может быть приведено к другой форме неполного ветвления путем изменения условия на противоположное (условие, противоположное условию a>3 есть условие a<=3, и наоборот). Из примера 2 видно, что отсутствующие команды ветви "Да" программируются с помощью пустого оператора {;}.
Пример 4 иллюстрирует программирование вложенного ветвления. Фигурные скобки в данном случае не обязательны, так как компилятор относит часть else к ближайшему if.
В 5-ом примере на ветви "Да" внешнего ветвления имеется группа команд, которой соответствует составной оператор { y=5*x+1; z++;}. На ветви "Нет" этого ветвления имеется группа команд, содержащая другое ветвление. Этой группе команд соответствует составной оператор { cout << " a=" << a; if (a>7 && a<> 11) y=3*x; { y=4*x; z--; } }. Вложенное ветвление на ветви "Да" содержит одну команду (соответствующий оператор y=3*x;), а на ветви "Нет" – две команды, которым соответствует составной оператор { y=4*x; z--; } .