Условная операция «? :»

Условная операция - тернарная, в ней участвуют три операнда. Формат написания условной операции следующий:

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

если выражение 1 отлично от нуля (Истинно), то результатом операции является выражение 2, в противном случае - результатом операции является выражения 3. Каждый раз вычисляется только одно из выражений 2 или 3.

Запишем оператор if, вычисляющий максимум из а и b и присваивающий его значение z.

if (a > b) z=a;

else z=b;

Используя условную операцию, этот пример можно записать:

z = (a>b) ? a : b;

Условную операцию можно использовать также как и любое другое выражение. Если выражения 2 и 3 имеют разные типы, то тип результата определяется по правилам преобразования.

Оператор выбора альтернатив (переключатель)

Общий вид оператора:

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

case константа1: оператор1; break;

case константа2: оператор2; break;

...

case константаN: операторN; break;

default: оператор(N+1); break; // может отсутствовать

}

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

case константное выражение:

Целочисленное выражение (константа выбора) после вычисления сравни­вается со значениями констант и при совпадении с одной из них выполняется передача управления соответствующему оператору. В случае несовпадения значения выражения с одной из констант происходит переход на метку default, либо, при ее отсутствии, к оператору, следующему за оператором switch.

Управляющий оператор break (разрыв) позволяет организовать выход из оператора switch на первый выполняемый оператор, следующий после данной конструкции (оператор switch).

Пример 1 с использованием оператора break:

void main(void)

{ int i = 2;

switch(i) {

case 1: puts ( "Случай 1. "); break;

case 2: puts ( "Случай 2. "); break;

case 3: puts ( "Случай 3. "); break;

default: puts ( "Случай default. "); break;

}

}

Для того, чтобы выйти из оператора switch в любом месте использовали оператор break, поэтому результатом будет: Случай 2.

Пример 2 (оператор break отсутствует):

void main()

{ int i=2;

switch(i) {

case 1: puts ( "Случай 1. ");

case 2: puts ( "Случай 2. ");

case 3: puts ( "Случай 3. ");

default: puts ( "Случай default. ");

}

}

Так как оператор разрыва отсутствует, результатом будет:

Случай 2.

Случай 3.

Случай default.

9. Составление циклических алгоритмов

Понятие цикла

Практически все алгоритмы решения задач содержат циклически повторяемые участки. Цикл это одно из фундаментальных понятий программирования. Под циклом понимается организованное повторение некоторой последовательности операторов.

Для организации циклов используются специальные операторы.

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

Один проход цикла называется итерацией. Проверка условия выполняется на каждой итерации либо до кода цикла (с предусловием), либо после кода цикла (с постусловием).

Перечень разновидностей операторов цикла:

- оператор цикла с предусловием;

- оператор цикла с постусловием;

- оператор цикла с предусловием и коррекцией.

Оператор с предусловием while

Общий вид:

while (выражение) код_цикла;

Если выражение в скобках - истина (не равно 0), то выполняется код_цикла. Это повторяется до тех пор, пока выражение не примет значение 0 (ложь). В этом случае выполняется оператор, следующий за while. Если выражение в скобках - ложно (равно 0), то цикл не выполнится ни разу.

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

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

char ch;

int count=0;

while (( ch=getchar())!='\n') count++;

Для выхода из цикла while при истинности выражения, как и для выхода из других циклов можно пользоваться оператором break.

Пример 1:

while (1) { // Организация бесконечного цикла

...

if (kbhit()&&(getch()==27)) break;

// Если нажата клавиша (результат работы функции kbhit()>0) и код ее равен 27 // (код клавиши “Esc”), то выходим из цикла

...

}

Пример 2:

...

while (!kbhit()); // Выполнять до тех пор, пока не нажата клавиша

...

Оператор цикла с постусловием do - while

Общий вид записи:

do код_цикла while (выражение);

Код_цикла будет выполняться до тех пор, пока «выражение» истинно. Все, что говорилось выше справедливо и здесь, за исключением того, данный цикл всегда выполняется хотя бы один раз, после чего проверяется, надо ли его выполнять еще раз.

Наши рекомендации