1
Döngü Problemleri
1. Aşağıdaki programın çıktısı nedir? continue yerine break yazılırsa çıktı ne olur? Neden?
Program 1.1.
1 #i n c l u d e < s t d i o . h>
i n t main ( ) {
f o r (i n t j =0; j <=8; j ++)
6 {
i f ( j ==3) {
c o n t i n u e; }
11 p r i n t f ("%d ", j ) ; }
r e t u r n 0 ; }
\ b e g i n { l s t l i s t i n g }
16 \ b e g i n { l s t l i s t i n g } /∗∗
0 1 2 4 5 6 7 8 b r e a k y a z ı l ı r s 0 1 2
21 ∗/
\ end { p r g l i s t i n g }
\ n o i n d e n t
26
\ i t e m
A ş a ğ ı d a k i p r o g r a m ı 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 ?
31
\ b e g i n { p r g } \l a b e l{ f o r 2 } \ end { p r g }
\ b e g i n { l s t l i s t i n g }
#i n c l u d e < s t d i o . h>
36 i n t main ( ) {
f o r (i n t j =0; j <=8; j ++) {
i f ( j ==3)
41 {
c o n t i n u e; }
p r i n t f ("%d ", j ) ; }
46 r e t u r n 0 ;
}
\ b e g i n { l s t l i s t i n g }
\ b e g i n { l s t l i s t i n g } /∗∗
51 10 9 8 6 5 4 3 2 1 0
b r e a k y a z ı l ı r s
10 9 8
∗/
\ end { p r g l i s t i n g }
56 \ n o i n d e n t
61 \ i t e m
A ş a ğ ı d a k i p r o g r a m ı 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 ğr u 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 .
66
\ b e g i n { p r g } \l a b e l{ prb2 : f o r 3 } \ end { p r g }
\ b e g i n { l s t l i s t i n g } //
71 // main . c // d ö n g ü l e r //
// C r e a t e d by Timur Karacay on 0 7 / 0 3 / 1 5 .
// C o p y r i g h t ( c ) 2015 Timur Karacay . A l l r i g h t s r e s e r v e d .
76 //
#i n c l u d e < s t d i o . h>
81 i n t main ( ) {
i n t i = 0 , k = 0 ; f l o a t j = 0 ; i n t s a y a c = 5 ;
86
p r i n t f (" Case 1 : \ n ") ;
f o r ( i =0; i < s a y a c ; i ++) { p r i n t f ("%d\n ", i ) ; }
91
p r i n t f (" Case 2 : \ n ") ; f o r ( j = 5 . 5 ; j > 0 ; j−−) {
p r i n t f ("%f \n ", j ) ; }
96
p r i n t f (" Case 3 : \ n ") ;
f o r ( i =2; ( i < 5 && i >=2) ; i ++) { p r i n t f ("%d\n ", i ) ;
}
101
p r i n t f (" Case 4 : \ n ") ; f o r ( i =0; ( i != 5 ) ; i ++) {
p r i n t f ("%d\n ", i ) ; }
106
p r i n t f (" Case 5 : \ n ") ; /∗ Blank loop ∗/
f o r ( i =0; i < s a y a c ; i ++) ;
111 p r i n t f (" Case 6 : \ n ") ;
f o r ( i =0 , k =0; ( i < 5 && k < 3 ) ; i ++, k++) { p r i n t f ("%d\n ", i ) ;
}
116 p r i n t f (" Case 7 : \ n ") ; i =5;
f o r ( ; 0 ; i ++) { p r i n t f ("%d\n ", i ) ; }
121
r e t u r n 0 ; }
\ b e g i n { l s t l i s t i n g }
\ b e g i n { l s t l i s t i n g }
126 /∗∗
Case1 : 0 1 2
131 3 4 Case2 : 5 . 5 0 0 0 0 0 4 . 5 0 0 0 0 0
136 3 . 5 0 0 0 0 0 2 . 5 0 0 0 0 0 1 . 5 0 0 0 0 0 0 . 5 0 0 0 0 0 Case3 :
141 2 3 4 Case4 : 0
146 1 2 3 4 Case5 :
151 Case6 : 0 1 2 Case7 :
156 ∗/
\ end { l i s t l i s t i n g }
161 \emph{Çözüm : }
\ b e g i n { p r g } \l a b e l{ f u n c : f 3 } \ end { p r g }
\ b e g i n { l s t l i s t i n g }
#i n c l u d e < s t d i o . h>
166
i n t main ( ) {
i n t i = 0 , k = 0 , s a y a c ;
171 f l o a t j = 0 ;
p r i n t f (" S e ç i n i z : 1 , 2 , 3 , 4 , 5 , 6 , 7 > ") ; s c a n f ("%d " , &s a y a c ) ;
176 s w i t c h( s a y a c ) {
c a s e 1 :
f o r ( i =0; i < s a y a c ; i ++) { p r i n t f ("%d\n ", i ) ;
181 }
c a s e 2 :
f o r ( j = 5 . 5 ; j > 0 ; j−−) { p r i n t f ("%f \n ", j ) ;
186 }
c a s e 3 :
f o r ( i =2; ( i < 5 && i >=2) ; i ++) { p r i n t f ("%d\n ", i ) ;
191 }
c a s e 4 :
f o r ( i =0; ( i != 5 ) ; i ++) { p r i n t f ("%d\n ", i ) ;
196 }
c a s e 5 :
/∗ Blank loop ∗/
f o r ( i =0; i < s a y a c ; i ++) ;
201
c a s e 6 :
f o r ( i =0 , k =0; ( i < 5 && k < 3 ) ; i ++, k++) {
p r i n t f ("%d\n ", i ) ; }
206
c a s e 7 : i =5;
f o r ( ; 0 ; i ++) { p r i n t f ("%d\n ", i ) ;
211 }
}
r e t u r n 0 ; }
/∗∗
S e ç i n i z : 1 , 2 , 3 , 4 , 5 , 6 , 7 > 4 0
1
5 2 3 4 0 1
10 2
∗/
2. Aşağıdaki programdaki yanlışı düzeltip, programı çalışır hale getiri- niz.
Program 1.2.
#i n c l u d e < s t d i o . h>
4 i n t main ( ) {
f o r ( i =0; i < 5 ; i ++) {
f o r ( j =0; j<=i ; j ++) {
9 p r i n t f ("%c " , @) ; }
}
r e t u r n 0 ; }
Çözüm:
Program 1.3.
#i n c l u d e < s t d i o . h>
2
i n t main ( ) { i n t i , j ; c h a r ch = ’@ ’;
7
f o r ( i =0; i < 5 ; i ++) {
f o r ( j =0; j<=i ; j ++) {
12 p r i n t f ("%c " , ch ) ; }
}
r e t u r n 0 ; }
/∗∗
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @
∗/
3. Aşağıdaki program ne yapar?
Program 1.4.
#i n c l u d e < s t d i o . h>
2
i n t main ( ) { i n t j ; f o r ( ; ; )
7 {
p r i n t f ("%d " , j ) ; }
r e t u r n 0 ; }
Çözüm:
for (; ;) ifadesinde döndüyü durduran bir deyim olmadığı için sonsuz kez &j adresindeki değeri yazar.
4. 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 1.5.
//
// main . c // d o n g u l e r
4 //
// C r e a t e d by Timur Karacay on 0 7 / 0 3 / 1 5 .
// C o p y r i g h t ( c ) 2015 Timur Karacay . A l l r i g h t s r e s e r v e d . //
9 #i n c l u d e < s t d i o . h>
i n t main ( ) {
14 i n t i = 0 ;
i n t s a y a c = 5 ;
p r i n t f (" c a s e 1 : \ n ") ;
do {
19 p r i n t f ("%d\n ", i ) ; i ++;
} w h i l e ( i <s a y a c ) ;
p r i n t f (" c a s e 2 : \ n ") ;
24 i =20;
do {
p r i n t f ("%d\n ", i ) ; i ++;
} w h i l e ( 0 ) ;
29
p r i n t f (" c a s e 3 : \ n ") ; i =0;
do {
p r i n t f ("%d\n ", i ) ;
34 } w h i l e ( i ++<5) ;
p r i n t f (" c a s e 4 : \ n ") ; i =3;
do {
39 p r i n t f ("%d\n ", i ) ; i ++;
} w h i l e ( i < 5 && i >=2) ; r e t u r n 0 ;
}
/∗∗
2 Case1 : 0 1 2 3
7 4 Case2 : 20 Case3 : 0
12 1 2 3 4 5
17 Case4 : 3 4
∗/
Program 1.6.
//
// main . c // d o n g u l e r //
5 // C r e a t e d by Timur Karacay on 0 7 / 0 3 / 1 5 .
// C o p y r i g h t ( c ) 2015 Timur Karacay . A l l r i g h t s r e s e r v e d . //
#i n c l u d e < s t d i o . h>
10
i n t main ( ) {
i n t i = 0 ;
15 i n t s a y a c = 5 , s e c ;
p r i n t f (" S e ç i n i z : 1 , 2 , 3 , 4 , 5 > ") ; s c a n f ("%d " , &s e c ) ;
s w i t c h( s e c ) {
20 c a s e 1 :
do {
p r i n t f ("%d\n ", i ) ; i ++;
} w h i l e ( i <s a y a c ) ;
25 b r e a k;
c a s e 2 : i =20;
do {
30 p r i n t f ("%d\n ", i ) ; i ++;
} w h i l e ( 0 ) ;
b r e a k;
35 c a s e 3 :
i =0;
do {
p r i n t f ("%d\n ", i ) ; } w h i l e ( i ++<5) ;
40 b r e a k;
c a s e 4 : i =3;
do {
45 p r i n t f ("%d\n ", i ) ; i ++;
} w h i l e ( i < 5 && i >=2) ; b r e a k; r e t u r n 0 ;
50 }
}
/∗∗
S e ç i n i z : 1 , 2 , 3 , 4 , 5 > 2 20
4 ∗/
5. Aşağıdaki program ne yapar? Varsa yanlışı düzeltiniz Program 1.7.
1 #i n c l u d e < s t d i o . h>
i n t main ( ) {
6 i n t i , s a y a c = 5 ;
do {
p r i n t f ("%d \n ", i ) ; i ++;
11 } w h i l e ( i <s a y a c ) ;
r e t u r n 0 ; }
Çö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 atan- malıdır.
Program 1.8.
1 #i n c l u d e < s t d i o . h>
i n t main ( ) {
6 i n t i =0 , s a y a c = 5 ;
do {
p r i n t f ("%d \n ", i ) ; i ++;
11 } w h i l e ( i <s a y a c ) ;
r e t u r n 0 ; }
1 /∗∗
0 1 2 3
6 4
∗/
6. Program 1.7’deck do-while yapısını while yapısına dönüştürünüz.
Program 1.9.
#i n c l u d e < s t d i o . h>
3
i n t main ( ) {
i n t i =0 , s a y a c = 5 ;
8 w h i l e ( i <s a y a c ) {
p r i n t f ("%d \n ", i ) ; i ++;
}
13 r e t u r n 0 ;
}
1 /∗∗
0 1 2 3
6 4
∗/
7. (a) Program 1.10’ı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 1 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 1.10.
#i n c l u d e < s t d i o . h>
3 i n t main ( ) {
i n t i = 0 ; i n t s a y a c = 5 ;
8 p r i n t f (" c a s e 1 : \ n ") ; w h i l e ( i <s a y a c ) {
p r i n t f ("%d\n ", i ) ; i ++;
}
13
p r i n t f (" c a s e 2 : \ n ") ; i =20;
w h i l e ( 0 ) {
p r i n t f ("%d\n ", i ) ;
18 i ++;
}
p r i n t f (" c a s e 3 : \ n ") ; i =0;
23 w h i l e ( i ++<5) { p r i n t f ("%d\n ", i ) ;
}
p r i n t f (" c a s e 4 : \ n ") ; i =3;
28 w h i l e ( i < 5 && i >=2) { p r i n t f ("%d\n ", i ) ; i ++;
}
33 r e t u r n 0 ;
}
1 /∗∗
Çözüm ( a ) :
Programın ç ı k t ı s ı : Case1 :
0
6 1 2 3 4 Case2 :
11 Case3 : 1 2 3 4
16 5 Case4 : 3 4
∗/
21 Bu programda 1 7 . s a t ı r d a k i p r i n t f ("\%d\n ", i ) d e y i m i h i ç ç a l ı ş m a z
; çünkü w h i l e( 0 ) \emph{f a l s e} d e ğ e r a l d ı ğ ı i ç i n program a k ı ş ı bu b l o k a g i r m e z .
Çözüm (b):
Program 1.11.
#i n c l u d e < s t d i o . h>
i n t main ( ) {
4
i n t i = 0 ;
i n t s a y a c = 5 , s e c ;
p r i n t f (" S e ç i n i z : 1 , 2 , 3 , 4 > ") ;
9 s c a n f ("%d " ,& s e c ) ; s w i t c h( s e c ) {
c a s e 2 :
14 do {
p r i n t f ("%d\n ", i ) ; i ++;
} w h i l e ( 0 ) ; b r e a k;
19
c a s e 1 : i =20;
do {
p r i n t f ("%d\n ", i ) ;
24 i ++;
} w h i l e ( 0 ) ; b r e a k;
c a s e 3 :
29 i =0;
do {
p r i n t f ("%d\n ", i ) ; } w h i l e ( i++ < 5 ) ;
34 c a s e 4 : i =3;
b r e a k;
do {
39 p r i n t f ("%d\n ", i ) ; i ++;
} w h i l e ( i < 5 && i >=2) ; b r e a k;
44 r e t u r n 0 ;
} }
/∗∗
S e ç i n i z : 1 , 2 , 3 , 4 > 1
4 c a s e 4 o l d u ğ u n d a \emph{ b r e a k } d e y i m i program a k ı ş ı n ı s w i t c h− c a s e y a p ı s ı d ı ş ı n a ç ı k a r ı r . O n e d e n l e program h i ç b i r ç ı k t ı vermez .
∗/
Çözüm (b):
S e ç i n i z : 1 , 2 , 3 , 4 > 1 20
i =20 y a z ı l d ı k t a n s o n r a \emph{w h i l e( 0 )== f a l s e} o l d u ğ u i ç i n döngü k e s i l i r . So nr a g e l e n \emph{b r e a k} d e y i m i 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 n e d e n l e program h i ç b i r ç ı k t ı vermez .
8. Aşağıdaki çıktıyı veren bir C programı yazınız.
1 ∗ ∗ ∗ ∗ ∗
∗ ∗ ∗ ∗
∗ ∗ ∗
∗ ∗∗
Çözüm 2:
Program 1.12.
#i n c l u d e < s t d i o . h>
i n t main ( ) {
5 i n t i , j , k =0;
f o r( i =1; i <=4; i ++) {
f o r( j =1; j<=i+k ; j ++)
10 {
i f( j %2==0)
p r i n t f (" A") ; e l s e
p r i n t f (" ∗ ") ;
15 }
p r i n t f (" \n ") ; }
}