Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43

Aşağıdaki programın derlenip çalıştırılmasında ne olur?

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:

  1. 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...
  2. 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...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41 Aşağıdaki programın çalışması sonucu ekrana ne basılır? int n=5, t,...
  4. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...
  5. 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;...

Fikrin geldiyse buraya yaz


[ Ctrl + Enter ]