C Programlama Dili
C Tarihçesi C Programlama Dili genel amaçlı orta seviyeli ve yapısal bir programlama dilidir. 1972 yılında Dennis Ritchie tarafından Bell Telefon Labaraturvarında Unix işletim sistemi ile kullanılmak için tasarlanmıştır. C, özellikle sistem programlamada sembolik makine dili (Asembler) ile tercih edilmektedir. İşletim sistemleri, derleyiciler ve debug gibi aşağı seviyeli sistem programlarının yazılımında yoğun olarak C programlama dili kullanılır. C'nin yayılması ve gelişmesi, büyük bir bölümü C dili ile yazılan UNIX işletim sisteminin popüler olmasıyla başlamıştır. C Programlama Dili, hemen her alanda kullanılmaktadır. Günümüzde nesneye yönelik programlama dilleri (C++, Java) ve script dilleri (JavaScript, JavaApplet, PHP) gibi programlama dilleri C Programlama Dili'nden esinlenmiştir.
Dev C++ programında New-> Source File adımlarını takip ederek boş sayfada görülen kod yazıldı. Dosyaadi.c uzantısıyla kaydedildi. Program yazıldıktan sonra çalıştırılmadan önce derlenmesi (compile edilmesi) gerekmektedir. Ardından program Run (Ctrl+f10) ile çalıştırıldı. Programın herhangi bir yerinde değişiklik yapıldığında tekrar compile edilmesi gerekir. #include <stdio.h> #include deyimi, programda eklenecek olan başlık dosyanını işaret eder. Bu örnekte verilen başlık dosyası (header file) stdio.h dir. #include <stdio.h> ifadesi stdio.h dosyasının derleme işlemine dahil edileceğini anlatır. main() özel bir fonksiyondur. Ana program bu dosyada saklanıyor anlamındadır. Programın yürütülmesine bu fonksiyondan başlanır. Dolayısıyla her C programında bir tane main() adlı fonksiyon olmalıdır. printf() standart kütüphane bulunan ekrana formatlı bilgi yazdırma fonksiyondur. stdio.h dosyası bu fonksiyonu kullanmak için program başına ilave edilmiştir. Aşağıda printf() fonksiyonunun basit kullanımı gösterilmiştir. getchar() fonksiyonu ile standart girişten bir karakter okunur. Programı istenen bir yerde durdurup, bir karekter girinceye kadar bekletir. return 0 main() fonksiyonuna işinin bittiğini gösterir.
Türkçe Karakter Desteği
Değişken Tipleri ve Bellekte Kapladıkları Alanlar C programlama dilinde dört tane temel veri tipi bulunmaktadır. Bunlar: char int float double. Fakat bazı özel niteleyiciler vardır ki bunlar yukarıdaki temel tiplerin önüne gelerek onların türevlerini oluşturur. Bunlar: short long unsigned
C dilinde tamsayı değerini ekrana yazdırmak için %d kullanılıyor. Kullanıcının klavyeden gireceği 2 sayının toplamını bulan programı yazın. scanf() fonksiyonu klavyeden veri okumak için kullanılan fonksiyondur. Klavyeden yazılan değeri bir değişkene atar.
Kullanıcının klavyeden gireceği 3 sayının çarpımını bulan programı yazın. Kullanıcının klavyeden gireceği 3 sayının ortalamasını bulan programı yazın.
Kullanıcının klavyeden girdiği tek bir karakterin ne olduğunu ekrana yazan program . Bir değişkende tek bir karekter saklamak istediğimizde değişken türünü char olarak belirtebiliriz. a harfinin ASCII kodunu bulan program.
if-else deyiminin kullanımı Soru: İf-else deyimini kullanarak kullanıcının klavyeden girdiği bir sayının çift ya da tek olduğunu ekrana yazacak programı yazın.
Soru: Bir yıl içinde, Şubat ayı 29 gün olursa o yıl artık yıl olarak adlandırılır. Artık yıl periyodik olarak 4 yılda bir gelir. Genel kanı "bir yıl 4 ile tam bölünebilirse o yıl artık yıldır" şeklindedir. Fakat 1996 artık yıl iken 1800 artık yıl değildir. Genel sorgulama söyle olmalıdır: Eğer bir yıl 4 ile tam bölünüyorsa VE 100'e tam bölünmüyorsa VEYA 400 'e tam bölünüyorsa o yıl artık yıldır. Buna göre kullanıcının klavyeden gireceği bir yılın artık yıl olup olmadığını bulan programı yazın.
Soru: Kullanıcının klavyeden girdiği iki sayıdan büyük olanının hangisi olduğunu ekrana yazan programı yazın.
Ödev Soru: Kullanıcının klavyeden girdiği üç sayıdan büyük olanının hangisi olduğunu ekrana yazan programı yazın.
Soru: Kullanıcının klavyeden girdiği üç sayıdan ortanca olanı ekrana yazan programı yazın. Soru: Kullanıcının klavyeden girdiği sayının pozitif mi negatif mi yoksa sıfır mı olduğunu bulan programı yazın.
Switch-Case Yapısı Kullanımı Bu deyim bir değişkenin içeriğine bakarak, programın akışını bir çok seçenekten birine yönlendirir. case (durum) deyiminden sonra değişkenin durumu belirlenir ve takip eden gelen satırlar (deyimler) işleme konur. Bütün durumların aksi söz konu olduğunda gerçekleştirilmesi istenen deyimler default deyiminden sonraki kısımda bildirilir
puts( ) fonksiyonu
Döngüler Döngü (loop) deyimleri, bir kümenin belli bir koşul altında tekrar edilmesi için kullanılır. C programlama dilinde, while, do...while ve for olmak üzere üç tip döngü deyimi vardır. Diğer programlama dillerinde olduğu gibi, bu deyimlerle istenildiği kadar iç-içe döngü yapısı kullanılabilir.
while Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden yapılır. Koşul olumlu olduğu sürece çevrim yinelenir. Yandaki döngü ne işlem yapar?
1’den 100’e kadar çift sayıları alt alta yazdıran C programını yazın 1’den 100’e kadar çift sayıların karelerini alt alta yazdıran C programını yazın
Bir çalışanın maaşı 1000 TL’dir ve çalıştığı şirketle yıllık %15 artış ile anlaşmıştır. Kaç yıl sonra maaşının 2000 TL’yi geçeceğini ve kaç TL olacağını bulan C programını yazın.
Do-while döngüsü 1’den 100’e kadar tek sayıların 2 katını bulan programı do-while döngüsünü kullanarak yapın.
For döngüsü Bu deyim, diğer döngü deyimleri gibi bir kümeyi bir çok kez tekrarlamak için kullanılır. Koşul sınaması while da olduğu gibi döngüye girmeden yapılır. Bu döngü deyimin içinde diğerlerinden farklı olarak başlangıç değeri ve döngü sayacına sahip olmasıdır
Aşağıdaki kodun çıktısı nedir?
Sonsuz Döngü Bir döngü işlemini sonsuz kere tekrarlarsa bu döngü sonsuz döngü olarak adlandırılır. While döngüsünde koşul sürekli sağlanıyorsa sonsuz döngüye girilir. for döngüsünün ise hiçbir parametresi verilmezse, döngü sonsuz çevrime girer.
Break Deyimi Bazı durumlarda, döngüyü aniden sonlandırmak isteriz. Bunun için 'break' komutunu kullanırız. Döngüyü aniden sonlandırmak veya döngüyü kırmak işlemini, zaten daha önce switch case'lerde kullanmıştık. Break deyimini döngü içinde de kullanabiliriz.
Continue Deyimi Soldaki çıktının sonucu nedir? Bir döngü içerisinde continue deyimi ile karşılaşılırsa, ondan sonra gelen deyimler atlanır ve döngü bir sonraki çevrime girer. Soldaki çıktının sonucu nedir?
Fonksiyonlar Fonksiyon, belirli sayıda verileri kullanarak bunları işleyen ve bir sonuç üreten komut grubudur. Her fonksiyonun bir adı ve fonksiyona gelen değerleri gösteren argumanları (bağımsız değişkenleri) vardır. Fonksiyonların girdilerine parametreler yada argumanlar denir. Bir fonksiyon bu parametreleri alıp bir işleme tabi tutar ve bir değer hesaplar. Bu değer, çıktı veya geri dönüş değeri (return value) olarak adlandırılır. Bir fonksiyonun kaç girişi olursa olsun sadece bir çıkış değeri vardır.
Soru: Bir bankamatik müşterisine bankamatikten çekmek istediği para sorulacak. Çekeceği paraya göre kaç tane 200’lük, kaç tane 100’lük, kaç tane 50’lik, kaç tane 20’lik, kaç tane 10’luk ve kaç tane 5’lik verilmesi gerektiğini bulan C programını yazın.
Soru: İki katlı bir ev çizen bir C programını fonksiyon kullanarak yazınız. '\' simgesi özel olduğu için ekranda gözükmesi için 2 kez yazmak gerekiyor.
String(katar)tipteki bilgiler String tipteki bilgiler için %s format tanımı kullanılır. Soru: Kullanıcının klavyeden gireceği karakterleri ekrana yazdıran programı yazın.
Aşağıdaki iki kullanım arasındaki farka dikkat ediniz. Kullanıcının klavyeden gireceği bir string içinde kaç tane ‘a’ harfinin geçtiğini bulan programı yazın.
Diziler Dizi, aynı tipteki verilere tek bir isimle erişmek için kullanılan bir kümedir. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe saklanır. Buna göre, bir diziyi dizi yapan iki temel özellik vardır. Dizi elemanların bellekte (program çalıştığı sürece) sürekli biçimde bulunması. Dizi elemanlarının bellekte (program çalıştığı sürece) sürekli biçimde bulunması. C Programlama Dili'nde, bir dizi hangi tipte tanımlanmış olursa olsun başlangıç indisi her zaman 0'dır. Bir dizinin bildirim işleminin genel biçimi söyledir: veriTipi dizi_adı[eleman_sayısı];
Dizilere Değer Atama Örneğin, 5 elemanlı, kilo verilerini bellekte tutmak için, kg dizisi şöyle tanımlanabilir: float kg[5]; Bu dizinin elemanlarına bir değer atama işlemi şöyle yapılabilir: kg[0] = 5.471 kg[1] = 3.683 kg[2] = 9.107 kg[3] = 4.739 kg[4] = 3.918 Bir diziye başlangıç değerleri aşağıdaki gibi kısa formda atanabilir: float kg[5]= { 5.471, 3.683, 9.107, 4.739, 3.918 };
Dizilere Değer Atama Bir dizinin uzunluğu belirtilmeden de başlangıç değeri atamak mümkündür. int a[] = { 100, 200, 300, 400 }; float v[] = { 9.8, 11.0, 7.5, 0.0, 12.5}; Derleyici bu şekilde bir atama ile karşılaştığında, küme parantezi içindeki eleman sayısını hesaplar ve dizinin o uzunlukta açıldığını varsayar. Yukarıdaki örnekte, a dizisinin 4, v dizisinin 5 elemanlı olduğu varsayılır.
Yandaki C kodu çalıştırılırsa nasıl bir sonuçla karşılaşılır? Kullanıcının klavyeden gireceği 5 adet sayının ortalamasını dizi ve döngü kullanarak bulunuz.
Dizilerde sıralama Bazı uygulamalarda bir grup sayının büyükten küçüğe, veya küçükten büyüğe, doğru sıralanması gerekebilir. Bu tip sıralama problemleri için çeşitli algoritmalar geliştirilmiştir. Sıralama mantığını anlamadan önce bir dizinin en büyük (veya en küçük) elemanının nasıl bulunduğunu inceleyelim. Sayılardan oluşan 10 elemanlık bir dizi tanımlayın. Hangi sayının en büyük olduğunu bulup ekrana yazdıran C Programını yazın.
5 kişiye ait ad,soyad ve adres bilgisini alarak bir diziye aktaran ve bu bilgileri ekrana listeleyen programı yazın.
Gösterici (İşaretçi ya da Pointer) Kavramı İşaretçiler değişkenlerin kendisinden ziyade adreslerine işaret eder. Bir işaretçi bir adrestir, bir işaretçi değişken ise adreslerin saklandığı yerdir. Tanımlanan bir işaretçi verinin değeri yerine verinin bellek üzerindeki adresini tutar. Bilgisayarın ana belleği (RAM) sıralı kaydetme gözlerinden oluşmuştur. Her göze bir adres atanmıştır. Bu adreslerin değerleri 0 ila belleğin sahip olduğu üst değere bağlı olarak değişebilir. Örneğin 1GB MB bir bellek, 1024*1024*1024 = 1073741824 adet gözden oluşur.
Pointer’lar Neden Kullanılıyor? Normalde bir fonksiyondan tek bir değer alınabilir. İşaretçiler ile birden fazla değer alınabilir. İşaretçiler kullanılarak dizilerle daha kolay çalışılabilir. Liste, ikili ağaç gibi kompleks veri yapıları işaretçilerle daha kolay kullanılabilir. Bellek kullanımı ve yönetimi işaretçilerle daha kolaydır.