Как сравнить 3 числа?
Имеется 3 числа:
unsigned int a;
unsigned int b;
unsigned int c;
Их значения задаются по ходу выполнения программы. А потом надо эти значения сравнить, чтобы найти наименьшее, а именно:
// сравниваем числа
if (smallest==a) {
...
} else if (smallest==b) {
...
} else if (smallest==c) {
...
}
Самое первое, что приходит в голову - связка if/else. Но даже с тремя числами такая связка будет весьма длинная, что не очень удобно. И что хуже - два из трёх чисел могут быть и равными, что неудобно, особенно если это будут два наименьших числа. Не подскажете, как коротко и грамотно оформить такое сравнение? Ещё лучше, если это обернуть в функцию вида
int num_match() {
int smallest;
...
return smallest;
}
Язык - C, не C++, так что плюсовые решения не предлагать... Также не предлагать Windows-овые функции (работаю под Linux).
Ответы (1 шт):
Ок, допустим, что нужно искать минимальное с трех. Что бы не мешалось, лучше завернуть в функцию (или макрос, по обстоятельствам).
Я предлагаю объявить функцию вот так
int min3i(int a, int b, int c) {
int smallest = a;
smallest = smallest > b?:b:smallest;
smallest = smallest > c?:c:smallest;
return smallest;
}
хотя лучше уже написать так
int min3i(int a, int b, int c) {
int smallest = a;
if (b < smallest) { smallest = b;}
if (c < smallest) { smallest = c;}
return smallest;
}
и теперь можно использовать как int m = min3i(1,2,5);. Почему я добавил 3i в название? это си, тут нельзя иметь функции с разным кол-вом параметров и одним именем.
Если же хочется макросов (ну потому что сравниваются не только int, а и float и другое, то вот такой способ (улучшим идею от @Harry)
#define min(a,b) ((a)>(b))?(b):(a)
#define min3(a,b,c) min((a), min((b), (c)))
Скобки нужны, так как иначе могут быть чудеса, к примеру, с таким выражением min3(a+b, b+c, 3) (надеюсь, я их достаточно поставил).