C Programlama

Ek Bilgiler

C'de Koşul ve if Yapıları

► Detaylı anlatım

C dilinde koşula bağlı çalışma if yapıları veya ? işlemcisi ile sağlanır.

if yapısı tek başına, else deyimi ile birlikte, else if deyimi ile birlikte veya her ikisi ile birlikte kullanılabilir.

if (ifade) işlem-satırı; /* if kalıbının tek başına kullanımı */

Eğer if ile başlayan satırda if deyiminden sonra yer alan parantezler içindeki ifade doğru ise (ifade sonucu 0'dan farklı ise) aynı satırda if kalıbından sonra yer alan işlem satırı çalışır. Eğer ifade yanlış ise (ifade sonucu 0'a eşit ise) if kalıbından sonra yer alan işlem satırı devre dışı kalır. Yani, program o işlem satırı hiç yazılmamış gibi bir sonraki işlem satırından çalışmaya devam eder.

/* if kalıbının else deyimi ile birlikte kullanımı */
if (ifade) işlem-satırı;
else işlem-satırı;

Eğer if satırında yer alan ifadenin sonucu doğru ise, program if satırındaki işlem satırının gereğini yerine getirir, else satırına hiçbir işlem yapmaz. Eğer if satırında yer alan ifade yanlış ise, program if satırını dikkate almaz, else satırındaki işlem satırının gereğini yerine getirir. Program iki satırdan sadece bir tanesini dikkate almak zorundadır.

Sadece if satırlarından oluşan bir programda bütün if satırları da işlem görebilir, hiçbir if satırı da görmeyebilir. Elde edilecek sonuç tamamen if satırlarında tanımlanan ifadelerin doğruluğuna bağlıdır ve birbirinden bağımsızdır. if ve else gruplarından oluşan işlem satırlarında ise if ya da else işlem satırlarından birisi mutlaka çalışacaktır. Çünkü biri diğerinin alternatifidir ve birbirine bağlıdır. Program if satırının ifadesinin sonucunun doğru olduğunu belirleyip ilgili işlem satırını çalıştırdığında, artık else ile ilgili işlem satırına işlem yapma şansı yoktur.

/* if kalıbının else if ve else deyimi ile birlikte kullanımı */
if(ifade) işlem-satırı
else if(ifade) işlem-satırı
else if(ifade) işlem-satırı
.
else if(ifade) işlem-satırı
else işlem-satırı

if-else-if kalıbında, bir if satırı, istediğiniz sayıda else if satırı ve isteğe bağlı olarak tanımlanan bir else satırı bulunur. Yani, else satırının tanımlanması şart değildir.

Program, en başta yer alan if satırı ile if-else-if kalıbını değerlendirmeye başlar. İlk doğru ifadenin bulunduğu if veya else if satırı ile karşılaştığında ilgili işlem satırını çalıştırır. Kalıbın geri kalan tüm satırlarını değerlendirmeye almadan geçer. Eğer if ve else if satırlarında yer alan ifadelerden hiç biri doğru bir sonuç vermezse, else satırında yer alan işlem satırını çalıştırır. else satırı da mevcut değilse, program if-else-if kalıbının hiç bir satırını çalıştırmadan bir sonraki satırdan çalışmasına devam eder. if-else-if kalıbında sadece tek bir satır işlem görür.

if-else-if kalıbının aynı sayıda if satırı ile sağlanan seçenek sistemine göre bir avantajı vardır. if satırları ile sağlanan seçenek sisteminde program doğru sonuç veren bir ifadenin bulunduğu bir if satırını çalıştırdıktan sonra, diğer if satırlarını da değerlendirmek zorundadır.

#include <stdio.h>

main()
{
  int id1;

  printf("Bir int değer giriniz: ");
  scanf("%d", &id1);

  if(id1 > 0 && id1 <= 100) printf("Girdiğiniz sayı 1-100 arasındadır!\n");

  if(id1 > 0 && id1 <= 100) printf("Girdiğiniz sayı 1-100 arasındadır!\n");
  else printf("Girdiğiniz sayı 100'den büyüktür!\n");
  
  if(id1 > 0 && id1 <= 100) printf("Girdiğiniz sayı 1-100 arasındadır!\n");
  else if(id1 > 100 && id1 <= 200) printf("Girdiğiniz sayı 100-200 arasındadır!");
  else if(id1 > 200 && id1 <= 300) printf("Girdiğiniz sayı 200-300 arasındadır!");
  else printf("Girdiğiniz sayı 300'den büyüktür!");
}

Birden fazla işlem satırının bir araya getirilerek kullanılmasına Kod Bloğu adı verilir. Kod bloğu { ve } işaretleri arasında yer alır.

İç İçe if ve else deyimleri

C dilinde, bir if veya else deyimine bağlı olarak çalıştırılan işlem satırında yeni bir if deyimi yer alabilir. Yine bir if veya else deyimine bağlı olarak çalıştırılan kod bloğu içinde yer alan işlem satırlarından birisinde yeni bir if deyimi yer alabilir. Başka bir ifade ile, bir if deyimi başka bir if veya else deyiminin içinde kullanılabilir. İçte kalan if deyimi dıştaki if deyimine ait ifadenin doğru olması halinde programın çalıştırdığı tek bir satır olabileceği gibi, dıştaki if deyimine ait bir kod bloğunun işlem satırlarından biri de olabilir.

if(ifade)
   if(ifade) işlem-satırı;

if(ifade) {
   if(ifade) {
      işlem-satırı;
      işlem-satırı;
   }
   else {
    işlem-satırı;
    if(ifade) işlem-satırı;
    else işlem-satırı; 
  }
}

? İşlemcisi İle Koşula Bağlı Programlama

? İşlemcisi en az 3 değer gerektirmektedir. ? işlemcisinin genel yapısı aşağıda gösterildiği şekildedir:

koşul ? ifade1 : ifade2;

Bir örnek ile konuyu incelemeye çalışalım:

#include <stdio.h>

main()
{
  int id1, id2, id3, id4;

  id1 = 73;
  id2 = 16;
  
  id3 = (id1 > id2) ? id1-id2 : id1+id2;  /* 1 */

  if (id1 > id2) id4 = id1-id2; /* 2 */
  else id4 = id1+id2;           /* 3 */

  printf("%d %d", id3, id4);
}

Program aşağıdaki satırı ekrana yazar:

57 57

Yukarıdaki örnekte, program id1 ve id2 adlı 2 değişkene atadığı değerleri > ilişkisel işlemcisi ile karşılaştırır. id1 değişken değeri id2 değişken değerinden büyük olduğu için iki değişkenin farkını 1 sayısı ile gösterilen satırda id3 değişkenine, 2 sayısı ile gösterilen satırda ise id4 değişkenine atayarak id3 ve id4 değişken değerlerini ekrana yazar.