C Programlama Diline Giriş
Tarihçe C Programlama Dili genel amaçlı orta seviyeli ve yapısal bir programlama dilidir. 1972 yılında Dennis Ritchie tarafından Bell Telefon Labaratuvarı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 taşınabilir (portable) bir dildir. Yani herhangi bir C programı hiçbir değişikliğe uğramadan, veya çok az bir değişimle, başka bir derleyicide ve/veya işletim sisteminde derlenebilir. Örneğin, Windows işletim sistemlerinde yazılan bir C kodu, Linux veya UNIX gibi işletim sistemlerinde de derlenebilir.
C dilinin Avantajları C Programlama Dili'ni popüler kılan önemli nedenler aşağıda listelenmiştir: C, güçlü ve esnek bir dildir. C ile işletim sistemi veya derleyici yazabilir, kelime işlemciler oluşturabilir veya grafik çizebilirsiniz. C, iyi bir yazılım geliştirme ortamına sahiptir. C, özel komut ve veri tipi tanımlamasına izin verir. C, taşınabilir bir dildir. C, gelişimini tamamlamış ve standardı oluşmuş bir dildir. C, yapısal bir dildir. C kodları fonksiyon olarak adlandıralan alt programlardan oluşmuştur. C++, Java, JavaScript, JavaApplet, PHP, C#, ... gibi diller C dilinden esinlenmiştir.
C Derleyicileri En sık kullanılan C derleyicileri TURBO C, DEVC++,MICROSOFT VISUAL C++ dır.
C Program Yapısı #include <stdio.h> main() { /* Önişlemci talimatı. Belirli bir dosyanın içeriğini bilgisayara yüklemesini söyler. */ #include <stdio.h> /* program çalışmaya main fonksiyonu ile başlar */ main() { Komut1; Komut2; Komutn; } /* main fonksiyonunun bitişi */
C Program yapısı main() C programları bir yada daha fazla fonksiyon içerebilirler. Ama bunların içinden mutlaka bir tanesi main olmak zorundadır. Parentezler fonksiyon olduğunu gösterir. Küme parantezi ({ ve }) bir blok olduğunu gösterir. Her fonksiyonun gövde kodları küme parantezleri içinde yazılır.
C kütüphaneleri(header dosyaları) <stdio.h> standart giriş/çıkış işlemlerine izin verir. <string.h> String fonksiyonlarını içerir. <math.h> Matematik fonksiyonlarını içerir. <conio.h>Klavye ve ekran kullanımı için gerekli fonksiyonları barındırır. Örneğin getch() <stdlib.h> min, max gibi iki makronun, exit_failure gibi standart birkaç değerin, bazı ana limitlerin, kalanlı bolüm structure'larının tanımını, ve birkaç standart fonksiyonun prototipini içerir.
Giriş Çıkış Komutları
Printf komutu Ekrana çıkış alma komutudur. Kullanımı: 1: Printf(“Ekrana yazılacak bilgi”); Eğer yazdırma işleminden sonra programın bir işlem yapması isteniyorsa şöyle yazılır: 2: printf(“Deneme\n”);
İşaretler ve anlamları \nİmlec yeni satırın başına geçer. \tTab işareti. \\ Ters bölü işareti. \” Çift tırnak işareti.
Örnek-1 main() { printf( "C diline " ); printf( "hoş geldiniz\n" ); }
Printf formatlı yazdırma Printf komutuyla ekrana değer yazdırmak için aşağıdaki semboller kullanılır. %d=Tamsayı değişkenleri yazdırmada kullanılır. %f=Ondalık sayı değişenleri yazdırmada kullanılır. %c=String değişkenleri karakter karakter yazdırmada kullanılır. %s=String değişkenleri yazdırma kullanılır.
Örnek-2 #include <stdio.h> main() { int sayi=5; printf("%d",sayi); }
Örnek-3 #include <stdio.h> main() { float sayi=5.35; printf("%1.2f",sayi); }
Örnek-4 #include <stdio.h> main() { char ad[10]="ali"; printf("%s",ad); }
Örnek-5 #include <stdio.h> main() { char ad[10]="ali"; printf("%c",ad[0]); }
Scanf Komutu Klavyeden veri girişi yapmak için kullanılan komuttur. Scanf komutunun kullanımı aşağıdaki gibidir. Scanf(“okuma formatı”, değişken)
Scanf formatlı okuma Scanf komutuyla ekrandan değer okutmak için aşağıdaki semboller kullanılır. %d=Tamsayı değişkenleri okutmada kullanılır. %f=Ondalık sayı değişkenleri okutmada kullanılır. %c=String değişkenleri karakter karakter okutmada kullanılır. %s=String değişkenleri okutmada kullanılır.
Örnek-6 #include <stdio.h> main() { int sayi; scanf("%d",&sayi); printf("girilen sayı : %d\n",sayi); }
Örnek-7 #include <stdio.h> main() { float sayi; scanf("%f",&sayi); printf("girilen sayı : %1.1f\n",sayi); }
Değişken Tanımlamaları
Değişkenler Değişkenler bilgisayar hafızasındaki yerlere karşılık gelen konumları belirtir. Her değişkenin bir ismi, tipi, boyutu ve bir değeri vardır. Bir değişkene yeni bir değer atandığı zaman önceki değer silinir, yeni değer onun yerine yerleşir. Hafızadan değişkenleri okumak ile değerleri değişmez.
Değişkenler Şekilsel gösterim tamsayi1 45 tamsayi1 45 tamsayi2 72 toplam 117
Temel Değişken Tipleri C dilinin değişken tipleri tanımlamak için aşağıdaki komutlar kullanılır. • int (integer) - tamsayı • float (floating point) - ondalıklı sayı • double – çift duyarlıklı ondalıklı sayı • char (character) – karakter türünde veri
Değişken tanımlama kuralları C dili komutları değişken adı olarak verilemez. (Örneğin if, for, case gibi) Değişken isimi birden çok kelimeden oluşacaksa aralarına boşluk verilmez. Örneğin “maksimum sayi” adında bir değişken tanımlamaz ama “maksimum_sayi” yada “MaksimumSayi” gibi değişken tanımlanabilir. Değişken adları sayı ile başlamaz. Örneğin “2sayi” gibi bir değişken adı olmaz. NOT: C dili değişken isimlendirmede küçük harf büyük harf duyarlıdır. O yüzden büyük harfle tanımladığınız değişkeni program içinde aynen kullanınız.
Örnek-8 #include <stdio.h> main(){ } int sayi; printf(" sayı giriniz:"); scanf("%d",&sayi); printf("%d",sayi); }
Değişken tanımlama örnekleri 1: int x; 2: int a,b,c; 3: float OrtalamaNot;
Değişkenlere değer atama 1: int x=5; 2: int a=2,b=5,c=1; 3: float OrtalamaNot=50.5;
Örnek-10 #include <stdio.h> main(){ int pi = (int)3.1415926535; printf(" %d",pi); } Bu örnekte pi değeri int tipine dönüştürülüyor.
Aritmetik Hesaplamalar-Operatörler * çarpma işlemi ve / bölme işlemi için kullanılır. Tamsayı bölümü kalanı iptal ederek sonucu verir. 7 / 5 sonucunu 1 olarak verir. Mod operatörü (%) bölüm işleminde kalanı geri döndürür. 7 % 5 sonucunu 2 olarak verir
Aritmetik Hesaplamalar-Operatörler Operatör önceliği Bazı aritmetik operatörler diğerlerinden önce işleme girerler. Öncelik sırası çarpma, bölme, toplama, çıkarma şeklindedir. Yalnız öncelik sırası değiştirilmek istenirse parantezler kullanılmalıdır. Örnek: a, b ve c değişkenlerinin ortalamasının bulunması (a + b + c ) / 3 şeklindedir.
Aritmetik operatörler Operatörlerin öncelik kuralları:
Değişkenlere değer atama Program içerisinde bir değişkene değer atama örnekleri aşağıda verilmiştir. A=5; B=a/2; a = 11 % 7; miktar *= birimSayisi; (miktar = miktar * birimSayisi;) para /= kisiSayisi; (para = para / kisiSayisi;) saniye += 4; (saniye = saniye + 4;) toplam -= kayip; (toplam = toplam - kayip;) faz %= peryod; (faz = faz % peryod;)
Değişkenlere değer atama-2 ++ ve – operatörleri ile bir değişkenin değeri artırılıp azaltılabilir. x++; (x = x + 1;) y--; (y = y – 1;) Örnek: x = 10; a = x++; Burada a = 10, x = 11 olacaktır. ‘a’ ‘x’e eşitlenir ve ‘x’in değeri bir arttırılır. Örnek-2 a = ++x; Burada ise a = 11, x = 11 olacaktır. Burada öncelikle ‘x’ bir arttırılır, değeri 11 olur ve daha sonra bu yeni değer ‘a’ya eşitlenir. NOT: ‘++’ ve ‘--' operatörleri değişkenlerden önce yazıldıklarında ‘prefix’, sonra yazıldıklarında ‘postfix’ isimlerini alırlar.
Örnek-11 #include <stdio.h> #include <conio.h> main() { int a=3,b,c; b = c = a; printf("%d",b); }
Örnek-12 #include <stdio.h> #include <conio.h> main() { int a, b; a = b = 10; printf("a:%d\nb:%d\n\n", a, b); a++; ++b; printf("a:%d\n b:%d\n\n", a, b); printf("a:%d\n b:%d\n\n", a++, ++b); }
Örnek-12 Sonucu a:10 b:10 a:11 b:11 a:11 b:12 a:12 b:12
Mantıksal Operatörler
Mantıksal Bağlaçlar VE(and) Bağlacı: Birden çok şart olduğunda ve her şartın doğru olması durumunda işlemlerin yapılması istenirse ve bağlacı kullanılır. C Dilinde VE bağlacı & işaretiyle gösterilir. Örneğin a,b ve c sayılarının klavyeden girildiği varsayılsın. Bu 3 sayının eşit olma durumu VE bağlacıyla şöyle ifade edilir. (a==b)&&(a==c) yada (a==b)&&(a==c)&&(b==c) şeklinde yazılır.
Mantıksal Bağlaçlar VEYA(or) Bağlacı: Birden çok şart olduğunda ve her şartlardan herhangi birisinin doğru olması durumunda işlemlerin yapılması istenirse veya bağlacı kullanılır. C Dilinde VEYA bağlacı || işaretiyle gösterilir. Örneğin a,b ve c sayılarının klavyeden girildiği varsayılsın. Bu 3 sayıdan yanlızca ikisinin eşit olma durumu VEYA bağlacıyla şöyle ifade edilir. (a==b)||(a==c)||(b==c) şeklinde yazılır.
Kontrol Yapıları
İf Blok Yapısı C dilinde karşılaştırma işlemleri için if blok yapısı kullanılır. En basit kullanımı şu şekildedir. if(koşul) { ... deyimler; (küme) }
İf-else yapısı if(koşul) { ... deyimler;(küme1) ... } else { ... deyimler;(küme2) ...
İf-elseif yapısı if(koşul) { ... deyimler;(küme1) ... } else if (koşul) ... deyimler;(küme2) ... ... deyimler;(küme3) ... } . . . else ... deyimler;(kümeN) ...
Örnek-13 Klavyeden girilen bir sayının çift olup olmadığını bulan program. #include <stdio.h> int main() { int sayi; printf("Bir sayi girin: "); scanf("%d",&sayi); if (sayi % 2 == 0) printf("sayi cifttir.\n"); else printf("sayi tektir.\n"); return 0; }
Örnek-14 Klavyeden girilen 2 sayının birbirine göre büyük küçük yada eşit olma durumlarını yazan programı if-else kullanılmadan yanlızca if yapısı kullanarak yazınız. #include <stdio.h> int x, y; main() { printf("\nBir tamsayı değeri girin, x: "); scanf("%d", &x); printf("\nBir tamsayı değeri girin, y: "); scanf("%d", &y); if (x == y) printf("x, y ye eşit\n"); if (x > y) printf("x, y den büyük\n"); if (x < y) printf("x, y den küçük\n"); }
Soru Klavyeden girilen 3 sayının eşkenar, ikizkenar yada çeşitkenar oluşturup oluşturmadıklarını bulan program. (Matematiksel detay kurallar göz önünde bulundurulmayacaktır.)
switch - case Yapısı Döngü Yapıları
switch - case Yapısı 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. Genel yazım biçimi: switch(değişken) { case sabit1: ... deyimler; Break; case sabit2: . . . case sabitn: default: ... hata deyimleri veya varsayılan deyimler; . .. }
Örnek-15 Klavyeden basılan a ve b harfini ekrana yazan program #include <stdio.h> main() { char kr; printf("Lutfen bir karakter girin\n"); kr = getchar(); /* tek bir karakterin okunması */ switch (kr) { case 'a': printf("a harfine bastınız\n"); break; case 'b': printf("b harfine bastınız\n"); default: printf("a veya b ye basmadınız\n"); break; } }
Örnek-16 Klavyeden girilen 2 sayıyı yine klavyeden girilen seçime göre toplam, çıkarma, çarpma yapıp sonucu ekrana yazan program. switch( secim ) { case 1: sonuc = x + y; printf("Toplam = %.0f\n",sonuc); break; case 2: sonuc = x-y; printf("Fark = %.0f\n",sonuc); case 3: sonuc = x * y; printf("Carpim = %.0f\n",sonuc); case 4: sonuc = x/y; printf("Oran = %.2f\n",sonuc); default: puts("Yanlis secim !\a"); } #include <stdio.h> #include <stdlib.h> main() { int secim; float x,y, sonuc; printf("Iki sayi girin: "); scanf("%f %f",&x,&y); puts("*** Menu ***"); puts("[1] Toplama"); puts("[2] Çıkarma"); puts("[3] Çarpma"); puts("[4] Bölme"); printf("Seciminiz:"); scanf("%d",&secim); NOT: puts() fonksiyonu sonraki slaytta anlatılmıştır.
puts() Fonksiyonu Ekrana yazdırılacak ifade bir karakter topluluğu ise, printf()'e alternatif olarak puts() fonksiyonu kullanılabilir. Ancak puts(), ekrana bu karakter topluluğu yazdıktan sonra, imleci alt satıra geçirir. Buna göre: printf(“Deneme yazısı.\n");ile puts(“Deneme yazısı."); kullanımları eşdeğerdir. puts() fonksiyonu kontrol karakterleri ile kullanılabilir. puts("Bu birinci satır...\nBu ikinci satır."); Bu birinci satır... Bu ikinci satır.
Döngü Yapıları
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. Genel yazım biçimi: while(koşul) { ... döngüdeki deyimler; … }
Örnek-17 #include <stdio.h> main() { int x=0; while(x <= 10) printf("%d\n",x++); } Program 0-10 arasındaki sayıları ekrana yazdırmaktır. 4. satırdaki while deyiminden sonra { işareti kullanılmamıştır. Bu durumda, sadece takip eden satır (5. satır) döngünün içine dahil edilir.
Örnek-18: klavyeden 0 sayısı girilene kadar yine klavyeden girilen tüm sayıları toplayıp ekrana sonucu yazan program. #include <stdio.h> #include <conio.h> main() { int sayi,toplam=0; char c; puts("sayı gir"); scanf("%d",&sayi); while(sayi!=0) { toplam=toplam+sayi; } printf("Girilen sayıların toplamı: %d\n",toplam); c=getche();
Örnek-19: 10 tabanlı sistemden 2 li sisteme çevirme #include <stdio.h> #include <conio.h> main() { int i,n; char c; printf("Sayiyi Girin : "); scanf("%d",&n); system("cls");//Ekran temizleme while(n>0) printf("%d",n%2); n/=2; } c=getch();
do ... while Döngüsü Bu deyimin while deyiminden farkı, koşulun döngü sonunda sınanmasıdır. Yani koşul sınanmadan döngüye girilir ve döngü kümesi en az bir kez yürütülür. Koşul olumsuz ise döngüden sonraki satıra geçilir. Genel yazım biçimi: do{ ... döngüdeki deyimler; ... } while(koşul);
Örnek-20: Klavyeden girilen sayının basamak sayısını bulan program #include <stdio.h> //kalvyeden girilen sayının basamak sayısı bulan program main() { long sayi; int basamak=0; char devam; printf("Basamak sayısını bulacak sayıyı girin : "); scanf("%d",&sayi); do { basamak++; sayi=sayi/10; } while (sayi>0); printf("Basamak sayısı=%d\n",basamak); devam=getche();
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. Genel yazım biçimi: for ( başlangıç ; koşul ; artım ) { ... döngüdeki deyimler; ... }
Örnek-21: Klavyeden girilen sayının faktoriyelini hesaplayan program #include <stdio.h> int main() { long i, n, faktor; char devam; printf("Faktoriyeli hesaplanacak sayı girin : "); scanf("%ld",&n); faktor=1; for(i=1; i<=n; i++){ faktor *= i; /* n! = 1 x 2 x 3 x ... x n */ } printf("%ld! = %ld\n", n, faktor); devam=getche();
Sorular 1. Klavyeden girilen 2 sayının çarpma işlemini toplama yöntemiyle yapan C programını yazınız. 2. Girilen tamsayı içerisinde kaç tane 1 olduğunu ekrana yazan programı yazınız. 3. Çarpım tablosunu ekrana yazan C programını yazınız.