Лекция 4_ветвления.ppt
- Количество слайдов: 22
Лекция 4. Организация ветвлений в С.
Условные операторы языка С 2 В языке программирования С используются несколько конструкций для принятия решений: • оператор if; • оператор switch; • условный оператор ? (оператор условия) Для прерывания программного цикла при некотором условии применяется утверждение (оператор) break, для продолжения итераций цикла при выполнении некоторых условий применяется утверждение (оператор) continue, для перехода к заданному месту программы применяется оператор goto
Логические операторы и операторы сравнения 3 В основе операторов лежат понятия «истина» и «ложь» . Ложным в С считается значение, равное нулю, все остальные значения – истинные. Соответственно, выражения содержащие логические операторы возвращают 0, если результат ложен и 1, если истинен. Операторы сравнения и логические операторы имеют более низкий приоритет, чем арифметические. Т. е. в выражении без скобок сначала выполняются арифметические вычисления, а потом сравнения.
Оператор > Больше >= Больше или равно < Меньше <= Меньше или равно = = Равно != Не равно && И || 4 Действие ИЛИ ! НЕ
Оператор if-else Общая форма записи конструкции if–else: if (expression) program 1 statement 1; else program 2 statement 2; Если выполняется условие expression, то будет выполняться фрагмент программы program 1 statement 1, в противном случае будет выполняться program 2 statement 2. 5
Оператор if-else 6 Каждая из «веток» оператора может содержать несколько функций (операторов, выражений). В таком случае применяются фигурные скобки: if (expression) { program 1 statement 1; program 2 statement 2; . . . } else { program 3 statement 3; program 4 statement 4; . . . }
Пример 1. Решение квадратного уравнения #include
D = b*b - 4*a*c; if (D >= 0 && a != 0) { x 1 = -b/(2*a) + (float)sqrt(D)/(2*a); x 2 = -b/(2*a) - (float)sqrt(D)/(2*a); printf("nt The roots of the equation: nt x 1 = %1. 4 f, x 2 = %1. 4 fn", x 1, x 2); } if (D < 0) printf("nt The roots complexn"); 8
9 if (a == 0 && b != 0) { x = -c/b; printf("nt As a = %1. 0 f, nt the solution of the equation is: %1. 4 fn", a, x); } ; printf("n Press any key: "); _getch(); return 0; }
Условный оператор ? В отличие от других операторов языка С, которые могут быть унарными или бинарными, специфический оператор условия является тернарным оператором. Это означает, что у него может быть три операнда. Общий формат записи оператора условия: условие ? выражение_1 : выражение_2 Если в результате вычисления условия будет получено значение TRUE (истина, не нуль), то выполняется выражение_1. Если в результате вычисления условия будет получено значение FALSE (ложь, т. е. нуль), то выполняется выражение_2. 10
Пример 2. Наибольшее из двух чисел #include
printf("nt Random numbers: a = %d; b = %dn", a, b); /*Оператор условия для определения максимального числа */ maxab = (a > b) ? a : b; printf("nt Maximum number: %dn", maxab); printf("n Press any key: "); _getch(); return 0; } 12
Оператор switch Оператор многовариантного ветвления или множественного выбора. Оператор последовательно сравнивает значение выражения со списком целых чисел или символов. Если обнаружено совпадение, то выполняется соответствующий оператор или группа операторов. 13
Оператор switch. Общая форма записи 14 switch (expression) { case value 1: program statement; break; case value 2: program statement; break; . . . case value. N: program statement; break; default: program statement; break; }
15 Выражение заключенного в круглые скобки оператора последовательно сравнивается со значениями value 1, value 2, . . . , value. N. В том случае, когда одно из этих значений равно значению выражения, выполняются утверждения, которые следуют за данным значением. break сигнализирует об окончании выполнения утверждений и приводит к выходу из оператора switch. break ставится в конце каждого варианта выбора. Специальный дополнительный вариант default будет выполнен в том случае, когда не будет найдено ни одного совпадения.
Пример 3. Расчет арифметического выражения #include
case '-': printf("nt Result: %1. 4 fn", value 1 - value 2); break; case '*': printf("nt Result: %1. 4 fn", value 1 * value 2); break; case '/': if (value 2 == 0. 0) printf("nt Division by zero. n"); else printf("nt Result: %1. 4 f n", value 1 / value 2); break; 17
default: printf("nt Unknown arithmetic operatornt error or enter a number. Break!n"); break; } // End switch printf("n Press any key: "); _getch(); return 0; } В программе использована полная форма оператора switch. Оператор break инициирует немедленный выход из оператора switch. Возможно использование вложенных операторов switch. 18
Свойства оператора switch 1. 2. 3. 19 Значение его выражения можно сравнивать только с константами, т. е. нельзя использовать выражения в части case. Две константы в разных разделах case не могут иметь одинаковое значение, за исключением случая, когда один оператор switch вложен в другой. Если в операторе switch используются символьные константы, то они автоматически преобразуются в целочисленные
Пример 4. Создание текстового меню void main () { char ch; printf(“ 1. Ввод данных/n”); printf(“ 2. Расчёт/n”); printf(“ 3. Вывод результата/n”); printf(“ 4. Выход/n”); printf (“Выберите пункт меню”); ch=getchar(); //считываем символ с клавиатуры 20
21 switch (ch) { case ‘ 1’: inp(); //вызов функции ввода данных break; case ‘ 2’: calc(); //вызов функции расчета break; case ‘ 3’: outp(); //вызов функции вывода данных break; case ‘ 4’: return; default: printf(“Не выбран ни один пункт. ”); } }
Итоги Мы рассмотрели hазличные способы организации ветвлений в С • Условный оператор if • Короткую форму оператора if • Оператор множественного выбора swich 22