Условные операторы if, else и switch

Условные операторы if, else и switch

Программирование » C/C++ » Условные операторы if, else и switch

Операции отношения и логические операции

Операции отношения используются для сравнения. Список операций отношения в языке С следующий:

== равно

!= не равно

> больше

>= больше или равно

< меньше

<= меньше или равно

Так же при сравнении и построении условий используются и логические операции:

&& И (AND)

|| ИЛИ (OR)

! НЕ (NOT)

Операции отношения используются в условных выражениях. Примеры условных выражений:

A==B, A>B, C!=10, D<20

Каждое условное выражение проверяется и принимает значение "истинно" или "ложно". В языке С "истинно" - не нулевая величина, а "ложно" - это ноль.

Условные операторы if,else

Оператор if является управляющим оператором. С его помощью можно анализировать данные и в соответствии с заданным условием выполнять те или иные блоки операторов. Рассмотрим форму оператора if.

if(условие)

{

// Первый блок операторов

}

else

{

// Второй блок операторов

}

Если значение условия "истинно", то выполняется Первый блок операторов. Если же значение условия "ложно", то выполняется Второй блок операторов. Блок операторов может состоять из одного или нескольких операторов. Конструкцию else писать не обязательно т.е. её может и не быть

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

Если блок операторов состоит, например из вызова одной функции printf(), то фигурные скобки можно не писать. Например,

if(age>18)

{

printf("Доступ разрешен");

}

else

{

printf("Нет доступа");

}

Этот пример можно записать и так:

if(age>18) printf("Доступ разрешен");

else

printf("Нет доступа");

Напомню, что в языке С истина - это не нулевое значение, ложь - ноль.

Если бы в предыдущем примере значение переменной age было бы 10, то значение выражения 10>18 было бы "ложно" и произошел бы вызов функции printf("Нет доступа");

Если по-русски, то конструкцию if-else можно представить так

Если (условие), то что-то делается;

иначе

делается что-то другое.

Рассмотрим пример.

#include <stdio.h>

void main(void)

{

int a,b;

// ввод чисел с клавиатуры

printf("Введите число A:");

scanf("%d", &a);

printf("Введите число B:");

scanf("%d", &b);

if(a==b) printf("Число А равно числу B\n");

if(a>b) printf("Число А больше числа B\n");

if(a<b) printf("Число А меньше числа B\n");

}

Программа анализирует вводимые числа и выдает соответствующие сообщения. Обратите внимание на то, что использовалась операция отношения == (a==b). Если бы мы просто написали a=b, то значение переменной a стало бы равно значению переменной b и выполнился бы вызов функции printf("Число А равно числу B\n"); так как a=b=a - это истина. Напишем эту же программу, но теперь будем использовать конструкцию if-else.

#include <stdio.h>

void main(void)

{

int a,b;

// ввод чисел с клавиатуры

printf("Введите число A:");

scanf("%d", &a);

printf("Введите число B:");

scanf("%d", &b);

if(a==b) printf("Число А равно числу B\n");

else

if(a>b) printf("Число А больше числа B\n");

else

printf("Число А меньше числа B\n");

}

В качестве условия может стоять произвольное выражение. В операторе if лишь проверяется, является ли значение этого выражения ненулевым (истинным) или нулевым (ложным). Для того чтобы проверить, равно число A нулю или не равно, можно написать

if(A==0) printf("Число А равно нулю\n");

else

printf("Число А не равно нулю\n");

тот же результат мы получим если напишем

if(!A) printf("Число А равно нулю\n");

else

printf("Число А не равно нулю\n");

можно написать и наоборот

if(A) printf("Число А не равно нулю\n");

else

printf("Число А равно нулю\n");

Напишем программу, которая проверяет пароль. Если пароль верный, то будет выдано соответствующее сообщение.

#include <stdio.h>

#include <string.h>

#define PASSWORD "proger"

void main(void)

{

char buf[10];

printf("Введите пароль:");

scanf("%s", buf);

if(strcmp(buf, PASSWORD)) printf("\nНеправильный пароль!");

else

printf("\nПароль правильный.");

}

Теперь при вводе proger, программа выдаст сообщение о том, что пароль правильный, а иначе программа скажет, что пароль не правильный. В этой программе мы используем функцию strcmp(). Эта функция чувствительна к регистру. Она возвращает 0 если первая строка равна второй строке. Функциям по обработке строк мы посвятим отдельную статью.

Оператор switch

Оператор switch - это оператор множественного выбора. Основная форма оператора switch имеет вид:

switch(выражение)

{

case constant1:

последовательность операторов

break;

case constant2:

последовательность операторов

break;

......

case constantN:

последовательность операторов

break;

default

последовательность операторов

}

Оператор switch сравнивает значение выражения с константами constant1, constant2, ... И когда значение выражения равно константе, выполняется следующая за константой последовательность операторов (может быть блоком), до тех пор пока не встретится оператор break, после которого завершается выполнение всех инструкций оператора switch и идёт переход к следующему оператору программы. case - случай т.е. в случае если значение выражения равно constant1, то делать что-то. и т.д.

Если значение выражения не совпало со значениями констант и если в операторе switch присутствует default, то выполниться последовательность операторов, расположенная за default.

Наличие оператора break в операторе switch не обязательно. Рассмотрим два примера программы. В одном примере будет присутствовать оператор break, а в другом нет.

#include <stdio.h>

void main(void)

{

int id;

printf("Введите идентификатор пользователя (от 1 до 5):");

scanf("%d", &id);

switch( id )

{

case 0:

printf("Пользователь 0\n");

break;

case 1:

printf("Пользователь 1\n");

break;

case 2:

printf("Пользователь 2\n");

break;

case 3:

printf("Пользователь 3\n");

break;

case 4:

printf("Пользователь 4\n");

break;

case 5:

printf("Пользователь 5\n");

break;

default:

printf("Пользователя с таким идентификатором нет.\n");

break;

}

}

При вводе цифры 3, на экране появиться сообщение "Пользователь3". Если ввести 9, то выведется "Пользователя с таким идентификатором нет."

Эта же программа, но без break

#include <stdio.h>

void main(void)

{

int id;

printf("Введите идентификатор пользователя (от 1 до 5):");

scanf("%d", &id);

switch( id )

{

case 0:

printf("Пользователь 0\n");

case 1:

printf("Пользователь 1\n");

case 2:

printf("Пользователь 2\n");

case 3:

printf("Пользователь 3\n");

case 4:

printf("Пользователь 4\n");

case 5:

printf("Пользователь 5\n");

default:

printf("Пользователя с таким идентификатором нет.\n");

}

}

В этом случае, при вводе цифры 3 на экране появиться

Пользователь 3

Пользователь 4

Пользователь 5

Пользователя с таким идентификатором нет.

Как уже говорилось выше, break завершает выполнение всех инструкций оператора switch. А так как в последнем примере break нет, то будут выполнены все инструкции начиная со случая case 3 (при вводе цифры 3).

Если в последнем примере ввести цифру 9, то выполниться

default: printf("Пользователя с таким идентификатором нет.\n");




Бардин П.Б. http://proger.ru/

Отзывы (через аккаунты в социальных сетях Вконтакте, Facebook или Google+):

Оставить отзыв с помощью аккаунта ВКонтакте:

Оставить отзыв с помощью аккаунта FaceBook:

Оставить отзыв с помощью аккаунта Google+: