Язык Си - руководство для начинающих
Шрифт:
ПРИМЕР:
if(legs == 4)
printf("Это, возможно, лошадь. \n");
else if (legs > 4)
printf(" Это не лошадь. \n");
else /* случай, когда legs < 4 */
{ legs++;
printf(" Теперь животное имеет еще одну ногу.\n");
}
ЧТО ВАЖНЕЕ: ОПЕРАЦИИ ОТНОШЕНИЯ ИЛИ
Операции отношения используются для сравнений. Мы уже использовали ранее некоторые из них, а сейчас приведем полный список операций отношения, применяемых при программировании на языке Си.
Операция: | Смысл: |
---|---|
< | меньше |
<= | меньше или равно |
= = | равно |
>= | больше или равно |
> | больше |
!= | не равно |
Этот список довольно хорошо соответствует возможным числовым соотношениям. (Вообще говоря, числа, даже комплексные, менее сложны, чем люди). Главное предостережение, которое мы хотим сделать, состоит в том, чтобы не использовать знак = вместо = =. В некоторых языках программирования (например. Бейсике) один и тот же знак используется и для операции присваивания, и для операции отношения "равенство", хотя они совершенно различны. С помощью операции присваивания некоторое значение присваивается переменной слева от знака равенства. В то же время с помощью операции отношения "равенство" проверяется равно ли выражение, стоящее слева от знака, выражению справа от него. Эта операция не изменяет значения переменной в левой части, если она там присутствует.
canoes = = 5 проверяет, равняется ли значение переменной canoes 5
Что такое истина?
Каждое условное выражение проверяется "истинно" ли оно или ложно. При этом возникает интересный вопрос: Что такое истина?
Мы можем ответить на этот вечный вопрос по крайней мере так, как он решен в языке Си. Напомним, во-первых, что выражение в Си всегда имеет значение. Это утверждение остается вepным даже для условных выражений, как показывает пример, приведенный ниже. В нем определяются значения двух условных выражений, одно из которых оказывается истинным, а второе - ложным.
/* истина и ложь*/
main
{
int true, false;
true = (10 > 2); /* отношение истинно */
false = (10 = =2); /* отношение ложно */
printf("true = %d; false = %d\n" , true, false);
}
В данном примере
true = 1; false = 0
Вот как! Оказывается, в языке Си значение "истина" - это 1, a "ложь" - 0. Мы можем это легко проверить, выполнив программу, приведенную ниже.
/* проверка истинности */
main
{
if(1)
printf(" 1 соответствует истине.\n" );
else
printf(" 1 не соответствует истине. \n");
if(0)
printf(" 0 не означает ложь. \n");
else
printf(" 0 означаетложь. \n");
}
Мы скажем, что 1 должна рассматриваться как истинное утверждение, а 0 - как ложное. Если наше мнение верно, то в первом операторе if должна выполниться первая ветвь (ветвь if, а во втором операторе if– вторая (ветвь else). Попробуйте запустить программу, чтобы узнать, правы ли мы.
Итак, чему же все-таки соответствует истина?
Мы можем использовать 1 и 0 в качестве проверочных значений оператора if. Спрашивается, можем ли мы использовать другие числа. Если да, то что при этом происходит? Давайте проведем эксперимент.
/* if - тест */
main
{
if (200)
printf("200 - это истина. \n");
if(-33)
printf(" -33 - это истина \n");
}
Pезультаты выглядят так
200 - это истина
– 33- это истина
Очевидно, в языке Си числа 200 и -33 тоже рассматриваются как "истина". И действительно, все ненулевые величины принимаются в качестве "истины" и только 0 - как "ложь". В языке Си понятие истины оказывается чрезвычайно растяжимым.
Многие программисты обычно пользуются этим определением истинности. Например, строку
if(goats !=0)
можно заменить такой
if(goats)
поскольку выражение (goats != 0) и выражение (goats) оба примут значение 0, или "ложь", только в том случае, если значение переменной goats равно 0. Мы думаем, что смысл второй формы записи менее очевиден, чем первой. Однако в результате компиляции она оказывается более эффективной, так как при реализации про граммы требует меньшего числа машинных операций.