{
double a, b, c;
char s;
m1: fflush(stdin); // Очистка буфера ввода stdin
printf("\nВведите операнд1, символ операции, операнд2:");
scanf("%lf%c%lf", &a, &s, &b);
switch(s) {
case '+': c = a+b; break;
case '–': c = a–b; break;
case '*': c = a*b; break;
case '/': c = a/b; break;
default: printf("\n Ошибка, повторите ввод!”);
goto m1;
}
printf("\n a %c b = %lf", s, c);
printf("\n Продолжим? (Y/y) ");
s = getch();
if ((s=='Y') || (s=='y')) goto m1;
printf("\n Good bye! ");
}
После запуска программы на экран выводится подсказка, нужно набрать соответствующие значения без пробелов, например, как показано ниже, и нажать клавишу Enter:
Введите операнд 1, символ операции, операнд 2: 2.4+3.6
На экран будет выведен результат и дальнейший диалог:
a + b = 6.000000
Продолжим? (Y/y)
Введя символ y (Y), вернемся в начало функции и на экране вновь:
Введите операнд 1, символ операции, операнд 2:
Если ошибочно ввести – 2r3, появятся следующие сообщения:
Ошибка, повторите ввод!
Введите операнд 1, символ операции, операнд 2:
2 * 3
a*b = 6.000000
Continue? (Y/y)
Нажимаем любую клавишу, кроме y или Y, получим сообщение
Good bye!
Программа закончена.
|
|
7.3. Условная операция «?:»
Если одно и то же выражение (или переменная) вычисляется по-разному в зависимости от некоторого условия, вместо оператора if можно использовать более короткую запись - условную операцию. Эта операция – тернарная, т.е. в ней участвуют три операнда.
Формат написания условной операции следующий:
выражение 1? выражение 2: выражение 3
если выражение 1 (условие) отлично от нуля (истинно), то результатом операции является значение выражения 2, в противном случае – значение выражения 3. Каждый раз вычисляется только одно из выражений 2 или 3.
На рисунке приведена схема вычисления результата, которая аналогична схеме полного оператора if (см. рисунок):
Рассмотрим участок программы для нахождения максимального значения z из двух чисел a и b, используя оператор if и условную операцию.
1. Запишем оператор if:
if (a > b) z = a;
else z = b;
2. Используя условную операцию:
z = a > b? a: b;
Условную операцию можно использовать так же, как и любое другое выражение. Если выражения 2 и 3 имеют разные типы, то тип результата определяется по правилам преобразования. Например, если f имеет тип double, а n – int, то результатом операции:
(n > 0)? f: n;
по правилам преобразования типов будет double, независимо от того, положительно n или нет.