C Programlama Dili/Değişkenler ve Aritmetik
C Programlama Dili -/+ |
Değişkenler ve Aritmetik
değiştirDaha önceki bölümde basit bir programın yapısını kabaca incelemiştik. Bu bölümde basit değişken kullanımını ve aritmetik işlemleri inceleyeceğiz.
Öncelikle, kullanıcıdan bir sayı alalım:
#include <stdio.h>
int main() {
int sayi;
printf("Bir sayı giriniz: ");
scanf("%d",&sayi);
printf("%d alındı. teşekkürler\n",sayi);
return 0;
}
4. satırda sayi adında bir değişken tanımladık. Dikkat ederseniz bu değişkenin adı 'sayi'. C dilinde değişken ve fonksiyon isimleri İngilizce'de geçerli olan karakterlerden oluşur. Bu konudaki detayları gramer bölümünde bulabilirsiniz.
Bir değişken tanımlarken, değişkenin tipini de belirtmek gerekir.
Burada değişkenimiz için tamsayılari saklamakta kullanılan int
tipini kullandik.
Genel olarak bir C değişkeni şu şekilde tanımlanır:
tip ad ;
Şimdilik sadece bu formatı bilmeniz yeterli olacaktır. Kompleks veri tiplerini incelediğimiz zaman daha çeşitli değişken tanımlama formatları göreceğiz.
Değişkenimizi tanımladığımıza göre komutlarımızı yazmaya başlayabiliriz. C dilinde değişken tanımları diğer komutlardan önce yazılır. Yeni standart (C99) ve bazı derleyiciler için (MS Visual C++ gibi) bu mecburi değildir ama bu kuralı uygulamak genel olarak iyi bir alışkanlıktır.
Öncelikle kullanıcıya ne istediğimizi söylüyoruz:
printf("Bir sayı giriniz: ");
Bu fonksiyonu daha önceki programımızda kullanmıştik. Arada sadece kücük bir fark var. Buradaki katarımız \n karakterleriyle bitmiyor. Bir katarın içinde, \n karakterleri satır sonu anlamına gelir. Hatırlarsanız bir önceki programı çalıştırdığımızda "Selam Dünya" yazısından sonra komut satırı bir alt satırda başlamıştı. Bunun nedeni "Selam Dünya!\n" katarının bu özel karakterlerle bitmesidir. İsterseniz bir önceki programdan bu karakterleri silin ve bir de bu şekilde çalıştırın.
Şimdi de kullanıcıdan bir tamsayı alıyoruz.
scanf("%d",&sayi);
scanf ve printf fonksiyonları en temel fonksiyonlar olmalarına rağmen, kullanımları biraz komplekstir. Şimdilik scanf fonksiyonun tamsayılarla kullanımının bu şekilde olduğunu bilmeniz yeterli olacaktır. İşaretçiler bölümünde bu fonksiyona tekrar döneceğiz. Burada dikkat etmeniz gereken önemli bir nokta var: ampersand (&) işaretini yazmayı unutmamalısınız. Bu önemli operatörün eksikliğinden kaynaklanan hatayı gcc farkeder ve sizi uyarır fakat diğer derleyiciler hatayı farketmeyebilir.
Son işlem olarak programın doğru çalışıp çalışmadığını kontrol etmek için aldığımız sayıyı ekrana yazıyoruz:
printf("%d alındı. teşekkürler\n",sayi);
Burada gördüğünüz üzere, sayi değişkeninin değerini doğrudan yazacağımız katarın içine gömmek mümkün değil. Bunun yerine printf fonksiyonuna katardan sonraki argümanın bir tamsayı olduğunu söylüyoruz ve bu tamsayıyı yazmasını istiyoruz.
Yukarıdaki katarda, %d karakterleri, tam olarak bunu ifade ediyor. Bu iki karakterin yazılmasını istediğiniz zaman, printf fonksiyonu argüman listesinden bir tamsayı alır ve ekrana bunu yazar. Programı derleyip çalıştıralım:
$ gcc -o sayi -Wall sayi.c $ ./sayi Bir sayı giriniz: 5 5 alındı. teşekkürler $
Şimdi de basit bir aritmetik işlem yapalım.
#include <stdio.h>
int main() {
int carpan1;
int carpan2;
int sonuc;
printf("İlk çarpanı giriniz: ");
scanf("%d",&carpan1);
printf("İkinci çarpanı giriniz: ");
scanf("%d", &carpan2);
sonuc= carpan1 * carpan2;
printf(" %d x %d = %d \n", carpan1,
carpan2, sonuc);
return 0;
}
Bu program diğeriyle hemen hemen aynı Sadece birden fazla değişken kullandık ve bir çarpma işlemi yaptık. İlk üç satırın ne anlama geldığini artık benden iyi biliyorsunuz: değişken tanımları
int carpan1;
int carpan2;
int sonuc;
Burada carpan1, carpan2 ve sonuc isimli üç tane değişken tanımladık. Üçü de aynı tipte: int (tamsayı). Tipleri aynı olduğu için bunlari kısaca şu şekilde de tanımlayabilirdik:
int carpan1 , carpan2 , sonuc;
Gördügünüz gibi değişken isimlerinde rakamları da kullanabiliyoruz. Bununla ilgili tek bir kısıtlama var: değişken adınin ilk karakteri bir harf olmak zorunda. Derleyici alt çizgi karakterini bu bağlamda bir harf olarak değerlendirir.
Daha sonraki dört satır bir önceki programda kullandığımız komutların aynısı.
printf("İlk çarpanı giriniz: ");
scanf("%d",&carpan1);
printf("İkinci çarpanı giriniz: ");
scanf("%d", &carpan2);
İki sayi aldık ve bunları carpan1 ve carpan2 değişkenlerinde sakladık.
Şimdi de basit bir çarpma işlemi yapıyoruz:
sonuc= carpan1 * carpan2;
Çarpma operatörü asterisk (*) karakteridir. Diğer operatörler
- toplama +
- çikarma -
- bölme / ve
- kalan %
şeklindedir. Çarpımın sonucunu ata (=) operatörünü kullanarak sonuc değişkeninde sakladık. Operatörlerin öncelik sırası normal matematik operatörleriyle aynıdır. Ata operatörü en düşük önceliğe sahiptir.
Son adım olarak da işlemi ekrana yazıyoruz:
printf("%d x %d = %d \n", carpan1,
carpan2, sonuc);
Bir önceki programda sadece bir tane tamsayı yazdırmıştık. Bu komutla üç tane birden yazdırıyoruz. Eğer kendi yazdığınız programlarda ekrana çok sayida tamsayı yazmanız gerekirse ve hangi %d ikilisinin hangi sayıya karşılık geldiğini karıştırmaya başlarsanız printf fonksiyonunu birkaç parca,ya bölerek de çağırabilirsiniz. Yukarıdaki örneği basitçe şu şekilde de yazabilirdik:
printf("%d", carpan1);
printf(" x ");
printf("%d", carpan2);
printf(" = ");
printf("%d",sonuc);
printf("\n");
Bu metodla yazmak biraz daha uzun sürmesine rağmen alışana kadar hata yapmamak için tercih edilebilir. Programı çalıştıralım:
$./carpma İlk çarpanı giriniz: 4 İkinci çarpanı giriniz: 12 4 x 12 = 48 $
Tekrar çalıştıralım:
$./carpma İlk çarpanı giriniz: -2 İkinci çarpanı giriniz: -9 -2 x -9 = 18 $
Gördüğünüz gibi int tipindeki değişkenler negatif değerleri de saklayabiliyor. C de integral değerler (tamsayı gibi) için iki çeşit veri tipi vardır: işaretli ve işaretsiz. İşaretli değerler (int gibi) hem negatif hem pozitif değerleri saklayabilir. İşaretsiz değerler ise sadece negatif olmayan değerleri saklayabilir: sıfır ve pozitif sayılar. Biz programımızda değişkenlerimizin işaretli olup olmadığını özel olarak belirtmediğimiz için derleyici int tipinin varsayılan çeşidini kullandı ve işaretli değişkenler üretti. Bu konunun daha derin irdelenmesini bir sonraki bölüme bırakıyorum.