Не используя условный оператор, найти минимальный элемент линейного массива - C (СИ)
Формулировка задачи:
Подскажите пожалуйста как можно реализовать на Си задачу: "Не используя условный оператор, найти минимальный элемент линейного массива". Заранее Спасибо.
Решение задачи: «Не используя условный оператор, найти минимальный элемент линейного массива»
textual
Листинг программы
#include <stdio.h> #include <math.h> double abs2(double x) { return sqrt(x*x); } int get_res(double a,double b) { int c=(int)abs2(a-b)/(a-b); int d[]={1,-1}; return d[(unsigned int) c>>31]; } double max(double a,double b) { int c=get_res(a,b); return (a+a*c)/2+(b-b*c)/2; } int main() { double a=1,b=12; printf("%f\n",max(a,b)); return 0; }
Объяснение кода листинга программы
В данном коде решается задача поиска минимального элемента в линейном массиве, но без использования условного оператора.
- В функции
abs2
происходит вычисление абсолютного значения числаx
. - В функции
get_res
находится результат сравнения чиселa
иb
с помощью функцииabs2
. Результат приводится к типуint
, т.к. в данной задаче предполагается, что числаa
иb
имеют типdouble
. - В функции
max
находится максимальное значение из двух чиселa
иb
с помощью функцииget_res
. Затем вычисляется среднее арифметическое этих чисел с учетом коэффициентаc
. - В функции
main
задаются значения переменныхa
иb
, и выводится результат вызова функцииmax
. Значения переменных: a=1
b=12
c=3
(результат вычисленияabs2(a-b)
/(a-b)
)d[] = {1,-1}
(массив для хранения значений 1 и -1)max(a,b)
(результат вызова функцииmax
с аргументамиa
иb
)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д