#include <iostream>
using namespace std;
int main()
{
int a, b, c, max;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
a>b?(max=a, a=b, b=max):a;
b>c?(max=b, b=c, c=max):a;
a>b?(max=a, a=b, b=max):a;
cout<<a<<" "<<b<<" "<<c;
}
Это код, в котором вы можете ввести 3 случайных числа, и это приведет их в порядок. Однако я не понимаю эту часть:Невозможно понять выражение запятой
a>b?(max=a, a=b, b=max):a;
b>c?(max=b, b=c, c=max):a;
a>b?(max=a, a=b, b=max):a;
Как это работает и почему?
Скажем, a = 6
, b = 54
и c = 12
.
a> b? (Max = a, a = b, b = max): a; < - устанавливает максимум до 6, затем от a до 54, затем 54 = макс. затем сравнивает 6 - 54, что является ложным, и записывает (6) в качестве первого числа?
b> c? (Max = b, b = c, c = max): a; < - устанавливает максимальное значение до 54, b = 12, 12 = макс. затем сравнивает 54 к 12, что верно в нашем случае и записывает c = 12 как второе число?
a> b? (Max = a, a = b, b = max): a; < - устанавливает максимум до 6, a = 54, 54 = макс. затем сравнивает 6 - 54, что является ложным, и снова пишет 6, wtf?
Сама программа работает правильно. Я просто не понимаю, как работает алгоритм.
Это гротескный код. Лучше просто игнорировать его. –
"*' a> b? (Max = a, a = b, b = max): a; '<- устанавливает max до 6 *" Нет, он ничего не делает, потому что b> a .. . »тогда 54 = max *« Что? Как вы можете присвоить значение литералу? – ildjarn
Центральная идея: 'a> b? (Max = a, a = b, b = max): a;' ничего не делает, если 'a <= b' – damned