Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual_C_console.pdf
Скачиваний:
38
Добавлен:
16.05.2015
Размер:
954.14 Кб
Скачать

40

дающиеся справа разряды числа нулями. Сдвиг вправо равносилен делению числа на два, но при этом положительные числа дополняются слева нулями, а отрицательные единицами. Это может привести к ошибке, поскольку при сдвиге вправо отрицательного числа на количество разрядов, равное разрядности числа, результат всегда будет состоять из одних двоичных единиц, независимо от начального значения числа. Если же переменная объявлена с модификатором unsigned, то при сдвиге вправо число слева дополняется нулями, то есть, искажение результата не происходит.

Операторы управления

Операторы управления изменяют порядок выполнения операторов программы. К этим операторам относятся:

Операторы условного перехода: if, ? и switch;

Операторы циклов: while, do-while и for;

Вспомогательные операторы: break, continue, default и case.

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

Оператор условного перехода if

Наиболее распространенным из операторов условного перехода является оператор if, который может иметь две формы:

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

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

В описании форматов операторов if (так же, как и в описаниях форматов любых других операторов в языке С++) имеется в виду, что "оператор" может быть как одиночным выполняемым оператором,

41

так и блоком, состоящим из группы выполняемых операторов, заключенными в фигурные скобки.

Первая форма оператора if позволяет выполнить "оператор" при истинности "условия". Если "условие" не является "истинным", то "оператор" пропускается и выполняется следующий оператор программы. Таким образом, оператор, записанный после оператора if (этот оператор выполняется всегда, независимо от истинности "условия" в операторе if).

Вторая форма оператора if обеспечивает выполнение "оператора 1", если "условие" выполнено, в противном случае будет выполнен "оператор 2". Примеры записи оператора if:

if (x >= 30) x = 30;

// Первая форма записи

y = р * 30;

 

или

 

if (c >= 128 && c <= 175) y = c + 48;

//Вторая форма записи

else y = c;

 

или

 

if (x > 0)

 

{

 

y = a;

 

i++;

 

}

 

else

 

{

 

y = b;

 

j++;

 

}

 

В арифметических выражениях, входящих в состав условия в операторе if, может использоваться операция присваивания, что порой вызывает логическую ошибку в программе, приводящую к "выключению" проверки. Например, если вместо проверки на равенство (a == 1) по ошибке написать a = 1, то произойдет следующее:

42

1.Переменной a будет присвоено значение 1, которое соответствует понятию «истинно», независимо от действительного значения переменной a.

2.Поскольку вместо проверки переменной а было присвоено новое значение, то все дальнейшие вычисления будут производиться с этим значением переменной a.

Выявить такого рода ошибку бывает достаточно трудно, и не все компиляторы языка С++ выдают в этом случае предупреждение o «возможно неправильном присвоении значения в программе».

В некоторых задачах удобно пользоваться оператором условного перехода "?" ("тернарный оператор"), который имеет следующий формат:

<имя_переменной> = <условие>? <выражение 1>:<выражение 2>; Примеры. Оператор

x = a > 0? a: -a;

вычисляет абсолютное значение переменной a и присваивает его переменной x. Оператор

max = a > b? a: b;

присваивает переменной max значение большего из чисел a или b.

Для реализации функции "триггера" (переключение значения из 0 в 1, если текущее значение 0, и наоборот из 1 в 0, если текущее значение 1) можно воспользоваться оператором:

char w = 0;

. . .

w = w == 1? w = 0: w = 1;

Безусловно, все приведенные выше операторы можно реализовать и с помощью обычного оператора if.

Оператор условного перехода допускает применение оператора if в качестве выбираемого по условию "оператора", таким способом можно создавать "лесенки" операторов if. Операторы if могут записываться в любой форме (с группой else или без нее), поэтому не

43

всегда очевидно, к какому из операторов if относится группа else. В этих случаях следует руководствоваться правилом: группа else относится к ближайшему оператору if, записанному выше ключевого слова else. Например, в последовательности операторов

if (a > 0.5)

if (y > z) x = a * b; else x = a * c;

группа else относится ко второму оператору if. Если требуется, чтобы эта группа относилась к первому оператору if, то можно воспользоваться одной из двух способов:

if (a > 0.5)

if (y > z) x = a * b; else;

else x = a * c;

В этом варианте пустая группа else "закрывает" первый оператор if, поэтому вторая группа else будет относиться к первому оператору if.

if (a > 0.5)

{

if (y > z) x = a * b;

}

else x = a * c;

В этом варианте фигурные скобки "закрывают" второй оператор if, поэтому группа else относится к первому оператору if. Этот способ более нагляден по сравнению с первым.

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

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