Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
Скачать 319.62 Kb.
|
Условный оператор и условная операцияУсловный оператор предназначен для выбора одного из двух альтернативных действий и имеет следующую форму записи: БНФ: условный_оператор = "if" "("выражение")" оператор_1 ["else" оператор_2] Пример: if ( a ) c = b+1; else c = b - 1; if ( a > b ) k = sin( x ); else k = x + x; При выполнении условного оператора вначале вычисляется <выражение>. Если его значение не равно нулю, то выполняется <оператор_1>, а <оператор_2> пропускается. Если значение выражения равно нулю, то выполняется <оператор_2>, а <оператор_1> пропускается. При наличии вложенных операторов if следует иметь в виду, что ключевое слово else всегда относится к ближайшему if, как показано в следующем примере: if( b > a ) if( c < d ) k= sin(x); else t = cos(x); else c = tan( x ); Для того чтобы избежать ошибок рекомендуется использовать операторные скобки if( b < a ) { if( c < d ) k = sin( x ); else t = cos( x ); } else c = tan( x ); Особенно это важно если у вложенного оператора if отсутствует else, т.е if( b > a ) if( c < d ) k = sin( x ); else c = tan( x ); /* else относится к вложенному if */ if( b > a ) { if( c < d ) k = sin( x ); } else c = tan( x ); /* else относится к первому if */ Если в качестве <оператора_1> или <оператора_2> используется группа операторов, то ее записывают как составной оператор, заключая ее в операторные скобки "{" и "}". Для того, чтобы сделать программу более понятной, рекомендуется операторы записывать в следующих формах: 1) короткие операторы: if( a > b ) k = sin( x ); else k = x*x; if( a > b ) k = sin( x ); else k = x*x; 2) группы коротких операторов: if( a > b ) { ... } else {... } if( a > b ) { ... } else { ... } или if( ... ) { ..... } else { ..... } 3) длинные группы операторов: if(... ) { . . . } else { . . . } 4) множественный выбор: if ( a == 6 ) { ... } else if ( a == 8 ) { ... } else if ( a == 15 ) { ... } else if ( a > 20 && a < 28 ) { ... } else { ... } В некоторых случаях вместо оператора if удобно использовать условную операцию ?:, которая позволяет сократить запись программ и число используемых переменных. БНФ: условное_операция = выр_0 "?" выр_1 ":" выр_2 Значение условной операции равно <выр_1>, если <выр_0> не равно 0 и <выр_2> в противном случае. Например, следующий оператор if ( x>a ) f = sin( x-a ); else f = sin(x); можно заменить условной операцией, и сразу вычислить f: f = sin( x>a ? x-a : x ); Очевидно, в последнем случае получился более короткий код, поскольку обращений к переменной f и функции sin вдвое меньше. Оператор цикла whileОператор цикла while предназначен для реализации циклических алгоритмов и имеет следующую форму записи БНФ: "while" "(" выражение ")" оператор Пример : while( a < 18 ) a = a+2; При выполнении оператора цикла while вначале вычисляется выражение. Если оно не равно 0, то выполняется оператор. Далее снова вычисляется выражение и если оно не равно 0, то снова выполняется оператор. Такие циклические действия продолжаются до тех пор, пока выражение отлично от 0. Отсюда и название цикла while ( пока ). Как только выражение станет равным 0 цикл прекращает выполнятся и управление передается на следующий за циклом оператор. Циклически выполняемый оператор обычно называют телом цикла. Если в теле цикла необходимо разместить не один, а несколько операторов, то в этом случае используют составной оператор. Все операторы тела цикла должны быть записаны с отступом, обычно в три пробела. Рассмотрим пример программы, которая выводит на экран таблицу функций sin(x) и cos(x): #include #include void main( void ) { double x = 0; while( x < 3.0 ) { printf( "%6.3lf %9.6lf %9.6lf\n",x, sin(x), cos(x) ); x += 0.2; } } Если после while( x < 3.0 ) ошибочно поставить точку с запятой, то никаких сообщений об ошибках выдано не будет, но цикл станет бесконечным. Действительно, в этом случае тело цикла будет пустым оператором ";", переменная x не будет меняться, следовательно, результат выражения x < 3.0 всегда будет отличен от нуля. В теле правильно организованного цикла обязательно должны содержатся операции, влияющие на выражение в заголовке цикла так, чтобы цикл рано или поздно завершился. |