On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 11.02.20 14:36. Заголовок: Как с помощью одного оператора switch определить, какое из двух чисел больше, меньше или они равны.


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

Даже опытному программисту не сразу же придет в голову, какое выражение использовать в switch операторе.

Если написать прямолинейно, как, например,

 
switch ( num1 > num2 )
{
// ...
}


то выражение может принимать только два значения: 1 или 0. То есть мы сможем определить, что либо одно число больше другого, или что другое число не меньше первого числа.

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

Ниже представлена демонстрационная программа.

 
#include <stdio.h>

int main(void)
{
int num1 = 0, num2 = 0;

printf( "Enter two numbers: " );
scanf( "%d %d", &num1, &num2 );

switch( ( num2 < num1 ) - ( num1 < num2 ) )
{
case -1:
printf( "The second number equal to %d is greater than "
"the first number equal to %d\n", num2, num1 );
break;
case 0:
printf( "The first number equal to %d is equal to "
"the second number equal to %d\n", num1, num2 );
break;
case 1:
printf( "The first number equal to %d is greater than "
"the secons number equal to %d\n", num1, num2 );
break;
}

return 0;
}


Выражение в switch операторе либо будет равно 1, если первое число больше второго, либо 0, если оба числа равны между собой, либо -1, если первое число меньше второго.

Эта тема мною создана на основе вопроса на Stackoverflow switch case to find maximum or equal in c isnt working

Я считаю, что мое решение является лучшим из всех ответов на указанный вопрос, так как оно использует только один switch оператор, что делает код более простым и ясным.

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 40
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет