ELN1001 BİLGİSAYAR PROGRAMLAMA I C & C++ İlk Program Sabitler, Değişkenler Veri Tipleri, Operatörler Koşullar ve Karar Verme C & C++ C++, 80 li yılların başında AT&T Bell Laboratuarlarında geliştirilmiştir. C++ 1998 yılında standardize edilmiştir. C++ programlama dili C programlama dilinin geliştirilmiş halidir. C++ programlama dili ile nesne yönelimli programlar yazmak mümkündür. C++ diline başlamadan önce C dilinin temel özelliklerini öğrenmek gerekmektedir. 1
C & C++ İlk Program : mil_km_donustur.cpp Önişlemci Direktifleri Açıklama Satırları Kütüphaneler H Header Dosyaları Sabitler Anahtar Kelimeler Ana Fonksiyon Değişkenler Standart Tanıtıcılar Dönüşüm belirteçleri Operatörler Noktalama İşaretleri 2
Açıklama Satırları Açıklama satırları, program yazımında zorunlu olmayan, satırların hangi görevi yaptığını, fonksiyonun ne görev yaptığını veya programda nereye gelindiğini açıklayan ifadelerdir. Derleme esnasında derleyici açıklama satırlarını değerlendirmeye almaz. C tarafından iki tip açıklama bloğu iki tipte tanımlanır: Birden fazla satır için /* AÇIKLAMA */ Tek satırda bitecek ise // AÇIKLAMA veya /* AÇIKLAMA */ Açıklama satırları programla ilgili dökümantasyonun parçalarıdır. Kütüphaneler H Header Dosyaları Programlamada, özellikle C ve C++ programlama dillerinde, header veya include dosyası, genellikle kaynak kodu formundaki dosyalardır. Bir başka kaynak kodunun içine derleyici tarafından otomatik olarak dahil edilirler. Genel olarak header dosyaları, kullanıldığı herhangi bir başka kaynak kodunun başlangıcında(head) derleyici direktifleri ile dahil edilirler. Yaygın olarak altrutinleri, fonksiyonları, değişkenleri ve tanıtıcıları içerirler ve kullanıldığı kaynak kodunun kullanımına açarlar. C ve C++ dillerinde standart kütüphane fonksiyonları, geleneksel olarak header dosyalarında tutulur. 3
C Standart kütüphanesi Header dosyaları assert.h complex.h ctype.h errno.h fenv.h float.h inttypes.h iso646.h limits.h locale.h math.h setimp.h Signal.h stdarg.h stdbool.h stddef.h stdint.h stdio.h stdlib.h string.h tgmath.h time.h wchar.h wctype.h stdio.h kütüphanesi fonksiyonları fclose fopen freopen fdopen femove fename fewind tmpfile clearerr feof ferror fflush fgetpos fgetc fgets fputc fputs ftell fseek fsetpos fread fwrite getc getchar gets printf vprintf fprintf vfprintf sprintf snprintf ssprintf perror putc putchar fputchar scanf vscanf fscanf vfscanf sscanf vsscanf setbuf setvbuf tmpnam ungetc puts_(c) 4
Önişlemci Direktifleri Önişlemci direktifleri, derleme işlemi öncesinde, programın yazımını yeniden düzenleyen C önişlemcisine iletilen komutlardır. Önişlemci direktifleri diyez - # karakteri ile başlar, arkasından önişlemci direktifi ve gerekli argümanlar gelir. Üç temel direktif kullanılabilir: Header dosyalarını kaynak koduna dahil etmek için #include direktifi: #include <stdio.h> veya #include stdio.h Makro ve sabit tanımlamaları için #define direktifi: #define MIL_KM 1.609 #define MIL_KM(x) ((x) *1.609) Koşullu derleme için #if direktifi: #if, #ifdef, #ifndef, #else, #elif ve #endif direktifleri koşullu derleme içindir. Önişlemci Direktifleri Önişlemci, header dosyasının içeriğini yazıldığı noktadan itibaren programa ekler. Önişlemci direktifi, kendisini takip eden kod için geçerlidir. Bu sebeple genellikle programın başına yazılırlar. Bir programda birden fazla önişlemci direktifi bulunabilir. Bu durumda her direktif ayrı bir satırda ifade edilir. #include <stdio.h> #include <math.h> #define MIL_KM 1.609 5
#define önişlemci direktifi ve sabitler #define önişlemci direktifi, genellikle kaynak kodunda karışıklıktan kurtulmak ve kaynak kodunun daha anlaşılır olmasını sağlamak için, uzun nümerik ifadelerin veya karakter dizilerinin yerine kısa anlaşılır ifadeler yerleştirmek için kullanılır. Örnek: #define MIL_KM 1.609 km=mil_km*mil; (mil*1.609 yerine) #define PI 3.14159 alan=pi*r*r (3.14159*r*r yerine) SABİTLER Tamsayı sabitler 123, -31, 0, 562321, +78 Reel sayı sabitler 0.00026, -0.97, 435.29, +487.0 Tek karakterli sabitler a, 2, ;,!, @ Dizi Sabitleri Uludağ Üniversitesi, Mühendislik Mimarlik Fakültesi, Elektronik Mühendisliği Bölümü Oda No:432 6
Önceden Tanımlı Ters bölü Karakter Sabitleri Escape Sequences Sabit \a \b \f \n \r \t \v \ \ \? \\ \o Anlamı Çan sesi (Sesli alarm) Geri boşluk (Backspace) Sayfa ileri(formfeed) Yeni satır Satırbaşı (Carriage return) Yatay tab (Horizontal tab) Düşey tab (Vertical tab) Tek tırnak (Single quote) Çift Tırnak (Double quote Soru işareti Ters Bölü (Back slash) Boş karakter (NULL) Printf( Mil olarak mesafeyi giriniz:\n ); Printf( Dikkat:\a ); Printf( Mesafeyi giriniz:\n\a ); Printf( Bir\n\İki\n\Üç\n\a ); Bir İki Üç Printf( Bir\t\İki\t\Üç\t\a ); Bir İki Üç Anahtar Kelimeler Programlama dillerinde, dilin kullandığı ve programcının farklı bir amaç için kullanamayacağı kelimelere anahtar kelimeler adı verilmektedir. Programcı, bu anahtar kelimeleri, asıl amacı dışında, örneğin değişken tanımlamak, sabit tanımlamak, fonksiyon tanımlamak gibi amaçlar için asla kullanamaz. Bütün anahtar kelimeler, dilin yapısına uygun şekilde kullanılmalıdır. 7
Anahtar Kelimeler (C) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile Anahtar Kelimeler (C++) asm auto bool break case catch char class const const_cast continue default delete do double dynamic cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw try typedef typeid typename union unsigned using virtual void volatile wchar_t while 8
Ana Fonksiyon - MAIN Bir program bir veya daha fazla fonksiyonun bir araya gelmesiyle oluşur. Bir C programını çalıştırmak için, kaynak kodunda bir main fonksiyonu bulunması zorunludur. Fonksiyon bloğu fonksiyon ismi(fonksiyonun giriş ve çıkış veri tiplerini içerir), ve bunun arkasından gelen bir çift küme parantezinden oluşur. Ana Fonksiyon - MAIN int main (void) { } Parantez içerisinde fonksiyonun kabul edeceği girişler listelenirken, küme parantezleri içinde fonksiyonun yerine getireceği deyimler ve komutlar yer alır. Bu deyimler ve komutlar fonksiyonun gövdesini teşkil eder. C de her deyim veya komut noktalı virgül ; ile sonlandırılır. Fonksiyonun gövdesi, kullanıcı tanımlı fonksiyonlar veya C nin kendi standart kütüphanesinden fonksiyonların çağrılmasıyla oluşturulabilir. Kullanıcı tanımlı fonksiyonlar genellikle main fonksiyon bloğunun bitiminden sonra tanımlanabilir. 9
Örnek C Programı: Kullanıcı tanımlı Fonksiyonlar #include <stdio.h> int topla(int a,int b); float bol(int a, int b); main() { int x,y,z; float f; printf( Ilk sayiyi giriniz:\n ); scanf( %d,&x); printf( Ikinci sayiyi giriniz:\n ); scanf( %d,&y); z=topla(x,y); f=bol(x,y); printf( İki sayinin toplami=%d,x); printf( Sayilarin bölümü=%f,f); } int topla(int a, int b) { int g; g = a+b; return g; } float bol(int a, int b) { float g; g = a/b; return g; } x y z f 28 7 35 RAM 4.000000 g 35 4.000000 DEĞİŞKENLER Oluşturulan programın kendi iç işlemlerini yaparken, veri girişlerini aldığı ve üzerinden kullanıcılara sonuçları gönderdiği, program elemanlarına değişken adı verilir. Programın, değişkenleri program esnasında kullanabilmesi için değişkenlerin programın başında veya fonksiyon başlarında tanıtılması gerekmektedir. Değişken tanımlama işlemi ile: Derleyiciye program içerisinde kullanılacak tüm değişkenlerin isimlerini bildirilir. Program içinde kullanım amacına göre değişkenin tipi belirlenir. Değişken bir veri tipi almak zorundadır. Değişkenin hafıza üzerinde kullanacağı alan da seçilen veri tipi ile belirlenecektir. 10
VERİ TİPLERİ Rakamlar Birleşerek sayıları oluşturur. Sayılar: Tamsayılar Gerçel Sayılar Harfler Birleşerek yazıları oluşturur. Yazılar: Kelimeler VERİ TİPLERİ - TAMSAYILAR Tamsayılar int Pozitif ve negatiflik kriterine göre int işaretli tamsayı (hem pozitif hem negatif olabilir) unsigned int işaretsiz tamsayı (yalnızca pozitif) Hafızada kapladığı yere göre short kısa tamsayı (Hafızada 2 byte ile temsil edilir) long uzun tamsayı (Hafızada 4 byte ile temsil edilir) int veri tipi tanımlamarı: int Derleyiciye göre 2 veya 4 byte olarak değerlendirilir. unsigned int short int Derleyici int i 2 byte olarak kabul ederse etkisizdir. Aksi takdirde 2 byte olarak değerlendirilir. short unsigned int long int Derleyici int i 4 byte olarak kabul ederse etkisidir. Aksi takdirde 4 byte olarak değerlendirilir. long unsigned int 11
VERİ TİPLERİ - TAMSAYILAR int Tür ismi signed int unsigned int short int short unsigned int long int long unsigned int Uzunluk 2 (4) 2 (4) 2 2 4 4 Sınır Değerleri -32.768 32.767-2.147.483.648 2.147.483.647 0 65.535 0 4.294.967.295-32.768 32.767 0 65.535-2.147.483.648 2.147.483.647 0 4.294.967.295 VERİ TİPLERİ GERÇEL SAYILAR Gerçel Sayılar Hafızada kapladığı yere göre float 4 byte uzunluğunda double 8 byte uzunluğunda long double 10 byte uzunluğunda long, short, signed, unsigned float ile birlikte kullanılmaz. float tipi noktadan sonra 6 rakam depolarken, double tipi (long veya short) 12 rakam depolar. 12
VERİ TİPLERİ GERÇEL SAYILAR float, double, long double Tür ismi float double long double Uzunluk 4 8 10 Sınır Değerleri -10-38 -10 38 10-38 10 38-10 -308-10 308 10-308 10 308-10 -4932-10 4932 10-4932 10 4932 VERİ TİPLERİ HARFLER Harfler Depolayabildiği değere göre char (veya signed char) 1 byte -128 127 arasında değer alır. Unsigned char 1 byte 0 255 arasında değer alır. Tek karakter depolamak için kullanılır. Küçük harf büyük harf ayrı değerlendirilir. 13
VERİ TİPLERİ - VOID Fonksiyonlar tarafından kullanılır, değer olmaması anlamına gelir: void fonksiyon1 (void) Ne değer alır ne de değer döndürür. int fonksiyon1 (void) Bir değer almaz ama fonksiyonun başarı ile tamamlandığını gösteren bir değer döndürür. void fonksiyon1(int) Çalışırken üst fonksiyondan değer alır, ama fonksiyonun tamamlandığını gösteren bir değer döndürmez. DEĞİŞKENLER İSİMLENDİRME KURALLARI C de bütün değişkenler bir harf veya altçizgi karakteri (_) ile başlamak zorundadır. İlk karakterden sonra harfler, rakamlar veya altçizgi karakteri (_) gelebilir. Özel karakterler (#,$,@,%,, ) ve Türkçe karakterler (ş,ğ,ı,ş,ç,ü, ) hiçbir şekilde değişken isimlendirme de kullanılamaz. Değişken adının ilk 31 karakteri değerlendirilir. 31. karakterden sonrakiler dikkate alınmaz. Büyük harf, küçük harfle aynı değildir. int deger int Deger ayrı ayrı değişkenler olarak algılanır. C nin anahtar kelimeleri değişken adı olarak kullanılamaz. Sabitler in isimlendirmesinde de değişkenlerin isimlendirilmesi kuralları geçerlidir. Fakat, sabitlerin isimlendirilmesinde yaygın olarak büyük harf kullanılmaktadır. 14
SABİT ve DEĞİŞKENLERİN BİLDİRİMİ Sabit ve değişkenler bilgisayar hafızasında (RAM), program çalıştığı sürece tutulur. Kullanılacak her sabit ve değişken için hafızadan ne kadar yer ayrılacağı tanımlanmalıdır. Değişken ve sabitlere ayrılacak hafıza alanının derleyiciye tanıtılmasına sabit ve değişkenlerin bildirimi (declaration of constants and variables) adı verilmiştir. Bir sabit veya değişken kullanılmadan önce bildiriminin yapılması zorunludur. Bildirim, sabit veya değişkenin ismiyle, veri tipinin birleştirilmesi sonucu gerçekleştirilir: int mil; float km; char ilk_harf; const float PI=3.14; SABİT ve DEĞİŞKENLERİN BİLDİRİMİ Değişken bildirimi yapıldığı esnada, değişkene ilk değer ataması yapılabilir: float ara_toplam=0; Sabit değer ataması yapılırken değer ataması zorunludur. Sabit değerin içeriği programın çalışması esnasında değiştirilemez. 15
TANITICILAR Neyi tanıtır? Değişken Fonksiyon Değişkenler ve sabitler açısından bildirimle aynı anlama gelmektedir. Fonksiyonların tanıtımında değişken ve sabitlerin bildiriminde geçerli olan kurallar aynen geçerlidir. İki tip fonksiyon tanıtıcısı vardır: Standart tanıtıcılar: C standart kütüphanelerinden gelen fonksiyonlar: printf scanf Kullanıcı tanımlı tanıtıcılar: Kullanıcılar tarafında oluşturulan kütüphanelerden gelen veya program içinde oluşturulmuş fonksiyonlar. int topla(x,y) int bol(x,y) DÖNÜŞÜM BELİRTEÇLERİ Karakter dizisi içerisinde sıradakinin dönüşüm belirteci olduğu, derleyiciye % işareti ile bildirilir. scanf( %lf,&mil); printf( Mesafe = %f km.\n,km); printf("%c", 'a') printf("<%3c %-3c>", 'a', 'b') printf("%e", 31.4) printf("%.2e", 31.4) printf("%f", 31.4) printf("%.0f %#.0f", 31.0, 31.0) printf("%s", merhaba") a < a b > 3.140000e+01 3.14E+01 31.400000 31 31 merhaba 16
Operatörler Değişkenler ve sabitler üzerinde işlem yapabilmemize olanak verir. Aritmetik: +,-,*,/,%,++,-- İlişkisel: ==,!=,>,<,>=,<= Mantıksal:!,&&, Atama: =,+=,*=,-=,/=,%=,&=, =,^=,<<=,>>= Bit bit: &,,^,~,<<,>> Diğerleri Operatörler - Aritmetik + - * / % ++ -- Toplama Çıkarma Çarpma Bölme Modülo 1 arttır 1 eksilt Modülo: //bölme işlemi sonucunda kalanı bulur. sonuc=7%3; //sonuc 1 olacaktır. 1 arttır: //aşağıdaki iki satır birbiriyle aynı işi yapar. toplam=toplam + 1; //sonuc 1 olacaktır. toplam++; 17
Operatörler -İlişkisel ==!= > < >= <= Eşittir Eşit değildir Büyüktür Küçüktür Büyük veya eşittir Küçük veya eşittir 7 == 3 7 == 7 7!= 3 7 > 3 7 < 3 7 >= 7 7 <= 7 7 <= 9 //yanlış sonucunu verir. //doğru sonucunu verir. //doğru sonucunu verir. //doğru sonucunu verir. //yanlış sonucunu verir. //doğru sonucunu verir. //doğru sonucunu verir. //doğru sonucunu verir. x*y > z x == 10 x + 3 <= 10 Operatörler - Mantıksal! && Değil Ve Veya! Mantıksal DEĞİL operasyonu! //yanlış sonucunu üretir.!false //doğru sonucunu üretir.!(7<3) //doğru sonucunu üretir. && Mantıksal VE operasyonu a false a false false b false false false false Mantıksal VEYA operasyonu b false false a&&b false false a b false 18
Operatörler - Bit bit Değişkenlerin değerleri hafızada bit dizisi olarak saklanmaktadır. Örn. 35 0010 0011 Bit bit operatörler değişkenlerin bit dizisi halini göz önünde bulundurur. & ^ ~ << >> Bit bit VE Bit bit VEYA Bit bit EXOR Bit bit TERSLEME Sola kaydırma Sağa Kaydırma 0010 0011 (35) & 0110 0101 (101) ------------------- 0010 0001 (33) Operatörler - Atama = += *= - = /= %= &= = ^= <<= >>= x = 10 x += 10 x *= 10 x - = 10 x /= 10 x %= 10 x &= 10 x = 10 x ^= 10 x <<= 10 x >>= 10 x değişkenine 10 değerini atar. x değişkenini 10 ile toplayıp sonucu x değişkenine yazar. x değişkenini 10 ile çarpıp sonucu x değişkenine yazar. x değişkeninden 10 çıkartıp sonucu x değişkenine yazar. x değişkenini 10 a bölüp sonucu x değişkenine yazar. x değişkenini 10 a bölüp kalanı x değişkenine yazar. x değişkeniyle 10 değerinin bit bit VE sonucunu x yazar. x değişkeniyle 10 değerinin bit bit VEYA sonucunu x yazar. x değişkeniyle 10 değerinin bit bit XOR sonucunu x yazar. 10 değerini bit bit sola kaydırıp sonucu x değişkenine yazar. 10 değerini bit bit sağa kaydırıp sonucu x değişkenine yazar. 19
Operatör Önceliği Karmaşık ifadeler yan yana çok sayıda değişken, sayı ve operatör içerebilir. Z = x*y + 10*x*(4*y*y) + 5%2 x/y Bu durumda işlemlerin yapılması için bir sıralama olmalıdır. C programlama dilinde işlem sıralaması şu şekildedir. Öncelikle parantez içindekiler çalıştırılır. Eğer iç içe parantezler varsa en içteki parantezden işlem başlar. Aynı seviyedeki parantezler içinse işlem sıralaması soldan sağa doğrudur. Parantezin olmadığı operatörler için işlem sıralaması şu şekildedir. Operatör Önceliği * / % + - << >> < > <= >= ==!= & ^ && = *= Çarpma, Bölme, Modülo Toplama, Çıkarma Sola kaydırma, Sağa Kaydırma İlişkisel Operatörler Eşitlik Bit VE Bit XOR Bit VEYA Mantıksal VE Mantıksal VEYA Tüm atama operatörleri Soldan sağa Soldan sağa Soldan sağa Soldan sağa Soldan sağa Soldan sağa Soldan sağa Soldan sağa Soldan sağa Soldan sağa Sağdan sola Z = p * r % q + w / x - y 6 1 2 4 3 5 20
Noktalama işaretleri Noktalama işaretleri, derleyici açısından sözdizimsel anlama sahiptir. Program içindeki bütün deyimler, ; ile bitmelidir. Karakter dizileri, çift tırnak ( ) içinde sunulmalıdır. Programlama dili elemanları birbirlerinden virgülle ayrılırlar. printf( mesafe = %f km \n,km); Koşullar ve Karar Verme Program içinde akışın sağlanması için koşullar karşısında karar verme işlemleri gerçekleştirilir. Eğer koşul1 geçerliyse, karar karar1 olmalıdır. Eğer yağmur yağarsa, şemsiye kullanılmalıdır. Birden çok koşul aynı anda geçerli olabilir. Bu durumda bu koşullar birbirlerine mantıksal operatörlerle bağlanmalıdır. Eğer koşul1 geçerli ise VE koşul 2 geçerli ise karar2 uygulanmalıdır. Eğer yağmur yağıyorsa VE şemsiye yoksa(not!), kapalı bir yere sığınılmalıdır. Eğer hızı sınırını aştıysa VEYA kırmızı ışıkta geçtiyse, trafik cezası uygulanmalıdır. 21
Örnek Program1 Örnek Program 2 22