|
C dilini ögrenmenin
en kolay yolu...
Bu kitap C dilini ögretmek üzere
tasarlanmis olup X3J11 grubunun belirledigi standart olan ANSI C temel
alinmistir; standart C içerisinde tanimli bütün C fonksiyonlari ayrintili
olarak ele alinarak, ayni zamanda bir basvuru kitabi olma özelligi
kazandirilmistir. Kitap, hangi programlama diliyle olursa olsun program
gelistiren yazilimcilarin basvuru kitabi gibi yararlanabilecegi; ve
üniversitelerin Bilgisayar, Elektronik, Elektrik, Fizik, Matematik ve
Endüstri bölümlerinde okutulan C programlama dersi için ders kitabi
olabilecek niteliktedir.
Kitap herbiri farkli konulara
odaklanmaya çalisilan 16 Bölüm ve 2 Ekten olusmaktadir. C dilinin bu kitapla
ögrenilmesi için bütün bölümler sirayla okumali, örnek olarak verilen
programlar dikkatle incelenmeli ve sorular yanitlanmaya çalisilmalidir.
Verilen örnekler ANSI C'yi destekleyen herhangi bir derleyicide derlenebilir
sekildedir.
Kitabin ilk dört bölümünde, Cyi yeni ögrenenler için degiskenler, sabitler,
operatörler ve program denetim deyimleri gibi C dilinin temel yapi taslari
verilmektedir; 5. Bölüm ise C fonksiyon yapisini ayrintili olarak ele
almakta ve Bölüm 6da Standart Cde tanimli bütün fonksiyonlar
açiklanmaktadir. Sirasiyla 7, 8, 9, 10, 11 ve 12. Bölümlerde Diziler,
Isaretçiler (pointers) Katarlar (strings) ve Yapisal Veri Tipleri ele
alinmistir. Onüçüncü bölümde ise Disk Dosyalari
üzerinde durulmustur; dosyanin açilmasi, dosyaya erisilmesi ve
kapatilmasi için kullanilan standart fonksiyonlar ve UNIX isletim sisteminin
disk dosyasi için kullanilan sistem çagrilari da bu bölümde verilmistir.
Ondördüncü bölümde esnek ve tasinabilir program tasarimina imkan veren
önislemçi komutlari, onbesinci bölümde ise seri haberlesme için gerekli
program yapisi ele alinmistir. Onaltinci bölümde, gerçeklenmesi C
derleyicisi hazirlayanlara birakilan, bir standart belirlenmeyen Grafik
Fonksiyonlar üzerinedir. Bu bölümde grafikle ilgili
bazi kavramlar verilmis ve Turbo C 2.0 paketinin grafik fonksiyonlari
tanitilmistir.
Eklerde ise, önce bir C
programinin nasil derlenecegi/çalistirilacagi üzerinde durulmus ve ardindan
ASCII çizelge verilmistir. Bir C programinin PC tabanli bir isletim
sisteminde ve UNIX isletim sisteminde nasil derlenecegi ve çalistirilacagi
açiklanmistir.
Bölüm 10da
büyükçe sayilabilecek 3 tane örnek verilmis ve adim adim açiklanmistir;
hemen hemen C dilinin tüm özellikleri kullanilmaya çalisilmistir. Ayni
uygulama, dizi, baglantili liste ve ikili agaç modeline göre uygulanarak
adim adim açiklanmis ve aralarindaki farklara deginilmistir. Bu içerigiyle
kitap, C dilini ögrenmek isteyenler ve C dilinde basvuru kitabina ihtiyaç
duyacak programcilar ve sistem yöneticileri için ciddi bir kitap
niteligindedir.
|
ÖNSÖZ
Sanirim C dilinin varligini UNIX isletim sistemine borçluyuz. Bu isletim
sistemini uygun bir yüksek düzey dil kullanarak yazmak isteyen
Dennis Ritchie, bundan 20 yil
kadar önce Bell Laboratuvarlarinda C adini verdigi yepyeni bir dili
yaratti. C dili ilk kez yazarin "The
C Programming Language" isimli yayiniyla tanitildi (1978). Geçen
zaman içinde C, dünyanin hemen tüm dillerinde pek çok kitaba konu oldu.
Bugün C derleyicisinin mikro sistemlerden süper bilgisayarlara kadar her
düzeydeki mimari için, kullaniciya makinenin dogal ve vazgeçilmez bir
parçasi olarak sunulduguna tanik olmaktayiz. Önceleri çok övülen ve
parlak bir gelecek öngörülen pek çok dil bugün yavas yavas solarken,
C'nin belki yaraticisinin bile düslemedigi yükselisi, acaba neden?
*
Sistem programcilarina düsüncelerini çok kisa ve öz biçimde
kodlamayi saglayan bir araç oldugu için mi?
*
Içerdigi güçlü operatörler nedeniyle mi?
* Basarili standartlasma
sonucu program tasinabilirliliginin çok büyük
ölçüde saglanmis
olmasindan mi?
*
Gerektiginde donanima kolayca ve dogrudan erisebilmeyi olanakli
kilmasindan mi?
*
Ya da UNIX'in yazildiktan hemen sonra üniversitelerde sinirsizca
kullanilmaya ve didiklenmeye
özendirilmesinin bir sonucu mu?
Saydigim etkenlerin mutlaka herbirinin, C dilinin bugünkü durumuna
ulasmasinda az ya da çok katkisi oldu.
Günümüz bilgisayar kullanicisi, eristigi sistem boyutu ve sistemi
kullanmadaki amaci ne olursa olsun, mutlaka öyle ya da böyle C
dilinde program yazmaktan kaçinamayacaktir. O halde, C dilinin
kurallarini çok iyi özümsemek zorundayiz. C derleyicilerinin basvuru
kitaplarinin bunun için dogru bir baslangiç noktasi oldugunu hiç
sanmiyorum. Bu kitaplarin buz gibi soguk diline ancak profesyoneller
katlanabilir. Herhalde bu dili ögrettigini savlayan bir ders kitabi ile
ise baslamak çok daha iyi bir yaklasim sayilmalidir. Ama acaba hangisi
ile? Geçerli yabanci dillerde titizlikle hazirlanmis bir çok C kitabi
var. Ancak bu kitaplar insanin kendi dilinde yazili bir kitaptan alacagi
hazzi, hele kisi o dile yeterince hakim de degilse verebilecek mi? Daha
da ötesi bizler C üzerinde tartismalarimizi yabanci bir dilde mi
yapacagiz?
Bugün teknik dallardaki egitmenler Türkçe kitap yazmaktan çekiniyor,
çünkü Türkçe karsiligi belirli olmayan onlarca sözcüge ya benimsenecegi
pek süpheli karsiliklar önermek, ya da "save etmek" gibi gariplikler
türetmek ikilemiyle karsi karsiya gelmek istemiyor. Elinizdeki kitap
gelecekte pek çok basarili yayinlara da imza atacagina inandigim, çok
sevdigim bir genç meslektasim tarafindan hazirlandi. Bu meslektasim
büyük bir titizlikle pek çok kaynagi tarayarak, kitabin düzenlenisi,
örneklerin seçimi, uygun Türkçe sözcüklerin türetilmesi alanlarinda,
çevresindeki pek çok bilgili ve deneyimli kisi ile de yakin bir diyalog
kurarak, bence çok kapsamli bir eser hazirladi. Kendisini kutlar, bu
kitabin alanindaki bir boslugu doldurduguna yürekten inandigimi
belirtmek isterim.
Prof.Dr.
Bülent ÖRENCIK
|
IÇINDEKILER
BÖLÜM 1. Giris
Tarihçe
Standart C ve ANSI C
Kitap Üzerine
Bölümler
C Dili Anahtar Sözcükleri
Ekler
BÖLÜM 2.
C
Fonksiyonlari
2.1. C Fonksiyonlarinin Genel Yapisi
2.2. main() Fonksiyonu
2.3. Özet
2.4. Sorular
BÖLÜM 3. Degiskenler, Sabitler ve
Operatörler
3.1. Degiskenler
3.1.1. Temel Degisken Tipleri
3.1.2. Degiskenlerin Bildirim Yerleri ve Türleri
Yerel Bildirim
Genel Bildirim
Formal Bildirim
Dissal (Extern) Bildirim
Statik (Static) Degisken Bildirimi
Saklayici Tipli (Register) Degisken Bildirimi
volatile Tipli Degisken Bildirimi
3.1.3. Degiskenlere Baslangiç Degeri Verilmesi
3.2. Sabitler ve Sabit Degerler
Sabit Bildirimi
Sabit Degerler
Tamsayilar
Gerçel Sayilar
Karakterler
3.3. Operatörler
3.3.1. Aritmetik Operatörler
3.3.2. Karsilastirma Operatörleri
3.3.3. Mantiksal Operatörleri 46
3.3.4. Bitler üzerinde islem yapan (bitwise) Operatörler
3.3.5. Diger Operatörler
( atama, bitisik atama, ?, *, & ve sizeof )
Atama Operatörleri
?: Karsilastirma Operatörü
& ve * Isarteçi Operatörleri
sizeof Operatörü
3.4. Operatörlerin Öncelikleri ve Bagintilar
3.5. Bagintilarda Tip Dönüsümleri
3.6. Özet
3.7. Sorular
BÖLÜM 4.
Program Denetim Deyimleri
4.1. Karsilastirma Deyimleri
4.1.1. if, if-else
4.1.2. switch
4.2. Döngü Deyimleri
4.2.1. while
4.2.2. do...while
4.2.3. for
4.3. break ve continue Deyimleri
4.3.1. break
4.3.2. continue
4.4. goto Deyimi ve Etiket
4.5. Özet
4.6. Sorular
BÖLÜM 5.
Fonksiyonlar
5.1. Fonksiyonlarin Ayrintilari
Fonksiyonlarin Tanimlanmasi ve Bildirimi
Fonksiyona Parametre Aktarimi
main() Fonksiyonuna Parametre Aktarimi
Fonksiyonlarin Isaretçiyle Çagrilmasi
Ayni Fonksiyona Farkli Sayida Arguman Aktarimi
5.2. Rekürsif Fonksiyonlar
5.3. Baslik Dosyalari (*.h)
5.3.1. Makro ile Kütüphane Fonksiyonu Arasindaki Fark
5.3.2. Standart Baslik Dosyalari
5.3.3. Özel Baslik Dosyasi Olusturma
5.4. Özet
5.5. Sorular
BÖLÜM 6. Hazir Kütüphane
Fonksiyonlari
6.1. Karakterler Üzerinde Islem Yapan Fonk. <ctype.h>
6.2. Katarlar Üzerinde ve Bellek A. Isl. Yapan Fonksiyonlar <string.h>
6.3. Standart Giris Çikis Fonksiyonlari <stdio.h>
6.4. Matematiksel Fonksiyonlar <math.h>
6.5. Genel Amaçli Fonksiyonlar <stdlib.h>
6.6. Esnek Arguman Fonksiyonlari <stdarg.h>
6.7. Zaman ve Tarih Fonksiyonlari <time.h>
6.8. Yerel Olmayan Dallanma Fonksiyonlari <setjmp.h>
6.9. Ayricalikli Durum Kontrolu <signal.h>
6.10. Hata Ayiklama Fonksiyonlari <assert.h>
6.11. Yerellestirme Fonksiyonlari <locale.h>
6.12. Özet
6.11. Sorular
BÖLÜM 7.
Diziler
7.1. Bir Boyutlu Diziler
7.2. Matrisler
7.3. Çok Boyutlu Diziler
7.4. Dizilere Baslangiç Degeri Verilmesi
7.5. Dizilerin Fonksiyona Aktarilmasi
7.6. Dizi Uygulama Örnekleri
Kabarcik Siralamasi (Bubble Sort) , Hizli Siralama
(Quicksort)
Ikili Arama (Binary Search), Matris Toplama
Mat. Satirlarini Toplayip Vektöre Atama, Matris Çarpma
Yigin / Kuyruk Yapisi
Varyans / Standart Sapma
7.7. Özet
7.8. Sorular
BÖLÜM 8.
Isaretçiler
8.1. Isaretçi Bildirimi ve Kullanimi
8.2. Isaretçi Aritmetigi
8.3. Isaretçilerin Karsilastirilmasi
8.4. Isaretçi ve Diziler Arasindaki Iliski
8.5. Dinamik Diziler
8.6. Tipi Isaretçi Olan Fonksiyonlar
8.7. Özet
8.8. Sorular
BÖLÜM 9.
Katarlar
9.1. Katar Bildirimi
9.2. Katarlara Baslangiç Degeri Verilmesi
9.3. Katar Dizileri
9.4. Bazi Katar Fonksiyonlarin Tanimlanmasi
9.5. Özet
9.6. Sorular
BÖLÜM 10.
Yapisal Veri Tipleri
10.1. typedef Deyimi
10.2. Topluluk (struct) Deyimi
Topluluk Bildirimi ve Kullanimi
Topluluk Üyelerine Baslangiç Degeri Verilmesi
Toplulugun Fonksiyonlar ile Kullanimi
10.3. Büyükçe Örnek 1: struct Dizisi Kullanimi
10.4. Büyükçe Örnek 2: Dogrusal Baglantili Liste Uyg.
10.5. Büyükçe Örnek 3: Ikili Agaç Uygulamasi
10.6. Ortaklik (union) Deyimi
10.7. Özet
10.8. Sorular
BÖLÜM 11.
Yeni Veri Türü Olusturmak
11.1. Yeni Veri Türü Tanimlamak
11.2. Yeni Kümenin Elemanlari ve Atama
11.3. Özet
11.4. Sorular
BÖLÜM 12.
bit Düzeyinde (bitwise) Çalismak
12.1. bit Düzeyinde Degisken Bildirimi
12.2. bitlere Erisim
12.3. Özet
12.4. Sorular
BÖLÜM 13.
Disk Dosyalari
Metin Dosyasi Ikili Dosya
13.1. Üst Düzey Dosya Yapisi
Dosyanin Açilmasi
Dosyanin Kapatilmasi
Dosyaya Karakter Düzeyinde Erismek
Dosyaya Karakter Katari Düzeyinde Erismek
Dosyaya Formatli Erisim
Dosyaya Toplu Erisim
Dosya Içeriklerine Dogrudan Erisim
13.2. Alt Düzey (UNIX Benzeri) Dosya Yapisi
Dosyanin Açilmasi
Dosyanin Kapatilmasi
Dosyaya Erisme
Dosya Içindekilere Dogrudan Erisim
13.3. Standart Giris Çikislar
13.4. Özet
13.5. Sorular
BÖLÜM 14.
C Dili Önislemci Komutlari
14.1. #define Önislemci Komutu
14.2. #undef Önislemci Komutu
14.3. #include Önislemci Komutu
14.4. #if, #endif, #elif, #ifdef, #ifndef Önislemci Komutu
14.5. #line Önislemci Komutu
14.6. #error ve #pragma Önislemci Komutlari
14.7. Özet
14.8. Sorular
BÖLÜM 15.
Seri Iletisim Fonksiyonlari
15.1. Seri Iletisim Temeli ve C Fonksiyonlari
15.2. Örnek Program
15.3. Özet
15.4. Sorular
BÖLÜM 16.
Grafige Bir Bakis
Renk Kümesi, Sayfa, En Son Parlatilan Nokta
16.1. Çizim Moduna Geçmek
16.2. Grafik Fonksiyonlar
16.2.1. Çizim Fonksiyonlari
16.2.2. Taramali Çizim Fonksiyonlari
16.2.3. Durum Degiskenlerini Degistirme Fonksiyonlari
16.2.4. Sorgulama Fonksiyonlari
16.2.5. Yazim Fonksiyonlari
16.2.6. Hata Yönetimi Fonksiyonlari
16.2.7. Diger Fonksiyonlar
16.3. Özet
16.4 Sorular
EK A: Programin Derlenmesi ve
Çalistirilmasi
EK B: ASCII Çizelgesi
KAYNAKÇA
DIZIN
Yayinevimizin konuyla
ilgili eserleri:
Bilgisayar
Mühendisligine Giris
Ortak; bölüm yazarli (Editör: Dr. Rifat ÇÖLKESEN)
Veritabani ve
Uygulamalari Yilmaz KAYA ve Ramazan TEKIN
Sistem Analizi ve
Tasarimi (Bilgisayar Bilimlerinde) Prof.Dr.
Oya KALIPSIZ ve ark.
Yazilim
Mühendisligi
Dr.Erhan SARIDOGAN
C++ ve Nesneye Yönelik
Programlama
Dr.Erhan SARIDOGAN
Programlama Sanati Algoritmalar (C Uyarlamasi)
Dr.Cengiz UGURKAYA (Editör)
Programlama Sanati Algoritmalar (JAVA Uyarlamasi)
Dr.Rifat ÇÖLKESEN (Editör)
C Programlama Dili -
Iste C Dr.Rifat ÇÖLKESEN
Uygulamali C
Programlama Dili Bora TUNCER
Veri Yapilari
ve Algoritmalar
Dr.Rifat ÇÖLKESEN
Veri
Yapilari Algoritma Temelleri
Dr.Sefer KURNAZ
MATLAB KILAVUZU Dr.Aslan INAN
JAVA ve Yazilim Tasarimi
Altug B. ALTINTAS
Linux Altinda
Programlama
Ali VARDAR
GTK/GNOME Programlama
Ali VARDAR |