Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка-ТП-С++.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
661.5 Кб
Скачать

4.6.5. Оператор запятая

Вы можете использовать оператор запятая (,) для организации множественных выражений, расположенных внутри круглых скобок. Выражение внутри скобок вычисляется слева направо и все выражение принимает значение, которое было вычислено последним. Например, если oldch и ch имеют тип char, то выражение:

(oldch = ch, ch = getch());

присваивает переменной oldch значение ch, затем считывает символ, вводимый с клавиатуры, и запоминает его в ch. Результатом всего выражения, в итоге, будет значение введенного с клавиатуры символа. Приведем еще один пример:

ch=‘a’;

if((oldch = ch, ch = "b") == "a")

puts("Это символ ‘a’ \n");

else

puts("Это символ ‘b’\n");

Как вы считаете, какое сообщение будет выведено на экран вашего дисплея в результате выполнения приведенной выше программы?

4.6.6. Оператор if

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

if (значение)

оператор 1;

else

оператор 2;

где “значение” является любым выражением, которое приводится или может быть приведено к целочисленному значению. Если “значение” отлично от нуля (“истина”), то выполняется “оператор 1”, в противном случае выполняется “оператор 2”.

Дадим пояснение относительно двух важных моментов по использованию оператора ifelse.

Во-первых, часть “else оператор2” является необязательной частью оператора if; другими словами, правомерно употребление следующей формы оператора if:

if (значение)

оператор 1;

В этой конструкции “оператор 1” выполняется тогда и только тогда, когда “значение” отлично от нуля. Если “значение” равно нулю, “оператор 1” пропускается и программа продолжает выполняться дальше.

Во-вторых, что делать, если вы хотите выполнить более одного оператора в зависимости от того, ложно или истинно выражение, указанное в операторе if? Ответ: используйте составной оператор if.

Составной оператор состоит из:

– левой или открывающей фигурной скобки ({);

– последовательности операторов, разделенных между собой точкой с запятой (;);

– правой или закрывающей фигурной скобки (}).

В приведенном ниже примере в предложении if используется один оператор, а в предложении else – составной оператор.

if (b == 0.0)

printf("Отношение не определено\n");

else

{

ratio = a/b;

printf("Значение отношения равно %f\n", ratio);

}

Вы можете так же заметить, что тело вашей программы (функция main) является подобием составного оператора if.

4.6.7. Условный оператор (?:)

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

int imin(int a, int b)

{

if (a < b) return(a);

else return(b);

}

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

выражение 1? выражение 2: выражение 3

А смысл таков: “если выражение 1 верно, то вычисляется выражение 2 и все выражение получает его значение; иначе вычисляется выражение 3 и передается его значение”. Используя эту конструкцию, imin можно представить следующим образом:

int imin(int a, int b)

{

return((a < b)? a: b);

}

Более того, можно даже записать imin как строку макроса:

#define imin(a,b) ((a < b)? a: b)

Теперь, где бы ваша программа не встретила выражение imin(e1, e2);, она замещает его на ((e1 < e2)? e1: e2) и продолжает вычисления. Это в действительности наиболее общее решение, так как a и b больше не ограничены типом int; они могут быть любого типа, с которым можно выполнить операцию сравнения.