14 DERSTE C PROGRAMLAMA – Mehmet Zeki Coşkun
ÖNSÖZ
Bilgisayarlar dili ile ilk defa, 1983 yılında Casio hesap makinelerine BASIC dilinde program yazarak tanıştım. O günden bugüne kadar bu tanışıklık hep artarak devam etti ve yaklaşık onbir yıldır İstanbul Teknik Üniversitesi'nde C dersleri vermekteyim.
C dili her zaman en zor öğrenilen bir bilgisayar dili olarak bilinir. Bunun iki nedeni olduğunu düşünüyorum. Birinci ve en önemli nedeni C dilinin makine diline yakın, esnek ve güçlü bir dil olması, ikinci nedeni ise kitaplardaki karmaşık ve fazla detaylı anlatımlardır. Özellikle C dilini yeni öğrenmeye başlamış bir kişinin bu kadar detay ve karmaşa altında bu dili öğrenmesi zorlaşmakta ve kitap okuyucuyu bir süre sonra bıktırmaktadır. Yabancı dillerde bu anlatım şeklinin dışında, dili öğrenmeye çalışanın seviyelerine göre kitap ve kaynaklar bulunmaktadır. Bu güne kadar yukarıda sözü edilen tarzda Türkçe bir kitabı bulamadım ve öğrencilerime kaynak olarak tavsiye edemedim.
Bu kitap, üniversitelerde verilen C dersinin müfredatına uygun olarak C diiini yeni öğrenmeye çalışanların rahatça anlayabileceği ve çalışabileceği şekilde yazılmıştır. Kitabın, öğrencilerin ve uygulayıcıların yararlanması yanında, dersi anlatanların faydalanacağı ders ya da kaynak kitap olması için çaba harcanmıştır. Bu kitap yüksek öğrenim için fazlasıyla yeterli bir kaynaktır. C programlama dili ile ilgili bütün bilgiler ve C dilinin tüm özellikleri bu kitapta yer almamıştır. Öğrenciler, daha fazla bilgi için kaynaklar bölümünde verilen kitaplar ve internet sitelerinden yararlanabilirler.
C öğrenmeye yeni başlayanların kitabı hiçbir dersi atlamadan takip etmeleri ve özümseyerek okumaları gerekir. Her ders ayrı bir konuya ayrılmış ve her konu için çeşitli örnek kodlar kitapta verilmiştir. Ayrıca kitapta her ders sonunda alıştırmalar vardır. Örnek kodlar bir derleyiciye kopyalanmalı ve çalıştırılıp test edilmelidir. Örnek kodlar üzerinde oynama yaparak programın, komutların ya da fonksiyonların nasıl değişebileceği dikkatle incelenmelidir. Ders sonunda verilen alıştırmalar mutlaka cevaba bakılmadan çözülmeye çalışılmalı ve doğru çözüm iie karşılaştırılmalıdır. Başarı için farklı kodlar denenmeli ve konular tekrar edilmelidir.
Her konu ile ilgili örnek kodlar ve çözümler test edilmiştir. Bu kodları ve her bölüm sonunda verilen alıştırmaların cevaplarını sayısal olarak "http://web.itu.edu.tr/~coskun/" adresinden indirebilirsiniz.
Bügüne kadar dersimi alarak kitabın oluşmasına her aşamada dolaylı ya da doğrudan katkı sağlayan tüm öğrencilerime teşekkür ederim.
Mehmet Zeki Coşkun
İstanbul Teknik Üniversitesi
EKİM 2011, Maslak
İÇİNDEKİLER
C İle Programlamaya Giriş
Sayı Sistemleri
Onluk Sayı Sistemi
İkilik Sayı Sistemi
C Nedir?
Program Geliştirme Ortamları
Linux Ortamında
VVindovvs Ortamında
İlk C Programınız
* ve */ İşaretleri
tinciude Başlığı (Header)
Üçgen parantezler (<, >) ve Çift Tırnak (" ")
ma in o fonksiyon
printf () fonksiyonu
return fonksiyonu
C Programım Neden Çalışmıyor?
Alıştırmalar
Cnin Temelleri, Veri Tipleri ve Değişken İsimleri
Cnin Temelleri
İfade (Expression)
Deyim / tamamlanmış ifade (Statement)
Deyim Bloğu (Statement Block)
Veri yapıları
char Veri Tipi
char Değişkenler
char Değişkenlerin yazdırılması
int Tamsayı (Integer) Veri Tipi
Tamsayı (Integer) Değişkenler
Karakter (char) Değişkenlerinin nümerik (int) değerlerinin yazdırıimasi
float ondalıklı (desimal) Veri Tipi
Ondalıklı (float/desimal) Değişkenler
Ondalıklı (float/desimal) Değişkenlerinin yazdırılması.....
doubie ondalıklı (desimal) Veri Tipi
Ondalıklı (double/desimal) Değişkenler
void Veri Tipi
Değişken isimleri
C Dilinde Anahtar Kelimeler (Keyvvords)
Alıştırmalar
i. II" .1 Genel Giriş-Çıkış Fonksiyonları (Input/Output - I/O)
Temel Giriş-Çıkış (I/O) Fonksiyonları ve Kullanımları
Giriş Fonksiyonları
getc() Fonksiyonu
getchar () Fonksiyonu
scanf () Fonksiyonu
Çıkış Fonksiyonları
putc() Fonksiyonu
putchar () Fonksiyonu
printf () Fonksiyonu
printf () İle Formatlı Yazdırma
Alıştırmalar
Operatörler
Matematiksel operatörler
Atama Operatörü (=)
Diğer matematiksel operatörler
Atama ve diğer matematiksel operatörler
Artım ve Eksilme operatörleri
Öncelikler
İlişkisel Operatörler
Öncelikler....
Mantıksal Operatörler
Tür dönüştürme (cast) operatörleri
Diğer operatörler
Bit Operatörler
Diğer Atama Operatörleri
sizeof Operatörü
Alıştırmalar
Kontrol Komutları
Döngü Komutları (Loops)
for Döngüsü (for Loop)
for içinde Birden fazla ifade bulunması
while Döngü'sü (Loop)
do while Döngü'sü (Loop)
Sonsuz döngüler (Infinite Loops)
for Sonsuz Döngüsü
whiie ve do/whiie Sonsuz döngüsü :
İç içe döngüler (Nested Loops)
break ve continue Deyimi
goto Deyimi
Karar verme Komutları
if - if/else Deyimi
İç içe if Deyimi (Nested if Statement)
switch Deyimi
İç içe switch Deyimi
Alıştırmalar
Dizi Veri Yapıları (Array)
Tek Boyutlu Diziler
Dizilere İlk-Değer atanması (Initialize)
Metin Bilgileri (String) ve Diziler
Çok Boyutlu Diziler
Çok Boyutlu Dizilere İlk-Değer atanması (Initialize)
Gösterici Diziler (Pointer Arrays)
Alıştırmalar...
Göstericiler (Pointers)
Bellek (Memory)
Gösterici (pointer) Nedir?
Göstericinin Tanımlanması
Gösterici Operatörleri (*, &)
& Operatörü
*Operatörü
Göstericilerin Kullanımı
"++" ve "—" Operatörleri ve Göstericiler
Göstericiler ve Diziler
Alıştırmalar
Dizgiler (Strings)
Dizgi ve karakter Sabitler
Dizgilere İlk-değer Atanması
Dizgiler ve Giriş-Çıkış (Input-Output) İşlemleri
printf () ve scanf ()
puts ve gets ()
Dizgilerin Biçimli (Formatlı) Yazdırılması
strlen () Fonksiyonu
strcpy () ve strncpy () İle Dizgi Kopyalama
Alıştırmalar
Fonksiyonlar
Fonksiyon Nedir?
Fonksiyonların yapısı
Bir Fonksiyon Nasıl Yazılır?
Fonksiyon Nasıl Çalışır?
Fonksiyonlara Parametre Aktarımı ve Değer Döndürme
Geriye Değer Gönderilmesi
Tek Boyutlu Dizilerin Fonksiyonlara Parametre Olarak Gönderilmesi
Global değişkenlerin Fonksiyonlarda Kullanılması
Fonksiyon Çağrılma Yöntemleri
Değer İle Çağırma (Cali For Value)
Referans İle Çağırma (Cali For Reference)
Kendini Çağıran Fonksiyonlar (Recursive Functions)
Alıştırmalar
Faaliyet Alanı (Scope), Matematiksel Fonksiyonlar
Faaliyet Alanı (Scope)
Blok Faaliyet Alanı (Block Scope)
İç içe Bloklarda Faaliyet Alanı (Nested Block Scope)
Program Faaliyet Alanı (Program Scope)
Fonksiyon Faaliyet Alanı (Function Scope)
Dosya Faaliyet Alanı (File Scope)
const Belirleyici (Modifier)
Matematiksel Fonksiyonlar
Trigonometrik Fonksiyonlar
sin () Fonksiyonu
cos() Fonksiyonu
tan () Fonksiyonu...
Üstel Fonksiyonlar
exp () Fonksiyonu
pow () Fonksiyonu
Karekök
Mutlak Değer
Logaritma ve Ln Fonksiyonları
log() Fonksiyonu
loglO () Fonksiyonu
Alıştırmalar
Veri Yapıları (Data Structures) ve Dinamik Veri Yapıları (Dynamic Memory Allocation)
Yapılar (Structure)
Yapıların Bildirilmesi
Yapıların Tanımlanması
Nokta Operatörü İle Yapı Üyelerinin Kullanılması
Yapı Değişkenlere İlk-değer Atanması
Yapıların Fonksiyonlara Gönderilmesi
Dizi (Array) ve Yapı (Structure)
İç içe Yapılar (Nested Structures).
Birlikler (Unions)
Birlikler Nedir?
Birliklerin Bildirilmesi
Birliklerin Tanımlanması
Birlik Üyelerine İlk-değer Atanması
Dinamik Bellek Yerleşimi (Dynamic Memory Allocation)
malloc () ve free() Fonksiyonları
caiioc () ve realioc () Fonksiyonları
Alıştırmalar
Dosyalar I (Fileş)
Dosyalar (Fileş)
Dosya ve Akış (Stream) Nedir?
Dosya Türleri
Dosya İsimleri
FİLE Gösterici
Dosyaların Açılması
Dosyaların Kapatılması
Dosya Okuma ve Yazma
Dosyaya Bir Karakterin Kaydedilmesi/Okunması
Dosyaya Bir Karakter Dizisinin Kaydedilmesi/Okunması
Dosyaya Blok Bilgi Kaydedilmesi/Okunması
feof () Fonksiyonu
Alıştırmalar
Dosyalar II (Fileş)
Dosyalar (Fileş)
Biçimlendirilmiş (Formatted) Bilgi Kaydedilmesi
Biçimlendirilmiş (Formatted) Bilgi Okunması
Dosyalara Rastgele Erişim
fseek() ve fteli o Fonksiyonları
rewind () Fonksiyonu
Dosyanın İsminin Değiştirilmesi ve Silinmesi
Dosyanın Kopyalanması
Alıştırmalar
Ön İşlemciler (Pre Precessors) ve Komut Satır Argümanları (Command Line Arguments)
Ön İşlemciler (Pre Precessors)
#define Önişlemci Emri
#def ine Önişiemci Emrinin Sabit Yerine Kuiianımı
#def ine Önişiemci Emri İie Birden Fazla Parametre Kullanımı... fdefine Önişiemci Emri İle Deyimlerin Yeniden İsimlendirilmesi
#undef Önişiemci Emri
tinciude Önişlemci Emri
Önişlemci Emirleri ile Koşullu Derleme
#if...#eise...#endif Önişlemci Emirleri
#ifdef...endif Önişlemci Emirleri
#ifndef...tendif Önişlemci Emirleri
İç içe (Nested) Önişlemci Emirleri
Komut Satırı Argümanları (Command Line Arguments)..
Alıştırmalar
ALIŞTIRMA CEVAPLARI
KAYNAKLAR
ASCII Tablo
Standart ASCII kod tablosu
Genişletilmiş ASCII kod tablosu