Döngü Problemleri. Aşağıdaki programın çıktısı nedir? continue yerine break yazılırsa çıktı ne olur? Neden? Program.. i n t main ( ) f o r ( i n t j =; j <=8; j++) 6 i f ( j ==) c o n t i n u e ; p r i n t f ( "%d ", j ) ; \ begin l s t l i s t i n g 6 \ begin l s t l i s t i n g 5 6 7 8 break y a z ı l ı r s \end p r g l i s t i n g \ noindent 6 \ item Aşağıdaki programın ç ı k t ı s ı n e d i r? \emph c o n t i n u e y e r i n e \emph b r e a k y a z ı l ı r s a ç ı k t ı ne o l u r? Neden?
BÖLÜM. DÖNGÜ PROBLEMLERI \ begin prg \ l a b e l f o r \end prg \ begin l s t l i s t i n g 6 i n t main ( ) f o r ( i n t j =; j <=8; j++) i f ( j ==) c o n t i n u e ; p r i n t f ( "%d ", j ) ; 6 \ begin l s t l i s t i n g \ begin l s t l i s t i n g 5 9 8 6 5 break y a z ı l ı r s 9 8 \end p r g l i s t i n g 56 \ noindent 6 \ item 66 Aşağıdaki programın ç ı k t ı s ı n e d i r? Hangi kod h i ç ç a l ı ş m a z. Neden? \emph c a s e i f a d e l e r i doğru mudur? D e ğ i l s e o n l a r ı g e r ç e k c a s e i f a d e l e r i h a l i n e g e t i r i n i z. \ begin prg \ l a b e l prb : f o r \end prg \ begin l s t l i s t i n g 7 main. c döngüler Created by Timur Karacay on 7/ / 5. Copyright ( c ) 5 Timur Karacay. A l l r i g h t s r e s e r v e d. 76 8 i n t main ( ) 86 i n t i =, k = ; f l o a t j = ; i n t sayac = 5 ; p r i n t f ( " Case : \ n " ) ;
9 96 6 f o r ( i =; i < sayac ; i ++) p r i n t f ( " Case : \ n " ) ; f o r ( j =5.5; j > ; j ) p r i n t f ( "%f \n ", j ) ; p r i n t f ( " Case : \ n " ) ; f o r ( i =; ( i < 5 && i >=) ; i ++) p r i n t f ( " Case : \ n " ) ; f o r ( i =; ( i!= 5) ; i ++) p r i n t f ( " Case 5 : \ n " ) ; / Blank loop f o r ( i =; i < sayac ; i ++) ; p r i n t f ( " Case 6 : \ n " ) ; f o r ( i =, k=; ( i < 5 && k < ) ; i ++, k++) 6 p r i n t f ( " Case 7 : \ n " ) ; i =5; f o r ( ; ; i ++) \ begin l s t l i s t i n g \ begin l s t l i s t i n g 6 Case : Case : 5. 5. 5 6. 5. 5. 5. 5 Case : Case :
BÖLÜM. DÖNGÜ PROBLEMLERI 6 Case5 : 5 Case6 : Case7 : 56 \end l i s t l i s t i n g 6 \emphçözüm : 66 \ begin prg \ l a b e l func : f \end prg \ begin l s t l i s t i n g i n t main ( ) i n t i =, k =, sayac ; 7 f l o a t j = ; p r i n t f ( " S e ç i n i z :,,,, 5, 6, 7 > " ) ; s c a n f ( "%d ", &sayac ) ; 76 s w i t c h ( sayac ) c a s e : f o r ( i =; i < sayac ; i ++) 8 c a s e : f o r ( j =5.5; j > ; j ) p r i n t f ( "%f \n ", j ) ; 86 c a s e : f o r ( i =; ( i < 5 && i >=) ; i ++) 9 c a s e : f o r ( i =; ( i!= 5) ; i ++) 96 c a s e 5 : / Blank loop f o r ( i =; i < sayac ; i ++) ; c a s e 6 : f o r ( i =, k=; ( i < 5 && k < ) ; i ++, k++)
5 6 c a s e 7 : i =5; f o r ( ; ; i ++) S e ç i n i z :,,,, 5, 6, 7 > 5. Aşağıdaki programdaki yanlışı düzeltip, programı çalışır hale getiriniz. Program.. i n t main ( ) f o r ( i =; i < 5 ; i ++) f o r ( j =; j<=i ; j++) 9 p r i n t f ( "%c ", @) ; Çözüm: Program.. i n t main ( ) i n t i, j ; c h a r ch = @ ;
6 BÖLÜM. DÖNGÜ PROBLEMLERI 7 f o r ( i =; i < 5 ; i ++) f o r ( j =; j<=i ; j++) p r i n t f ( "%c ", ch ) ; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @. Aşağıdaki program ne yapar? Program.. i n t main ( ) i n t j ; f o r ( ; ; ) 7 p r i n t f ( "%d ", j ) ; Çözüm: for (; ;) ifadesinde döndüyü durduran bir deyim olmadığı için sonsuz kez &j adresindeki değeri yazar.. Aşağıdaki programın çıktısı nedir? case içeren ifadeler gerçek case işlevini görüyor mu? Görmüyorsa, onları gerçek case ifadeleri haline getiriniz. Program.5. main. c donguler Created by Timur Karacay on 7/ / 5. Copyright ( c ) 5 Timur Karacay. A l l r i g h t s r e s e r v e d. 9
7 i n t main ( ) i n t i = ; i n t sayac = 5 ; p r i n t f ( " c a s e : \ n " ) ; 9 w h i l e ( i <sayac ) ; p r i n t f ( " c a s e : \ n " ) ; i =; w h i l e ( ) ; 9 p r i n t f ( " c a s e : \ n " ) ; i =; w h i l e ( i ++<5) ; p r i n t f ( " c a s e : \ n " ) ; i =; 9 w h i l e ( i < 5 && i >=) ; Case : 7 Case : Case : 5 7 Case : Program.6.
8 BÖLÜM. DÖNGÜ PROBLEMLERI main. c donguler 5 Created by Timur Karacay on 7/ / 5. Copyright ( c ) 5 Timur Karacay. A l l r i g h t s r e s e r v e d. i n t main ( ) i n t i = ; 5 i n t sayac = 5, s e c ; p r i n t f ( " S e ç i n i z :,,,, 5 > " ) ; s c a n f ( "%d ", &s e c ) ; s w i t c h ( s e c ) c a s e : w h i l e ( i <sayac ) ; 5 b r e a k ; c a s e : i =; w h i l e ( ) ; b r e a k ; 5 c a s e : i =; w h i l e ( i ++<5) ; b r e a k ; c a s e : i =; 5 w h i l e ( i < 5 && i >=) ; b r e a k ; 5 S e ç i n i z :,,,, 5 >
9 5. Aşağıdaki program ne yapar? Varsa yanlışı düzeltiniz Program.7. i n t main ( ) 6 i n t i, sayac = 5 ; p r i n t f ( "%d \n ", i ) ; w h i l e ( i <sayac ) ; Çözüm: i değişkenine değer atanmadığı için, &i adresindeki çöp değere bakar. 5 ten küçükse onu sonsuz kez yazar. <=5 ise bir kez yazar. Bunun teri de olabilir. Programı düzeltmek için i değişkenine bir değer atanmalıdır. Program.8. i n t main ( ) 6 i n t i =, sayac = 5 ; p r i n t f ( "%d \n ", i ) ; w h i l e ( i <sayac ) ; 6 6. Program.7 deck do-while yapısını while yapısına dönüştürünüz. Program.9.
BÖLÜM. DÖNGÜ PROBLEMLERI i n t main ( ) i n t i =, sayac = 5 ; 8 w h i l e ( i <sayac ) p r i n t f ( "%d \n ", i ) ; 6 7. (a) Program. ın çıktısı nedir? Hangi deyim hiç işlemez? Neden? (b) Programı switch-case yapısına dönüştürünüz. Döüşümden sonra case için girilirse program ne yapar (c) Her case içindeki while yapısını do-while yapısına dönüştürünüz. Program.. i n t main ( ) i n t i = ; i n t sayac = 5 ; 8 p r i n t f ( " c a s e : \ n " ) ; w h i l e ( i <sayac ) p r i n t f ( " c a s e : \ n " ) ; i =; w h i l e ( ) 8 p r i n t f ( " c a s e : \ n " ) ; i =; w h i l e ( i ++<5)
p r i n t f ( " c a s e : \ n " ) ; i =; 8 w h i l e ( i < 5 && i >=) Çözüm ( a ) : Programın ç ı k t ı s ı : Case : 6 Case : Case : 6 5 Case : Bu programda 7. s a t ı r d a k i p r i n t f ( "\%d\n ", i ) deyimi h i ç ç a l ı ş m a z ; çünkü w h i l e ( ) \emph f a l s e değer a l d ı ğ ı i ç i n program a k ı ş ı bu bloka girmez. Çözüm (b): Program.. i n t main ( ) i n t i = ; i n t sayac = 5, s e c ; p r i n t f ( " S e ç i n i z :,,, > " ) ; 9 s c a n f ( "%d ",& s e c ) ; s w i t c h ( s e c ) c a s e : w h i l e ( ) ; b r e a k ;
BÖLÜM. DÖNGÜ PROBLEMLERI 9 c a s e : i =; w h i l e ( ) ; b r e a k ; c a s e : 9 i =; w h i l e ( i++ < 5) ; c a s e : i =; b r e a k ; 9 w h i l e ( i < 5 && i >=) ; b r e a k ; S e ç i n i z :,,, > c a s e olduğunda \emph break deyimi program a k ı ş ı n ı switch c a s e y a p ı s ı d ı ş ı n a ç ı k a r ı r. O nedenle program h i ç b i r ç ı k t ı vermez. Çözüm (b): S e ç i n i z :,,, > i = y a z ı l d ı k t a n sonra \emph w h i l e ( )== f a l s e olduğu i ç i n döngü k e s i l i r. Sonra g e l e n \emph b r e a k deyimi program a k ı ş ı n ı \emph s w i t c h c a s e y a p ı s ı d ı ş ı n a ç ı k a r ı r. O nedenle program h i ç b i r ç ı k t ı vermez. 8. Aşağıdaki çıktıyı veren bir C programı yazınız. Çözüm :
Program.. i n t main ( ) 5 i n t i, j, k=; f o r ( i =; i <=; i ++) f o r ( j =; j<=i+k ; j++) i f ( j %==) p r i n t f ( " A" ) ; e l s e p r i n t f ( " " ) ; 5 p r i n t f ( " \n " ) ;