1. Skip to Menu
  2. Skip to Content
  3. Skip to Footer>

Karar Verme: Eşitlik ve Karşılaştırma Operatörleri

PDF Yazdır e-Posta

Written by Admin

Posted on 07 Eylül 2010

Son Güncelleme 07 Eylül 2010

Çalıştırılabilir C ifadeleri ya bir işlem gerçekleştirir ( girilen verilerin toplanması gibi ) ya da kararlar verir. (bunun örneklerini ileride göreceğiz) Programda bir karar verebiliriz. Örneğin, bir kişinin bir sınavdan aldığı not 60'tan büyükse ya da 60'a eşitse "tebrikler geçtiniz" yazdırabiliriz. Bu kısım, bir koşulun doğruluk ya da yanlışlığına göre karar veren, C'nin if kontrol yapısının basit bir biçimini tanıtmaktadır. Eğer koşul doğru ise, if yapısının gövdesindeki ifade çalıştırılır. Eğer koşul yanlış ise, if yapısının gövdesindeki ifadeler çalıştırılmaz. if yapısının gövdesi çalıştırılsa da çalıştırılmasa da, çalıştırma süreci if yapısından hemen sonraki ifadeyle devam eder.

if yapısı içindeki koşullar, Şekil 2.12'de özetlenen eşitlik operatörleri ve karşılaştırma operatörleriyle sağlanır. Karşılaştırma operatörleri aynı seviyede önceliğe sahiptir ve soldan sağa doğru işlerler. Eşitlik operatörü, karşılaştırma operatörlerinden daha düşük önceliğe sahiptir ve soldan sağa doğru işler. [Not: C'de bir koşul 0(yanlış) ya da 0'dan farklı (doğru) bir değer üreten herhangi bir deyim olabilir. Bu konuyla ilgili bir çok uygulamayı kitap boyunca göreceğiz.

Operatörler C'deki karşılığı C'de örneği C'de anlamı
eşitlik operatörleri
= = x = = y x eşittir y
= != x != y x eşit değildir y
karşılaştırma operatörleri
> > x > y x büyüktür y
<
<
x<y
x küçüktür y
>= x>=y x büyük vey eşit y ye
<= x<=y x küçük veya eşit y ye

Şekil 2.12 Eşitlik ve karşılaştırma operatörleri

    Genel Programlama Hataları 2.16
    ==, !=, >= ve <= operatörlerinin arasında boşluk kullanılması yazım hatasına sebep olur.
    Genel Programlama Hataları 2.17
    !=, >=, <= operatörlerinin ters çevrilerek =!, =>, =< şeklinde kullanılması yazım hatasına sebep olur.

    Genel Programlama Hataları 2.18
    == operatörünün = ile karıştırılması.

    Bu karışıklığı önlemek için eşitlik operatörü "çift eşittir" olarak, atama operatörü ise "atama" olarak okunmalıdır. İleride göreceğimiz üzere, bu iki operatörün karıştırılması kolaylıkla giderilebilecek bir yazım hatası yanında oldukça önemli mantık hatalarında sebep olur.

    Genel Programlama Hataları 2.19
    if yapısındaki koşulu belirten parantezlerin sağına noktalı virgül ( ;) koymak

Şekil 2.13, kullanıcı tarafından girilen iki sayıyı karşılaştırmak için altı if yapısı kullanmaktadır. Eğer herhangi bir if yapısı içindeki koşul gerçekleşirse, o if yapısıyla ilgili printf fonksiyonu çalıştırılır. Program ve bu programın üç örneğe göre çıktıları aşağıdaki şekilde gösterilmiştir.

1 /* Şekil 2.13: prog02_13.c
2 if yapılarını, karşılaştırma ve eşitlik
3 operatörlerini kullanmak */
4 #include <stdio.h>
5
6 int main( )
7 {
8 int sayi1, sayi2;
9
10 printf( "İki tamsayı girin\n" );
11 printf( "Bu iki sayının karşılaştırması yapılacaktır: " );
12 scanf( "%d%d", &sayi1, &sayi2 ); /* iki sayının alınması */
13
14 if ( sayi1 == sayi2 )
15 printf( "%d eşittir %d\n", sayi1, sayi2 );
16
17 if ( sayi1 != sayi2 )
18 printf( " %d eşit değildir %d\n ", sayi1, sayi2 );
19
20 if ( sayi1 < sayi2 )
21 printf( "%d küçüktür %d\n", sayi1, sayi2 );
22
23 if ( sayi1 > sayi2 )
24 printf( "%d büyüktür %d\n", sayi1, sayi2 );
25
26 if ( sayi1 <= sayi2 )
27 printf( "%d küçüktür yada eşittir %d\n",
28 sayi1, sayi2 );
29
30 if ( sayi1 >= sayi2 )
31 printf( "%d büyüktür yada eşittir %d\n",
32 sayi1, sayi2 );
33
34 return 0; /* program başarılı bir şekilde sona ermiştir */
35 }


İki tamsayı girin
Bu iki sayının karşılaştırması yapılacaktır: 3 7
3 eşit değildir 7
3 küçüktür 7
3 küçüktür yada eşittir 7


İki tamsayı girin
Bu iki sayının karşılaştırması yapılacaktır: 22 12
22 eşit değildir 12
22 büyüktür 12
22 büyüktür yada eşittir 12


İki tamsayı girin
Bu iki sayının karşılaştırması yapılacaktır: 7 7
7 eşittir 7
7 küçüktür yada eşittir 7
7 büyüktür yada eşittir 7


Şekil 2.13 Eşitlik operatörleri ve karşılaştırma operatörlerini kullanmak


Şekil 2.13'teki programın, iki tamsayıyı almak için scanf (12.satır) kullandığına dikkat ediniz. Her dönüşüm belirteci, içinde değerin saklanacağı, ilgili bir argümana sahiptir. İlk %d, bir değeri sayi1 değişkeni içinde tutulacak şekle dönüştürür ve ikinci %d, bir değeri sayi2 içinde tutulacak bir şekle dönüştürür. Her if ifadesini içeriden başlatmak ve her if yapısının altına ve üstüne bir satır boşluk yerleştirmek, programın okunurluğunu arttırır. Ayrıca, Şekil 2.13'teki her if ifadesi içinde tek bir ifade yer aldığına da dikkat ediniz. 3.ünitede birden çok ifadeyi içeren gövdeye sahip if ifadelerini nasıl yazacağımızı göreceğiz.



    İyi Programlama Alıştırmaları 2.12
    if yapısının gövdesi içindeki ifadeleri içeriden başlatmak.




    İyi Programlama Alıştırmaları 2.13
    Programlarda her kontrol yapısından önce ve sonra boş bir satır kullanmak programın okunulabilirliğini arttırır.




    İyi Programlama Alıştırmaları 2.14
    Bir satırda birden fazla ifade bulunmamalıdır.


 

    • İyi Programlama Alıştırmaları 2.15
      Uzun bir ifade birden çok satır sürebilir. Eğer bir ifade birden fazla satır sürecekse, ifadeyi mantıklı noktalardan ayırmak gerekir. (örneğin virgüllerle ayrılmış bir listede virgülden sonra) Eğer bir ifade birden çok satır sürüyorsa, ifadenin sürdüğü tüm satırlar içeriden başlatılmalıdır.



      İyi Programlama Alıştırmaları 2.16
      Birden fazla operatör içeren deyimler yazdığınızda operatör önceliklerini gösteren tabloya bakınız. Deyimin içindeki operatörlerin uygun biçimde kullanıldığından emin olunuz. Eğer karmaşık bir deyim içinde hesaplama sırasından emin olamazsanız, sırayı istediğiniz şekle getirmek için (matematikte olduğu gibi) parantezleri kullanın. C'in bazı operatörlerinin (örneğin atama operatörü ( = ) gibi ) soldan sağa değil de, sağdan sola doğru işlediğini gözden kaçırmayın.



  • Şekil 2.13'teki yorum satırı 3 satır sürmüştür. C programlarında, tab, yeni satır ve boşluklar gibi boşluk karakterleri ihmal edilir. Bu sebepten, ifadeler ve yorumlar birden fazla satır sürebilir.Ancak tanıtıcıları ayırmak doğru değildir.



    Şekil 2.14, bu ünitede gösterilen operatörlerin önceliklerini listelemektedir. Operatörlerin önceliği yukarıdan aşağıya gidildikçe azalmaktadır. Eşit işaretininde bir operatör olduğuna dikkat ediniz. Bütün bu operatörler, atama operatörü ( = ) hariç, soldan sağa doğru işlerler. Atama operatörü ( = ), sağdan sola doğru işler.



    Bu ünitedeki C programlarında kullandığımız bazı kelimeler ( int,return ve if ), bu dilin anahtar kelimeleridir. C'deki tüm anahtar kelimeleri Şekil 2.15'te bulabilirsiniz. Derleyici için bu kelimelerin özel anlamları vardır. Bu yüzden, programcı bu kelimeleri değişken isimleri gibi tanıtıcılar biçiminde kullanmamaya dikkat etmelidir. Bu kitapta tüm anahtar kelimeleri açıklayacağız.


    Operatörler İşleyişleri
    ( ) soldan sağa
    * / % soldan sağa
    + - soldan sağa
    < <= > >= soldan sağa
    = = != soldan sağa
    = sağdan sola
    Şekil 2.14 Şu ana kadar anlatılan operatörlerin öncelikleri ve işleyişleri


    Anahtar kelimeler
    auto            double              int              struct
    break         else                  long            switch
    case           enum               register       typedef
    char            extern               return         union
    const          float                  short          unsigned
    continue     for                     signed        void
    default        goto                 sizeof         volatile
    do               if                       static          while
    Şekil 2.15 C'nin anahtar kelimeleri


    Bu ünitede, C programlama dilinin, verileri ekrana yazdırma, kullanıcıdan verileri alma, işlemler yapma ve kararlar verme gibi önemli bir çok özelliğini tanıttık. 3.ünitede yapısal programlamayı öğrendikçe bu tekniklerin üzerine devam edeceğiz. İçeriden başlatma tekniklerini daha yakından tanıyacak ve ifadelerin hangi sırada çalıştırılacaklarına ( buna akış kontrolü denir) nasıl karar vereceğimizi çalışacağız.


      Genel Programlama Hataları 2.20
      scanf ifadesi içindeki dönüşüm belirteçleri arasına (asla gerekmemesine rağmen) virgül yerleştirmek.