C Programlama Döngüler
C Programlama Döngüler
Döngüler : C Programlama Dilinde döngüler bir veya birden fazla işlem satırını programcı tarafından belirlenen sayılarda tekrarlı bir şekilde çalıştırmak için kullanılan ifadelerdir. C Programlama Dilinde, for, while ve do-while olmak üzere üç tip döngü vardır. Diğer programlama dillerinde olduğu gibi, bu deyimlerle istenildiği kadar iç-içe döngü yapısı kullanılabilir.
for Döngüsü : Yazım şekli olarak for deyiminin üç bileşeni vardır. Birincisi ve üçüncüsü atama ifadesi ve fonksiyon çağrısı iken, ortadaki ikincisi karşılaştırma ifadesidir.
for Döngüsü Genel Yazım Biçimi :
for (başlangıç ifadesi; koşul ifadesi; artırma ve azaltma ifadeleri;)
{
........
döngüdeki deyimler
........
}
Başlangıç İfadesi : Döngü içerisinde kullanılacak olan temel atama işlemlerini içerir.
Koşul İfadesi : Mantıksal ifadelerin bulunduğu kısımdır.
Artırma ve Azaltma İfadeleri : Döngü içerisinde kullanılacak sayaç değişkenlerinin değerlerinin değiştirildiği komutları içerir.
Yazım biçiminde gördüğünüz gibi bileşenler arasında (;) bulunması zorunludur. Örneğin karşılaştırma ifadesi yazılma ise koşulun her zaman pozitif olduğu kabul edilir ve döngü koşulsuz tekrarlanır.
for (;;)
{
....
}
ifadesinde sonsuz bir döngü oluşturmuş oluruz.
Örnek for Kullanımı :
#include<stdio.h>
int main( void )
{
int x;
for( x = 0 ; x < 20; x++ ) {
printf("%2d: Merhaba Dunyan",(x+1));
}
return 0;
}
Programın Çıktısı :
while Döngüsü : Tekrarlama deyimidir. İçine yazılan br veya birden fazla işlem satırlarını belirli bir koşul sağlandığı sürece tekrar tekrar çalıştırmak için kullanılır. Bir küme ya da deyim while kullanılarak bir çok kez tekrarlanabilir. Tekrarlanması için koşul sınaması döngüye girilmeden yapılır. Koşul olumlu olduğu sürece döngü tekrarlanır.
while Döngüsü Genel Yazım Biçimi :
while (koşul ifadesi)
{
......
döngüdeki deyimler
......
}
while döngüsünde ilk olarak döngü koşulu test edilir ve koşul pozitif ise döngüye girilir. Eğer koşul negatif ise döngüye hiç girmeden bir sonraki satırdan çalışmasına devam eder. while döngüsünde ifadenin sonucu döngünün başlangıcında kontrol edildiğinden, ifadenin yanlış sonuç verdiği durumlarda döngü bir defa bile çalışmaz. while döngüsünde, for döngüsünden farklı olarak, ilk değer atama ve artırma/azaltma ifadeleri bulunmamaktadır. while döngüsünde ilk değer atama işlemi döngü öncesinde, artırma/azaltma işlemi ise döngü kod bloğu içinde yapılır.
Örnek while Kullanımı :
#include <stdio.h>
main()
{
int s=0;
while(s <= 10)
printf("%dn",s++);
return 0;
}
Programın Çıktısı :
Sonsuz Döngü (Infinite Loop) : Koşul ifadesinin negatif olduğu durumlarda döngü hiç bir zaman sonlanmaz ve çevrime devam eder. Bu duruma sonsuz döngü (infinite loop) denir.
for(;;)
printf("Sonsuz döngü içindeyim...n");
------------------------------------------------
...while
{
printf("Sonsuz döngü içindeyim...n");
}...
do-while Döngüsü : while döngüsüne benzemektedir. do döngüsünde koşul kontrolü döngü sonunda yapıldığından koşul sağlanmasa bile döngü en az bir defa çalışır. Bu yönü ile do döngüsü for ve while döngülerinden farklıdır. Bir anlamda do-while döngüsü post test loop yani test yapan döngü olarakta bilinmektedir.
do-while Döngüsü Genel Yazım Biçimi :
do
{
.....
döngüde yapılacaklar
.....
}
while (koşul ifadesi);
Diğer döngülerin aksine do-while döngüsünden sonra mutlaka (;) eklenmelidir.
Örnek do-while Kullanımı :
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[])
{
int x=0;
do
{
printf("Karakokunu almak istediginiz sayiyi giriniz:n");
printf("(Programi sonlandirmak icin 0 giriniz):");
scanf("%d",&x);
//math.h kütüphanesindeki sqrt fonksiyonunu kullanarak sayının karakökünü bulalım//
//bulunan karakökü karekok isimli değişkende tutalım//
double karekok=sqrt((double)x);
printf("-------------------------------------------n");
printf("Girilen deger:%dn",x);
printf("Karakoku:%.2fn",karekok);
//program sonlandırılmadığı durumda döngü devam eder//
//program 0 ile sonlandırıldığında döngüden çıkılır.//
} while (x !=0);
printf("Program sonlandiriliyor...");
return 0;
}
Programın Çıktısı :
Goto Yapısı : C programlama dilinde bulunan bir başka yapı, goto deyimidir. Belirlenecek etiketler sayesinde, programın bir noktasından bir başka noktasına atlamanızı sağlar. goto, bir döngü değildir ancak döngü olarak kullanılabilir. goto, çalışabilmek için etiketlere ihtiyaç duyar. Etiketler, vereceğiniz herhangi bir isme sahip olabilir. Goto kullanmak için, "goto" isminin yanına, atlamak istediğiniz yerin sembolik ismini yazmanız yeterlidir. "goto" ile bir döngünün icine atlamanıza izin yoktur, fakat bir döngünün dışına atlayabilirsiniz. Ayrıca bir fonksiyondan ötekine de "goto" ile geçemezsiniz. goto için tanımlanan etiketin sonuna (:) eklemek zorunludur.
Örnek goto Kullanımı :
#include<stdio.h>
int main( void )
{
int x = 0;
start:
printf( "Merhaba Dunyan" );
x++;
if( x<10 ) goto start;
return 0;
}
break ve continue Deyimleri : break deyimi döngüde belirli şartlar oluştuğunda döngüyü sonlandırmak için kullanılır. Benzer şekilde continue deyimide bir döngünün herhangi bir satırından itibaren döngünün geri kalan işlem satırlarını çalıştırmadan, döngünün baş tarafına dönme olanağı sağlar. do ve while döngülerinde, program continue deyimi ile karşılaştığında, koşul bölümünü kontrol eder ve döngünün çalışmasını devam ettirir. for döngüsünde ise, artırma ve koşul bölümünü çalıştırdıktan sonra döngünün çalışmasını devam ettirir.
Örnek break ve continue Kullanımı :
#include<stdio.h>
int main()
{
int s;
for (s=5;s<15; s=s+1)
{
if (s==8)
break;
printf("Break dongusunun icinde, s in Degeri simdi %dn",s);
}
for (s=5;s<15;s=s+1)
{
if (s==8)
continue;
printf("Continue dongusunun icinde, s in Degeri simdi %dn",s);
}
}
Programın Çıktısı :
İç İçe Döngüler : Kodlamada bazı problemler tek bir döngü ile çözülemezler. Bir veya birden fazla döngüyü iç içe kullanma ihtiyacı doğabilir.
Örnek İç İçe Döngü Kullanımı :
Üç basamaklı, basamaklarının küpleri toplamı kendisine eşit olan tam sayılara Armstrong sayı denir.
Örneğin: 371 bir Armstrong sayıdır çünkü 3^3 + 7^3 + 1^3 = 371.
İç İçe geçmiş üç for döngüsü ile bütün Armstrong sayıları bulup ekrana yazan bir C programı :
#include <stdio.h>
int main()
{
int x,y,z, kup, sayi, s=1;
for(x=1; x<=9; x++)
for(y=0; y<=9; y++)
for(z=0; z<=9; z++)
{
sayi = 100*x + 10*y + z;
kup = x*x*x + y*y*y + z*z*z;
if( sayi==kup ) printf("%d. %dn",s++,sayi);
}
return 0;
}
Programın Çıktısı :
Klavyeden girilen bir sayının faktöriyelini bulan bir programı for, do while, while ve if goto ile yazınız?
for
#include <stdio.h>
#include <conio.h>
main()
{
int sayi,fakt,s;
s=0;fakt=1;
printf("Bir Sayi Giriniz:");
scanf("%d",&sayi);
for (s=1;s<=sayi;s++)
{
fakt*=s;
}
printf ("Sonuc=%d dir...",fakt);
getch();
}
while
#include <stdio.h>
#include <conio.h>
main()
{
int sayi,fakt,s;
s=0;fakt=1;
printf("Bir Sayi Giriniz:");
scanf("%d",&sayi);
s=1;
while (s<=sayi)
{
fakt*=s;
s++;
}
printf ("Sonuc=%d dir...",fakt);
getch();
}
do while
#include <stdio.h>
#include <conio.h>
main()
{
int sayi,fakt,s;
s=0;fakt=1;
s=1;
printf("Bir Sayi Giriniz:");
scanf("%d",&sayi);
do
{
fakt*=s;
s++;
}
while (s<=sayi);
printf ("Sonuc=%d dir...",fakt);
getch();
}
if goto
#include <stdio.h>
#include <conio.h>
main()
{
int sayi,fakt,s;
s=0;fakt=1;
s=1;
printf("Bir Sayi Giriniz:");
scanf("%d",&sayi);
bayraktar:
{
fakt*=s;
s++;
}
if (s<=sayi)goto bayraktar;
printf ("Sonuc=%d dir...",fakt);
getch();
}
Döngüler : C Programlama Dilinde döngüler bir veya birden fazla işlem satırını programcı tarafından belirlenen sayılarda tekrarlı bir şekilde çalıştırmak için kullanılan ifadelerdir. C Programlama Dilinde, for, while ve do-while olmak üzere üç tip döngü vardır. Diğer programlama dillerinde olduğu gibi, bu deyimlerle istenildiği kadar iç-içe döngü yapısı kullanılabilir.
for Döngüsü : Yazım şekli olarak for deyiminin üç bileşeni vardır. Birincisi ve üçüncüsü atama ifadesi ve fonksiyon çağrısı iken, ortadaki ikincisi karşılaştırma ifadesidir.
for Döngüsü Genel Yazım Biçimi :
for (başlangıç ifadesi; koşul ifadesi; artırma ve azaltma ifadeleri;)
{
........
döngüdeki deyimler
........
}
Başlangıç İfadesi : Döngü içerisinde kullanılacak olan temel atama işlemlerini içerir.
Koşul İfadesi : Mantıksal ifadelerin bulunduğu kısımdır.
Artırma ve Azaltma İfadeleri : Döngü içerisinde kullanılacak sayaç değişkenlerinin değerlerinin değiştirildiği komutları içerir.
Yazım biçiminde gördüğünüz gibi bileşenler arasında (;) bulunması zorunludur. Örneğin karşılaştırma ifadesi yazılma ise koşulun her zaman pozitif olduğu kabul edilir ve döngü koşulsuz tekrarlanır.
for (;;)
{
....
}
ifadesinde sonsuz bir döngü oluşturmuş oluruz.
Örnek for Kullanımı :
#include<stdio.h> int main( void ) { int x; for( x = 0 ; x < 20; x++ ) { printf("%2d: Merhaba Dunyan",(x+1)); } return 0; }
Programın Çıktısı :
while Döngüsü : Tekrarlama deyimidir. İçine yazılan br veya birden fazla işlem satırlarını belirli bir koşul sağlandığı sürece tekrar tekrar çalıştırmak için kullanılır. Bir küme ya da deyim while kullanılarak bir çok kez tekrarlanabilir. Tekrarlanması için koşul sınaması döngüye girilmeden yapılır. Koşul olumlu olduğu sürece döngü tekrarlanır.
while Döngüsü Genel Yazım Biçimi :
while (koşul ifadesi)
{
......
döngüdeki deyimler
......
}
while döngüsünde ilk olarak döngü koşulu test edilir ve koşul pozitif ise döngüye girilir. Eğer koşul negatif ise döngüye hiç girmeden bir sonraki satırdan çalışmasına devam eder. while döngüsünde ifadenin sonucu döngünün başlangıcında kontrol edildiğinden, ifadenin yanlış sonuç verdiği durumlarda döngü bir defa bile çalışmaz. while döngüsünde, for döngüsünden farklı olarak, ilk değer atama ve artırma/azaltma ifadeleri bulunmamaktadır. while döngüsünde ilk değer atama işlemi döngü öncesinde, artırma/azaltma işlemi ise döngü kod bloğu içinde yapılır.
Örnek while Kullanımı :
Programın Çıktısı :
Sonsuz Döngü (Infinite Loop) : Koşul ifadesinin negatif olduğu durumlarda döngü hiç bir zaman sonlanmaz ve çevrime devam eder. Bu duruma sonsuz döngü (infinite loop) denir.
for(;;)
printf("Sonsuz döngü içindeyim...n");
------------------------------------------------
...while
{
printf("Sonsuz döngü içindeyim...n");
}...
do-while Döngüsü : while döngüsüne benzemektedir. do döngüsünde koşul kontrolü döngü sonunda yapıldığından koşul sağlanmasa bile döngü en az bir defa çalışır. Bu yönü ile do döngüsü for ve while döngülerinden farklıdır. Bir anlamda do-while döngüsü post test loop yani test yapan döngü olarakta bilinmektedir.
do-while Döngüsü Genel Yazım Biçimi :
do
{
.....
döngüde yapılacaklar
.....
}
while (koşul ifadesi);
Diğer döngülerin aksine do-while döngüsünden sonra mutlaka (;) eklenmelidir.
Örnek do-while Kullanımı :
Programın Çıktısı :
Goto Yapısı : C programlama dilinde bulunan bir başka yapı, goto deyimidir. Belirlenecek etiketler sayesinde, programın bir noktasından bir başka noktasına atlamanızı sağlar. goto, bir döngü değildir ancak döngü olarak kullanılabilir. goto, çalışabilmek için etiketlere ihtiyaç duyar. Etiketler, vereceğiniz herhangi bir isme sahip olabilir. Goto kullanmak için, "goto" isminin yanına, atlamak istediğiniz yerin sembolik ismini yazmanız yeterlidir. "goto" ile bir döngünün icine atlamanıza izin yoktur, fakat bir döngünün dışına atlayabilirsiniz. Ayrıca bir fonksiyondan ötekine de "goto" ile geçemezsiniz. goto için tanımlanan etiketin sonuna (:) eklemek zorunludur.
Örnek goto Kullanımı :
while Döngüsü Genel Yazım Biçimi :
while (koşul ifadesi)
{
......
döngüdeki deyimler
......
}
while döngüsünde ilk olarak döngü koşulu test edilir ve koşul pozitif ise döngüye girilir. Eğer koşul negatif ise döngüye hiç girmeden bir sonraki satırdan çalışmasına devam eder. while döngüsünde ifadenin sonucu döngünün başlangıcında kontrol edildiğinden, ifadenin yanlış sonuç verdiği durumlarda döngü bir defa bile çalışmaz. while döngüsünde, for döngüsünden farklı olarak, ilk değer atama ve artırma/azaltma ifadeleri bulunmamaktadır. while döngüsünde ilk değer atama işlemi döngü öncesinde, artırma/azaltma işlemi ise döngü kod bloğu içinde yapılır.
Örnek while Kullanımı :
#include <stdio.h> main() { int s=0; while(s <= 10) printf("%dn",s++); return 0; }
Programın Çıktısı :
Sonsuz Döngü (Infinite Loop) : Koşul ifadesinin negatif olduğu durumlarda döngü hiç bir zaman sonlanmaz ve çevrime devam eder. Bu duruma sonsuz döngü (infinite loop) denir.
for(;;)
printf("Sonsuz döngü içindeyim...n");
------------------------------------------------
...while
{
printf("Sonsuz döngü içindeyim...n");
}...
do-while Döngüsü : while döngüsüne benzemektedir. do döngüsünde koşul kontrolü döngü sonunda yapıldığından koşul sağlanmasa bile döngü en az bir defa çalışır. Bu yönü ile do döngüsü for ve while döngülerinden farklıdır. Bir anlamda do-while döngüsü post test loop yani test yapan döngü olarakta bilinmektedir.
do-while Döngüsü Genel Yazım Biçimi :
do
{
.....
döngüde yapılacaklar
.....
}
while (koşul ifadesi);
Diğer döngülerin aksine do-while döngüsünden sonra mutlaka (;) eklenmelidir.
Örnek do-while Kullanımı :
#include <stdio.h> #include <math.h> int main(int argc, const char * argv[]) { int x=0; do { printf("Karakokunu almak istediginiz sayiyi giriniz:n"); printf("(Programi sonlandirmak icin 0 giriniz):"); scanf("%d",&x); //math.h kütüphanesindeki sqrt fonksiyonunu kullanarak sayının karakökünü bulalım// //bulunan karakökü karekok isimli değişkende tutalım// double karekok=sqrt((double)x); printf("-------------------------------------------n"); printf("Girilen deger:%dn",x); printf("Karakoku:%.2fn",karekok); //program sonlandırılmadığı durumda döngü devam eder// //program 0 ile sonlandırıldığında döngüden çıkılır.// } while (x !=0); printf("Program sonlandiriliyor..."); return 0; }
Programın Çıktısı :
Goto Yapısı : C programlama dilinde bulunan bir başka yapı, goto deyimidir. Belirlenecek etiketler sayesinde, programın bir noktasından bir başka noktasına atlamanızı sağlar. goto, bir döngü değildir ancak döngü olarak kullanılabilir. goto, çalışabilmek için etiketlere ihtiyaç duyar. Etiketler, vereceğiniz herhangi bir isme sahip olabilir. Goto kullanmak için, "goto" isminin yanına, atlamak istediğiniz yerin sembolik ismini yazmanız yeterlidir. "goto" ile bir döngünün icine atlamanıza izin yoktur, fakat bir döngünün dışına atlayabilirsiniz. Ayrıca bir fonksiyondan ötekine de "goto" ile geçemezsiniz. goto için tanımlanan etiketin sonuna (:) eklemek zorunludur.
Örnek goto Kullanımı :
#include<stdio.h> int main( void ) { int x = 0; start: printf( "Merhaba Dunyan" ); x++; if( x<10 ) goto start; return 0; }
break ve continue Deyimleri : break deyimi döngüde belirli şartlar oluştuğunda döngüyü sonlandırmak için kullanılır. Benzer şekilde continue deyimide bir döngünün herhangi bir satırından itibaren döngünün geri kalan işlem satırlarını çalıştırmadan, döngünün baş tarafına dönme olanağı sağlar. do ve while döngülerinde, program continue deyimi ile karşılaştığında, koşul bölümünü kontrol eder ve döngünün çalışmasını devam ettirir. for döngüsünde ise, artırma ve koşul bölümünü çalıştırdıktan sonra döngünün çalışmasını devam ettirir.
Örnek break ve continue Kullanımı :
#include<stdio.h> int main() { int s; for (s=5;s<15; s=s+1) { if (s==8) break; printf("Break dongusunun icinde, s in Degeri simdi %dn",s); } for (s=5;s<15;s=s+1) { if (s==8) continue; printf("Continue dongusunun icinde, s in Degeri simdi %dn",s); } }
Programın Çıktısı :
İç İçe Döngüler : Kodlamada bazı problemler tek bir döngü ile çözülemezler. Bir veya birden fazla döngüyü iç içe kullanma ihtiyacı doğabilir.
Örnek İç İçe Döngü Kullanımı :
Üç basamaklı, basamaklarının küpleri toplamı kendisine eşit olan tam sayılara Armstrong sayı denir.
Örneğin: 371 bir Armstrong sayıdır çünkü 3^3 + 7^3 + 1^3 = 371.
İç İçe geçmiş üç for döngüsü ile bütün Armstrong sayıları bulup ekrana yazan bir C programı :
#include <stdio.h> int main() { int x,y,z, kup, sayi, s=1; for(x=1; x<=9; x++) for(y=0; y<=9; y++) for(z=0; z<=9; z++) { sayi = 100*x + 10*y + z; kup = x*x*x + y*y*y + z*z*z; if( sayi==kup ) printf("%d. %dn",s++,sayi); } return 0; }Programın Çıktısı :
Klavyeden girilen bir sayının faktöriyelini bulan bir programı for, do while, while ve if goto ile yazınız?
for
#include <stdio.h> #include <conio.h> main() { int sayi,fakt,s; s=0;fakt=1; printf("Bir Sayi Giriniz:"); scanf("%d",&sayi); for (s=1;s<=sayi;s++) { fakt*=s; } printf ("Sonuc=%d dir...",fakt); getch(); }
while
#include <stdio.h> #include <conio.h> main() { int sayi,fakt,s; s=0;fakt=1; printf("Bir Sayi Giriniz:"); scanf("%d",&sayi); s=1; while (s<=sayi) { fakt*=s; s++; } printf ("Sonuc=%d dir...",fakt); getch(); }
do while
#include <stdio.h> #include <conio.h> main() { int sayi,fakt,s; s=0;fakt=1; s=1; printf("Bir Sayi Giriniz:"); scanf("%d",&sayi); do { fakt*=s; s++; } while (s<=sayi); printf ("Sonuc=%d dir...",fakt); getch(); }
if goto
#include <stdio.h> #include <conio.h> main() { int sayi,fakt,s; s=0;fakt=1; s=1; printf("Bir Sayi Giriniz:"); scanf("%d",&sayi); bayraktar: { fakt*=s; s++; } if (s<=sayi)goto bayraktar; printf ("Sonuc=%d dir...",fakt); getch(); }