Операции отношения
Операции отношения используются для сравнений. Мы уже обсуждали их, но здесь мы остановимся на их обсуждении подробнее.
Операция | смысл |
< | меньше |
<= | меньше или равно |
== | равно |
>= | больше или равно |
> | больше |
!= | не равно |
Этот список хорошо соответствует возможным числовым соотношениям.
! | Главное предостережение, которое мы хотим сделать, состоит в том, чтобы не использовать знак = вместо ==. С помощью операции присваивания некоторое значение присваивается переменной слева от знака равенства. В то же время с помощью операции отношения "равенство" проверяется: равно ли выражение, стоящее слева от знака, выражению справа от него. Эта операция не изменяет значения переменной в левой части, если она там присутствует. При программировании требуется аккуратность, потому что в ряде случаев компилятор не сможет обнаружить ошибки, связанные с неправильным использованием знаков этих отношений, что приведет к результатам, отличным от тех, которые вы должны были бы получить. |
Операции отношения применяются при формировании условных выражений, используемых в операторе if и while. Указанные операторы проверяют, истинно или ложно данное выражение.
Пример:
#include <stdio.h>
main( )
{
int mark;
mark = getchar( );
if(mark == 4)
printf("Оценка 4.\n");
else if (mark > 4)
printf("Оценка больше 4!\n");
else /* случай, когда оценка меньше 4 */
{
mark++;
printf("Теперь оценка на 1 больше.\n");
}
}
Что такое истина
Мы ответим на этот вопрос, как он решается в языке Си. В Си выражение всегда имеет значение. Это утверждение остается верным даже для условных выражений, как показывает пример, приведенный ниже. В нем определяются значения двух условных выражений, одно из которых оказывается истинным, а второе - ложным:
/* истина и ложь*/
main( )
{
int true, false;
true = (12 > 2); /*отношение истинно*/
false = (12 == 2) ; /*отношение ложно*/
printf("true = %d; false = %d\n",true,false);
}
При выполнении программы получим следующие результаты:
true = 1, false = 0.
В языке Си значение истина равно 1, а значение ложь равно 0. В языке Си все ненулевые значения являются истинными, и только 0 являются ложью. Например, два оператора
if(i !=0 )
можно заменить на
if(i)
поскольку выражение (i !=0 ) и выражение (i) оба примут значения 0, или ложь, только в том случае, если значение переменной i равно 0.
Осложнение с понятием истина
Рассмотрим следующую программу:
/* занятость */
main( )
{
int age =20;
while (age++ <= 63) {
/* делится ли возраст на 20*/
if((age % 20) == 0)
printf(" Вам %d.\n", age);
if(age = 63)
printf("Вам уже %d.\n",age);
}
}
Мы хотели написать программу, чтобы результат работы программы выглядел так:
Вам 40.
Вам 60.
Вам уже 63.
На самом деле выход будет таким:
Вам уже 63.
Вам уже 63.
Вам уже 63.
и т. д. - до бесконечности. Это произошло, потому что мы ошибочно написали
if(age = 63)
вместо
if(age == 63)
В операторе
if(age = 63)
переменной age присваивается значение 63, т. е. результат этого оператора - истина и выполняется оператор
printf("Вам %d.\n",age);
В операторе
while(age++ <= 63)
условие выполняется, и программа зацикливается.
Приоритеты операций отношения мы описали в лекции 3.