BLM-111 PROGRAMLAMA DİLLERİ I Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/
Temel Veri Tipleri C dilinde kullanılacak değişkenler ve veri tipleri programda önceden bildirilmek zorundadır. C de temel veri tipleri int tam sayılar float virgüllü sayılar double daha uzun ve çok hassas virgüllü sayılar char - karakterler 2
Tam Sayılar (Integer) int: Tam sayıları ifade eder. Pozitif veya negatif olabilirler. Integer niteleyicileri: long, short, veya unsigned Örnek: int toplam; /* işaretli tam sayı */ toplam = 60; /* positif olabilir */ toplam = -10; /* negatif olabilir */ int toplam = 8500; /* kodlama sırasında */ /* ilk değer verilebilir */ 3
Tam Sayılar (Integer) int türünün hafızada kapladığı alan her sistemde aynı değildir. Tamsayı türleri C'de donanıma bağlıdır. Tamsayı türünün uzunluğu çalıştığınız sisteme ilişkin mikroişlemcinin bir kelimesi (Word) kadardır. Örneğin, 16 bitlik bir mikroişlemciye sahip bir sistemde int türü 16 bit, 32 bit işlemcide ise 32 bit uzunluğundadır. 4
Tam Sayılar (Integer) Tamsayı türleri için aralık değeri nasıl hesaplanır. Örneğin 8 bit uzunluğunda işaretsiz bir değişken için En küçük sayı 0000 0000 0 En büyük sayı 1111 1111 255 8 bit uzunluğunda işaretli değişken olursa bu durumda en soldaki bit işaret biti olur. İşaret biti 1 ise sayı negatif, 0 ise pozitif olur. 5
Tam Sayılar (Integer) Bir sayının negatifini bulmak için önce 1'e tümleyeni bulunur sonra 1 eklenerek 2'ye tümleyeni bulunur. Sayının 1'e tümleyeni 1'lerin 0, 0'ların 1 yapılmasıdır. Örneğin işaretli bir değişken için 000 1010 +10 1111 0110-10 0001 1111 +31 1110 0001-31 6
Tam Sayılar (Integer) Dolayısıyla bir tamsayı türünde tutulabilecek en büyük ve en küçük sayı nasıl bulunur? 8 bitlik işaretli tamsayı için 0111 1111 +127 (en büyük pozitif sayı) Sayının 2'ye tümleyeni 1000 0001 2'ye tümleyenden 1 çıkarılırsa 1000 0000-128 (en küçük negatif sayı) 7
Küsüratlı Sayılar (float) Gerçek sayıları ifade eder (virgüllü kısmıyla) Positif ve negatif olabilir Örnek: float a; a = 0.16; /* positif olabilir */ a = -146.76; /* negatif olabilir */ float a = 8.123; /* kodlama sırasında */ /* ilk değer verilebilir */ 8
Daha Hassas Küsüratlı Sayılar (double) Pozitif ve negatif gerçek sayıları ifade etmek için kullanılır. Float türünden 2 kat daha duyarlıklıdır. Hemen her sistemde 64 bit = 8 byte yer kaplar. long double ise 10 byte uzunluktadır ve double türünden daha duyarlıklıdır ancak her C derleyicisinde geçerliliği yoktur. double b; b = 4.45E+5; /* 445000.0 */ d = -73.567; /* negatif */ double b = 2.345; /* ilk değer ataması */ 9
Karakter - char Uzunluğu en kısa olan türdür. 8 bit yer kaplar. C'de char türünün short, int ve long türünden farkı sadece uzunluğudur. C'de char türü diğer türlerle aritmetik, mantıksal vs. işlemlere girebilir. Türün isminin char olması bu türün uzunluğunun sistemlerde kullanılan karakter uzunluğuna eşit olmasındandır. Karakter uzunluğu her sistemde 1 byte = 8 bittir. 10
Karakter - char Karakterler Alfabedeki büyük ve küçük harler 0 dan 9 a kadarki 10 numara Özel semboller örneğin +#@½%&$.*?! =-:/*^(){}[]~;,<> char c; c = 'A'; /* A Harfi */ c = 9 ; /* 9 rakamı*/ char c = c ; /* ilk değer verme */ 11
Karakter - char Karakterlerin (char değişkenleri) ASCII tablosundaki değerleri 12
Temel Veri Tipleri Veri tipi Boyut(bit) Aralık [signed] char 8 [-128, +127] [signed] short [int] 16 [-32768, +32767] [signed] int 32 [-2147483648, +2147483647] long [int] 32 [-2147483648, +2147483647] unsigned char 8 [0, +255] unsigned short [int] 16 [0, +65535] unsigned [int] 32 [0, +4294967295] unsigned long [int] 32 [0, +4294967295] float 32 3.4E-38 to 3.4E+38 double 64 1.7E-308 to 1.7E+308 long double 80 3.4E-4932 to 1.1E+4932 13
C Dilinin Yapısı #include #define typedef struct const veri_tipi fonksiyon main () { }.. ; Kütüphane çağırma ; Eşdeğer ifade atama ; Yeni veri tipi tanımlama ; Veri yapısı tanımlama ; Sabit tanımlama değişken adı; Değişken bildirimleri..; Alt program Ana program (ana fonksiyon) 14
C Dilinin Yapısı Değişken, sabit ve fonksiyon adları anlamlı kelimelerden seçilip yeterince uzun olmalıdır. Eğer bu isimler bir kaç kelimeden oluşacak ise, kelimeler alt çizgi ( _ ) ile ayrılmalıdır veya her kelime büyük harfle başlamalıdır. Örneğin: int son_alinan_bit; void KesmeSayisi(); float OrtalamaDeger = 12.7786; Sabitlerin bütün harfleri büyük harfle yazılmalıdır #define PI = 3.14; int STATUS 0x0379; 15
C Dilinin Anahtar Kelimeleri 16
C'de giriş/çıkış fonksiyonları C'de tüm giriş/çıkış işlemleri bayt akışı anlamına gelen stream ile yapılır. Giriş işlemlerinde bir cihazdan (örn. Klavye) hafızaya bayt transferi gerçekleşir. Çıkış işlemlerinde hafızadan bir cihaza (örn. Ekran, yazıcı) bayt transferi gerçekleşir. C programı çalıştığında otomatik olarak 3 stream programa bağlanır. Standard input klavye Standard output ekran Standard error ekran 17
C'de giriş/çıkış fonksiyonları I/O fonksiyonları standart input/output C Kütüphanesinde tanımlanmış stdio.h En önemli giriş/çıkış fonksiyonları printf ve scanf fonksiyonlarıdır. Bu fonksiyonlar standart input stream 'den veri alır (scanf) ve standart output stream'e veri gönderir (printf) Diğer giriş/çıkış fonksiyonları gets, puts, getchar ve putchar 18
printf fonksiyonu printf Ekrana veriyi biçimlendirerek yazabilen bir fonksiyondur. Dönüşüm tanımlayıcıları: bayraklar, alan genişliği, hassasiyet. Yuvarlama, sütunları hizalama, sağa/sola dayama, üssel gösterim, onaltılık gösterim, istenen genişlik ve hassasiyetle biçimleme printf( "biçim ifadesi", diğer argümanlar); 19
printf fonksiyonu Biçim ifadesi : Çıkışın biçimini belirler. Diğer argümanlar: Biçim ifadesinde yer alan her dönüşüm tanımlayıcısı ile ilişkili bir argüman yer alır. Biçim ifadesinde, dönüşüm tanımlayıcıları, bayraklar, alan genişliği, hassasiyet bilgisi ve karakterler yer alır. Dönüşüm tanımlayıcıları % işareti ile birlikte tanımlanırlar. 20
Tam sayıları biçimlendirme 21
Tam sayıları biçimlendirme
Kayan noktalı (floating point) sayıları biçimlendirme Kayan noktalı sayıları 3 farklı dönüşüm tanımlayıcısı ile biçimlendirilir (e, f ve g) E veya e ile biçimlendirme üssel gösterim kullanır. 1.504582 x 10 2 1.504582E+02 Bilimsel gösterim Bilgisayar sistemlerinde f ile biçimlendirmede sabit noktalı gösterim kullanılır. f ile formatlamada ön tanımlı olarak virgülden sonra 6 hane gösterilir. 23
Kayan noktalı (floating point) sayıları biçimlendirme G veya g ile formatlamada sayı ya f'e göre ya da e ile formatlamaya göre formatlanır. Eğer sayının üs değeri -4 ten küçük ise veya 6'ya eşit veya 6 dan büyük ise bu durumda üssel gösterim gerçekleştirir. Diğer durumlarda f ile formatlama biçimini kullanır. Aşağıdaki sayıları g ile formatlanırsa şu sonuçlar elde edilir: 0.0000875 8.75e-05 8750000.0 8.75e+06 8.75 8.75 87.50 87.5 875 875 E, e veya g ile formatlamada sayı yuvarlanırken, f ile formatlamada yuvarlama yapılmaz. 24
Kayan noktalı (floating point) sayıları biçimlendirme 25
Kayan noktalı (floating point) sayıları biçimlendirme 26
Karakter ve string formatlama Karakter yazdırmak için c, string yazdırmak için s dönüşüm tanımlayıcıları kullanılır. s kullanıldığında null karaktere rastlayana kadar tüm karakterler ekrana basılır. Karakterler tek tırnak arasında belirtilirken string ise çift tırnak arasında belirtilir ve son karakteri null '\0' karakteridir. Örn : 'a' karakterdir, "a" ise 'a' ve '\0' karakterlerden oluşan bir string ifade eder. 27
Diğer Dönüşüm tanımlayıcılar %p Adres bilgisini onaltılık sistemde yazdırır. Ekrana % işareti yazdırmak için ise %% kullanılır. 28
Alan Genişliği Ayırarak Yazdırma Alan Genişliği Verinin yazıldığı alanın genişliğidir (sütun sayısı) Eğer genişlik veriden daha büyük ise otomatik olarak sağa dayalı yazılır. Eğer alan genişliği olması gerekenden daha küçük ise veriye uymak içi verinin genişliğine uydurulur. Eksi işareti de bir karakter yer tutar. Dönüşüm tanınmayıcısı ile % işareti arasında tamsayı ile belirtilir. %4d 4 sütun alan ayırır. %-4d 4 sütun alan ayırır sola dayalı yazdırır. 29
Alan Genişliği ile Hassasiyet Biçimleme Kayan noktalı sayılar Virgülden sonra kaç hane görünmesi gerektiğini belirtir (e ve f için) Virgülden önce ve sonra toplam gösterilecek rakam sayısı (g için) Eğer sayının kendi hassaiyetinden daha küçük değer ile gösterim yapılırsa yuvarlama gerçekleşir. 123.94536 sayısı için; %.3f 123.945 %.3e 1.239e+02 %.3g 124 30
Alan Genişliği ile Hassasiyet Biçimleme Alan genişliği ile hassasiyet birleştirilerek formatlama yapılabilir. %alan_genişliği.hassaiyet %5.3 5 sütunda virgülden sonra 3 hane ile sağa dayalı %-5.3 5 sütunda virgülden sonra 3 hane ile sola dayalı 31
scanf fonksiyonu Klavyeden veri alarak belirtilen değişkenin hafozadaki adres bölgesine yerleştirir. Biçim ifadesi : Girişin biçimini belirler. Diğer argümanlar: Verinin saklanacağı değişkenlerin adresleri scanf( "biçim ifadesi", diğer argümanlar); 32
scanf fonksiyonu 33
scanf fonksiyonu 34
scanf fonksiyonu 35
scanf fonksiyonu Giriş stream'den istenen kadar karakter okumak için scanf fonksiyonunun dönüşüm tanımlayıcısında alan genişliği kullanılır. 36
scanf fonksiyonu Girilen karakterlerden istenenler görmezden gelienebilir. Örneğin 11-10-2016 şeklinde girilen tarih bilgisinde tire işaretleri okunmak istenmiyorsa dönüşüm tanımlayıcısında belirtilir. scanf( "%d-%d-%d", &month, &day, &year ); Ancak 10/11/2016 şeklinde girilen tarih için yukarıdaki ifade çalışmaz. Her tür karakter için eleminasyon yapılmak isteniyorsa; scanf( "%d%*c%d%*c%d", &month, &day, &year ); 37
Kaynak J. G. Brookshear, Computer Science: An Overview 10th Ed., Addison Wisley, 2009 Kaan Aslan, A dan Z ye C Klavuzu 8. Basım, Pusula Yayıncılık, 2002 "C How to Program", Paul J. Deitel, Harvey Deitel. 38