Title: C
1CA GIRIS
2C DILININ BIR ÜST-KÜMESI OLARAK C
- Genel olarak, Cde mevcut olan her sey Cda da
vardir. - Fakat, C
- mevcut özellikler üzerinde yapmis oldugu
konvansiyonel nitelikte iyilestirmeler ve - eklemis oldugu yaklasim degistirici nitelikte
özellikler ile C dilinden daha büyük bir kümeyi
kapsar.
3INPUT-OUTPUT IÇIN STREAM KULLANILMASI-cout
- C input (giris) ve output (çikis) islemleri
için stream (bytelarin dizisi seklinde veri
transferi) olarak bilinen mekanizmalar kullanir.
Standart output streami cout ismiyle
adlandirilir - include ltiostreamgt
- using namespace std
- int main()
- cout ltlt Merhaba!
- return 0
- Örnekte, Cden farkli olarak
- stdio.h yerine iostream.h
- printf yerine cout ve bit-tabanli sola kaydirma
operatörü (ltlt) kullanilmistir.
4INPUT-OUTPUT IÇIN STREAM KULLANILMASI-cout
- Cda çikti için format stringine ihtiyaciniz
yoktur - include ltiostreamgt
- using namespace std
- int main()
- int miktar 123
- cout ltlt miktar
- return 0
-
- C dilinde -gt printf(d, miktar)
- cout streami farkli veri tiplerinin ayirdindadir
ve onlari dogru olarak yorumlayabilir - cout ltlt Miktar ltlt miktar ltlt .
5INPUT-OUTPUT IÇIN STREAM KULLANILMASI-manipülatörl
er
- C çiktilarini da manipulatörler
aracililigiyla formatlamak mümkündür. Asagidaki
program manipülatör kullanarak tamsayilar
(integers) için varsayilan formati nasil
degistirebilecegimizi örneklemektedir -
- include ltiostreamgt
- using namespace std
- int main()
-
- int miktar 123
- cout ltlt decimal degeri ltlt dec ltlt miktar ltlt
\n - cout ltlt octal degeri ltlt oct ltlt miktar ltlt
endl - cout ltlt hexadecimal degeri ltlt hex ltlt miktar
ltlt \n - return 0
-
- Program çiktisi nedir?
6PROGRAM ÇIKTISI
- decimal degeri123
- octal degeri173
- hexadecimal degeri7b
7INPUT-OUTPUT IÇIN STREAM KULLANILMASI-cin
- Cin standard input streami ise cin olarak
adlandirilir. Asagidaki program klavyeden bir
tamsayinin nasil girdi olarak alinacagini
göstermektedir - include ltiostreamgt
- using namespace std
-
- int main()
-
- int miktar 123
- cout ltlt Bir miktar girin...\n
- cin gtgt miktar
- cout ltlt Girdiginiz Miktar ltlt miktar
- return 0
-
8INPUT-OUTPUT IÇIN STREAM KULLANILMASI-cin
- cin diger tipte veri girisleri için de
kullanilabilir - include ltiostreamgt
- using namespace std
-
- int main()
-
- char isim20
- cout ltlt Bir isim girin...\n
- cin gtgt isim
- cout ltlt Girdiginiz Isim ltlt isim
- return 0
-
9AÇIKLAMALAR (COMMENTS)
- C, Cde çoklu satir açiklamasinda kullanilan /
... / açiklama formatina ek olarak, tek-satir
açiklamalari için // isaretinin kullanimina
izin vermektedir. - // Cda Açiklama Yazilmasi
- include ltiostreamgt
- using namespace std
- int main()
-
- char isim20 // Karakter katari bildirimi
cout ltlt Bir isim girin...\n //Isim giris
istegi - cin gtgt isim //Ismin okunmasi
- cout ltlt Girdiginiz Isim ltlt isim
- return 0
-
10FONKSIYON PROTOTIPLERI
- Fonksiyon prototipi, fonksiyonun ismini,
döndürecegi degeri, parametrelerin sayisini ve
tipini tanimlar. - C, eger çagrilmadan önce tanimlanmamissa, her
fonksiyon için prototip bildirimi ister. - include ltiostreamgt
- using namespace std
- void goruntule(char s) //Fonksiyon prototipi
- int main()
-
- goruntule(Merhaba!)
- return 0
-
- void goruntule(char s)
- cout ltlt s
11VARSAYILAN FONKSIYON ARGÜMANLARI-1
- Cda bir fonksiyon prototipinde bazi
parametreler için varsayilan degerler belirlemek
mümkündür. - Fonksiyon çagrimi yaparken varsayilan deger almis
argümanlari belirtmezseniz derleyici otomatik
olarak bu argümanlar için varsayilan degerleri
kullanir. - Eger kendi argümanlarinizi kullanirsaniz,
derleyici varsayilanlar yerine onlari kullanir. - Bir argümani belirtmez iseniz sagindaki diger
argümanlari da belirtmemelisiniz - f( , 3.45) // Error
12VARSAYILAN FONKSIYON ARGÜMANLARI-1
- include ltiostreamgt
- using namespace std
- void f(int i5, double d1.23)//Fonksiyon
prototipi - int main ()
-
- // Fonksiyon Çagrimlari
- f(12, 3.45)
- f(3)
- f()
- return 0
-
13VARSAYILAN FONKSIYON ARGÜMANLARI-2
- Asagidaki programin çiktilarini belirleyiniz
- include ltiostreamgt
- using namespace std
- void show( int 5, float 2.3, long 4 )
-
- int main()
- show() show(5) show(6,7.8)
show(9,10.11,12L) - return 0
- void show(int first, float second, long third)
-
- cout ltlt \nfirst ltlt first
- cout ltlt , second ltlt second
- cout ltlt , third ltlt third
-
14PROGRAM ÇIKTISI
- first 5, second 2.3, third 4
- first 5, second 2.3, third 4
- first 6, second 7.8, third 4
- first 9, second 10.11, third 12
15DEGISKEN BILDIRIMLERININ YERI - 1
- Cde degisken bildirimlerini blok basinda
yapmaniz beklenir. Cda ise referansta
bulunmadan önce olmak kosuluyla bir degiskenin
bildirimini kodun herhangi bir yerinde
yapabilirsiniz. -
- int main()
-
- cout ltlt Bir sayi girin...\n
- int sayi
- cin gtgt sayi
- cout ltlt Girdiginiz Sayi ltlt sayi
- return 0
-
-
16DEGISKEN BILDIRIMLERININ YERI - 2
- Asagidaki ifade dogrudur.
- for (int ctr 0 ctr lt MAXXTR ctr)
- Fakat, asagidaki ifadeler hatalidir
- if( int i 0 ) // Error
- while( int i 0 ) // Error
17DEGISKEN BILDIRIMLERININ YERI - 3
- Asagidaki örnekte bir degisken bildirimi bir blok
içinde yapilmistir - int main()
-
- int satirNo
- for( satirNo 0 satirNo lt 3 satirNo )
-
- int temp 22
- cout ltlt \nSatir No ltlt satirNo ltlt Temp
ltlt temp -
- cout ltlt satirNo // satirNo erisilebilir
- // cout ltlt temp // temp erisilemez
- return 0
-
- Program çiktisi nedir?
18KAPSAM ÇÖZÜMLEYICI OPERATÖR
- Cde yerel bir degisken ayni isimli global bir
degiskene göre önceliklidir. Örnegin, hem bir
yerel degisken hem de global bir degisken miktar
ismiyle adlandirilmissa ve yerel degisken
referans kapsami içinde ise miktar her
kullanildiginda referans yerel degiskene yapilmis
olur yani, global degisken görünmez olmustur. - C, bu tür durumlarda, global degiskene de
erisime izin verir. Degiskenin önüne kapsam
çözümleyici operatör olan isaretinin konulmasi
halinde kullanilanin yerel degil global degisken
oldugu anlasilir. - Iç içe gömülmüs kapsam alanlarinda bir üst
kapsam alanindaki degiskenlere degil global
degiskenlere erisim saglar.
19KAPSAM ÇÖZÜMLEYICI OPERATÖR - örnek
- include ltiostreamgt
- using namespace std
- int miktar 23 // Global Degisken
- int main()
-
- int miktar 456 // Yerel Degisken
- cout ltlt miktar
- cout ltlt \n
- cout ltlt miktar
- return 0
-
-
- Program çiktisi nedir?
20INLINE FONKSIYONLAR - 1
- Cda gerçekte çagrilmayan, fakat her çagri
noktasinda satir içerisinde genisleyen
fonksiyonlar tanimlanabilir. - Cdaki inline anahtar sözcügü beraberinde
kullanildigi fonksiyonun bir kopyasinin
çagrildigi her yere eklenmesini saglar. Eger, bir
inline fonksiyonu programinizda 20 kez
çagiriyorsaniz, derleyici bu fonksiyonun 20
kopyasini .EXE dosyaniza ekleyecektir. - Fonksiyon kopyalarinin bu sekilde eklenmesi
fonksiyon çagrimindan dogan overhead zamanini
ortadan kaldirarak programinizi hizlandiracaktir.
Fakat, bir fonksiyonun birçok kopyasini yaratmak
da program kodunuzun büyümesine yol açacaktir. Bu
nedenle, inline niteleyicisi yalnizca fonksiyon
çok kisa ise yada az sayida çagriliyorsa
kullanilmalidir.
21INLINE FONKSIYONLAR 1 - örnek
- include ltiostreamgt
- using namespace std
-
- inline int max(int a, int b)
-
- return agtb ? a b
-
-
- int main()
-
- cout ltlt max(10, 20)
- cout ltlt " " ltlt max(99, 88)
- return 0
-
22INLINE FONKSIYONLAR - 2
- inline fonksiyonlar define ile bildirimi
yapilmis makrolara benzerler fakat, makrolar
basit bir metin degistirici ile gerçeklenirken,
inline fonksiyonlar derleyici tarafindan
taninirlar. - Derleyici tarafindan taninmanin avantaji,
derleyicinin inline fonksiyonun parametreleri
üzerinde tip kontrolü yapabilmesidir. - Diger avantaji ise, inline fonksiyonlarin siradan
fonksiyonlar gibi davranip makrolarin neden
olabilecegi yan etkileri yaratmamasidir -
23INLINE FONKSIYONLAR - örnek
- include ltiostreamgt
- using namespace std
-
- define MAX( A, B ) ((A) gt (B) ? (A) (B))
- inline int max(int a, int b)
- if (agtb) return a return b
-
- int main()
-
- int i, x, y
- x 23 y 45
- i MAX(x, y) // buyuk deger iki kez
arttirildi - cout ltlt "x " ltlt x ltlt " y " ltlt y ltlt "\n"
- x 23 y 45
- i max(x, y)
- cout ltlt "x " ltlt x ltlt " y " ltlt y ltlt "\n"
- return 0
- Program çiktisi nedir?
24PROGRAM ÇIKTISI
25const NITELEYICISI - 1
- C gibi, C da degiskenleri sabitlere dönüstüren
const niteleyicisini destekler. Cde const
niteleyicisi, ilk deger atamasi haricinde,
degiskenin salt-okunur oldugunu belirtir. C,
bir adim daha ileri gider ve sabit bir ifade
kullanilan her yerde bir const ifadesi
kullanmaniza izin verir - include ltiostreamgt
- using namespace std
- int main()
- const int boyut 5
- char csboyut
- cout ltlt cs dizininin buyuklugu ltlt sizeof
cs - return 0
-
- Fakat, Cda bile bir const degiskeninin ilk
degerini sabit bir ifade haricinde bir seyle
belirleyemezsiniz. Örnegin, boyut degiskeni bir
fonksiyon içinde bildirilmis bile olsa, ilk
degerini fonksiyonun bir parametresi üzerinden
alamaz.
26const NITELEYICISI - 2
- const niteleyicisi isaretçi bildirimlerinde de
kullanilabilir. Bu tür bildirimlerde
niteleyicinin yeri önemlidir - char const ptr buf // const isaretleyici
- ptr a // legal
- ptr buf2 // error
-
- Asagidaki bildirimlerin anlami ise farklidir
- const char ptr buf // consta isaretleyici
- ptr buf2 // legal
- ptr a // error
27const NITELEYICISI - 3
- const niteleyicisi bir fonksiyonun
parametrelerinden birinin degerini degistirmesine
engel olmak için de kullanilabilir - int salt_okur( const struct Node nodeptr )
-
- Bu prototip salt_okur fonksiyonunun
parametresinin isaret etmis oldugu Node
toplulugunu degistiremeyecegini bildirmektedir.
Fonksiyon içinde (siradan) bir isaretçi bildirimi
yapilmis bile olsa, parametre güvenceli olarak
kalir çünkü, salt-okur bir isaretçiyi siradan
bir isaretçiye atayamazsiniz - int salt_okur( const struct Node nodeptr )
-
- struct Node writeptr // siradan isaretçi
- writeptr nodeptr // error
-
-
28STRUCTURES, UNIONS, ENUMERATIONS
- Cda, structure, union yada enumeration olan
bir veri tipinde degisken bildirirken struct,
union ve enum anahtar sözcüklerinin
kullanilmasini zorunlu degildir - C Formati
- struct addr addr_info
- union u_type dönüstürücü
- enum renk favori
- C Formati
- addr addr_info
- u_type dönüstürücü
- renk favori
-
29int IÇIN VARSAYILAN DEGER KULLANIMI
- Ca son zamanlarda yapilan bir degisiklik de,
veri tipi belirtilmemis bildirimlerde veri
tipinin int olmasi varsayimina izin
verilmemesidir. - Cde ve geleneksel Cda varsayilan-int
kuralinin en yaygin kullanimini fonksiyonlarin
döndürdükleri deger tiplerinin belirlenmesinde
görüyoruz - func(int i)
- return ii
- Standart Cda yukaridaki fonksiyonun
döndürdügü deger tipinin int olacagi açikça
belirtilmelidir - int func(int i)
- return ii
- Fakat, neredeyse bütün C derleyicileri
varsayilan-int kuralini halen desteklemektedir.
30Bool VERI TIPI
- C bool adli bir boolean veri tipini
desteklemektedir. - bool tipinde nesneler yalnizca Cnin anahtar
sözcükleri içinde yer alan true ve false
degerlerini alabilirler. - Gerektiginde bool degerlerini tamsayilara ve
tamsayilari bool degerlerine dönüstüren otomatik
dönüsümler uygulanmaktadir sifir olmayan
degerler true degerine ve sifir false degerine
dönüstürülürken true 1e ve false 0a
dönüstürülmektedir.
31Bool VERI TIPI - örnek
- include ltiostreamgt
- using namespace std
-
-
- bool IsEqual(int x, int y) return (x
y) -
- int main()
-
- cout ltlt "Enter a value "
- int x
- cin gtgt x
- cout ltlt "Enter another value "
- int y
- cin gtgt y
-
- bool bEqual IsEqual(x, y)
-
- if (bEqual)
-
32ASIRI YÜKLENMIS FONKSIYONLAR
- C ayni isimle birden fazla fonksiyon
yaratilmasina izin verir - int kare(int x) return xx
- double kare(double x) return xx
- Deger atanmis parametreler bulunduran
fonksiyonlarla ayni isimde farkli fonksiyonlar
yaratmak bazen sorunlara yol açabilir -
- int f(int x)
- float f(int a, int b 0)
-
- int y f(5)
-
33ASIRI YÜKLENMIS FONKSIYONLAR-ÖRNEK
- include ltiostreamgt
- using namespace std
- void f1(int a)
- void f1(int a, int b)
-
- int main()
-
- f1(10)
- f1(10,20)
-
- void f1(int a) cout ltlt "f1 tek
parametre\n" -
- void f1(int a, int b) cout ltlt "f1 cift
parametre\n"