1. Для начала дадим понятие блока, оно понадобится нам во многих случаях. Блок - это список операторов, заключенный в фигурные скобки:
{ a=b+2; b++; }
Зачем он нужен? Блок позволяет рассматривать несколько операторов как один. Это просто было небольшое отступление, которое мы упустили в предыдущих уроках Кроме того, в блоке можно определить переменную, которая будет автоматически уничтожена при выходе из блока, но с так называемыми областями видимости и сроками жизни переменных мы будем разбираться немного позже.
2. If. А теперь перейдем непосредственно к конструкции выбора (или ветвления). Позволю себе (да простят меня те, кто читает оба моих курса) тупо повторить часть текста из урока по сходной теме курса VB
Суть вобщем-то проста. В русском языке в повседневной жизни мы используем ее постоянно. Это наше весьма распространенное если. Если нам позвонят в дверь, мы пойдем открывать. В данном случае позвонят в дверь - это проверяемое условие.(помните еще урок про логические операторы?), а пойдем открывать- это оператор, который будет выполнен ТОЛЬКО в случае правильности этого условия. Это самый простой пример ветвления. Какая же здесь ветка? Один оператор действия- откуда же ветка получится? Дело в том что ветка выглядит так: или я иду открывать---или я ничего не делаю.
Как этот вариант будет записываться?
if (логическое выражение)
оператор;
Для нашего случая:
if( позвонят в дверь= =true)
Пойдем открывать;
Небольшое отступление относительно ступенчатой записи. Желательно, чтобы вы, набирая строки кода, придерживались этого стиля записи. Так проще читать код. Человеку, естественно. Компилятору абсолютно все равно- сделали вы такой отступ или нет, он их не учитывает. А вам самим, и тем, кто будет читать код кроме вас, удобнее ориентироваться. В данном случае мы видим, что у нас начинается блок if, а внутри него оператор. Или несколько операторов. В этом случае мы напишем операторы один под другим, давая этим понять что они равноценны. И вот тут нам нужны будут скобки, берущие эти несколько операторов в блок.
Давайте, рассмотрим 2 варианта записи:
Код:
if( условие)
оператор1;
оператор2;
и
Код:
if (условие)
{
оператор1;
оператор2;
}
Как мы видим, во втором случае, операторы должны выполняться как один из-за поставленных скобок блока (как мы упоминали в начале нашего урока). Таким образом, мы получаем весьма существенную разницу при выполнении этих двух вариантов.
В первом случае при истинном условии выполняется оператор1, а оператор 2 выполняется В ЛЮБОМ случае, даже если условие ложно. Помните- то, что мы отодвинули его отступом на уровень второго оператора-это сигнал только для нас, но никак не для компилятора. Он считает, что первый оператор входит в блок if, а вот после ;, которая показывает окончание первого оператора, заканчивается и весь блок if. И выполняется оператор2, который уже никакого отношения к if не имеет. Значит, он выполняется вне зависимости от проверяемого условия.
Во втором случае при истинном условии выполняются ОБА оператора. Почему? А потому, что они объединены скобками блока и выполняются как единое целое. А если условие ложно- не выполнится ни оператор1, ни оператор2. Вот вам и две маленькие скобочки!
3. If...else. Усложним задачу.
Вариант, когда при ложности условия тоже должны выполняться какие-то операторы выглядит так: если мне сегодня надо на работу - условие истинно - я встану в 7ч, умоюсь, оденусь, перекушу и поеду на работу. Если не надо условие ложно (т.е. иначе)- я посплю до 10 часов и пойду гулять.
Как это будет выглядеть:
Код:
if(проверяемое условие)
оператор1 (или блок операторов, как мы уже выяснили)
else
оператор2(или блок операторов)
В нашем случае:
Код:
if (работа)
{
встать в 7ч;
умыться;
одеться;
перекусить;
поехать на работу;
}
else
{
сплю до 10ч;
иду гулять;
//не забудьте указать до скольки, а то как уйдете!!! (
}
Итак:
Выполнение оператора if начинается с вычисления выражения.
Далее выполнение осуществляется по следующей схеме:
* если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.
* если выражение ложно (т.е. равно 0),то выполняется оператор-2.
* если выражение ложно и отсутствует оператор-2 , то выполняется следующий за if оператор.
Пример:
Код:
if (i < j) i++;
else { j = i-3; i++; }
4. Вложенные конструкции. Операторы if могут быть вложены один в другой. Вложенный оператор if может находиться внутри конструкции if или внутри конструкции else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.
Примеры:
Код:
int main ( )
{
int t=2, b=7, r=3;
if (t>b)
{
if (b < r) r=b;
}
else r=t;
return (0);
}
В результате выполнения этой программы r станет равным 2.
Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:
Код:
int main ( )
{
int t=2,b=7,r=3;
if ( t>b )
if ( b < c ) t=b;
else r=t;
return (0);
}
В этом случае r получит значение равное 3, так как ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if.
Следующий фрагмент иллюстрирует вложенные операторы if:
Код:
char ZNAC;
int x,y,z;
...
if (ZNAC == '-') x = y - z;
else if (ZNAC == '+') x = y + z;
else if (ZNAC == '*') x = y * z;
else if (ZNAC == '/') x = y / z;
else ...
Из рассмотрения этого примера можно сделать вывод, что конструкции использующие вложенные операторы if, являются довольно громоздкими и не всегда достаточно надежными. Другим способом организации выбора из множества различных вариантов является использование специального оператора выбора switch, с которым познакомимся на следующем уроке.
(Примечание от Альфа:
Конструкция вида
Код:
if (...) ...
else if (...) ...
else if (...) ...
...
else ...
является достаточно типовой для перебора различных вариантов (можно сказать, одной из идиом С++), для удобства чтения форматируется без отступа и фактически не рассматривается как вложенная (хотя формально таковой является). Кроме того, непонятно, откуда взялся вывод о громоздкости и ненадежности этой конструкции. Например, я применил ее в своей статье о рекурсии в разделе об определении соответствия строки шаблону.)
Задания.
* Ввести два числа. Меньшее из них вы должны заменить суммой введенных чисел, большее- разностью. Результаты вывести на экран.
* Ввести число. На экран вывести сообщение о том является ли это число положительным, отрицательным или нулем.
* Задача: метеоролог снимает 4 замера скорости ветра в сутки. Вам необходимо ввести
Эти четыре числа в программу, вычислить среднесуточную скорость ветра и вывести ее на экран. ОБЯЗАТЕЛЬНО: произвести проверку вводимых чисел, чтобы не было введено недопустимого значения (отрицательного). Если это произойдет не выводить на экран результат (среднюю скорость), а вывести сообщение Неправильный ввод данных!
Автор: Never
Information
- Posted on 31.01.2010 23:23
- Просмотры: 4007