Лекция: Тернарная операция

Этой операции также нет в других языках, и без неё можно обойтись. С её помощью в более компактном виде в некоторых случаях можно записать полную форму оператора if. Например, вместо if (k>9) R=100; else R=x*y; можно записать R=k>9? 100: x*y;.

Это единственная трёхместная операция, так как для неё требуется три операнда. Общий вид операции: выражение1? выражение2: выражение3.

Операция выполняется следующим образом: вычисляется выражение1; если оно истинно (любое ненулевое значение), то вычисляется выражение2, и всё выражение получает это значение; если выражение 1 ложно (нулевое значение), то вычисляется выражение3, и всё выражение получает это значение.

Эта операция не обязательно должна быть связана с присваиванием. Например, известно, что в cout можно записать выражение, а в нём эту операцию без дополнительного присваивания значения выражения. Например:

cout<<(x>0 && y>x? x*y: x+y); в зависимости от значений x и y выведут их произведение или сумму. Это равносильно

if (x>0 && y>x) cout<<(x*y);

else cout<<(x+y).

Не для любого оператора if можно записать тернарную операцию. Её можно использовать для замены только полной формы условного оператора. В одной и другой ветвях операции (после символов “?” и “:” ) можно использовать по одному выражению, то есть это соответствует такому оператору if, в котором в каждой ветви по одному оператору.

Эта операция, как и любая другая, в выражении не обязательно должна быть единственной. Аналогично, как и другие операции тернарную можно использовать с другой операцией. Допустимо, например, следующее присваивание: r=a+b*(x>y? x: y); которое вычисляет r= a+b*max(x, y);

Эта операция может быть вложенной. Например, вычисление r= min(x,y), если a>b иr=x*a+y*b в противном случае можно выполнить так:

r=a>b? (x<y? x: y): x*a+y*b;

еще рефераты
Еще работы по информатике