0% found this document useful (0 votes)
6 views23 pages

Loops

Uploaded by

rabiaberil10i
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views23 pages

Loops

Uploaded by

rabiaberil10i
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Döngüler

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

1.1 while döngüsü


Bir ya da bir grup deyimin, belli bir koşul sağlandığı sürece tekrarlanması
için kullanılan bir denetim yapısıdır. Sözdizimi şöyledir:

Tanım 1.1.

1 while ( boolean )
deyim

Deyim sayısı birden çoksa, onları bir blok içine alırız:

Tanım 1.2.

while ( boolean )
{
3 deyimler
}
2 BÖLÜM 1. DÖNGÜLER

Şekil 1.1: while döngüsü


1.1. WHILE DÖNGÜSÜ 3

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 " ) ;
}

Aşağıdaki program 10! = 1 ∗ 2 ∗ 3 ∗ 4 ∗ 5 ∗ 6 ∗ 7 ∗ 8 ∗ 9 ∗ 10 çarpansal (faktöryel)


değerini bulur ve yazar. Döngü sayacı olan n en büyük değeri olan 10’dan
başlayarak, her adımda 1’er azalarak en küçük değeri olan 1 değerine kadar
iniyor.

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) ;

p r i n t f ( " %m s a y ı s ı n ı n f a k t o r y e l i %d d i r \n " , f a k t o r y e l (m) ) ;


return 0;
}

/∗ ∗
10 s a y ı s ı n ı n f a k t o r y e l i 3628800 d i r
∗/

1.1.1 while Döngüsünde break deyimi

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;
}

1.1.2 while Döngüsünde continue deyimi

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;
}

1.2 do . . . while . . . döngüsü


Bir mantıksal deyim sağlandığı sürece bir blok içindeki deyim(ler)in tekrar-
lanmasını sağlayan denetim yapısıdır. while... yapısından farkı, mantıksal
denetimi blok sonunda yapıyor olmasıdır. Dolayısıyla, bu yapıda, bloktaki
deyimler en az bir kez çalışır. Sonra denetim olur. Mantıksal-deyim sağlanı-
yorsa, program akışı döngü başına döner. Bu eylem, mantıksal-deyim false
olana kadar devam eder. Sonsuz döngüden sakınmak için, sonlu adımda
mantıksal-deyimin false değer alması gerekir.
İşlenecek deyim tek ise sözdizimi şöyledir:

Tanım 1.3.

do
deyim
while ( boolean ) ;

Bu demektir ki, tek deyim { } bloku içine yazılmayabilir.


İşlenecek deyim birden çok ise, sözdizimi şöyledir:

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
∗/

Genel olarak, while yapısı do-while yapısına dönüştürülebilir. Tabii,


bunun tersi de yapılabilir; yani do-while yapısı while yapısına dönüştürüle-
bilir. Örnek 1.6 programı Örnek 1.5 programına denktir. do-while yapısında
deyimlerin en az bir kez çalıştığına dikkat edilmelidir.

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, do-while döngüsü ile 100e kadar tamsayıların toplamını


buluyor.

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, 100 den geriye doğru 9 ar 9 ar sayıyor.

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
∗/

1.3 For döngüsü


İstenen deyim(ler)in kaç kez tekrarlanacağı biliniyorsa, for döngü yapısını
kullanmak kolaydır. Tekrarlanacak deyim tek ise sözdizimi şöyledir:

Tanım 1.5.

f o r ( sayacın_ilk_değeri ; tekrarlama_koşulu ; sayaç_değerinin_değişimi )


2 deyim

Tekrarlanacak deyimler birden çoksa, onlar bir blok içine alınır; sözdizimi
şöyle olur:

Tanım 1.6.

f o r ( sayacın_ilk_değeri ; tekrarlama_koşulu ; sayaç_değerinin_değişimi )


{
3 deyimler
}

Program 1.9, 1’den 100’e kadar tamsayıları topluyor.

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 ++)

ifadesindeki i sayaç değişkenidir; int tipindendir. Döngünün nereden baş-


layıp nerede biteceğini belirler. Sayacın ilk değeri, ona başlangıç değerini
atayan bir C deyimi ile yapılır. int i = 1 deyimi, i sayacına ilk değer
olarak 1 sayısını atayan bir deyimdir. Sayaç istenilen sayıdan başlatılabilir.
Artarak ya da azalarak son değere kadar gider.
i <= 100 ifadesi, for döngüsünün tekrarlama koşuludur; bir mantık-
sal deyimdir. Döngünün her adımında i <= 100 olup olmadığı denetlenir.
Deyim sağlanıyorsa; yani true değerini alıyorsa, döngü sonraki adımı atar.
Deyim f alse değerini alınca for döngüsü biter.
i + + ifadesi sayacın değerini her adımda 1 artırır. Tabii, i + + yerine
i = i+1 deyimi de yazılabilir. Ama birinci yazılış CPU’da daha hızlı çalışır.
Sayaç bazen başka biçimde artar ya da azalabilir. Örneğin, sayacın 5 er 5 er
artması isteniyorsa, i = i+5 yazılır. Sayacın 2 şer 2 şer azalması isteniyorsa,
i = i − 2 yazılır. Sayaç azalarak gidecekse, sayacın başlangıç değeri bitiş
değerinden büyük olmalıdır. Özetle, Sayacın ilk değerinden son değerine
gidişini sağlayan herhangi bir C deyimi geçerlidir.
Tanım 1.6’de ( ) parantezi içindeki deyimlerden birisi, ikisi ya da her
üçü de boş olabilir. Boş deyimler ötekilerden ve birbirlerinden noktalı vir-
gül (;) ile ayrılır. Boş deyimin daima true değerine sahip olduğu varsayılır.
Dolayısıyla, değişim kuralı boş olduğunda sonsuz döngüye girilir. Örneğin
f or(; ; ) deyimi sonsuz döngüdür. Bu döngü ancak break deyimi ile kesile-
bilir. Bu deyim while(true) deyimine denktir.

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, 100’den geriye doğru 3 er sayarak, çıkan sayıları top-


luyor.

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
∗/

Örnek 1.12, 100’den 0’a kadar tamsayıları 5’er atlayarak topluyor.


1.11 örneğinin aksine, sayaç 100’den başlıyor, 5’şer azalarak 0’a gidiyor.

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

mx = MAX( index , count ) ;


mn = MIN( index , count ) ;
p r i n t f ( " max = %d ve min = %d\n " ,mx, mn) ;
17 }
}

/∗ ∗
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.

Döngü bloku içinde tanımlanan değişkenler, döngünün yerel değiş-


kenleridir. Onlara döngü bloku dışındaki deyimler erişemez. Ama, döngü
bloku dışındaki bir kapsanma alanındaki değişkenlere, o kapsanma alanına
erişebilen bütün deyimler erişebilir.
Yerel değişkenlere ilk değerleri atanmalıdır; aksi halde bazı derleyi-
ciler bellek adresinde bulduğu değeri kullanır; koşma hatası doğar. Bazı
derleyiciler ise, değişken adı ’xxx’ iken;
[ Error ] ’ xxx ’ u n d e c l a r e d ( f i r s t u s e i n t h i s f u n c t i o n )

derleme hatası verir.


Program 1.13’da son printf() metodu toplam adlı yerel değişkene eri-
şemiyor; derleme harası oluşuyor.

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 ) ;
}

9 20 D: \ Dev−CppPrj \01 week \ hata . c [ E r r o r ] ’ toplam ’ u n d e c l a r e d ( f i r s t


use in t h i s f u n c t i o n )
1.3. FOR DÖNGÜSÜ 11

Program 1.14 programı 1’den 10’a kadar tamsayıları toplamak için


yazılmıştır. Program 1.13’nin biraz değişik biçimidir. printf() fonksiyonu
döngü bloku içine alınmıştır. Program gcc derleyicisinde derleme hatası
vermiyor. Ama toplam değişkenine ilk değer atanmadığından, koşma hatası
doğuyor. Bu hata önceden görülp düzeltilmezse, uygulamada çok büyük
yanlışlar doğurabilir.

Uyarı 1.2. Unutmayınız, derleme hataları yalnız programı yazana zarar


verebilir; çünkü çalışmaz. Ama koşma hataları, onu kullanan herkese zarar
verebilir.

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
∗/

for döngüsünde sayaç değişkenleri int tipinden seçilmek zorunda de-


ğildir. İyi sıralanmış (complete ordered) her veri tipinden sayaç değişkeni
seçilebilir. char kümesi iyi sıralanmış bir veri tipidir. Dolayısyla sayaçlar
char tipi olabilir.
Program 1.15 programı, char veri tipinin for yapısında sayaç ola-
rak kullanılabileceğini gösteriyor. Bu döngü alfabenin küçük harflerini birer
boşluk ara vererek tek satıra yazar.

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 ;

7 p r i n t f ( " Kaç t e r i m i s t i y o r s u n u z ? \n " ) ;


s c a n f ( "%d " ,&n ) ;

p r i n t f ( " Fibonacci s e r i s i n i n i l k %d t e r i m i : −\n " , n ) ;

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 ∗/

1.4 for Döngüsü İfadeleri


Normal halde bir for döngüsünde (birinci ; ikinci ; üçüncü ) ifade diye ad-
landırılan üç ifade vardır. İfadeler (;) ile birbirlerinden ayrılır. Birinci ifade
sayacın başlangıç değerini belirler. İkinci ifade döngünün ne zaman sona
ereceğini belirler. O nedenle , ona döngü koşulu denilir. Üçüncü ifade saya-
cın nasıl artacağını ya da azalacağını belirtir. Sayaç artarak ya da azalarak
döngü koşulunun dışına çıkınca döngü sona erer.
1.4. FOR DÖNGÜSÜ İFADELERI 13

Bunların varlığı ve kullanımlarıyla ilgili koşullar aşağıda özetlenmiş-


tir.
f o r ( s a y a c = b a ş l a n g ı ç ; döngü_koşulu ; s a y a c ı n _ d e ğ i ş i m i )

Kural 1 : for döngüsünde birden çok koşul kullanılabilir

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

Kural 2 : for döngüsünde sayacın başlangıcı yazılmayabilir

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

Kural 3 : for döngüsünde sayacın tipi () içine yazılamaz

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 ( ) {

f o r ( i n t i =0; i <=10; i ++){


p r i n t f ( "%d " , i ) ;
7 }
14 BÖLÜM 1. DÖNGÜLER

/∗ ∗
Çıktı :
3 1 2 3 4

Kural 4 : for döngüsünde ikinci ifade birden çok koşul içerebilir


Program 1.20.
/∗ 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 ∗/
2 #i n c l u d e <s t d i o . h>
i n t main ( ) {

f o r ( i n t i =0; i <=10; i ++){


p r i n t f ( "%d " , i ) ;
7 }

/∗ ∗
Çıktı :
3 2 2 2

Kural 5 : Çoklu döngü koşulu


Program 1.21.
/∗ 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 ∗/
2 #i n c l u d e <s t d i o . h>
i n t main ( ) {
i n t i , j =2;

f o r ( i =0; j >=0, i <=5; i ++){


7 p r i n t f ( "%d " , i+j ) ;
j −−;
}
return 0;
}

/∗ ∗
Çıktı :
2 2 2 2 2 2

Kural 6 : for döngüsünde ikinci ifade olmayabilir


Program 1.22.
/∗ i k i n c i i f a d e o l m a 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 j ;

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

Kural 7 : ikinci ifade sayacın başlangıcını belirtebilir

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ü

Kural 8 : ikinci ifade sayacın artışını belirtebilir

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;

f o r ( ; i +=2, i <5 ; i ++){


7 p r i n t f ( "%d " , i ) ;
}
return 0;
}

/∗ ∗
Çıktı :
2

Kural 9 : Döngü koşulunun sıfır olması

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

Kural 10 : Döngü koşulunun sıfır olması


Program 1.26.

/∗
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

Kural 11 : üçüncü ifade birden çok artış içerebilir


Program 1.27.

/∗ 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;

f o r ( i =0 , j =0 ,k =0; i <=5, j <=4,k<=3; i ++,++j , k+=2){


p r i n t f ( "%d " , i+j+k ) ;
8 }

return 0;
}

/∗ ∗
Çıktı :
0 4

Kural 12 : üçüncü ifade birden çok artış içerebilir


Program 1.28.
1.4. FOR DÖNGÜSÜ İFADELERI 17

/∗ 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;

f o r ( i =0; i <=3;++i , i ++,++j ) {


7 p r i n t f ( "%d %d " , i , j ) ;
}
return 0;
}

/∗ ∗
Çıktı :
0 0 2 1

Kural 13 : üçüncü ifade olmayabilir

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

Kural 14 : Blok simgesi ne zaman gerekir?

Program 1.30.

/∗ Döngü blokunda t e k deyim v a r s a { } b l o k p r a n t e z i k u l l a n ı l m a 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 ( ) {
i n t i , j =0;

f o r ( i =0; i <=3;++i , i ++,++j )


7 p r i n t f ( "%d %d " , i , j ) ;
}

return 0;
}

/∗ ∗
Çıktı :
0 0 2 1
18 BÖLÜM 1. DÖNGÜLER

Kural 15 : Blok simgesi ne zaman gerekir?


Program 1.31.
/∗ Döngü blokunda t e k deyim v a r s a \{ \} b l o k p r a n t e z i
k u l l a n ı l m a 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 ( ) {
i n t x , y =5;
f o r ( x =0;x <3; x++)
i f ( y>=5)
7 p r i n t f ( " %d " , x ) ;
return 0;
}

1 /∗ ∗
Çıktı :
0 1 2

Kural 16 : Döngü bloku boş olabilir


Program 1.32.
/∗ Döngünün g ö v d e s i h i ç o l m a 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 <=10; i ++) ;


7 p r i n t f ( "%d " , i ) ;

return 0;
}

/∗ ∗
Çıktı :
11

Kural 17 : Döngüde { } parantezi blok işlevini görür.


Program 1.33.
/∗ Döngüde \{ \} p a r a n t e z i b l o k i ş l e v i n i g ö r ü 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 <=2; i ++){


7 i n t i =8;
p r i n t f ( "%d " , i ) ;

}
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 ) ;

2. Aşağıdaki döngü ne yapar?


f o r ( i n t n = 1 ; n < 10 ; n++ )
p r i n t f ( "%i " , n ) ;

3. Aşağıdaki döngü ne yapar?


f o r ( i n t n = 1 ; n >= 0 ; n−− )
p r i n t f ( "%i " , n ) ;

4. Aşağıdaki dört döngüyü karşılaştırınız. Herbirinin yaptığı işi ve ara-


larındaki farkı açıklayınız. Hangisi en kötü programcılık örneği sayıl-
malıdır?
5. f o r ( i n t n = 1 ; n <= 1 0 ; n++) {
p r i n t f ( "%d " , 2∗n ) ;
3 }

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 " ) ;
}

9. 1 + 2 + 3 + ... serisinin ilk 1000 teriminin toplamını bulan bir C


programı yazınız.

10. 20 + 21 + 22 + ... serisinin ilk 100 teriminin toplamını bulan bir C


programı yazınız.
20 BÖLÜM 1. DÖNGÜLER

11. 1! + 2! + 3! + ... serisinin ilk 10 teriminin toplamını bulan bir C


programı yazınız.
12. while döngüsü ile do-while döngüsü arasındaki fark nedir?
13. for döngüsü ne zaman kullanılabilir?
14. for döngüsünde sayaç hangi veri tip(ler)inden olabilir?
15. for döngüsünde sonsuz döngü ne zaman doğar?
16. while döngüsünde sonsuz döngü ne zaman doğar?
17. do-while döngüsünde sonsuz döngü ne zaman doğar?
18. Aşağıdaki for döngüsü ne yapar?
1 i n t N; f o r ( N = 3 ; N <= 3 6 ; N = N + 3 ) {
p r i n t f ( "%i " , N ) ;
}

19. Aşağıdaki for döngüsü ne yapar?


i n t N; f o r (N = 3 ; N <= 3 6 ; N++ ) {
2 i f ( N % 3 == 0 )
p r i n t f ( "%i " , N ) ;
}

20. Blok nedir? C dilinde blok nerelerde kullanılır?


21. 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 sayılarını
yazan bir for döngüsü yazınız.
22. 5 10 15 20 25 30 35 40 45 50 55 60 sayılarını yazan bir while döngüsü
yazınız.
23. 10 20 30 40 50 60 sayılarını yazan bir do-while döngüsü yazınız.
24. Örnek 1.34 programının çıktısı nedir?
Program 1.34.
1 #i n c l u d e <s t d i o . h>

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 }
}

2. 20’ye kadar sayıların küplerini hesaplayan Program 1.36’yi çözümle-


yiniz.
Program 1.36.
#i n c l u d e <s t d i o . h>

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 }
}

3. Sayakları, küçük ve büyük harfleri yazan Program 1.37’i çözümleyiniz.


Program 1.37.
#i n c l u d e <s t d i o . h>
main ( )
{
i n t i ; char c ;
5 p r i n t f ( " \nSAYILAR : \ n " ) ; i =48 ;
w h i l e ( i <58)
{
p r i n t f ( "%c " , ( c h a r ) i ) ;
i++ ;
10 }
i =65;
p r i n t f ( " \nBuyuk H a r f l e r : \ n " ) ;
w h i l e ( i <122)
p r i n t f ( "%c " , ( c h a r ) i ++) ;
15 }
22 BÖLÜM 1. DÖNGÜLER

/∗ ∗
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
∗/

4. Bütün ascii karakterlerini yazan Program 1.38’i çözümleyiniz.

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 }

5. Bütün ascii karakterlerini while döngüsü ile yazdırınız.

6. Bütün ascii karakterlerini do-while döngüsü ile yazdırınız.

7. 90 dereceye kadar 5’er artırarak deecelerin tanjantlarını bulunuz.


Çözüm:

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

8. Soru: while döngüsü ile do . . . while . . . döngüsü arasındaki fark ne-


dir?
Yanıt: while döngüsü önce mantıksal deyimi denetler. Doğru ise döngü
deyimlerini koşturur; değilse while yapısından sonraki deyime geçer.
do . . . while . . . döngüsünde ise, döngü deyim(ler)i en az bir kez koştu-
rulur; sonra mantıksal deyim denetlenir. false ise baştaki do deyimine
döner ve deyim(ler) tekrar eder; doğru ise tekrarlama biter; program
akışı do . . . while . . . yapısının dışına çıkar, yapıdan sonraki ilk deyime
geçer.

9. Program 1.13’yı düzeltiniz.

10. Program 1.14’yı düzeltiniz.

11. Bütün ascii karakterlerini while döngüsü ile yazdırınız.

12. Bütün ascii karakterlerini do-while döngüsü ile yazdırınız.

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
∗/

You might also like