Цель работы: Изучить реализацию в языке ветвящихся вычислительных процессов. Научиться писать программы, используя операторы: ветвления if...else, переключения switch в паре с оператором break,оператор перехода goto, тернарную условную операцию (?:).
Теоретические сведения
Условный оператор имеет сокращенную форму:
if (выражение_условие) оператор;
где в качестве выражения_условия могут использоваться: арифметическое выражение, отношение и логическое выражение. Оператор, включенный в условный, выполняется только в случае истинности (т.е. при ненулевом значении) выраж-ния_условия. Пример:
if (х < 0 && х > -10) х=-х:
Кроме сокращенной формы, имеется еще и полная форма условного оператора:
if (выражение_условие)
оператор _1;
else
оператор _2;
Здесь в случае истинности выражения-условия выполняется только оператор_1, при нулевом значении выражения-условия выполняется только оператор_2. Например:
if (x > 0)
b =х;
Else
b=-х;
Оператор в сокращенном варианте оператора if, и оператор_1 и оператор 2 в полном операторе if могут быть как отдельными, так и составными операторами.
Например, при решении алгебраического уравнения 2-й степени ax2+bx+c=0 действительные корни имеются только в случае, если дискриминант (b2~4ас) неотрицателен. Следующий фрагмент программы иллюстрирует использование условного оператора при определении действительных корней х1, х2 квадратного уравнения:
...............
d=b*b - 4*а*с; /* d - дискриминант */
if (d>=0.0)
{
xl=(-b+sqrt(d))/2/a;
х2=(-b-sqrt(d))/2/а;
printf("\n Корни: xl=%e, x2=%e", xl, х2);
}
Else
printf("\n Действительные корни отсутствуют.");
Во фрагменте предполагается, что переменные d, b, a, xl, х2 - вещественные (типа float либо double). До приведенных операторов переменные а, b, с получили конкретные значения, для которых выполняются вычисления. В условном операторе после if находится составной оператор, после else - только один оператор - вызов функции printf(). При вычислении корней используется библиотечная функция sqrt() из стандартной библиотеки компилятора. Ее прототип находится в заголовочном файле math.h.
Операции отношений (сравнения):
< меньше, чем (ранг 6);,
> больше, чем (ранг 6);
<= меньше или равно (ранг 6);
>= больше или равно (ранг б);
== равно (ранг 7);
!= не равно (ранг 7).
Операнды операций отношений должны быть арифметического типа или могут быть указателями. Результат целочисленный: 0 (ложь) или 1 (истина). Последние две операции (операции сравнения на равенство) имеют более низкий приоритет по сравнению с остальными операциями отношений. Таким образом, выражение
(х < В ==А < х) есть 1,
когда значение х находится в интервале от А до В и А<В либо х, А, В равны. (Вначале вычисляются х<В и А<х, к результатам применяется операция сравнения на равенство ==.)
Логические бинарные операции:
&& - конъюнкция (И) арифметических операндов или отношений (ранг 11. Целочисленный результат 0 (ложь) или 1 (истина);
|| - дизъюнкция (ИЛИ) арифметических операндов или отношений (ранг 12). Целочисленный результат 0 (ложь) или 1 (истина). (Вспомните о существовании унарной операции отрицания '!'.)
Результаты отношений и логических операций:
3<5 равняется 1;
3>5 равняется 0;
3=5 равняется 0;
3!=5 равняется 1;
3!=5 || 3=5 равняется 1;
3+4>5 && 3+5>4 && 4+5>3 равняется 1.
Условная трехместная операция (ранг 13). В отличие от унарных и бинарных операций условная тернарная операция используется с тремя операндами. В изображении условной операции применяются два символа '?' и ':' и три выражения-операнда:
выражение_1? выражение_2: выражение_3
Первым вычисляется значение выражения_1. Если оно истинно, т.е. не равно нулю, то вычисляется значение выражения_2, которое становится результатом. Если при вычислении выражения_1 получится 0, то в качестве результата берется значение выражения_3. Классический пример:
х < 0? -х: х;
Выражение возвращает абсолютную величину переменной х.
Ход работы
1 В соответствии с индивидуальным заданием разработать программу с применением операторов ветвления, выбора варианта, разрыва, перехода (при составлении программы использовать операторы if…else).
2 Набрать программу и устранить ошибки.
3 Изучить работу операторов, различные возможности их применения.
4 Получить результаты.
5 Оформить отчет и сделать выводы по работе, изучив контрольные вопросы по теме.
Индивидуальное задание к лабораторной работе
Вычислить значение функции
y = f(x), где
ì f1(z), если z < 0;
x = í f2(z), если 0 £ z £ 8;
î f3(z), если z > 8;
z = cos(с).
Значения функций приведены в таблице 15.
Таблица 15 - индивидуальное задание
Вар. | f(x) | f1(z) | f2(z) | f3(z) | c |
x2+8x-6 | z3-3z2 | zln(z) | Ez-e-z | 5,1 | |
X3lnx2 | e-z+3z | ln|z| | Cosz+z2 | 5,4 | |
X1/4+sinx | 2z-ln|z| | tgz-2z | Sin3z | 4,1 | |
X4+2sinx2 | sinz+tgz | cos3z+3/z | Z2+lnz2 | 3,2 | |
Cosx3 | z2+2sinz | lnz+2z | Ez+1/z | 4,7 | |
Sinx+2lnx | 2z+tgz | lnz4+2z | Cosz+2z | 1,3 | |
Sin4x2 | sinz2-z3 | 2sinz2 | 1,6 | ||
Tgx-4x3 | 1/cos2z | z-ln|z| | Z3+sinz | 1,5 | |
Lnx-e2x | z2+ez | cos4z/z3 | Tg(z+1/z) | 2,7 | |
2x-lnx | 2cosz+1/z | z3-2ln|z| | Tg2z+z3 | 3,8 | |
3x-sinx | 3tg3z | 1/cos4z | E2z+sinz | 1,6 | |
4x2+cosx | 3z/sinz | z2+2sinz | 2z-ln|z| | 2,4 | |
+cosx | z2+lnz2 | ez+1/z | Z4-sinz | 4,1 | |
x1/3+2x | ln|cosz| | 2z+ez | Tg2z | 2,5 | |
Sin4x+2x | z5/sin2z | e-2z+tgz | Cos4z+z1/3 | 3,2 | |
Tg4x+1/x | z/sinz1/5 | 2ztg3z | Z +8 | 1,4 | |
Ln(1/x) | zsin2z-8 | lnsinz0,8 | -2,5 | 2,3 | |
e2x+4x | cos(p /4)-z | 1/(ez+1) | arctg(z+3) | 4,1 | |
Cosx4+x/2 | sin(z+30°) | lncos(pz/6) | e-tg(z-2) | 3,2 | |
2tgx+ex | z+cos(p +z) | z3+z1/3 | Z4-lnz | 2,8 | |
2lnx2 | arccosz2 | sinz+lncosz | Z3-sin(p x) | 1,7 | |
Cos2x/3 | z2+ln(z+4) | e(z-5)+sinz | 2,2 | ||
1/tgx4 | e-4z+2+z2 | cos(z1/3+2) | Sin(p +4z2) | 5,6 | |
e2x-x3 | tg(z2+ ) | ln(sinz+5) | Z4+z2-cosz | 3,4 | |
Tgx-2lnx | arcsin(z+3) | z3-z2+cosz | Ln(z3+4z) | 2,5 | |
Cosx4+x/2 | lnsinz0,8 | cos(p /4)-z | Z/sinz1/5 | 3,7 | |
Ln(x+x2) | 2ztg3z | sin(p +4z2) | Z3+z1/3 | 2,6 | |
Cosx4+2x | tg(z+1/z) | e2z+sinz | Cosz1/5 | 3,8 | |
Sin4x+2x | z2+lnz2 | cos3z+3/z | Cos(p /4)-z | 5,8 | |
3ln(x2+5) | z4-lnz | sinz+tgz | Sinz+lncosz | 3,5 |
Контрольные вопросы для подготовки и самостоятельной работы
1 Какой тип должно иметь <выражение> в операторах if и switch?
2 Можно ли использовать оператор goto для передачи управления на else, метку case…; default:?
3 С помощью каких операторов можно досрочно завершить выполнение операторов if…else, switch?
4 Можно ли использовать в качестве <выражения> в операторе switch указатель?
5 Можно ли использовать в качестве константного <выражения> в операторе switch константу?
6 Обязательно ли использовать оператор break в операторе switch? Каково его действие? Что происходит при отсутствии break?
7 Какому из вложенных операторов if относится else при наличии и отсутствии операторных скобок ¢¢{¢¢ и ¢¢}¢¢.
8 Какие типы операндов допустимы в условной операции (?:)?
9 Объясните работу операторов в приведенных примерах.
10 Как объявить и использовать метки в программе?
Лабораторная работа 7