Операции отношения и выражения.
Операции отношения используются для сравнений. Мы уже использовали ранее некоторые из них, а сейчас приведем полный список операций отношения, применяемых при программировании на языке Си.
Операции сравнения(отношения)
== - равно или эквивалентно;
!= - не равно;
< - меньше;
<= - меньше либо равно;
> - больше;
>= - больше либо равно.
При программировании требуется аккуратность, потому что в ряде случаев компилятор не сможет обнаружить ошибки, связанной с неправильным использованием знаков этих операций, что приведет к результатам, отличным от тех, которые вы должны были получить.
Операции отношения применяются при формировании условных выражений, используемых в операторах if и while. Указанные операторы проверяют, истинно или ложно данное выражение. Ниже приводятся четыре не связанные между собой оператора
f (number < 6)
printf(" Ваше число слишком мало.\n");
while (ch != '$')
count++;
if ( total = = 100)
printf (" Вы набрали максимум очков! \ n " );
if ( ch > ' M ')
printf(" Отправьте этого человека по другому маршруту.\n" );
Понятие «истина».
Мы можем ответить на этот вечный вопрос, по крайней мере, так, как он решен в языке Си. Напомним, во-первых, что выражение в Си всегда имеет значение. Это утверждение остается верным даже для условных выражений, как показывает пример, приведенный ниже. В нем определяются значения двух условных выражений, одно из которых оказывается истинным, а второе — ложным.
Int main()
{
int tr, fa;
tr= (10 > 2); /* отношение истинно */
fa=(10 == 2); /* отношение ложно */
printf("true = %d; false = %d\n", tr, fa);
}
В данном примере значения двух условных выражений присваиваются двум переменным. Чтобы не запутать читателя, мы присвоили переменной true значение выражения, которое оказывается истинным, а переменной false — значение выражения, которое оказывается ложным. При выполнении программы получим следующий простой результат:
true = 1; false = 0
Вот как! Оказывается, в языке Си значение «истина» — это 1, а «ложь» — 0.
56.Условные операторы. Оператор if. Оператор if-else. Вложенные операторы if-else.
Условные операторы.
В языке С имеется четыре основных условных оператора: if, if-else,? и switch. Перед тем, как обсудить их отдельно, необходимо отметить одно общее правило.
Большинство условных операторов можно использовать для выборочного выполнения или одной программной строки, или нескольких логически связанных строк (называемых блоком). Если условный оператор связан только с одной строкой исполняемого кода, эту строку заключать в фигурные скобки ({ }) не нужно. Если же условный оператор относится к блоку выполняемых операторов, то для связи блока с проверяемым условием фигурные скобки необходимы. По этой причине в операторе switch необходимы открывающая и закрывающая фигурные скобки.
Оператор if.
Оператор if используется для условного выполнения фрагмента кода. Простейший вид оператора if следующий:
if (выражение)
действие_если_истина;
Обратите внимание на то, что выражение должно заключаться в круглые скобки. Для выполнения оператора if необходимо вычислить выражение и определить его значение: истина или ложь. Если выражение истинно, выполняется действие_если_истина и программа продолжается, начиная с оператора, следующего за этим действием. Если выражение ложно, действие_если_истина не выполняется, а выполняется оператор, следующий за невыполненным действием. Например: следующий фрагмент программы напечатает сообщение "Have a great day!" только в случае, если переменная ioutside_temp больше или равна 72:
if(ioutside_temp >= 72)
printf("Have a great day!");
Оператор if, связанный с блоком выполняемых операторов, выглядит следующим образом:
if (выражение)
{
действие_если_истина1;
действие_если_истина2;
действие_если_истинаЗ;
действие_если_истина4;
}
Оператор if-else.
Оператор if-else нужен для того, чтобы программа выполнила два разных действия в зависимости от истинности некоторого выражения. В простейшем случае оператор if-else выглядит следующим образом:
if (выражение)
действие_если_истина;
else
действие_если_ложь;
В этом операторе, если выражение истинно, выполняется действие_если_истина; если же выражение ложно, выполняется действие_если_ложъ. Рассмотрим пример:
if(ckeypressed == UP)
iy_pixel_coord++;
else
iy_pixel_coord--;
Любое из выражений — выражение_если_истина, выражение_если_ложь, или оба вместе — могут быть составным оператором или блоком, заключенным в фигурные скобки. Синтаксис этих трех вариантов очень прост:
if (выражение) {
действие_если_истина1;
действие_если_истина2;
действие_если_истина3;
}
else
действие_если_ложь;
if (выражение) {
действие_если_истина;
else {
действие_если_ложь1;
действие_если_ложь2;
действие_если_ложь3;
}
if (выражение) {
действие_если_истина1;
действие_если_истина2;
действие_если_истина3;
}
else {
действие_если_ложь1;
действие_если_ложь2;
действие_если_ложь3;
}
Вложенные операторы if-else.
Когда используются вложенные операторы if, необходимо следить за тем, какому if соответствует конкретное действие else. Взгляните на следующий пример — сможете ли вы предсказать результат:
if(iout_side_temp < 50) /* Если температура на улице ... */
if(iout_side_temp < 30) printf("Wear the down jacket!"); /*Надеть куртку! */
else printf("Parka will do."); /* Достаточно одеть парку. */
Листинг намеренно не выровнен, чтобы не было зрительных подсказок на вопрос: какой оператор к какому if относится. Что получится, если переменная iout_side_temp равна 55? Будет ли напечатано сообщение "Parka will do."?
Ответ — нет. В этом примере действие else связано со вторым выражением if. Это вызвано тем, что в С else связывается с ближайшим несвязанным if. Для облегчения отладки подобных фрагментов компилятор С написан так, что каждый else связывается с ближайшим if, еще не имеющим части else.
57.Условные операторы. Операторы if-else-if. Условный оператор ?. Оператор switch. Совместное использование операторов if-else-if и switch.
Операторы if-else-if.
Комбинация операторов if-else-if часто используется для выполнения многочисленных последовательных сравнений. В общем виде они выглядят следующим образом:
if(выражение 1)
действие_если_условие1_истина;
else if(выражение2)
действие_если_условие2_истина;
else if(выражение3)
действие_если_условиеЗ_истина;
Каждое действие может быть составным блоком в фигурных скобках (причем после закрывающей фигурной скобки точка с запятой не ставится). Такая управляющая логическая структура вычисляет каждое выражение до тех пор, пока не найдет истинное. Когда это происходит, все оставшиеся проверочные условия опускаются. В предыдущем примере, если ни одно из выражений не дает значения "истина", никаких действий не выполняется.
Когда у вас в программе имеется несколько конструкций if и else, каким образом компилятор решает, какому оператору if соответствует какой оператор else? Рассмотрим, например, фрагмент программы
if (number > 6)
{
if (number < 12)
printf(" Вы закончили!\п" );
}
else
printf(" Простите, вы потеряли ход!\n" );
В каком случае фраза «Простите, вы потеряли ход!» будет напечатана? Когда значение переменной number меньше или равно 6, или когда оно больше 12? Другими словами, чему соответствует else: первому if или второму? else соответствует второму if
Существует правило, которое гласит, что else соответствует ближайшему if, кроме тех случаев, когда имеются фигурные скобки. Мы сознательно записали этот фрагмент так, как будто else соответствует первому if, но вспомните, что компилятор не обращает внимания на отступы в строках.