int i,j;
main(void)
{ for (;i<j<10; i++,j++) printf("*"); }
A)Sonsuz döngüye girip sürekli ‘*’ basar
B) 9 tane ‘*’ basar.
C) 45 tane ‘*’ basar.
D) Derleme hatası oluşacağından çalıştırılamaz
E) Çalışır ama hiç birşey basmaz.
CEVAP: Güzel bir operatör associativity sorusu. Associativity baskınlığı aynı olan operatörlerin sağdan sola mı soldan sağa mı hesaplanacağını belirtir. Burada döngü kontrol ifadesi olan
i<j<10
buna bir örnektir. < operatörünün hesaplanma yönü soldan sağadır. Yani yukarıdaki
i<j<10
ifadesinde öncelikle
i<j
hesaplanır. < operatörü mantıksal (logical) bir operatör olduğu için yanlış olduğu durumda 0 doğru olduğu durumda 1 döner. Soruda i ve j'ye değer atanmadığından dolayı ilk olarak 0 değerini alırlar. Bundan dolayı
i < j
ifadesi yanlış olur böylelikle 0 değeri döner.
i<j<10
ifadesi
0 < 10
olur ve döngüyü doğrular. i ve j değişkenleri döngünün her turunda eşit olacaklarından
i<j
ifadesi her zaman 0 döncektir. Böylelikle döngü sürekli dönecektir.
Doğru şıkkımız A.
İlgili Yazılar:
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? #include <stdio.h> int...
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41 Aşağıdaki programın çalışması sonucu ekrana ne basılır? int n=5, t,...
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...
- Ulusal Bilgisayar Olimpiyadı 2009 – Soru 49 Aşağıdaki programın derlenip calıştırılması sonucu ne basılır? int i=5, j=7;...

0 Yorum.