Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ПВМ.doc
Скачиваний:
5094
Добавлен:
21.02.2016
Размер:
2.79 Mб
Скачать

Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.

Язык Си предоставляет три типа структур выбора. В структуре выбора if некоторое действие либо выполняется (выбирается), если условие истинно, либо пропускается, если это условие ложно. В структуре выбора if/else некоторое действие выполняется, если условие истинно, и выполняется другое действие, если это условие ложно. В структуре выбора switch выполняется одно из набора действий в зависимости от значения некоторого выражения.

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

Общий вид структуры выбора if:

if(выражение) оператор1;

Общий вид структуры выбора if/else:

if(выражение) оператор1;

elseоператор2;

Если выражение истинно (отлично от нуля), то выполняется оператор 1, в противном случае оператор 2.

В языке Си предусмотрена условная операция (?:), которая тесно связана со структуройif/else. Для нее необходимо три операнда. Операнды вместе с условной операцией образуют условное выражение. Первый операнд является условием, второй операнд значением для всего условного выражения, если условие истинно, и третий операнд значением для всего условного выражения, если условие ложно. Например,

x>y ? printf(“max=%d\n”, x) : printf(“max=%d\n”, y);

Вложенные структуры if/elseслужат для проверки составных условий, при этом одни структурыif/elseпомещаются внутри других структурif/else.

Приведем следующую форму записи:

if(выраж. 1)

оператор 1;

elseif(выраж. 2)

оператор 2;

else

оператор 3

Если выражение 1 истинно, выполняется оператор 1. Если выражение 1 ложно, но выражение 2 истинно, выполняется оператор 2. В случае, когда оба выражения ложны, выполняется оператор 3.

Логические операции. При объединении двух или более условных выражений используются логические операции. В языке Си имеются три логические операции: & & (и), !! (или), ! (не).

1. fl1 &&fl2 истинно в том и только в том случае, когда оба выраженияfl1 илиfl2 истинны.

2. fl1 ||fl2 истинно в том и только в том случае, когда оба выраженияfl1 илиfl2 истинно или оба истинны.

3. !fl1 истинно, если выражениеfl1 ложно, и наоборот.

Пример: 15>12 && 8>10 - ложно (истинно таким образом одно подвыражение)

15>12 | | 8>10 – истинно (по крайней мере одно подвыражение истинно)

! (8>10) истинно

Операция ! имеет очень высокий приоритет, только круглые скобки имеют более высокий приоритет. Приоритет операции && выше, чем операции ||, а обе эти операции имеют более низкий приоритет, чем операция присваивания.

При использовании операции && и || необходимо отметить следующее: выполнение этих операций прекращается, как только становится ясно, будет ли результат иметь значение истина или ложь. Предположим, что имеется выражение вида: fl1 &&fl2.

Если fl1 – ложь, значит и все выражение ложь, таким образом,fl2 не будет вычисляться.

Аналогично, если мы имеем выражение вида fl1 ||fl2,

То fl2 не будет вычисляться, еслиfl1 – верно.

В следующей программе показан пример использования структуры выбора if/elseс двойным выбором.

// Вычисление стоимости покупки с учетом скидки

#include <stdio.h>

#include <conio.h>

void main()

{

float sum; /* сумма покупки */

printf(“\nВычисление стоимости покупки с учетом ”);

printf(“скидки\n”);

printf(“Введите стоимость покупки ->”);

scanf(“%f”, &sum);

if(sum<1000)printf(“Скидка не предоставляется.\n”);

else{printf(“Вам предоставляется скидка ”);

if (sum>3000) { printf(“5%\n”);

sum = 0.95 * sum; }

else { printf(“3%\n”);

sum = 0.97 * sum; };

printf(“Сумма с учетом скидки %.2f тг\n”, sum); }

printf(“\nДля завершения нажмите <Enter>”);

getch(); }

Результат программы:

Вычисление стоимости покупки с учетом скидки

Введите стоимость покупки -> 2250

Вам предоставляется скидка 3%.

Стоимость покупки с учетом скидки: 2182.50 тг.

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

Если в программе необходимо произвести выбор одного из нескольких вариантов используется оператор выбора switch.

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

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

{

caseметка 1:

операторы;

caseметка 2:

операторы;

---------------------------------

default:

операторы;

}

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

В операторе switchнельзя использовать вещественные типы данных, строки и других структуры данных, но разрешает использовать элементы структур данных совместимых с целыми значениями.

main ( )

{char ch;

while ((ch=getchar ( ))!='#'

{ switch (ch){

case f:

case 'F': do_file_menu; break;

case 'r':

case 'R': run_program ( ); break;

case 'c':

case 'C':do_compile ( ); break;

default: Ex ( ); break; }

printf(“Введите букву или #”); }

Основная литература: 1осн[94-101],2осн[168-209],3осн[53-57]

Дополнительная литература:10доп[108-115]

Контрольные вопросы:

1. Назовите логическую операцию самого высокого приоритета?

2. Какой оператор используется для выбора одного варианта из нескольких?

3. В каком случае используется операторы метки default?

4. Какие структуры используются для проверки составных условий?

5. Какой тип данных используются для выражений и меток в операторе выбора switch?