Nasil C de Karar ve Döngü Yapılar

From Lapis Wiki

Jump to: navigation, search

Ortam değişkenlerinin durumuna göre programımızın akışını değiştirmek isteyebiliriz.

Konu başlıkları

If Deyimi

Bir veya birden fazla karşılaştıma sonucunun doğru olası veya olmaması durumunda yürütülmesi istenen komutlar tanımlanır.

 if (a<b)                            //Eğer tek bir komut işletilecekse "{}" kullanmaya gerek yoktur.
 printf("a, b'den kucuktur");
 if (a<b)
 printf("a, b'den kucuktur");
 else                               //İstenilen şart sağlanmadıysa 
 printf("a, b'den buyuktur");
 if (a<b)
 printf("a, b'den kucuktur");
 else if (a>0)                      //İstenilen şart sağlanmadıysa yeni bir şart koşabiliriz
 printf("a, b'den buyuktur ve a pozitif bir sayidir");

? İşleci

? işleci 2. örnekteki if deyiminin kullanılmasına benzer fakat tek iki operantlı kontrol yapısıdır.

 if (a<b)
 printf("a, b'den kucuktur");
 else                               //İstenilen şart sağlanmadıysa 
 printf("a, b'den buyuktur");

yerine

 a<b? printf("a, b'den kucuktur"):printf("a, b'den buyuktur")

kullanılabilir.

Switch

Eğer kullanılan değişkenin değerleri birden çok sabit değerlerle karşılaştırılacaksa if deyimi kulanmak yerine switch deyimi kullanmak programın okunabilirliği ve karmaşıklı bakımından daha mantıklıdır.


Kod:
Bu program gün bilgisini alıp karekter olarak bize gösterir
#include <stdio.h>
#include <time.h>

struct tm *zaman;
time_t zaman_; 

main(){

int a;

zaman_=time(NULL);            //Güncel zaman alınır
zaman=localtime(&zaman_);     //Yerel zamana çevrilir

a=zaman->tm_wday;            //Gün bilgisi alınır (0-6 arasında bir değerdir)

switch (a)
{
case 0:
printf("Pazar\n");
break;
case 1:
printf("Pazartesi\n");
break;
case 2:
printf("Sali\n");
break;
case 3:
printf("Carsamba\n");
break;
// bu şekilde geri kalan günler de yazılır
}
}

For Deyimi

Birden fazla işletilmesi gereken komutlarda kullanılır.

for (i=0;i<10;i++)
printf("i=%d\n",i);    //0'dan 9'a kadar i'nin değerlerini alt alta yazdıracaktır.


Kod:
0'dan 9'a kadar olan sayıların toplanması
#include <stdio.h>

main(){

int i,toplam=0;

for(i=0;i<10;i++)
toplam=i+toplam;
printf("Toplam=%d\n",toplam);
}

Eğer for deyimi içinde birden fazla komut çalıştırılacak ise

for(){
...
...
} 

şeklinde kullanılır.

While

İstenilen koşul devam ettiği sürece işletilecek komutlar tanımlanır.


Kod:
Aşagıdaki programda doğru parola girilene kadar programdan çıkamassınız
#include <stdio.h>

main(){

int parola=0;

while (parola!=1234){
printf("Parola giriniz:");
scanf("%d",&parola);
}
}

Do..While

While kullanımına benzer. Farklı tarafı döngünün başında değilde sonunda kontrol edilmesidir. Bu nedenle döngü içerisindeki komutar en az bir kere yürütülür.


Kod:
i değeri 10'dan küçük oluncaya kadar döngü işletilecek.
#include <stdio.h>

main(){

int i=15;

do{
printf("i=%d\n",i--);
}while (i>=10);

}

Döngülerde continue ve break ifadelerinin kullanımı

continue ile döngünün kalan satırları atlanarak, dongunun başından devam edilir. break ile donguden çıkılır.

 for (....){                                     while(...){
 if(...)                                         if(..)
   continue;                                       continue;
 ....                                            ....
 }                                               } 
 for (....){                                     while(...){
 if(...)                                         if(..)
   break;                                          break;
 ....                                            ....
 }                                               } 

goto

goto kullanılması pek tavsiye edilmez ama yeri geldiğinde çok işe yarıyor. (C de hiç kullanmadım gerçi)


Kod:
Satir 2 ve Satir 3 atlanacaktır.
#include <stdio.h>

main(){

printf("Satir 1\n");
goto atla;
printf("Satir 2\n");
printf("Satir 3\n");
atla:
printf("Satir 4\n");
printf("Satir 5\n");
}

goto ifadesinde atlamayı yukarı yöndede yapabilirsiniz ama dikkat edin programınız sonsuz döngüye girebilir. Bunun için goto ifadesini if deyimi ile birlikte kullanabilirsiniz.