int i=5, j=7;
main(void)
{ ((i>j) ? i : j) = 9;
printf("%d %d",i,j); }
Cevap: Bu soru biraz detaylı bilgi gerektiren bir soru ve programla dilinden diline değişen cevaplara sahip. Ternary operator (üçlü operator) sentaksının bilinip bilinmediğini ölçen bir soru. C dilnde üçlü ?: operatörü koşullu ifadeler yazmakta kullanılır. Örneğin :
int a; int b; b=5; a = (b > 3) ? 1 : 2;
burada b 3′ten büyük olduğu için ilk değer yani 1 değeri a değişkenine atanacaktır. Sorumuzda önemli olan ifade
((i>j) ? i : j) = 9;
ifadesidir. Burada üçlü operator asignment yani atama operatörünün solunda yer almaktadır. İfadenin sentaks olarak doğru olabilmesi için üçlü operatörün çıktısının lvalue olması beklenir. C dilinin standart versiyonunda yukarıdaki üçlü operatörün çıktısı i > j yanlış olduğu için j değişkeninin değeridir yani 7 dir, değikenin kendisi değildir. 7 = 9 gibi bir ifade geçerli bir ifade olmadığından programımız derleme hatasından dolayı çalışmayacaktır. Daha önce de belirttiğim gibi bu sorunun cevabı tamamen üçlü operatörün programlama dilinde nasıl gerçeklendiğine bağlıdır. Örneğin aynı programı c++ dilinde değiştirmeden derleyip çalıştırırsanız 5 9 değerlerinin basıldığını göreceksiniz. Bu ayrımın sebebi c++’da üçlü operatörün dönüş değerinin değişkenin değeri değil kendisi olmasıdır, bu da geçerli bir lvalue olduğundan program beklenen çıktıyı verir. Yine GNU C eklentilerinde de c++’a benzer bir yaklaşım sergilenmiş olup program 5 9 çıktısını verir. Aşağıdaki linkten daha ayrıntılı bilgiye ulaşabilirsiniz :
http://tigcc.ticalc.org/doc/gnuexts.html#SEC70
İlgili Yazılar:
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 48 Aşağıdaki programın derlenip calıştırılması sonucu ne basılır? int i; main(void)...
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 36 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3(...
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43 Aşağıdaki programın derlenip çalıştırılmasında ne olur? int i,j; main(void) {...

0 Yorum.