Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ лекции.doc
Скачиваний:
22
Добавлен:
21.04.2019
Размер:
536.06 Кб
Скачать

7. Условный оператор if, условные операции.

Как вы знаете, существует 3 базовых структуры алгоритма: последовательность (последовательное выполнение нескольких действий), ветвление (выполнение одного из двух или более действий в зависимости от некоторого условия) и цикл (выполнение некоторого действия или некоторой последовательности действий некоторое количество раз). Последовательность в языке C реализуется просто последовательным выполнением некоторых операторов:

int main()

{

оператор1;

оператор2;

оператор3;

}

Ветвление в C осуществляется несколькими способами. Один из них — это оператор if. В самом простом случае, условный оператор if выглядит следующим образом:

if (условие) оператор;

Условие в операторе if всегда пишется в скобках. Если условие истинно (true), оператор, стоящий после условия, выполняется:

#include <stdio.h>

int main()

{

if (true) printf("It's really true!\n");

printf("And it's cool!");

// output:

// It's really true!

// And it's cool!

}

Если же условие ложно (false), оператор пропускается.

#include <stdio.h>

int main()

{

if (false) printf("It's not true...\n");

printf("And it's cool!");

// output:

// And it's cool!

}

Заметьте, что операторы, стоящие после конструкции ветвления (printf("And it's cool!");) выполняются вне зависимости от того, выполнилось ли условие.

В этом примере true и false — это литералы булева типа. Вообще, строго говоря, литерал true полностью эквивалентен (равноценен) целочисленному литералу 1. То есть первый пример и следующий на самом деле идентичны:

#include <stdio.h>

int main()

{

if (1) printf("It's really true!");

printf("And it's cool!");

// output:

// It's really true!

// And it's cool!

}

Запомните, что в языке C,

Любое не нулевое значение является истиной

Зная этот простой принцип вы с легкостью сможете предугадать, какому целочисленному литералу эквивалентен логический литерал false (то есть какое значение является ложью).

Литерал false эквивалентен литералу 0

Здесь и далее синим текстом будут обозначены части методички, более детально разъясняющие некоторые вопросы.

Что вообще такое в программировании «истина» и «ложь»? Вообще, эти два понятия крайне широко используются в программировании, информатике, матлогике и прочих науках. «Истиной» является любое (вообще любое) верное утверждение. В реальной жизни таких безусловно верных утверждений найти нелегко, однако компьютер редко утруждает себя вопросами о смысле жизни. Утверждение «два равно двум» всегда верно, следовательно, оно является той самой «истиной». А утверждение «остаток от деления пяти на восемь равен нулю» всегда неверно и является «ложью». Таким образом, запись "2 == 2" — это истина (== - это операция сравнивания в C). А "5 % 8 == 0" — это ложь. Для языка C, как уже было сказано, любое ненулевое значение является истиной. Где же в записи "2 == 2" находится это самое ненулевое значение (это не числа 2)? Дело в том, что как и операция вычисления суммы двух чисел (2 + 2) возвращает (имеет результатом действия) число 4, так и операция сравнивания двух чисел (2 == 2) возвращает значение true, которое численно равняется единице. То есть результатом сравнивания является ненулевое значение, которое трактуется языком C, как истина. И то же самое с ложью. 5 % 8 возвращает 5. 5 == 0 возвращает значение false, то есть ноль, что трактуется, как ложь.

Понятное дело, что true и false условиями не являются (они являются значениями). По-этому при использовании оператора if в такой форме его сложно назвать структурой ветвления, ведь его результат очевидно предопределен. Для того, что бы использовать оператор ветвления полноценно, необходимо узнать логические операторы, доступные в C.

В C существуют следующие операторы сравнивания:

C

Утверждение на естественном языке

x == y

x равно y

x != y

x неравно y

x > y

x больше y

x >= y

x больше или равно (неменьше) y

x < y

x меньше y

x <= y

x меньше или равно (небольше) y

Обратите внимание (особенно если вы знаете Pascal), что в C для сравнения используется именно двойное равно! Если вы случайно напишете в условии оператора if или в другом выражении одинарное равно — компилятор не покажет ошибку, однако поведение программы будет коренным образом отличаться. Дело в том, что выражение a = b, как и выражение a == b, возвращает некоторое значение. Но если во втором случае это значение — результат сравнивания двух величин, то в первом случае это значение равно значению переменной b (именно из-за этого свойства языка С допустимо множественное присваивание вида a = b = c).

Все эти операторы можно использовать как внутри условия оператора if, так и в условных выражениях для присваивания в переменные типа bool:

int var1, var2;

printf("Input var1: ");

scanf("%d", &var1);

printf("Input var2: ");

scanf("%d", &var2);

bool condition = var1 == var2;

if (condition) printf("Values are equal");

if (var1 > var2) printf("val1 is greater than val2");

В этом примере если обе переменные будут равны после ввода с клавиатуры, то в булеву переменную condition будет установлено значение true. В этом случае условие в первом из двух операторов if будет истинным и на экран выведется текст «Values are equal». Если же первая переменная будет больше второй переменной то условное выражение во втором операторе if вернет значение true, и на экран будет выведен текст «val1 is greater then val2». Есть и третий вариант — когда первое значение будет меньше второго. В этом случае не сработают оба условия и на экран не будет выведено ничего.

Иногда существуют ситуации, когда в зависимости от какого-то условия необходимо выполнить не одно действие, а несколько. В этом случае необходимо использование составного оператора { }. Рассмотрим пример, в котором с клавиатуры вводятся 2 целочисленных значения, если первое из них больше второго, то они меняются местами, в конце переменные выводятся на экран в порядке возрастания.

#include <stdio.h>

int main() {

int first, second; // переменные, которые будут хранить введенные значения

printf("Input 2 integers: ");

scanf("%d %d", &first, &second); // ввод значений

if (first > second) { // если первое значение больше — нужно поменять переменные значениями

int temp = first; // что бы не потерять первое значение — оно заносится во временную переменную

first = second; // в первую переменную заносится значение второй переменной, т.е. в обеих переменных одинаковое значение (их второй переменной)

second = temp; // первое значение восстанавливается из временной переменной и записывается во вторую переменную

}

printf("%d %d", first, second);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]