Примеры использования оператора if.
-
IF p>0.5 THEM GOTO 15;
-
IF (x>0) AND (x<=10) THEN T:=x*3 ELSE T:=SQRT(y);
Вложенные IF:
IF X<=A THEN Z:=sin(x) ELSE IF x>0 THEN Z:=sin(x)/cos(x) ELSE Z:=cos(x);
Ключевое слово ELSE всегда относится к ближайшему ему IF.
Пример 1. Вычислить и вывести на экран значение заданной функции
где t=2.2.
Текст программы:
Program Lab21;
Const
t=2.2;
Var
x,z:real;
Begin
Writeln('Введите x');
Read(x);
If x<0.5 then z:=(ln(exp(3*ln(x)))+sqr(x))/sqrt(x+t)
else if x=0.5 then z:=sqrt(x+t)+1/x
else z:=cos(x)+t*(sqr(sin(x)));
Writeln ('z=',z:8:3);
End.
Результат выполнения программы:
z(0.1)=-4.548
z(0.5)=3.643
z(1)=2.098
Пример 2. Ввести число от 0 до 5. Вывести его название на английском языке.
Текст программы:
Program lab22;
Var
i:0..5;
Begin
Writeln('Введите целое число от 0 до 5');
Read(i);
Case i of
0:writeln('zero');
1:writeln('one');
2:writeln('two');
3:writeln('three');
4:writeln('four');
5:writeln('five');
end;
End.
Пример 3. Определение частного от деления целых чисел
{Вариант № 1 (с применением оператора GOTO)}
Program DELZEL_1(input,output);
Label metka1;
Var x, y, Res : integer ;
BEGIN
Write ( ‘ Введите делимое: ’);
Readln (x);
Write ( ‘ Введите делитель: ’);
Readln (y);
If y = 0 then
begin
Writeln ( ‘ Деление на ноль! ’);
GOTO metka1;
end;
Res : = x div y;
Writeln ( ‘ Частное равно : ‘, Res : 10 : 3 );
metka1; {метка пустого оператора}
END.
{Вариант № 2 (без оператора GOTO)}
Program DELZEL_1(input,output);
Var x, y, Res : integer ;
BEGIN
Write ( ‘ Введите делимое: ’);
Readln (x);
Write ( ‘ Введите делитель: ’);
Readln (y);
If y < > 0 then
begin
Res : = x div y;
Writeln ( ‘ Частное равно : ‘, Res : 10 : 3 );
end
Else Write ( ‘ Деление на ноль! ’);
END.
Условные конструкции в Си/С++.
1. Операторы if
Эти операторы иначе называются условными операторами и позволяют реализовывать разветвления в программах.
Пример 4. Программа осуществляет преобразование дюймов в сантиметры и сантиметров в дюймы; предполагается, что Вы укажете единицы измерения вводимых данных, добавляя i для дюймов и c для сантиметров:
#include <iostream.h>
void main()
{
const float fac = 2.54;
float x, in, cm;
char ch = 0;
cout << "введите длину: ";
cin >> x >> ch;
if (ch == 'i') { // inch - дюймы
in = x;
cm = x*fac;
}
else if (ch == 'c') // cm - сантиметры
{ in = x/fac;
cm = x;
}
cout << in << " in = " << cm << " cm\n";
}
Условие в операторе if должно быть заключено в круглые скобки.
2. Операторы switch
Оператор switch производит сопоставление значения с множеством констант.
Проверки в предыдущем примере можно записать так:
switch (ch) {
case 'i':
in = x;
cm = x*fac;
break;
case 'c':
in = x/fac;
break;
default:
in = cm = 0;
break;
}
Операторы break применяются для выхода из оператора switch. Константы в вариантах case должны быть различными, и если проверяемое значение не совпадает ни с одной из констант, выбирается вариант default. Программисту не обязательно предусматривать default.
3. Проверки
Проверка значения может осуществляться или оператором if, или оператором switch:
if ( выражение ) оператор
if ( выражение ) оператор else оператор
switch ( выражение ) оператор
В C++ нет отдельного булевского типа.
Операции сравнения
== != < <= > >=
возвращают целое 1, если сравнение истинно, иначе возвращают 0. В операторе if первый (или единственный) оператор выполняется в том случае, если выражение ненулевое, иначе выполняется второй оператор (если он задан). Отсюда следует, что в качестве условия может использоваться любое целое выражение. В частности, если a целое, то
if (a) // ...
эквивалентно
if (a != 0) // ...
Логические операции
&& || !
наиболее часто используются в условиях. Операции && и || не будут вычислять второй аргумент, если это ненужно. Например:
if (p && count) // ...
вначале проверяет, является ли p не нулем, и только если это так, то проверяет count.
Скобки вокруг условия необязательны, но когда они используются, программу легче читать.
Некоторые простые операторы switch можно по-другому записать в виде набора операторов if. Например:
switch (val) {
case 1:
f();
break;
case 2;
g();
break;
default:
h();
break;
}
иначе можно было бы записать так:
if (val == 1)
f();
if (val == 2)
g();
else
h();
Смысл тот же, однако первый вариант (switch) предпочтительнее, поскольку в этом случае явно выражается сущность действия (сопоставление значения с рядом констант). Поэтому в нетривиальных случаях оператор switch читается легче.
Заботьтесь о том, что switch должен как-то завершаться, если только Вы не хотите, чтобы выполнялся следующий case. Например:
switch (val) {
case 1:
cout << "case 1\n";
case 2;
cout << "case 2\n";
default:
cout << "default: case не найден\n";
}
при val =1 напечатает
case 1
case 2
default: case не найден
Самый обычный способ завершить случай - это break, иногда можно даже использовать goto. Например:
switch (val) {
case 0:
cout << "case 0";
case1:
case 1:
cout << "case 1";
return;
case 2;
cout << "case 2";
goto case1;
default:
cout << "default: case не найден";
return;
}
При обращении к нему с val =2 выдаст
case 2
case 1
Заметьте, что метка case не подходит как метка для употребления в операторе goto:
goto case 1; // синтаксическая ошибка