Loops
Loops
1
Belirli bir iş birden çok kez tekrarlanacaksa, programda bu iş bir kez yazılır
ve döngü yapıları o deyim(ler)i istenildiği kadar tekrarlar. C dilinde bu işi
yapan üç ayrı yapı vardır:
1. while
2. do . . . while . . .
3. for
Tanım 1.1.
1 while ( boolean )
deyim
Tanım 1.2.
while ( boolean )
{
3 deyimler
}
2 BÖLÜM 1. DÖNGÜLER
boolean (mantıksal deyim) true (doğru) ise deyim ya da blok içindeki de-
yimler yürütülür. Sonra program akışı başladığı while deyimine döner ve
tekrar boolean mantıksal deyimini denetler. Mantıksal deyim doğru ise de-
yim ya da blok içindeki deyimler yeniden yürütülür. Bu döngü, mantıksal
deyim false (yanlış) değerini alana kadar yinelenir. Dolayısıyla, yinelenen
deyim(ler)in, mantıksal deyimin değerini sonlu sayıda yineleme sonunda
değiştirmesi gerekir. Aksi halde, sonsuz döngü dediğimiz olgu ortaya çıkar.
Bu durum olunca, döngü deyim(ler)i, kesintisiz devam eder. Program hatası
olan sonsuz döngü’den sakınmak gerekir.
Aşağıdaki döngü 1, 2, 3, 4, 5 sayılarını yazar:
Program 1.1.
1 #i n c l u d e <s t d i o . h>
#i n c l u d e < l o c a l e . h>
i n t main ( )
{
6 /∗ ∗
∗ sayı değişkeni
∗ int tipi bir değişkendir .
∗/
s e t l o c a l e (LC_ALL, " " ) ;
11 int sayi ; // Y a z ı l a c a k s a y ı l a r ı t u t a c a k d e ğ i ş k e n
sayi = 1; // d e ğ i ş k e n e v e r i l e n i l k d e ğ e r
w h i l e ( s a y i < 6) { // m a n t ı k s a l deyim
p r i n t f ( "%d " , s a y i ) ;
sayi = sayi + 1; // s a y ı y a 1 e k l e
16 }
p r i n t f ( " Son " ) ;
}
Program 1.2.
#i n c l u d e <s t d i o . h>
2 #i n c l u d e < l o c a l e . h>
i n t faktoryel ( i n t n) {
i n t fak ;
fak = 1;
7 w h i l e ( n >= 1 ) {
f a k ∗= n ;
n−−;
}
r e t u r n fak ;
4 BÖLÜM 1. DÖNGÜLER
12 }
i n t main ( ) {
i n t m;
p r i n t f ( " Hangi s a y ı n ı n f a k t o r y e l i n i i s t i y o r s u n u z= \n " ) ;
17 s c a n f ( "%d " , &m) ;
/∗ ∗
10 s a y ı s ı n ı n f a k t o r y e l i 3628800 d i r
∗/
Bazen while döngüsüne giren program akışını, döngü sona ermeden durdu-
rup, akışı döngüden sonraki ilk deyime götürmek gerekebilir. Bunun için
break; deyimi kullanılır. Program 1.3 bu işin nasıl yapıldığını gösteriyor.
Program 1.3.
2 #i n c l u d e <s t d i o . h>
i n t main ( )
{
int i ;
7
i = 0;
w h i l e ( i < 20 )
{
i ++;
12 i f ( i == 1 0 )
break ;
}
return 0;
}
Bazen while döngüsüne giren program akışını, döngünün belirli bir deyi-
minde durdurup, sonraki deyime geçmesini isteyebiliriz. Bunun için conti-
nue; deyimi kullanılır. Program 1.4 bu işin nasıl yapıldığını gösteriyor.
Program 1.4.
1.2. DO . . . WHILE . . . DÖNGÜSÜ 5
#i n c l u d e <s t d i o . h>
4 i n t main ( )
{
int i ;
i = 0;
9 w h i l e ( i < 20 )
{
i ++;
continue ;
p r i n t f ( " Hiç b i r i ş yapmaz ! \ n " ) ;
14 }
return 0;
}
Tanım 1.3.
do
deyim
while ( boolean ) ;
Tanım 1.4.
do {
2 deyimler
} while ( boolean ) ;
Bu demektir ki, birden çok deyim varsa, onlar mutlaka { } bloku içine
yazılır. Döngü, sondaki boolean false değerini alana kadar tekrarlanır.
Program 1.5 1’den 10’a kadar tamsayıları aynı satıra yazdırıyor.
6 BÖLÜM 1. DÖNGÜLER
Program 1.5.
#i n c l u d e <s t d i o . h>
2
i n t main ( ) {
int sayi = 1;
do {
p r i n t f ( "%d \ t " , s a y i ) ;
7 s a y i ++;
} w h i l e ( s a y i <= 1 0 ) ;
}
1 /∗ ∗
1 2 3 4 5 6 7 8 9 10
∗/
Program 1.6.
#i n c l u d e <s t d i o . h>
2
i n t main ( ) {
int sayi = 1;
w h i l e ( s a y i <= 1 0 ) {
p r i n t f ( "%d \ t " , s a y i ) ;
7 s a y i ++;
}
return 0;
}
Program 1.7.
#i n c l u d e <s t d i o . h>
main ( ) {
int n = 1;
5 i n t toplam = 0 ;
do {
toplam += n ;
n++;
10 } w h i l e ( n <= 1 0 0 ) ;
p r i n t f ( " 100 e kadar t a m s a y ı l a r ı n t o p l a m ı = %d \n " , toplam ) ;
}
1.3. FOR DÖNGÜSÜ 7
/∗ ∗
100 e kadar t a m s a y ı l a r ı n t o p l a m ı = 5050
3 ∗/
Program 1.8.
#i n c l u d e <s t d i o . h>
2
i n t main ( ) {
i n t sayi = 100;
w h i l e ( s a y i >= 0 ) {
7 p r i n t f ( "%d \ t \n " , s a y i ) ;
s a y i = s a y i −9;
}
return 0;
/∗ ∗
100 91 82 73 64 55 46 37 28 19 10 1
∗/
Tanım 1.5.
Tekrarlanacak deyimler birden çoksa, onlar bir blok içine alınır; sözdizimi
şöyle olur:
Tanım 1.6.
Program 1.9.
8 BÖLÜM 1. DÖNGÜLER
1 #i n c l u d e <s t d i o . h>
main ( ) {
i n t i , toplam = 0 ;
6 f o r ( i = 1 ; i <= 1 0 0 ; i ++) {
toplam = toplam + i ;
}
p r i n t f ( " 100 e kadar t a m s a y ı l a r ı n t o p l a m ı = %d \n " , toplam ) ;
}
/∗ ∗
100 e kadar t a m s a y ı l a r ı n t o p l a m ı = 5050
∗/
Bu yapıyı açıklayalım:
f o r ( i n t i = 1 ; i <= 1 0 0 ; i ++)
Program 1.10.
#i n c l u d e <s t d i o . h>
1.3. FOR DÖNGÜSÜ 9
main ( ) {
4 i n t i , toplam = 0 ;
for (; ; ) {
toplam = toplam + i ;
p r i n t f ( "%d ye kadar t a m s a y ı l a r ı n t o p l a m ı = %d \n " , i , toplam ) ;
9 }
}
/∗ ∗
Sonsuz döngü . . .
∗/
Program 1.11.
#i n c l u d e <s t d i o . h>
2
i n t main ( ) {
i n t sayi = 100;
i n t toplam = 0 ;
7 w h i l e ( s a y i >= 0 ) {
toplam = toplam + s a y i ;
s a y i = s a y i −3;
}
p r i n t f ( " Toplam = %i " , toplam ) ;
12 return 0;
}
/∗ ∗
2 Toplm = 1717
∗/
Program 1.12.
#i n c l u d e <s t d i o . h>
2
#d e f i n e START 0 /∗ döngü b a ş l a n g ı c ı ∗/
#d e f i n e ENDING 9 /∗ döngü sonu ∗/
#d e f i n e MAX(A, B) ( (A) >(B) ? (A) : ( B) ) /∗ Max macro d e f i n i t i o n ∗/
#d e f i n e MIN(A, B) ( (A) >(B) ? (B) : ( A) ) /∗ Min macro d e f i n i t i o n ∗/
7
main ( )
{
i n t index , mn, mx ;
i n t count = 5 ;
12
f o r ( i n d e x = START; i n d e x <= ENDING; i n d e x++) {
10 BÖLÜM 1. DÖNGÜLER
/∗ ∗
2 max = 5 ve min = 0
max = 5 ve min = 1
max = 5 ve min = 2
max = 5 ve min = 3
max = 5 ve min = 4
7 max = 5 ve min = 5
max = 6 ve min = 5
max = 7 ve min = 5
max = 8 ve min = 5
max = 9 ve min = 5
12 ∗/
Uyarı 1.1.
Program 1.13.
#i n c l u d e <s t d i o . h>
i n t main ( ) {
4 int i ;
f o r ( i =1; i >=10; i ++) {
i n t toplam ;
toplam = toplam +i
}
9 p r i n t f ( "%d \n " , toplam ) ;
}
Program 1.14.
#i n c l u d e <s t d i o . h>
i n t main ( ) {
4 int i ;
f o r ( i =1; i <=10; i ++) {
i n t toplam ;
toplam = toplam +i ;
i ++;
9 p r i n t f ( "%d \n " , toplam ) ;
}
}
/∗ ∗
0
∗/
Program 1.15.
#i n c l u d e <s t d i o . h>
2
i n t main ( ) {
c h a r ch = ’ a ’ ;
do {
p r i n t f ( "%c " , ch ) ;
7 ch++;
} w h i l e ( ch <= ’ z ’ ) ;
}
12 BÖLÜM 1. DÖNGÜLER
1 /∗ ∗
a b c d e f g h i j k l m n o p q r s t u v w x y z
∗/
Program 1.16.
#i n c l u d e <s t d i o . h>
2
i n t main ( )
{
i n t n , i l k = 0 , i k i n c i = 1 , sonraki , c ;
12 f o r ( c = 0 ; c < n ; c++ )
{
i f ( c <= 1 )
sonraki = c ;
else
17 {
sonraki = i l k + i k i n c i ;
ilk = ikinci ;
i k i n c i = sonraki ;
}
22 p r i n t f ( "%d\n " , sonraki ) ;
}
return 0;
}
/∗ ∗
Kaç t e r i m i s t i y o r s u n u z ?
5
i b o n a c c i s e r i s i n i n i l k %d t e r i m i :
5 0
1
1
2
3
10 ∗/
Program 1.17.
/∗ ( ) i ç i n d e i k i n c i i f a d e b i r d e n çok k o ş u l i ç e r e b i l i r ∗/
#i n c l u d e <s t d i o . h>
i n t main ( ) {
4 int i , j ,k;
f o r ( i =0 , j =2 ,k =1; i <=4; i ++){
p r i n t f ( "%d " , i+j+k ) ;
}
return 0;
9 }
1 /∗ ∗
Çıktı :
3 4 5 6 7
Program 1.18.
/∗ ( ) i ç i n d e b i r i n c i i f a d e y a z ı l m a y a b i l i r ∗/
2 #i n c l u d e <s t d i o . h>
v o i d main ( ) {
i n t i =1;
f o r ( ; i <=4; i ++){
7 p r i n t f ( "%d " , i ) ;
}
return 0;
}
/∗ ∗
Çıktı :
1 2 3 4
Program 1.19.
/∗ Bu program y a n l ı ş t ı r . s a y a c ı n v e r i t i p i ( ) i ç i n d e b e l i r t i l e m e z ∗/
2 #i n c l u d e <s t d i o . h>
i n t main ( ) {
/∗ ∗
Çıktı :
3 1 2 3 4
/∗ ∗
Çıktı :
3 2 2 2
/∗ ∗
Çıktı :
2 2 2 2 2 2
f o r ( j =0; ; j ++){
7 p r i n t f ( "%d " , j ) ;
i f ( j >=2)
break ;
}
12 return 0;
}
1.4. FOR DÖNGÜSÜ İFADELERI 15
/∗ ∗
2 Çıktı :
0 1 2
Program 1.23.
/∗ i k i n c i i f a d e s a y a c ı n b a ş l a n g ı c ı n ı b e l i r t e b i l i r ∗/
2 #i n c l u d e <s t d i o . h>
i n t main ( ) {
int i ;
f o r ( ; i =0 , i <=3 ; i ++){
7 p r i n t f ( "%d " , i ) ;
}
return 0;
}
/∗ ∗
Çıktı :
Sonsuz döngü
Program 1.24.
/∗ i k i n c i i f a d e s a y a c ı n a r t ı ş ı n ı b e l i r t e b i l i r ∗/
2 #i n c l u d e <s t d i o . h>
i n t main ( ) {
i n t i =0;
/∗ ∗
Çıktı :
2
Program 1.25.
/∗
2 i k i n c i i f a d e 0 dan f a r k l ı i s e döngü k o ş u l u doğru o l u r .
∗/
#i n c l u d e <s t d i o . h>
i n t main ( ) {
int i ;
7
16 BÖLÜM 1. DÖNGÜLER
f o r ( i =0;−5 ; i ++){
p r i n t f ( "%d " , i ) ;
i f ( i ==3)
break ;
12 }
return 0;
}
/∗ ∗
Çıktı :
0 1 2 3
/∗
2 i k i n c i i f a d e 0 i s e döngü h i ç b i r adım atmaz .
∗/
int i ;
f o r ( i =5;0 ; i ++){
7 p r i n t f ( "%d " , i ) ;
}
return 0;
}
/∗ ∗
Çıktı :
0 1 2 35
/∗ i k i n c i i f a d e b i r d e n çok a r t ı ş i ç e r e b i l i r ∗/
#i n c l u d e <s t d i o . h>
3 i n t main ( ) {
int i , j ,k;
return 0;
}
/∗ ∗
Çıktı :
0 4
/∗ i k i n c i i f a d e b i r d e n çok a r t ı ş i ç e r e b i l i r ∗/
2 #i n c l u d e <s t d i o . h>
v o i d main ( ) {
i n t i , j =0;
/∗ ∗
Çıktı :
0 0 2 1
Program 1.29.
/∗ Üçüncü i f a d e o l m y a b i l i r ∗/
2 #i n c l u d e <s t d i o . h>
i n t main ( ) {
int i ;
f o r ( i =0; i <=3; ) {
7 p r i n t f ( "%d " , i ++) ;
}
return 0;
}
/∗ ∗
Çıktı :
0 1 2 3
Program 1.30.
return 0;
}
/∗ ∗
Çıktı :
0 0 2 1
18 BÖLÜM 1. DÖNGÜLER
1 /∗ ∗
Çıktı :
0 1 2
return 0;
}
/∗ ∗
Çıktı :
11
}
p r i n t f ( "%d " , i ) ;
12
return 0;
}
1.5. SORULAR 19
1 /∗ ∗
Çıktı :
8 8 8 3
1.5 Sorular
1. Aşağıdaki döngü ne yapar?
f o r ( i n t n = 1 ; n <= 10 ; n++ )
2 p r i n t f ( "%i " , n ) ;
6. f o r ( i n t n = 2 ; n <= 2 0 ; n = n + 2 ) {
2 p r i n t f ( "%i " , n ) ;
}
7. f o r ( i n t n = 2 ; n <= 2 0 ; n++) {
2 i f ( n % 2 == 0 ) // n ç i f t mi?
p r i n t f ( "%i " , n ) ;
}
8. f o r ( i n t n = 1 ; n <= 1 ; n++) {
p r i n t f ( " 2 4 6 8 10 12 " ) ;
p r i n t f ( " 14 16 18 20 " ) ;
}
i n t main ( ) {
i n t N;
N = 1;
6 w h i l e (N <= 2 4 ) {
N = 2 ∗ N;
p r i n t f ( "%i " , N ) ;
}
}
1.6. ALIŞTIRMALAR 21
1.6 Alıştırmalar
1. 2’nin katlarını 65536 olana kadar yazdıran. Program 1.35’i çözümle-
yiniz.
Program 1.35.
#i n c l u d e <s t d i o . h>
main ( )
{
5 l o n g i n t toplam ;
toplam = 1 ;
w h i l e ( toplam <= 3 3 0 0 0 ) {
toplam += toplam ;
p r i n t f ( " Toplam = %l d \n " , toplam ) ;
10 }
}
main ( ) {
4 i n t n , kup ;
n = 0;
w h i l e ( n++ <20 ) {
kup = n∗n∗n ;
p r i n t f ( " %2d %5d \n " , n , kup ) ;
9 }
}
/∗ ∗
SAYILAR :
0123456789
Buyuk H a r f l e r :
5 ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \ ] ^ _‘ a b c d e f g h i j k l m n o p q r s t u v w x y
∗/
Program 1.38.
#i n c l u d e <s t d i o . h>
i n t main ( )
{
4 int i ;
f o r ( i = 0 ; i < 1 2 8 ; i ++)
{
p r i n t f ( "%d = %c \n " , i , i ) ;
}
9 }
Program 1.39.
1 #i n c l u d e <s t d i o . h>
#i n c l u d e <math . h>
main ( ) {
f l o a t pi =3.141592654;
6 double aci =0.0;
do {
p r i n t f ( " a c i=%f \ t t a n j a n t i=%f \n " , a c i , tan ( a c i ∗ p i / 1 8 0 . 0 ) ) ;
a c i +=5.0;
11 } w h i l e ( a c i <=90) ;
}
/∗ ∗
a c i =0.000000 t a n j a n t i =0.000000
3 a c i =5.000000 t a n j a n t i =0.087489
a c i =10.000000 t a n j a n t i =0.176327
...
a c i =80.000000 t a n j a n t i =5.671283
a c i =85.000000 t a n j a n t i =11.430058
8 a c i =90.000000 t a n j a n t i = −22877332.428856
∗/
1.6. ALIŞTIRMALAR 23
13. Kullanıcının gireceği 100’ den küçük bir tamsayıdan küçük olan ve 3
sayağı içeren bütün sayıları listeleyen bir C programı yazınız.
Çözüm :
Program 1.40.
1 #i n c l u d e <s t d i o . h>
i n t main ( ) {
int i ,n;
p r i n t f ( " 1 0 0 ’ den küçük b i r t a m s a y ı g i r i n i z : \n " ) ;
6 s c a n f ( "%d " ,&n ) ;
f o r ( i =1; i <=n ; i ++) {
i f ( ( i /10 == 3 ) | | ( i %10 == 3 ) )
p r i n t f ( "%d " , i ) ;
}
11 return 0;
}
/∗ ∗
1 0 0 ’ den küçük b i r t a m s a y ı g i r i n i z :
3 99
3 13 23 30 31 32 33 34 35 36 37 38 39 43 53 63
73 83 93
∗/