C Programlama Dili

PROGRAMLAMA DİLİ

İşletim Sistemleri, Paket Programlar, Programlama Dilleri, Web ve Mobil Uygulamalar, mikroişlemci yazılımları gibi kodlamaların yapıldığı bilgisayar programlarına programlama dili ya da yazılım dili denir. C Programlama Dili bunlardan birisidir.

İlk programlama dilleri, bilgisayarların üzerinde bazı araçların yerlerini değiştirerek veya yeni bileşenler eklenerek fiziksel olarak yazılıyordu. Abaküsteki sayı boncuklarının yerlerinin değiştirilmesi gibi. Daha sonra fiziksel programlama yerini elektrik sinyaline bıraktı. Artık, kurulan elektronik devrelere düşük ya da yüksek voltajda akım gönderilerek bilgisayarın davranışı belirlenmeye başlandı. Yüksek voltaj 1, düşük voltaj 0 sayılarını ifade ediyordu. Böylelikle bugün de kullanılan programlamanın temelini oluşturan makine dilinin ortaya çıkması için ilk adımlar atılmış oldu. Makine dilinde 0 ve 1’leri kullanarak program yazmak çok zor olduğu için 0 ve 1’ler yerine bazı sembollerin kullanılmaya başlamasıyla Assembly dili geliştirilmiştir.

Programlama Dili Tarihçesi

1957 yılında IBM, makine diline yakın bir programlama dili olan FORTRAN dilini ortaya çıkardı. FORTRAN ile beraber basit mantıksal karşılaştırmalar, döngüler, (true-false) mantıksal ve (integer, double) sayısal değişkenler kullanılmaya başlandı. 1959 yılında, bu programlama dilinin özelliklerini alıp, giriş çıkış (Input – Output IO) gibi yeni işlevler sağlayan COBOL dili ortaya çıktı. Daha sonra 1968 yılında, COBOL ve Fortran dillerinin en iyi özelliklerini alarak Pascal ortaya çıktı. Pascal dili, hafızadaki adresler üzerinde işlem yapmaya olanak veren işaretçi (pointer) kavramını beraberinde getirdi. 1972 yılında C, Pascal dilindeki birçok hatayı gidererek ortaya çıktı. C Programlama Dili ilk defa Unix işletim sistemini yazmak için kullanılmaya başlanmıştır. 

Programlama Dili Türleri

Programlama dili programcının programı yazarken kullandığı özel bir dildir.  Program yazarken dil seçimi, yazılacak programın niteliğine göre yapılmalıdır.  Bilgisayar kullanımının artması teknolojinin gelişmesi ile ihtiyaçlara göre programlama dilleri geliştirilmiştir. Programlama dilleri çalışma mantığı olarak ikiye ayrılır;

  • Düşük Seviyeli diller
    • Makine dilleri (Machine Languages)
    • Birleştirici diller (Assembly Languages)
  • Yüksek seviyeli diller (High-level Languages)
    • Görsel olmayan diller
    • Görsel olan diller

Makine diline daha yakın olana düşük seviyeli diller, yüksek seviyeli dillere oranla daha hızlı çalışır. Yüksek seviyeli dillerden de makine diline yakınlıkları oranında çalışma hızları artar. Bu tür yüksek seviyeli programlama dilleri çalıştırılmadan önce derlenerek byte kodlara yani makine diline dönüştürülerek çalıştırılırlar.

Makine Dili

  • Bilgisayarın doğrudan ve hemen işlem yapmasını sağlayan komutlardan oluşan bir programlama dilidir. Makine dili “010101001” lerden oluşan komutlardır ve bunlar doğrudan makineye hitap eder.
  • Makine dilinde komutlar doğrudan mikroişlemcinin anlayacağı formatta verilir. Bilgisayarlarda değişik mikroişlemciler kullanılabildiği için bir bilgisayar için yazılan makine dili programını başka bir bilgisayarda kullanamayabiliriz.
  • Makine dilinde 0 ve 1’leri kullanarak program yazmak çok zor olduğu için Assembly dili geliştirilmiştir.

Assembly Dili

  • “Assemble” kelimesinden türemiştir. Ufak parçaları toplama, birleştirme anlamını taşır.
  • Bilgisayarın donanım yapısına doğrudan olarak bağlı olduğu için her makinenin kendi Assembly programlama dili vardır.
  • Assembly dili makine dilinin, ikili sayı sistemindeki, komut kodlarının kısaltılmış sözcük ve simgelerden oluşan karşılıklarıdır.
  • 0 ve 1‘ler yerine “MNEMONIC” denilen semboller kullanılır. Bunlar ADD, MOV, JMP, STR gibi sembolik komutlardır.
  • Assembly dilinde yazılan her program çevirici denilen ASSEMBLER’den geçirilerek makine diline çevrilir.

Derleyiciler (Compiler)

  • Derleyicisi compiler olan dillerde yazılan program derleyiciden geçirilerek makine diline dönüştürülür.
  • Bu derleme sırasında yazım hatası, sayısal hata komut sıra hatası vb. gibi hatalar varsa bu hatalar listelenir. Programcı bu hataları gidererek programı yeniden derler.
  • Bu tür programlar ancak bütün olarak derlendikten sonra çalıştırabilir.
  • Derleyici, programın makine kodunu bir kez oluşturarak ayrı bir dosyaya kaydeder.
  • Program her çalıştırıldığında bu kod otomatik olarak kullanılır.
  • C Programlama Dili, C++, PASCAL, COBOL, derleyicisi olan yüksek seviyeli dillerdir.

Yorumlayıcılar

  • Yorumlayıcılar Interpreterde yazılan programların makine diline dönüştüren yazılımlardır. Ancak bu dönüşüm, derleyiciden farklı olarak gerçekleştirilmektedir.
  • Yorumlayıcılar her satırı anında makine diline çevirerek çalışır ve bu kodu bir dosyaya kaydetmez. Dolayısıyla program her çalıştırıldığında her satır yeniden makine koduna dönüştürülür. Bu yüzden yorumlayıcılar yavaş çalışmaktadır.
  • Php, Asp Web programlama dilleri yorumlanarak satır satır makine koduna dönüştürülen dillerdendir.
  • BASIC, DBASE, JAVA hem derleyicisi hem de yorumlayıcısı olan yüksek seviyeli dillerdir.

PROGRAM GELİŞTİRME ADIMLARI

Programlamada asıl olan problem çözümüdür. Problem çözme işleminde ne kadar iyiyseniz o oranda iyi bir programcı olabilirsiniz. Bilgisayar programcılarının program geliştirme yöntemi (Software Development Method) aşağıdaki adımlardan oluşur:

  • Problem
  • Analiz
  • Tasarım (Algoritma)
  • Uygulama (Kodlama)
  • Sınama
  • Bakım
  • Belgeleme

Problem

  • Bu ilk adımda programcı, problemi anlamaya çalışır.
  • Problemin ne olduğunu, çözümde nelerin gerekli olduğunu, lazım olan ön bilgileri belirler.
  • Problem adımı başarılı bir şekilde gerçekleşmeden analiz adımına geçilmemelidir.
  • Problemi anlamanın çözümün yarısı olduğu unutulmamalıdır.

Analiz

  • Bu adımda problemi çözüm için verilen değerler ile programın elde etmesi gereken değerlerin ne olduğu belirlenmelidir.
  • Girdiler ve çıktılar madde madde yazılır. Bu girdi ve çıktı arasındaki ilişki belirlenir.
  • Belirlenen ilişki formüller ile açıklanabilir.
  • Çözüm için bir fikir bulunamamışsa problem tekrar gözden geçirilmelidir.

Tasarım (Algoritma)

  • Problemin çözümü için gerekli olan çözüm aşamalarını mantıksal sıra içerisinde sözde kodlarla yazılması aşamasıdır. Yapılan bu işleme El Harezmi’nin Latincesi olan algoritma (algorithm) adı verilir.
  • İyi bir algoritmanın iki şartı vardır.
    • Bütün adımlar mantıksal bir düzen ve sıra içerisinde verilmeli
    • Verilen adımların tamamı çalıştırılabilir olmalıdır.
  • Algoritmanın oluşturulmasında sözde kod (pseudocode) adı verilen günlük konuşma diline yakın bir dil kullanılabilir. Kullandığı dil programcının kendi inisiyatifine kalmıştır.
  • Problem kendi içinde önemli parçalara ya da alt problemlere ayrılır ve sonra bu alt problemler çözülerek esas problemin çözümüne gidilir.
  • Bu yönteme yukarıdan aşağı tasarım (topdown design) (divide & conquer- böl ve yönet diye de bilinir) adı verilir.
  • Algoritma tasarımının önemli bir parçası da masa incelemesi (desk check) denilen algoritmanın doğru çalışıp çalışmadığının adım adım izlenerek (trace) kontrol edilmesidir.
  • Bu kontrol etme esnasında erkenden fark edilen hatalar programcıya hem zaman kazandıracak hem de boş yere enerji harcamasına mani olacaktır.
  • Algoritma yazarken her bir adıma numara verilir.
  • İlk adım “BAŞLA”, son adımda her zaman “DUR” olur. Algoritmalar sonlu adımdan oluşturulmalıdır.

Örnek:

Klavyeden girilen 10 adet tamsayıdan en büyüğünü bulan programın algoritması son kart yöntemine göre aşağıda verilmiştir.

Algoritma:Çözüm Tablosu
  Adım 1 Başla Adım 2 I=0, Sayi, Enb=0 Adım 3 I=I+1 Adım 4 Oku Sayi Adım 5 Eğer (Sayi>Enb) Enb=Sayi Adım 6 Eğer (I<10) git Adım 3 Adım 7 Yaz Enb Adım 8 Dur  I=0SayiEnb=0Çıktı
0+1à11515
1+1à210
2+1à32020
3+1à414
4+1à52525
5+1à63030
6+1à75050
7+1à822
8+1à97070
9+1à1045Enb: 70

Uygulama (Kodlama)

  • Algoritması oluşturulan programın herhangi bir dilin imla kurallarına uyarak ve komutlarını kullanarak yazılma aşamasıdır.
  • Sözde kodları (Pseudocode), kullanılan programlama diline dönüştürülür.

C Programlama Dili Örnek:

Yukarıdaki klavyeden girilen 10 adet Tamsayıdan en büyüğünü bulan algoritmanın C Programlama Dilinde kodlanması aşağıda verilmiştir;

#include <stdio.h>                               // Ön işlemci direktifi, standart giriş-çıkış kütüphanesi

#include <stdlib.h>                              // Ön işlemci direktifi, standart kütüphane yada başlık dosya

int main(int argc, char *argv[]) {        // Ana fonksiyon ile kod bloğu açıldı

            int I=0, Sayi, Enb=0;               // Tamsayı tipinde değişkenler tanımlandı

            basla:                                        // Döngüyü başlatan etiket tanımlandı

            I=I+1;                                      // Sayaç bir artırıldı

            printf(“%d. sayiyi giriniz: “, I);  // Ekrana I. Sayıyı giriniz iletisi verdirdik

            scanf(“%d”, &Sayi);                   // Klavyeden girdiğimiz sayıyı Sayi değişkenine atadık

            if(Sayi>Enb) Enb=Sayi;             // Koşul gerçekleşiyor ise Sayıyı Enb değişkenine aktardık

            if(I<10) goto basla;                     // Koşul gerçekleştiği sürece basla etiketine gönderdik

            printf(“En buyuk sayi: %d”,Ebn); // Enb değişkenini ekrana yazdırdık

            return 0;                                          // Programı sonlandırdık

}                                                                 // int main() fonksiyonunun kod bloğunu kapattık

Sınama (Test)

  • Program yazıldıktan sonra, uygun aşamalardan geçirilip, verilen girdilere göre uygun çıktılarıüretip üretmediği kontrol edilir.
  • Bu aşamada program girdi olarak verilebilecek tüm değerlere göre; özellikle de uç değerlere göre sınanır.
  • Örneğin girdi olarak bir tamsayı girilmesi gereken programda, girilen sayının negatif olması halinde yapılacak işlemler tanımlanmamış olabilir. Bu gibi durumlar bu aşamada gözden geçirilmelidir.

Bakım

  • Sınama aşamasından sonra ortaya çıkan aksaklıklar varsa bunlar giderilir. Programın kullanıldığı sürece güncellemeleri ve yamaları yapılır.

Lisanslama

  • Programın marka değerinin artması, kullanım kısıtlaması ve telif hakları için alınan önlemlerdir.

AKIŞ DİYAGRAMLARI

  • Algoritma adımlarını şekillerle ifade etme işine akış diyagramı (flow chart) adı verilir.
  • Standartlaşmış şekillerle ifade edilirler.
  • Algoritmadaki ifadeler şekillerin içerisine yazılır.
  • BAŞLA ve DUR şekilleri hariç her bir şeklin anlamı belli olduğundan içlerine tekrar anlamla aynı olacak kelime ve ifadeler yazılmaz.
  • Akış şemalarında tek bir başlangıç simgesi olmalıdır. Bitiş simgesi birden çok olabilir.
  • Döngü sembollerinde iki giriş iki çıkış bulunur. Karar simgesinin haricindeki simgelere her zaman tek giriş ve tek çıkış yolu bulunur.
  • Bağlaç simgesi sayfanın dolmasından ötürü parçalanan akış şemasının öğelerini birleştirmede kullanılır.
  • Simgeler birbirleri ile tek yönlü okla bağlanırlar. Okların yönü algoritmanın mantıksal işlem akışını tanımlar.

AKIŞ DİYAGRAMI ŞEKİLLERİ

ŞEKİLAÇIKLAMAKULLANIMI
Başla – DurBaşla
İşlem – AtamaI=1, Tpl=Tpl+I
Genel Giriş – ÇıkışOku / Yaz
Klavyeden GirişOku
Eğer (Koşul Bildirini, Karar)A>B
DöngüI=1,5,1
Manyetik diskten girişOku
Ekranda görüntülemeGöster
Yazıcı çıktısıYaz
İşlem akışı, bağlayıcı oklar 
Bağlayıcı 

C PROGRAMLAMA DİLİ DEĞİŞKEN (VARIABLE)

Programın farklı adımlarında farklı değerler alabilin tanımlamalara değişken denir. Değişmez ya da sabit değişkenler de vardır. Global ve yerel olarak tanımlanabilirler. Yerel değişkenler tanımlandıkları küme parantezleri içinde geçerli iken, global değişkenler programın her yerinde geçerlidir.

Örneğin bir işçinin çalıştığı gün sayısı 25 iken diğerinin ki 30 olabilir. Program içerisinde değerleri birer isimle temsil etmek zorunluluğu buradan kaynaklanır. Doğrudan sayılar yerine değerleri temsil eden isimler kullanılır.

C Programlama Dili Değişken Tanımlama Kuralları

  • Değişken isimleri içerisinde barındırdıkları ya da başka bir deyişle temsil ettikleri değeri anımsatmak zorundadırlar.
  • Örneğin işçinin maaş değerini tutan değişkenin adı sadece m ya da M da olabilirdi, fakat daha iyi temsil etmesi ve anlaşılırlık açısından maas ismi tercih edilmiştir.
  • İsim seçerken programcı kendisine göre bir sistematik geliştirmeli, sonradan kendisinin baktığında hatırlayabileceği ve hep aynı olan bir yöntem benimsemelidir.
  • Değişken isimleri muhakkak bir a/z ya da A/Z harf ya da altı tire ( _ ) ile başlamalıdır.
  • Yani rakamla başlamazlar ancak rakamla devam edebilirler. Adı sayi1 olan bir değişken olabilir ama adı 1sayi olan değişken olamaz.
  • Değişken isimlerinin içerisinde rakam ya da harf olmayan nokta, virgül, artı, yıldız, tire ( . , + *,- vs.) gibi simgeler ve Türkçe karakterler (ç, İ, ı, ğ, ş, ö, ü) bulunamaz.
  • Eğer değişken ismi iki kelimeden oluşuyorsa, araya boşluk konmaz. Bu durumda birleşik yazılır ya da alt çizgi (_) işareti konulabilir. Yani vize notu yerine vizenotu ya da vize_notu kullanılmalıdır.
  • Değişkenler tanımlandığında ya da değer aldıklarında onlara RAM bellekte bir hücre ayrılır. Değişkenlerin tuttukları değerler bu hücre içerisine yazılırlar.
  • Değişkenler değer aldıklarında bu değerler ayrılan bellek hücrelerine yerleştirilirler. Eğer bir değer aldıktan sonra program içerisinde ikinci bir değer almışlarsa; eski değer silinir, yerine yeni değer yerleşir.
  • Değişkenlerin bellekte ayrılmış hücrelerine değer yazma işine aktarmak anlamında değer atamak (assign) denilir. Değişkenlere değer atama simgesi olarak eşittir ( = ) kullanılır.
  • Bu simgenin anlamı eşitliğin sağındaki değeri (right value), solundaki değişkenin (left value) içerisine ata ya da aktar anlamına gelmektedir.
  • c = 100 emri, “c değişkenine 100 değerini ata” şeklinde düşünülür.  Bu emirden sonra c değişkeninin değeri 100 olmuştur.
  • Her programlama dilinin kendine ayırdığı (reserve) ve komutları için seçtiği sözcükler, anahtar kelimeler vardır. Anahtar kelimeler de değişken ismi olarak kullanılamaz. C dili içerisindeki aşağıdaki anahtar sözcükler, komut veya fonksiyon adları değişken ismi olarak kullanılamaz.

C Programlama Dili Anahtar Kelimeler

asmautobreakcasecdeclcharconstcontinue
defaultdodoubleelseenumexternfarfloat
forgotohugeifintinterruptlongnear
pascalregisterreturnshortsignedsizeofstaticstruct
switchtypedefunionunsignedvoidvolatilewhilefortran
_CS_BD_DI_SI_SP_DS_AX_BX
_CX_DX_ES_AH_BH_CH_DH_SS
_AL_BL_CL_DL    

C PROGRAMLAMA DİLİ SABİTLER (CONSTANT)

  • C Programlama Dili Program içerisinde değeri değişmeyen yapılardır.
  •  Örnek olarak matematikteki Pi sayısı, kimyadaki Avagadro sayısı verilebilir. Bu değerler her zaman aynıdır.
  • Algoritmanın başında tanımlanırlar ve bundan sonrada değerleri değişmez.
  • C Programlama Dili Sayısal sabitler olduğu gibi yazılırlar. Örneğin, girdi olarak verilen yarıçapa göre daire alanını hesaplayan bir algoritmada, alan aşağıdaki gibi hesaplanabilir.
  • alan= 3,14 * r *r
  • Kullanılan bu formülde pi sayısı 3.14 olarak alınmıştır.
  • Bunun anlamı, algoritmaya girilen yarıçap değerleri çok farklı olabilir ama kullanılan pi sayısı hep aynı kalacaktır. Yani sabit kalacaktır. Fakat, sabit de olsa önceden tanımlanarak, sabit değerinin verilmesi iyi bir programcılık alışkanlığı olacaktır.
  • Sayısal olmayan, yani alfasayısal sabitler kullanılırken (“ “ ) tırnak işaretleri arasına alınır.
  • Örneğin ekrana programcının adı yazılacaksa YAZ Ahmet denemez.
  • Buradaki Ahmet kelimesini bilgisayarımız bir değişken ismi olarak algılayacak ve bellek üzerinde adı Ahmet olan bir değişken olup olmadığını araştıracaktır. Varsa değerini yazmaya çalışacaktır.
  • Amaç Ahmet adım ekrana yazdırmaksa, verilecek emri şöyle olmalıdır: YAZ “Ahmet”

C Programlama Dili Örnek:

Aşağıdaki örnekte define ön işlemci direktifi ve const anahtar kelimesi ile tanımlanan PI ve a değişkenleri sabit olarak tanımlanmıştır.

#include <stdio.h>

#define PI 3.14           //Sabit tanımlandı

const int a=5;              // Sabit tanımlandı

int main(int argc, char** argv) {

            printf(“Pi sayisi:  %.2f\n “, PI);

            printf(“a sabit degisken degeri: %d”, a);

//          PI=PI+1; PI sabit olduğu için değeri değiştirilemez

//          a=a+1; a sabit olduğu için değeri değiştirilemez

            return 0;

}

C Programlama Dili Örnek:

Yarıçapı girilen çemberin alanını hesaplayan programı C programlama dilinde yazınız. (Çemberin alanı: pi*r*r)

#include <stdio.h>

#define PI 3.14                         //Sabit tanımladık

int main(int argc, char** argv) {

              float yaricap=6, cemberin_alani;  //Değişkenler tanımladık

              cemberin_alani=PI*yaricap*yaricap;

              printf(“Yaricapi 6 birim olan cemberin alani: %2.f”, cemberin_alani);

              return 0;

}

C PROGRAMLAMA DİLİNE GİRİŞ

C Programlama Dili kendinden önceki programlama dilleri olan B ve BCPL ‘nin gelişmişidir. BCPL 1967’de Martin Richard tarafından işletim sistemi ve derleyici yazmak için üretilen bir dildir. Ken Thompson, BCPL’den etkilenerek B dilinin bir modelini oluşturdu. B dili 1970 ‘de UNIX işletim sisteminin ilk versiyonunu oluşturmak üzere Bell laboratuarlarında uygulandı. C dili Dennis Ritchie tarafından 1972’de AT&T Bell Laboratuarlarında B dilinden geliştirildi. C dili, B ve BCPL’nin önemli genel kavramlarının çoğunu içerir. 1983 yılında C programlama dilini standardize etmek amacıyla toplanan bir komite ANSI C (American National Standart Institute) standardını tanımlamıştır. C başlangıçta birçok kişi tarafından UNIX işletim sistemini geliştiren dil olarak biliniyordu. Günümüzde hemen hemen bütün büyük işletim sistemleri C ya da C++ ile yazılmıştır.

C PROGRAMLAMA DİLİ ÖZELLİKLERİ

  • C Programlama Dili donanımdan bağımsız (machine independent) ve taşınabilirdir (portable). Taşınabilirlik, aynı programın farklı donanımlarda ve farklı işletim sistemlerinde işletilebilirliğini ifade eder.
  • Bir dilin verimliliği (productivity), hızlı fakat fazla yer kaplamayan yazılımlar geliştirmeye olanak sağlaması ile ölçülür. C derleyicisi ve modülleri de az yer kaplar.
  • C programlama dili verimli, basit, fakat güçlü yapısından ve bu dilde geliştirilen uygulamaların taşınabilir olmasından dolayı yaygın olarak kullanılmaktadır.
  • C Programlama Dili, işlemleri  kısa yoldan yapacak bazı deyimlere sahiptir.
  • C Programlama Dili programlarının çalışma hızı, ASSEMBLER’ da yazılmış benzer bir programın hızına erişir. C kodu ASSEMBLER kodundan daha çabuk yazılabileceği için C kullanımı maliyetleri hissedilir şekilde azaltır.
  • C Programlama Dilinde yazılmış ve işlerliği belirli bir donanıma bağımlı olmayan programlar başka bir makineye asgari seviyede değişiklik yapılarak ya da hiçbir değişiklik yapılmadan taşınabilir.
  • C Programlama Dili belli bir donanıma bağımlı program bölümlerini açıkça belirtilmiş ayrı modüller halinde yazılmasını teşvik eder, böylece ileride bir taşıma    söz   konusu olduğunda, asgari gayret sarf edilerek taşınma sağlanır.
  • C Programlama Dili öncelikle sistem programlama için kullanıldı. C’nin sistem programlama için kullanılmasının çeşitli nedenleri vardır.   Genellikle sistem programlarının çabuk çalışması gerekir.

C PROGRAMLAMA DİLİNİN TEMEL YAPISI

  • Bir C programı iki temel bölümden oluşur:
    • Önişlemci Direktifleri (Preprocessor Directives) ve
    • Ana Fonksiyon (main function).

ÖNİŞLEMCİ DİREKTİFİ

  • Önişlemci direktifleri # işareti ile başlar ve program derlenmeden önce C önişlemcisi tarafından işletilir. Her bir önişlemci direktifinin farklı bir görevi vardır.
  • En çok kullanılan iki direktif #include ve #define dır.
  • C programlama dilinde belirli işleri gerçekleştiren program parçaları C’nin temel yapısı içinde yer almaz. Bu nedenle program içinde kullanılan fonksiyonların kendilerinin ya da başlıklarının yer aldığı dosyalar #include direktifi kullanılarak ana programa dahil edilir.
  • Örneğin printf   fonksiyonunun özet bilgisi stdio.h isimli dosyanın içinde yeri almaktadır.

Başlık Dosyaları (Kütüphaneler)

  • C Programlama Dilinde .h uzantılı bu dosyalara başlık (Header)dosyaları adı verilir ve programa ön işlemci direktifi (#include) ile dahil edilirler.
  • Bir programda printf    fonksiyonu kullanılacaksa, programın    başında stdio.h (Standart Input Output) dosyasının #include direktifi ile programa dahil edilmesi gerekir.  Aksi halde printf fonksiyonu kullanılamaz.
  • Bu dosya programa #include <stdio.h> şeklinde int main() fonksiyonunu üstüne yazılarak programadahil edilir.

#include  <stdio.h>   // Standart giriş çıkış kütüphanesini programa dahil ettik

int main() {

      printf(“Programin basinda <stdio.h>   programa dahil edildi”);    // Kod bloğu

      return 0;

}

Aşağıdaki tabloda C Programlama Dili için kullanılan başlık dosyaları gösterilmiştir.

Kütüphaneİçeriği
sdtio.hStandart giriş/çıkış komutları
stdlib.hDönüşüm, sıralama, arama vb. komutları
ctype.hKarakter dönüşüm ve sınıflandırma komutları
math.hMatematiksel fonksiyonlar
string.hAlfasayısal ve bazı bellek yönetim komutları
dos.hDOS fonksiyonları
conio.hDOS destekli giriş/çıkış komutları
graphics.hGrafik ortamı komutları

ANA FONKSİYON (Main Fonksiyonu)

  • Hemen hemen bütün C programları birden fazla fonksiyondan oluşur.
  • main () bütün C programlarında bulunması gereken programın ana gövdesidir. İlk çalıştırılacak olan fonksiyon main () yani ana fonksiyondur.
  • Çalıştırılacak ifadeler (statements) main () fonksiyonu içerisine { } işaretleri arasına yazılır. Açılan her { işareti mutlaka } ile kapatılmalıdır. Bu iki işaret arasında kalan kısımlara blok (block) ismi verilir.
  • En dıştaki { } işaretleri arasında kalan blok programın asıl kısmıdır. Bu kısım, bildiriler (declarations) ve işletilebilir ifadeler (executable statements) olmak üzere iki bölümden oluşur.
    • Bildiriler, bir program içerisinde kullanılacak değişkenleri adlarını belirlemek amacı ile yazılırlar.
    • İşletilebilir ifadeler de yapılacak işlemleri yerine getirecek komutlardır.

C PROGRAMLAMA DİLİ YAZIM KURALLARI

  • C Dili birden fazla satırdan oluşan açıklama satırlarına izin verir. Bu satırlar /* işaretleri ile başlar ve * / işaretleri ile biter ve açıklama (comment) adını alırlar.
  • Programın adı, ne iş yaptığı gibi açıklayıcı bilgi içerirler.
  • Programcı tekrar kendi yazdığı programa dönüp baktığında hatırlayamayacağı önemli yerlere de açıklama yazabilir. Açıklama satırları programın derlenmesi sırasında derleyici tarafından göz ardı edilir, yani dikkate alınmazlar.
  • Bu satırlar sadece programın okunabilirliğini (readability) arttırır ve program üzerinde daha sonra yapılacak çalışmaları kolaylaştırır.
  • İyi programcılık alışkanlıkları açısından programcı açıklama satırları yazmaya özen göstermelidir.
  • C programlama dilinde bütün ana kelimeler ve komutlar küçük harfle yazılır. (# define direktifi hariç ) C büyük-küçük harf duyarlıdır (case sensitive). Yani “TOPLAM”, “toplam” ve “tOpLaM” kelimelerinin hepsi C derleyicisi tarafından farklı algılanırlar.
  • Program yazım kuralları içerisinde olmasa dahi programlarımızı yazarken okunabilirliliği arttırmak için ana ifadeleri sola dayalı bloklar içerisine yazılan ifadeleri ise 3 boşluk girinti (indent) verilerek içenden yazmaya özen gösterilmelidir.
  • Bir C programında birden fazla blok kullanılacaktır. Blok içindeki ifadelerin 3 boşluk girinti verilerek içeriden yazılması program stilinin düzgün olmasını sağlayacak bu da anlaşılabilirlik ve okunabilirliği arttıracaktır.

C PROGRAMLAMA DİLİ OPERATÖRLER (İŞLEÇLER)

  • İşleç (operatör), matematiksel, mantıksal ve atama işlemlerini gerçekleştirmek için kullanılan simgelerdir.
  • Bu işleçler ile işleme giren değerlere de işlenen (operand) adı verilir.
  • Operatörler birden fazla operand alabilirler.
  • Tek operand alanlara unary operatörler denir.
MatematiktekiC DilindekiİşlemKullanımı
. veya x veya hiçbir şey*ÇarpmaA=B*C
Mod%Bölümünden kalanA=B%C
//BölmeA=B/C
+1++1 artırma (unary increment)A++
-11 eksiltme (unarydecrement)A–
++ToplamaA=B+C
ÇıkarmaA=B-C

C PROGRAMLAMA DİLİ ATAMA (ASSİNG) İŞLEÇLER

C Programlama Dili Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

            int a=5, b=8, c=18;

//          c%=a;

//          c+=5;

//          c-=5;

//          c/=5;

            c*=5;

            printf(“C sonuc: %d\n”,c);

            return 0; }

Artırma ve Eksiltme Operatörlerinin Kullanımı

Operatörİşlemlerde Kullanımı
A++ (postincrement)Önce A’yı ilk değeri ile kullanır, sonra değerini 1 artırır.
++A (preincrement)Önce A’yı 1 artırarak, artırılmış değeri kullanır.
A– (postdecrement)Önce A’yı ilk değeri ile kullanır, sonra değerini 1 eksiltir.
–A (predecrement)Önce A’yı 1 eksilterek, eksiltilmiş değeri kullanır.

Aşağıdaki tablo için a=4, b=5 değerleri atanmıştır.

Arttırma ve eksiltme operatörlerini kullanırken ifadeleri yoruma mahal bırakmayacak şekilde anlaşılır ve açık bir şekilde yazmalıdır. c=a+++b; ifadesinde ++ , a değişkenine mi aittir yoksa b değişkenine mi aittir?  Derleyiciler de burada takılacakları için hangisine aitse ona göre bir boşluk bırakılmalıdır. Farklı derleyiciler farklı şekilde yorumlayabilir. Ya    c=a++  +b       ya  da  c=a+  ++b şeklinde yazmak daha doğru olacaktır.

Aşağıdaki örneklerle değişken değer değişimlerini inceleyiniz.

C Programlama Dili Örnek:

#include <iostream>

using namespace std;

  int main(){

              int x=5, y=2, z=20;

                          z=y* ++x + ++y;

                          cout<<“x degeri: “<<x<<endl; //6

                          cout<<“y degeri: “<<y<<endl; //3

                          cout<<“z degeri: “<<z<<endl; //15

  return 0;         

}

C Programlama Dili Örnek:

#include <iostream>

using namespace std;

            int main(){

                        int x=5, y=2, z=20;

                                    z=y* x++ + y++;

                                    cout<<“x degeri: “<<x<<endl; //6

                                    cout<<“y degeri: “<<y<<endl; //3

                                    cout<<“z degeri: “<<z<<endl; //12

            return 0;         

}

C Programlama Dili Örnek:

#include <iostream>

using namespace std;

            int main(){

                        int x=5.92;

                        float y=15.69;

                        double z=34.25;

                        –x;

                        y–;

                        ++z;

                                    cout<<“x degeri: “<<x<<endl; //4

                                    cout<<“y degeri: “<<y<<endl; //14.69

                                    cout<<“z degeri: “<<z<<endl; //35.25

            return 0;         

}

C PROGRAMLAMA DİLİ KARŞILAŞTIRMA OPERATÖRLERİ

Matematik SembolüC Dilindeki SembolüC Dilimdeki AnlamıKoşul İçinde KullanımıKoşul İçinde Okunuşu
Büyüktürif(a>b)Eğer a büyüktür b ise
Küçüktürif(a<b)Eğer a küçüktür b ise
>=Büyük ya da eşitif(a>=b)Eğer a büyük ya da eşit b ise
<=Küçük ya da eşitif(a<=b)Eğer a küçük ya da eşit b ise
== =Eşittirif(a==b)Eğer a eşittir b ise
!=Eşit değildirif(a!=b)Eğer a eşit değildir b ise

C PROGRAMLAMA DİLİ MANTIKSAL OPERATÖRLER

Matematik SembolüC Dilindeki SembolüC Dilimdeki AnlamıKoşul İçinde KullanımıKoşul İçinde Okunuşu
 &&Ve (And)  
V||Veya (Or)  
!Değil (Not)  

VE (AND, &&)

VEYA (OR, ||)

İŞLEM ÖNCELİK SIRASI

C PROGRAMLAMA DİLİ DEĞİŞKEN ATAMALARI VE VERİ TÜRLERİ

  • Kullanılacak bütün değişkenlerin kullanılmadan önce C derleyicisine bildirilmeleri gerekir.
  • Derleyiciye değişkenleri bildirme işine, değişken tanımlamak (variable definition) denir.
  • Değişken tanımlamak, değişken için bir isim seçmek ve içerisinde ne tür bir veri saklayacağını söylemekle yapılır.
  • Her değişkenin ismi, veri türü ve değeri (value) vardır.
  • Değişken ismi değişkeni saklamak içinayrılmış hafıza hücresine verilecek isim; veri türü saklanan bilginin türü (ondalık sayı, tamsayi…), değer ise değişken içinde saklanan bilginin kendisidir.

C PROGRAMLAMA DİLİ VERİ TÜRLERİ

  • Program içerisinde kullanılacak değerlerin türünü belirlerler.
  • C Programlama Dili içerisindeki temel veri türleri char,   int,   float ve double’dır.
  • Bir harf, bir rakam veya özel bir simgeyi saklayabilirler.
  • char  tipindeki her değer tek tırnak ‘ ‘ karakteri arasında yazılmalıdır.
  • ‘A’ ‘z’ ‘2’ ‘*’ ‘:’ ‘ ’
  • Yalnız aktarılan karakterler hafızada karakter olarak değil, ASCII tablosundaki sayısal karşılıkları ile tutulurlar.
  • İnt, -32768 ile 32767 arasındaki tamsayı değerleri saklamak   için   kullanılır.  
  • C’ de   işaretsiz   yazılmış   bir   sayı   pozitif olarak algılanacaktır.
  • Float, ondalıklı olarak verilen sayıları ifade etmek için kullanılan değerleri
    tanımlamak için kullanılır.
  • Ondalıklı olarak verilen çok küçük ve çok büyük sayıları ifade etmek için kullanılan değerleri tanımlamak için kullanılır.
  • Double, float   türünden iki kat daha fazla duyarlılığa sahiptir.

C PROGRAMLAMA DİLİ VERİ DEĞER ARALIKLARI

VERİ TÜRÜBİT GENİŞLİĞİALT SINIRÜST SINIRFORMAT TANIMLAYICISI
printf()scanf()
char8-128127%c%c
unsigned char80255%c%c
signed char8-128127%c%c
int16 veya 32-32.768 veya -2.147.483.64832.767 veya 2.147.483.647%d%d
unsigned int16 veya 32065.535 veya 4.294.967.295%u%u
short int16-32.76832767%hd%hd
unsigned short int16065.535%hu%hu
long int32-2.147.483.6482.147.483.647%ld%ld
long long int (C99)64−9.223.372.036.854.775.8089.223.372.036.854.775.807%lld%lld
unsigned long int3204.294.967.295%lu%lu
unsigned long long int (C99)64018.446.744.073.709.551.615%llu%llu
float323.4E-383.4E+38%f%f
double641.7E-3081.7E+308%f%lf
long double803.4E-49321.1E+4932%Lf%Lf

C PROGRAMLAMA DİLİ DEĞİŞKEN TANIMLAMA

  • Standart C Programlama Dilinde üç ayrı yerde değişken tanımlanabilir.
    • Main fonksiyonundan önce,
    • Bloklar başlar başlamaz yani { ve } işaretleri arasında ve
    • Fonksiyonlarda parametre olarak tanımlanabilirler.
  • Bu üç tanımlama yerinin kendine göre farklılıkları vardır.

DeğişkenTürü değişkenAdı ;

  • long int maaş ;
  • değişken isminden sonra atama işareti olan = kullanılarak ilk değer ataması da yapılabilir.
  • İçerisinde ilk değer olmayan değişkenlerin içerisindeki değerler tanımlanma yerine göre değişir.
  • int a; a=1; yerine int a=1; aynı ifadelerdir.
  • int a, b, c;
  • Aynı satırda aynı türde olan değişkenler tanımlanabilir. Okunabilirlik açısından her virgülden sonra bir boşluk bırakılır.
  • char m=’k’;
  • double n=5.05;
  • main fonksiyonunun üstünde tanımlanan değişkenlerin ilk değerleri verilmemişse otomatik olarak sayısal olanlar 0 diğerleri boş olarak belirlenirler. Fakat fonksiyon içerisinde tanımlanan değişkenlerin ilk değerleri verilmediğinde hafızada tanımlandıkları yerdeki bulunan rasgele değerler olacaktır. Bu konuya çok dikkat edilmesi gerekir.

Örnek:

#include <stdio.h>

#include <stdlib.h>

#define PI 3.14 //Sabit

const int a=5;  //sabit

int main(int argc, char *argv[]) {

            int sayi=15;

            char harf=’x’;

            char harf1=’xyz’;

            char harf2=’57’;

            float ondalik=14.65894789;

            double ondalik1=14.65894789;

            printf(“Sayi degeri……..: %d\n”,sayi);

            printf(“Pi degeri……….: %.2f\n”,PI);

            printf(“Pi degeri……….: %6.2f\n”,PI); //toplam 6 karakter yazdırdı

            printf(“Harf degeri……..: %c\n”,harf);

            printf(“Harf degeri……..: %c\n”,harf1);//Son harfi yazar

            printf(“Harf degeri……..: %c\n”,harf2);//57’nin 7’sini karakter olarak yazar

            printf(“Float sayi degeri..: %f\n”,ondalik);

            printf(“Double sayi degeri.: %.10f\n”,ondalik1);

            return 0;

}

C PROGRAMLAMA DİLİ VERİ TÜRÜ ÖRNEKLERİ

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi=5;

  float sayi1=25.30;

  double sayi2=16.75;

  char harf=’x’;

  printf(“Sayi degeri: %d\n”,sayi);

  printf(“Sayi1 degeri: %.2f\n”,sayi1);

  printf(“Sayi2 degeri: %.3f\n”,sayi2);

  printf(“harf degeri: %c\n”,harf);

  return 0;

}

Örnek:

C Programlama Dili;

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi, sayi1;

  char harf;

  float ondalik;

  double ondalik1;

  printf(“Harf giriniz: “);

  scanf(“%c”,&harf);

  printf(“Sayiyi giriniz: “);

  scanf(“%d”,&sayi);//Veri girişi

  printf(“float giriniz: “);

  scanf(“%f”,&ondalik);

  printf(“double giriniz: “);

  scanf(“%lf”,&ondalik1);

  printf(“Harf degeri……..: %c\n”,harf);

  printf(“Sayi degeri……..: %d\n”,sayi);

  printf(“Float sayi degeri..: %.2f\n”,ondalik);

  printf(“Double sayi degeri.: %.2f\n”,ondalik1);

  return 0;

}

Veri boyutları

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi=5;

  float sayi1=25.30;

  double sayi2=16.75;

  char harf=’x’;

  printf(“Sayi degeri: %d\n”,sayi);

  printf(“Sayi1 degeri: %.2f\n”,sayi1);

  printf(“Sayi2 degeri: %.3f\n”,sayi2);

  printf(“harf degeri: %c\n”,harf);

  printf(“int veri tipi bellekte %d byte alan kaplar.\n”,sizeof(int));

  printf(“float veri tipi bellekte %d byte alan kaplar.\n”,sizeof(float));

  printf(“double veri tipi bellekte %d byte alan kaplar.\n”,sizeof(double));

  printf(“char veri tipi bellekte %d byte alan kaplar.\n”,sizeof(char));

  printf(“long int veri tipi bellekte %d byte alan kaplar.\n”,sizeof(long int));

  printf(“short int veri tipi bellekte %d byte alan kaplar.\n”,sizeof(short int));

  return 0; }

Klavyeden Giriş

C Programlama Dili;

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi;

  float sayi1;

  double sayi2=20.55;

  char harf, harf1;

  printf(“harf giriniz: “);

  harf1=getchar();

  scanf(“%c”,&harf);

  printf(“Sayi giriniz: “);

  scanf(“%d”,&sayi);

  printf(“Sayi1 giriniz: “);

  scanf(“%f”,&sayi1);

  printf(“Sayi2 giriniz: “);

  scanf(“%f”,&sayi2);

  printf(“Sayi degeri: %d\n”,sayi);

  printf(“Sayi1 degeri: %.2f\n”,sayi1);

  printf(“Sayi2 degeri: %f\n”,sayi2);  

  printf(“harf degeri: %c\n”,harf);

  printf(“harf1 degeri: %c\n”,harf1);

  return 0;

}

Ters slash (escape karakterler)

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi;

  printf(“merhaba\n”);

  printf(“merhaba\n”);

  printf(“\”Ahmet\”\n”);

  printf(“\tmerhaba\a\n”);

  return 0;

}

Örnek:

C Programlama Dili;

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  printf(“\”C\” sonuc:\t %d\n\a”,c);

  printf(“\\A\n”);

  return 0;

  }

Son Kart Uygulama

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi, i=0, t=0;

  basla:

  i+=1;

  printf(“%d. sayiyi giriniz: “,i);

  scanf(“%d”,&sayi);

  t+=sayi;

  if(i<5) goto basla;

  printf(“Sonuc: %d”,t);

  return 0;

}

C PROGRAMLAMA DİLİ UYGULAMALARI

Toplama yöntemiyle çarpma işlemi

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi, sayi1, i=0, sonuc=0;

  printf(“1. Sayiyi giriniz: “);

  scanf(“%d”,&sayi);

  printf(“2. Sayiyi giriniz: “);

  scanf(“%d”,&sayi1);

  bas:

  i=i+1;

  sonuc=sonuc+sayi;

  if(i<sayi1) goto bas;

  printf(“Sayilarin carpimi: %d”,sonuc);

  return 0;

}

Çıkarma yöntemiyle bölme işlemi

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi, sayi1, i=0;

  printf(“1. Sayiyi giriniz: “);

  scanf(“%d”,&sayi);

  printf(“2. Sayiyi giriniz: “);

  scanf(“%d”,&sayi1);

  bas:

  if(sayi>=sayi1){

  sayi=sayi-sayi1;

  i=i+1;

  goto bas;         

  }

  printf(“Sayilarin bolumu: %d\n”,i);

  printf(“Bolumunden kalan: %d\n”,sayi);

  return 0;

}

İf yapısı yalın

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a, b;

  printf(“a sayiyisini giriniz: “); scanf(“%d”,&a);

  printf(“b sayiyisini giriniz: “); scanf(“%d”,&b);

  if(a>b)

              printf(“%d sayisi buyuktur.”,a);        

  if(b>a){

              printf(“%d sayisi buyuktur.”,b);

              printf(“\nAziz”);

  }

  if(a==b)

              printf(“%d sayisi esittir %d sayisina”,a,b);

  printf(“\n***********.”);     

  return 0;

}

İf else

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a, b, ort;

  printf(“a sayiyisini giriniz: “); scanf(“%d”,&a);

  printf(“b sayiyisini giriniz: “); scanf(“%d”,&b);

  ort=a*0.3+b*0.7;

  if(ort>=50)

              printf(“%d ortalama ile gectiniz”,ort);          

  else

              printf(“%d ortalama ile kaldiniz”,ort);

  printf(“\n***********”);      

  return 0;

}

Örnek:

C Programlama Dili;

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a;

  printf(“1. Sayiyi giriniz: “);

  scanf(“%d”,&a);;

  if(a%2==0)

  printf(“%d sayisi cifttir.”,a);

  else

  printf(“%d sayisi tektir.”,a);

  printf(“\nProgram kodu.”);

  return 0;

}

Else if else

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a, b, ort;

  printf(“a sayiyisini giriniz: “); scanf(“%d”,&a);

  printf(“b sayiyisini giriniz: “); scanf(“%d”,&b);

  ort=a*0.3+b*0.7;

  if(ort<50)

              printf(“%d ortalama ile kaldiniz”,ort);          

  else if(ort<70)

              printf(“%d ortalama ile cc ile gectiniz”,ort);

  else if(ort<85)

              printf(“%d ortalama ile bb ile gectiniz”,ort);

  else

              printf(“%d ortalama ile aa ile gectiniz”,ort);

  printf(“\n***********”);      

  return 0;

}

Switch case

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int gun;

  printf(“Gun rakamini giriniz: “); scanf(“%d”,&gun);

  switch(gun){

              case 1:{

                          printf(“%d. gun pazartesidir.”,gun);

                          break;

              }

              case 2:{

                          printf(“%d. gun sali.”,gun);

                          break;

              }

              case 3:{

                          printf(“%d. gun carsamba.”,gun);

                          break;

              }

              case 4:{

                          printf(“%d. gun persembe.”,gun);

                          break;

              }

              case 5:{

                          printf(“%d. gun cuma.”,gun);

                          break;

              }

              case 6:{

                          printf(“%d. gun cumartesi.”,gun);

                          break;

              }

              case 7:{

                          printf(“%d. gun pazar.”,gun);

                          break;

              }

              default :{

                          printf(“Hafta dedigin 7 gundur.”);

                          break;

              }

  }

  printf(“\n***********”);      

  return 0;

}

Switch case (char)

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

 char harf;

 printf(“harf giriniz: “);scanf(“%c”,&harf);

// harf=getchar();

//printf(“harf: %c”,harf);

switch(harf){

  case ‘a’:{

              printf(“a girdiniz”);

              break;

  }

  case ‘b’:{

              printf(“b girdiniz”);

              break;

  }

  case ‘c’:{

              printf(“c girdiniz”);

              break;

  }

  case ‘d’:{

              printf(“d girdiniz”);

              break;

  }

  default:{

              printf(“a, b, c, ya da d giriniz”);

              break;

  }

}

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a=5, b=7, c=10;

  a++;

  ++a;

  b–;

  –b;

  a+=2;

  b-=2;

  c/=2;

  c%=2

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a=5, b=7, c=10;

  c+=++a + –b;

  printf(“a: %d\n”,a); //6

  printf(“b: %d\n”,b);//6

  printf(“c: %d\n”,c);//22

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a=5, b=7, c=10;

  c+=a++ + –b;

  printf(“a: %d\n”,a);//6

  printf(“b: %d\n”,b);//6

  printf(“c: %d\n”,c);//21

  printf(“\n***********”);      

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a=5, b=7, c=10;

  c+=a++ + –b;

  c=++b;

  c=5;

  printf(“a: %d\n”,a);

  printf(“b: %d\n”,b);

  printf(“c: %d\n”,c);

            return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a=5, b=7, c=10;

  c+=a++ + –b;

  c=++b;

  c=5;

  printf(“a: %d\n”,(++a));//7

  printf(“b: %d\n”,b);//7

  printf(“c: %d\n”,c);//5

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int a=10, b=3, c;

  a=b++;

  c=++a;

  printf(“a: %d\n”,a);//4

  printf(“b: %d\n”,b);//4

  printf(“c: %d\n”,c);//4

  return 0;

}

Switch case yapısı

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int gun;

  printf(“Gun sayisi giriniz: “);

  scanf(“%d”,&gun);

  switch(gun){

              case 1:{

                          printf(“%d . gun pazartesi”,gun);

                          break;

              }

              case 2:{

                          printf(“%d . gun sali”,gun);

                          break;

              }

              case 3:{

                          printf(“%d . gun carsamba”,gun);

                          break;

              }

              case 4:{

                          printf(“%d . gun persembe”,gun);

                          break;

              }

              case 5:{

                          printf(“%d . gun cuma”,gun);

                          break;

              }

              case 6:{

                          printf(“%d . gun cumartesi”,gun);

                          break;

              }

              case 7:{

                          printf(“%d . gun pazar”,gun);

                          break;

              }

              default:{

                          printf(“Hafta dedigin 7 gundur.”,gun);

                          break;

              }

  }

  return 0;

}

 C PROGRAMLAMA DİLİ DÖNGÜLER

Genel olarak döngü, döngüye bağlı kod bloğunu istediğimiz sayıda ya da verdiğimiz koşul gerçekleştiği sürece çalıştıran yapılara döngü denir. Yapısal programlama dillerinde bloğun tekrarlanabilir olmasını sağlayan döngü yapıları bulunur. C dilinde 3 adet döngü bulunmaktadır. Bunlar;

  • for döngüsü
  • while döngüsü
  • do while döngüsü

For Döngüsü

En çok tercih edilen döngülerden biridir, for döngüsüdür. for döngüsü yapısı itibariyle tek satırdan oluşmaktadır. Ancak bu tek işlem satırı ile istediğiniz bir kod bloğunu istediğiniz kadar tekrar etmesini sağlayabiliriz. Koşul gerçekleştiği sürede kod bloğu çalışır. for döngüsünün genel yapısı aşağıdaki gibidir:

for(ilkDeger; koşul; adimDegeri){

Kodlar;

}

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

            int i;

            for(i=1;i<=10;i++){

                        if(i==5)continue;

                        printf(“%d\n”,i);         

            }

            return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

            int i, tpl=0, sayi;

            for(i=1;i<=10;i++){

                        printf(“%d. sayiyi giriniz: “,i);scanf(“%d”,&sayi);

                        if(sayi<0)continue;

                        tpl+=sayi;

            }

            printf(“Sayilarin toplami: %d”,tpl);  

            return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i, sayi, tpl=0;

  for(i=1;i<=10;i++){

              printf(“%d. Sayi giriniz: “,i);

              scanf(“%d”,&sayi);

              if(sayi<0)continue;

              tpl+=sayi;                   

  }

              printf(“Toplam: %d”,tpl);

  return 0;

}

Örnek:

Klavyeden girilen 10 adet pozitif tamsayıdan çift olanların adeti ve toplamını bulan programı yazınız.

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i, tpl=0, sayi,syc=0;

  for(i=1;i<=10;i++){

              printf(“%d. sayiyi giriniz: “,i);scanf(“%d”,&sayi);

              if(sayi<0)continue;

              if(sayi%2==0){

                          syc+=1;

                          tpl+=sayi;

              }

  }

  printf(“Ciftsayilarin toplami: %d\n”,tpl);

  printf(“Ciftsayilarin adeti: %d\n”,syc);         

  return 0;

}

Faktoriyel

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int sayi, fakt=1, i;

  printf(“Sayiyi giriniz: “);

  scanf(“%d”,&sayi);

  for(i=1;i<=sayi;i++){

              fakt*=i;

  }

  printf(“%d’ni faktoriyeli: %d\n”,sayi,fakt);

  return 0;

}

İç İçe For Döngüsü Örneği

Her turun alt toplamı ekrana verilmiştir.

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

            int i, j, k=5, s=0;

            for(i=1;i<=3;i++){

                        for(j=1;j<=4;j++){

                                    s+=1;

                                    printf(“%d. tur alt toplam: %d+%d*%d= %d\n”,s,k,i,j,k+i*j);

                                    k=k+i*j;

                        }

                        printf(“\n******************************\n”);

            }

            printf(“Sayilarin toplami: %d”,k);

            return 0;

}

While Döngüsü

While döngüsü de C dilinde sıkça kullanılan döngülerdendir. Kullanım yeri olarak fark olmasa da yapısal olarak for döngüsünden biraz farklıdır. Koşul gerçekleştiği sürede kod bloğu çalışır. Yapısı aşağıdaki gibidir:

while(koşul){

kodlar;

artırma ya da eksiltme;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i=11, sayi, tpl=0;

  while(i<=10){

              printf(“%d. Sayi giriniz: “,i);

              scanf(“%d”,&sayi);

              if(sayi<0)continue;

              tpl+=sayi;       

              i++;     

  }

              printf(“Toplam: %d”,tpl);

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i=1;

  while(i<=10){

              printf(“%d. Ankara\n”,i);

              i++;

  }

            return 0;

}

Örnek:

Klavyeden girilen bir rakamin faktöriyelini bulan programı yazınız.

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i=1, fak=1, sayi;

  printf(“Bir rakam giriniz: “);scanf(“%d”,&sayi);

  while(i<=sayi){

              fak*=i;

              i++;

  }

  printf(“%d’nin faktoriyeli: %d”,sayi,fak);

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i=1, fak=1, sayi;

  bas:

  printf(“Bir rakam giriniz: “);scanf(“%d”,&sayi);

  if(sayi>=0){

              while(i<=sayi){

              fak*=i;

              i++;

  }

  printf(“%d’nin faktoriyeli: %d”,sayi,fak);

  }         

  else{

              printf(“pozitif deger giriniz: \n”);

              goto bas;

  }

              return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i=1, sayi, as=0;

  printf(“Sayi giriniz: “); scanf(“%d”,&sayi);

  if(sayi>=2){

              while(i<=sayi){

                          if(sayi%i==0)

                                      as+=1;

                          i++;

              }

              if(as==2)

                          printf(“%d sayisi asaldir.”,sayi);

              else

                          printf(“%d sayisi asal degildir.”,sayi);

  }

  else

  printf(“birden buyuk bir sayi giriniz. “);

  return 0;

}

Do while Döngüsü

Döngülerden for ve while döngüsü her ne kadar yapısal olarak farklı olsa da ikisi de aynı şekilde çalışmaktadır. Yani şart sağlandığı sürece döngüye girer sağlanmazsa girmez.

Ancak do while döngüsünde şart sağlansın ya da sağlanmasın döngüye 1 kere girilir. Bunun sebebi de döngü koşulunun döngünün sonunda sorgulanıyor olmasıdır. Koşul sağlandığı sürece de döngü bloğu çalıştırılır.

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i=1, sayi, tpl=0;

  do{

              printf(“%d. Sayi giriniz: “,i);

              scanf(“%d”,&sayi);

              if(sayi<0)continue;

              tpl+=sayi;       

              i++;     

  }          while(i<=10);

              printf(“Toplam: %d”,tpl);

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int i=15;

  do{

              printf(“i’nin degeri: %d\n”,i);

              i++;

  }while(i<=10);

  return 0;

}

C PROGRAMLAMA DİLİ FONKSİYONLAR

#include <stdio.h>

#include <stdlib.h>

void yaz(){

  printf(“Merhaba Dunya\n”);

  printf(”  Ahmet\n”);

}

void topla(){

  int a=10,b=20,c;

  c=a+b;

  printf(“Toplam :%d\n”,c);

}

int main() {

  yaz();  // yaz çağrıldı

  topla();  // topla çağrıldı

  printf(“\n***********”);      

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

void toplam(int x, int y){

  int sonuc;

  sonuc=x+y;

  printf(“Fonksiyonun sonucu: %d\n”,sonuc);

}

int main() {

  toplam(20,50);

  int a, b;

  printf(“a giriniz: “); scanf(“%d”,&a);

  printf(“b giriniz: “); scanf(“%d”,&b);

  toplam(a,b);

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

void toplam(int x, int y){

  int sonuc;

  sonuc=x+y;

  printf(“Fonksiyonun sonucu: %d\n”,sonuc);

}

void faktor(int x){

  int i, fak=1;

  for(i=1;i<=x;i++){

              fak*=i;

                          }

                          printf(“Faktoriyel: %d\n”,fak);

}

int main() {

  int a, b;

  toplam(20,50);

  printf(“a giriniz: “); scanf(“%d”,&a);

  printf(“b giriniz: “); scanf(“%d”,&b);

  toplam(a,b);

  faktor(a);

  faktor(6);        

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

void toplam(int x, int y){

  int sonuc;

  sonuc=x+y;

  printf(“Fonksiyonun sonucu: %d\n”,sonuc);

}

int topla(int x, int y){

  int sonuc;

  sonuc=x+y;

  return sonuc;

}

int fark(){

  int sonuc, a=50,b=25;

  sonuc=a-b;

  return sonuc;

}

void faktor(int x){

  int i, fak=1;

  for(i=1;i<=x;i++){

              fak*=i;

                          }

                          printf(“Faktoriyel: %d\n”,fak);

}

int main() {

  int a, b,c;

  printf(“a giriniz: “); scanf(“%d”,&a);

  printf(“b giriniz: “); scanf(“%d”,&b);

  toplam(a,b);

  c=topla(20,30);

  printf(“Topla sonucu: %d\n”,c);

  printf(“Topla sonucu: %d\n”,topla(50,250));

  printf(“Fark sonucu: %d\n”,fark());  

  return 0;

}

C PROGRAMLAMA DİLİ STDIO.H FONKSİYONLARI

Bu kütüphane dosyalarla ilgili bir kütüphanedir.

  • fclose Dosyayı kapatır
  • fcloseall Tüm dosyaları kapatır
  • fgetc Dosyadan karakter alır
  • fgetchar Karakter alır
  • fgets Dosyadan karakter katarı alır
  • fopen Dosya açar
  • fprintf Dosyaya formatlı yazı yazar
  • fputc Dosyaya karakter yazar
  • fputchar Karakter gösterir
  • fscanf Dosyadan formatlı okur
  • fwrite Yapısal dosyaya veri kaydeder
  • getc Dosyadan karakter alır
  • getchar Karakter alır Printf Ekrana formatlı yazar
  • putc Fputc fonksiyonu ile aynı işlevi yapar, farkı makro olmasıdır
  • putchar fputchar fonksiyonu ile aynı işlevi yapar, farkı makro olmasıdır
  • scanf Ekrandan formatlı okur

C PROGRAMLAMA DİLİ STDLIB.H FONKSİYONLARI

Standart kütüphane olarak ifade edilen bu kütüphanede veri dönüşümü, bellek yerleşimi ve diğer işlemleri içeren makro ve bir grup güçlü fonksiyonlar bulunur. Ayrıca Math.h da bulunmayan bazı matematiksel fonksiyonlar bulunmaktadır.

  • exit( ) Programın çalışmasını durdur
  • lrotl( ) Unsigned long sayıyı sola döndür
  • lrorr( ) Unsigned long sayıyı sağa döndür
  • rotl( ) Tamsayıyı sola döndür
  • rotr( ) Tamsayıyı sağa döndür
  • atexit( ) Fonksiyondan çıkarken kaydet
  • atof( ) Karakter katarını float sayıya çevir
  • atoi( ) Karakter katarını int sayıya çevir
  • atol( ) Karakter katarını long int sayıya çevir
  • bsearch( ) İkili diziyi ara
  • calloc( ) Dinamik bellek kullanımını başlat
  • ecvt( ) float sayıyı karakter katarına çevir
  • free( ) Dinamik yerleştirilmiş diziyi serbest bırak

Stdlib.h Kütüphanesinde Verilmiş Matematiksel Fonksiyonlar

  • Max(x,y) ve Min(x,y): Bu iki fonksiyon verilen iki sayı olan x ve y değerlerini karşılaştırarak en büyük ve en küçük olan değeri bulan fonksiyonlardır ve aşağıda gösterilen makrolar olarak tanımlanmıştır.
  • #define max(x,y) ((x > y) ? (x) : (y))
  • #define min(x,y) ((x < y) ? (y) : (y))
  • div(x,y): Verilen iki int tamsayıyı böler.
  • rand: Bu fonksiyon 0 ile RAND_MAX arasında 232 peryotlu rastgele bir sayı üretir. Sembolik sabit RAND_MAX, stdlib.h içinde tanımlanmıştır ve değeri 215 -1 dir.

Diğer rastgele sayı üretme fonksiyonları random, srand, randomize dir. Bu fonksiyonlar simülasyon programlarında belli aralıkta rasgele sayı üretmek için kullanılır.

C PROGRAMLAMA DİLİ CONIO.H FONKSİYONLARI

Bilgisayar ekranını en iyi kullanmak için gerekli bir kütüphanedir. Pencere açma, ekran modunu kontrol etme, renk belirleme gibi ekran işlemleri bu kütüphanede yapılır.

  • clreol( ): Kürsörün bulunduğu yerden itibaren satırın sonuna kadar olan tüm karekterleri ekrandan siler. Kürsör olduğu yerde kalır.
  • clrscr( ): Ekranı temizler. Kürsor ilk satır, ilk sütuna konumlanır.
  • delinle( ): Kürsörün bulunduğu satırı siler.
  • getch( ): Karakteri göstermeden, bir karakter girilmesini bekler.
  • gotoxy(sütun,satır): Kürsörün ekranda, istenilen satır ve sütuna gitmesini sağlar.
  • highvideo( ): Karakterlerde parlak tonu seçer.
  • insline( ): Kürsörün bulunduğu yere yeni bir satır açar.
  • lowvideo( ): Karakterlerde soluk tonu seçer.
  • normvideo( ): Görüntü rengini ilk renge dönüştürür.
  • textbackground(renk): Ekranın zemin rengini, renk ile belirtilen renge çevirir.
  • textcolor(renk): Ekranın yazı rengini, renk ile belirtilen renge çevirir.
  • wherex( ): Kürsörün o anda bulunduğu sütun numarasını saklar.
  • wherey( ): Kürsörün o anda bulunduğu satır numarasını saklar.
  • window(x1,y1,x2,y2): Ekran üzerinde bağımsız pencere oluşturur. Oluşturulan pencere başlı başına bir ekran gibidir.

C PROGRAMLAMA DİLİ STRING.H FONKSİYONLARI

  • Hafızada bulunan karakter dizileri (string) ile ilgili işlemler için kullanılır.
  • Birleştirme strcat, strncat
  • Değiştirme strlwr, strupr, strset, strrev
  • Arama strchr Kopyalama strcpy, strncpy
  • Karşılaştırma strcmp, strncmp

Birleştirme Fonksiyonları

  • strcat(s1,s2): s1 ile belirtilen stringin sonuna, s2 ile belirtilen stringi ekler.
  • strncat(s1,s2,n): s1 ile belirtilen stringin sonuna, s2 ile belirtilen stringin n tane karakterini ekler.

Değiştirme Fonksiyonları

  • strlwr(s1): s1 karakter dizisindeki tüm harfleri küçük harfe çevirir.
  • strupr(s1): s1 karakter dizisindeki tüm harfleri büyük harfe çevirir.
  • strset(s1,karakter): Parametre olarak verilen stringin tüm karakterlerini yine parametre olarak verilen karaktere çevirir.
  • Strrev(s1): s1 stringini tersden okur.

Arama Fonksiyonları

  • strchr(s1,karakter): s1 stringi içersinde “karakteri” arar. Karakter bulununca arama durur ve ilk bulduğu yerin adresini geri döndürür.

Kopyalama Fonksiyonları

  • strcpy(s1,s2): s2 stringinin değerini s1 stringine kopyalar.
  • strncpy(s1,s2,n): Bir stringin baştan itibaren n karakterini başka bir stringe kopyalar.

Karşılaştırma Fonksiyonları

  • strcmp(s1,s2): İki stringin, ilk karakterden başlayarak ASCII kodlarını karşılaştırır. Karşılaştırma sonucu olarak, bu komut 0,-,+ değerlerinden birini üretir.
  • strncmp(s1,s2,n): İki stringin ilk n karakterini karşılaştırır.

C PROGRAMLAMA DİLİ TIME.H FONKSİYONLARI

Zaman ile ilgili işlemler için kullanılır. En çok kullanılan time.h fonksiyonlarından ikisi aşağıda verilmiştir.

  • clock( ): Fonksiyonun çalıştırıldığı andaki sistemin saatini alır.
  • time( ): Günün saat bilgisini saniye olarak verir.

C PROGRAMLAMA DİLİ DOS.H FONKSİYONLARI

En çok kullanılan dos.h fonksiyonlarından bazıları;

  • delay(x): x milisaniye kadar programın çalışmasını durdurur.
  • sleep(x): x saniye kadar programın çalışmasını durdurur.
  • sound(x): x frekansında ses üretir.
  • settime(z): Sistemin zaman bilgisini değiştirmek için kullanılır.
  • gettime(z): Sistemin zaman bilgisini öğrenmek için kullanılır.
  • setdate(z): Tarih bilgisini değiştirmek için kullanılır.
  • getdate(z): Tarih bilgisini almak için kullanılır.

C PROGRAMLAMA DİLİ MATH.H FONKSİYONLARI

Bu kütüphane geniş bir matematik fonksiyon grubuna sahiptir. Matematik, cebir ve trigonometri işlemlerini yapabilmemizi sağlar. Bu fonksiyonlar arasında trigonometrik fonksiyonlar kullanılırken değişkenlerin radyan cinsinden olması gerektiği unutulmamalıdır. Matematiksel fonksiyonların çoğu math.h kütüphanesinde verilmiş olmasına rağmen matematiksel fonksiyonlardan bazıları stdlib.h’ da tanımlanmıştır. Bu fonksiyonlar stdlib.h kütüphane bölümünde ele alınacaktır.

  • Trigonometrik sin(x), cos(x), tan(x)
  • Ters Trigonometrik asin(x), acos(x), atan(x), atan2(y,x)
  • Hiperbolik sinh(x), cosh(x), tanh(x)
  • Logaritmik log(x), log10(x)
  • Üstel exp(x), ldexp(x), pow(x,y), sqrt(x), hypot(x,y), poly(x,d,c[ ] )
  • Yuvarlatma ceil(x), floor(x)
  • Mutlak Değer abs(x), labs(x), fabs(x)

Trigonometrik Fonksiyonlar

  • sin (x): Radyan cinsinden verilen x değerinin sinüs değerini hesaplar.
  • cos (x): Radyan cinsinden verilen x değerinin kosinüs değerini hesaplar.
  • tan (x): Radyan cinsinden verilen x değerinin tanjant değerini hesaplar.

Ters Trigonometrik Fonksiyonlar

  • asin (x): Verilen x değerinin arg sinüs değerini hesaplar, x değeri –1 ile +1 arasında olmalıdır. Sonuç -p/2 ile +p/2 arasında çıkar. Eğer x değeri tanım aralığının dışında bir değer verilirse errno’ya domain hatası anlamına gelen EDOM yerleştirilir ve geri dönen değer 0 olur.
  • acos (x): Verilen x değerinin arg kosinüs değerini hesaplar, x değeri –1 ile +1 arasında olmalıdır. Sonuç 0 ile p arasında çıkar. Hata durumunda errno’ya EDOM yerleştirilir.
  • atan (x): Verilen x değerinin arg tanjant değerini hesaplar. Çıkan değer -p/2 ile +p/2 arasındadır.
  • atan2 (y,x): Bu fonksiyon arctan(y/x) değerini hesaplar.

Hiperbolik Fonksiyonlar

  • sinh(x): Verilen x değerinin hiperbolik sinüs değerini hesaplar.
  • cosh(x): Verilen x değerinin hiperbolik kosinüs değerini hesaplar.
  • tanh(x): Verilen x değerinin hiperbolik tanjant değerini hesaplar.

Logaritmik Fonksiyonlar

  • log(x): Verilen x değerinin e tabanına göre doğal logaritmasını hesaplar. Matematikte ln(x) olarak bilinir ve logaritması alınan değerler sıfır ve sıfırdan küçük olamaz.
  • log10(x): Verilen x değerinin 10 tabanına göre logaritmasını hesaplar. Yine bu fonksiyonun x değerleri sıfır ve sıfırdan küçük olamaz.

 Üstel Fonksiyonlar

  • exp(x): Euler sayısının x inci kuvvetini hesaplar.
  • ldexp(x,n): Bu fonksiyon 2 n x´ değerini hesaplar.

pow(x,y): Bu fonksiyon x’in y. kuvvetini hesaplar

Diziler

Dizilere değerlerin tek tek girilmesi

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int dizi[5];

  dizi[0]=20;

  dizi[1]=30;

  dizi[2]=40;

  dizi[3]=50;

  dizi[4]=60;

  printf(“%d\n”,dizi[4]); //60

  printf(“%d\n”,dizi[1+2]); //50

  printf(“%d\n”,dizi[1+2]+20); //70

  printf(“%d\n”,dizi[0]+dizi[2]); // 60

              return 0;

}

Dizi tanımlama,  liste yöntemi ile değer ataması ve farklı çıktı uygulamaları

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int dizi[5]={5,10,15,20,25};

  printf(“%d\n”,dizi[4]); //25

  printf(“%d\n”,dizi[1+2]); //20

  printf(“%d\n”,dizi[1+2]+10); //30

  printf(“%d\n”,dizi[1]+dizi[2]); //25

              return 0;

}

Örnek:

Klavyeden girilen 5 tamsayının bir diziye döngü ile okutulması ve ekranda görüntülenmesi

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int dizi[5], i;

  for(i=0;i<5;i++){

              printf(“%d. elemani giriniz: “,i+1); scanf(“%d”,&dizi[i]);

  }

  for(i=0;i<5;i++){

              printf(“%d. dizi elemani: %d\n”,i+1,dizi[i]);

  }

              return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(){

  int dizi[5], i;

  for(i=0;i<5;i++){

              printf(“%d. elemani giriniz: “,i+1); scanf(“%d”,&dizi[i]);

  }

  printf(“\nGiris sirasına gore\n”);

  for(i=0;i<5;i++){

              printf(“%d. dizi elemani: %d\n”,i+1,dizi[i]);

  }

  printf(“\nSondan basa dogru\n”);

  for(i=4;i>=0;i–){

              printf(“%d. dizi elemani: %d\n”,i+1,dizi[i]);

  }

  printf(“%d\n”,dizi[5]);//olmayan eleman

  printf(“%d\n”,dizi[4]);

  printf(“%d\n”,dizi[1+2]);

  printf(“%d\n”,dizi[1+2]+10);

  printf(“%d\n”,dizi[1]+dizi[2]);

              return 0;

}

Örnek:

Klavyeden girilen 10 adet tamsayı bir diziye okutularak, girilen değerlerin en büyüğünü bulup, ekrana yazan program

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int dizi[10], i, eb;

  for(i=0;i<10;i++){

              printf(“%d. elemani giriniz: “,i+1); scanf(“%d”,&dizi[i]);

  }

  eb=dizi[0];

  for(i=0;i<10;i++){

              printf(“%d. dizi elemani: %d\n”,i+1,dizi[i]);

              if(dizi[i]>eb) eb=dizi[i];

  }

printf(“En buyuk eleman: %d”,eb);

              return 0;

}

Örnek:

3×4’lük bir matrise 12 adet sayı okutularak, girilen değerleri ekranda görüntüleyen program

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  int dizi[3][4], i, j;

  for(i=0;i<3;i++){

              for(j=0;j<4;j++){

                          printf(“%d. satir, %d. sutun elemani giriniz: “,i+1,j+1);

                          scanf(“%d”,&dizi[i][j]);

              }

  }

              for(i=0;i<3;i++){

              for(j=0;j<4;j++){

                          printf(“|%d| “,dizi[i][j]);

              }

              printf(“\n”);

  }

              return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

//Geriye değer döndürmeyen ve paremetre almayan fonksiyon tanımı

void yaz(){ //fonksiyon tipi ve adı

  printf(“Ahmet AYDINALP\n”);

  printf(”  Ogretmen\n”);

}

//Geriye değer döndürmeyen ve parametre alan fonksiyon tanımı

void topla(int x, int y){

  int tpl;

  tpl=x+y;

  printf(“Toplam: %d\n”,tpl);

}

void tekcift(int a){

  if(a%2==0)

  printf(“%d sayisi cifttir.\n”,a);

  else

  printf(“%d sayisi tektir.\n”,a);

}

int faktoriyel(){

  int fakt=1, sayi,i;

  printf(“Sayi giriniz.”);scanf(“%d”,&sayi);

  for(i=sayi;i>0;i–){

              fakt*=i;

  }

  return fakt;

}

int kuvvet(int taban, int us){

  int sonuc=1, i;

  for(i=1;i<=us;i++){

              sonuc*=taban;

  }

  return sonuc;

}

int crp(int x, int y){

  return x*y;

}

int main(int argc, char *argv[]) {

  yaz();

  topla(10,30);

  int a, b;

  printf(“a giriniz: “); scanf(“%d”,&a);

  printf(“b giriniz: “); scanf(“%d”,&b);

  topla(a,b);

  tekcift(b);

  int x=25, c;

  tekcift(x);

  printf(“Faktoriyel: %d\n”,faktoriyel());

  c=faktoriyel();

  printf(“Faktoriyel: %d\n”,c);

  printf(“Kuvvet: %d\n”,kuvvet(a,b));

  printf(“Carpim: %d\n”,crp(a,b));

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

int main(){

  int a,b,c,d,e,f,g;

  a=pow(3,4);

  b=sqrt(25);

  c=abs(-36);

  d=ceil(14.23);

  e=floor(14.99);

  f=round(14.46);

  g=rand()%100;

  printf(“Pow: %d\n”,a);

  printf(“Karekok: %d\n”,b);

  printf(“Mutlak: %d\n”,c);

  printf(“Mutlak: %d\n”,abs(-16));

  printf(“Yukari yuvarla: %d\n”,d);

  printf(“Asagi yuvarla : %d\n”,e);

  printf(“Yuvarla : %d\n”,f);

  printf(“Rastgele : %d\n”,g);

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  char harf[7]={“mehmet”};

  printf(“%s\n”,harf);

  printf(“%c\n”,harf[2]);

  int i;

  for(i=0;i<7;i++){

              printf(“%c\n”,harf[i]);

  }

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  char isim[4][20];

  int i;

  for(i=0;i<4;i++){

              printf(“%d. isim: “,i+1);

              scanf(“%s”,isim[i]);

  }

  for(i=0;i<4;i++){

              printf(“%d. isim: %s\n”,i+1,isim[i]);

  }

  return 0;

}

Örnek:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]) {

  float x;

  x=12/5.0;

  x=5.9;

  printf(“%.2f”,x);

  return 0;

}

Struct, Enum, Union ve Typedef Yapıları

C, kullanıcının kendi veri tipini tanımlamasına müsaade eder. Bu kısımda böyle veri tiplerinin nasıl oluşturulacağı anlatılacaktır.

Struct Yapısı

C programlama dilinin bize sunmuş olduğu temelde dört tane veri tipi vardır. İhtiyaca göre veri tiplerinin sayısını artırabilmek için yapılar devreye girer. Veri yapısı içinde birden fazla değişken saklayan bir bilgi topluluğudur. Genellikle bu veriler farklı türdedir. Farklı türdeki değişkenleri, kendimizin oluşturduğu tek bir veri türü altında toplayabiliriz. Basit bir örnek olarak bir öğrenci kaydı verilebilir. Bir öğrenci nesnesinin sahip olduğu birtakım özellikler; adı, soyadı, vize, final ve bütünleme notu gibi veriler tek bir isim altında toplanabilir. Bu tarzdaki veri yapıları karmaşık verilerin düzenli tutulmasını sağlar. Bu özellikle büyük programlarda düzenli bir yapılanma sağlayacaktır.

Örnek:

#include <stdio.h>

#include <stdlib.h>

struct kisi{

  char ad[20];

  int yas;

  float boy;

  } ;

int main(int argc, char *argv[]) {

  struct kisi bay, bayan;

  printf(“ad giriniz:”);

  scanf(“%s”,&bay.ad);

  printf(“yas giriniz:”);

  scanf(“%d”,&bay.yas);

  printf(“boy giriniz:”);

  scanf(“%f”,&bay.boy);

  printf(“\n………..\n”);

  printf(“Bay ad: %s\n”,bay.ad);

  printf(“Bay yas: %d\n”,bay.yas);

   printf(“Bay boy: %f\n”,bay.boy);

  return 0;

}

Enum Yapısı

Bu tip, değişkenin alabileceği değerlerin  belli(sabit)  olduğu durumlarda  programı  daha  okunabilir  hale  getirmek  için  kullanılır.

enum TipAdı{değer1,değer2,…,değerN

}DeğişkenAdı;

TipAdı programcı  tarafından  verilen  tip  ismidir. DeğişkenAdı ise  program  içinde

kullanılacak olan değişkenin adıdır. Eğer kullanılmazsa program içinde daha sonra enum ile

birlikte kullanılır.

Örnek:

C Programlama Dili;

enum bolumler

{programcilik, donanim, muhasebe, motor

};

Tanımı ile derleyici programcılık için 0, donanım için 1, muhasebe için 2 ve motor için 3 değerini kabul ederek atamaları buna göre yapar. Değişken adı bildirilirse daha sonra enum kullanmaya gerek kalmaz.

enum renkler

{kirmizi,mavi,sari

} renk;

enum günler

{pazartesi,sali,carsamba,persembe,cuma,cumartesi,Pazar

};

Şimdi istenirse tanımlanan bu tipler program içinde kullanılabilir.

enum bolumler bolum;

enum gunler gun;

bolum = muhasebe /* bolum = 2 anlamında */

gun   = cuma;    /* gun = 4 anlamında   */

renk  = kirmizi; /* renk = 0 anlamında  */

Örnek:

 Sabit renk için enum kullanımı

  enum renkler{kirmizi, sari, mavi};

  main(){

     enum renkler renk;

     renk = sari;

      printf(“\n%d”,renk);

örnek:

C Programlama Dili;

#include <stdio.h>

#include <stdlib.h>

enum sehir{

  bos, adana, adiyaman, afyon, agri, amasya

};

int main(int argc, char *argv[]) {

  enum sehir il;

  il=afyon;

  printf(“%d\n”,il);

  return 0;

}

C Programlama Gösterge (Pointer) Kavramı

Pointer (gösterici) basitçe bir değişkenin bir hafıza alanını göstermesi demektir. C dilinde pointerlar:

Veritipi *pointeradi;

Şeklinde tanımlanır. Burada veritipi int, char, float gibi değişken tipleridir. Pointer adı ise bir değişken adının taşıması gereken özellikleri taşıyan ve tanımlandığı scope (geçerlilik alanında) yaşayacak olan değişken adıdır.

Bir değişkenin başına & işareti geldiğinde ise bu değişkenin adresini temsil eder. Yani değişken hafızada nereye konulduysa bu konulan yerin adresine bu işaret ile ulaşılabilir.

Örneğin;

int *p;

int a=10;

p=&a;

Satırından sonra hafızada integer değer gösteren p isminde bir pointer tanımlanmış olur. Bunu hafızda temsili olarak gösterecek olursak:

Yukarıdaki temsili resimde, ilk sütun adres değerlerini temsil etmektedir, buna göre hafızanın a101 ile a120 numaralı adresleri arasındaki bilgiler gösterilmiştir (bu değerler hexadecimal olup temsili olarak yazılmıştır)

Kodda bulunan p ve a değerlerinin hafızda hangi bölüme atanacağı çalıştırma sırasında (execution time) belirlenir dolayısıyla tam olarak nerede bulunacağı bilinemez ancak p tanımladıktan sonra a107 adresine ve a tanımlandıktan sonra a116 adresinin ayrıldığını kabul edelim. Bu durumda p’nin değeri a107 numaralı adreste olacaktır.

Kodda a değerine 10 konulmuştur bu durumda a’nın değerinin durduğu a116 numaralı adreste sayısal olarak 10 yazacaktır.

Kodda a’nın taşıdığı adres değeri, p’nin içine atılmıştır. Bu durumda p’nin değeri a’nın adresi olacaktır.

Örnek:

C Programlama Dili;

#include <stdio.h>

int main(){

int a=10;

int *p;

p=&a;

printf(“%dn”,*p); // p’nin gösterdiği yeri basar

printf(“%dn”,p); // p’nin değerini yani, p’nin gösterdiği yerin adresini basar

printf(“%dn”,a); // a’nın değerini basar

printf(“%dn”,&a); //a’nın adresini basar

printf(“%dn”,&p); //p’nin adresini basar

}

C dilinde her dizi bir pointer her pointer da doğal bir dizidir.

Char str[80], *p1; p1 = str;

Burada p1, str dizisinin – stringinin – ilk elamanının adresinin değerini alır. Yani string adi, aslında o stringin hafızadaki başlangıç adresini = stringin ilk karakterinin adresini tutmaktadır. str dizisinin 5. elemanına erişmek için ise;

str[4] veya *(p1+4) ifadelerini kullanırız. Her ikisinin de anlamı ayindir.

C PROGRAMLAMA DİLİ DOSYA İŞLEMLERİ

  • “w” Text dosyasını yazma modunda oluşturur. Aynı isimli dosya varsa siler ve boş bir dosya açar. Konum göstergeci dosya başındadır.
  • “r” Text dosyayı okuma modunda açar. Göstergeç dosya başındadır.
  • “a” Text dosyayı ekleme modunda açar. Dosya konum göstergeci dosya sonundadır. Dosya yoksa oluşturur.
  • “w+” Text dosyayı yazma modunda açar, okuma da yapılabilir.
  • “r+” Text dosyayı okuma modunda açar, yazma da yapılabilir.
  • “a+” Text dosyayı ekleme modunda açar, okuma da yapılabilir.

Dosya işlemleriyle ilgili fonksiyonlar stdio.h kütüphane dosyasında tanımlanmış olup bunlardan bazıları aşağıda verilmiştir;

Fonksiyon Görevi:

  • fopen() Dosya oluşturur, açar
  • fclose() Dosyayı kapatır
  • putc() Dosyaya karakter yazar
  • getc() Dosyadan karakter okur
  • feof() Dosya sonuna gelindiğini sorgular
  • fprintf() Dosyaya formatlı veri yazar
  • fscanf() Dosyadan formatlı veri okur
  • fputs() Dosyaya string yazar
  • fgets() Dosyadan string okur
  • fwrite() Dosyaya blok halinde veri yazar
  • fread() Dosyadan blok halinde veri okur
  • fseek() Verilere erişim için konum belirler
  • ftell() Byte olarak dosya konum göstergecinin yerini döndürür.
  • rename() Dosyayı yeniden isimlendirir
  • remove() Dosyayı sabit bellekten siler
  • rewind() Dosya konum göstergecini dosya başına döndürür

C PROGRAMLAMA DİLİ DOSYA OLUŞTURMA

Örnek:

C Programlama Dili;

#include <stdio.h>

int main(){

  FILE *dosya = fopen(“dosya.txt”, “w”);

  fclose(dosya);

  return 0;

}

C PROGRAMLAMA DİLİ DOSYA YAZMA

Örnek:

C Programlama Dili;

#include <stdio.h>

int main(){

  FILE *dosya = fopen(“dosya.txt”, “w”);

  fprintf(dosya, “Merhaba Dünya”);

  fclose(dosya);

  return 0;

}

C PROGRAMLAMA DİLİ DOSYA OKUMA

Örnek:

C Programlama Dili;

#include <stdio.h>

int main(){

  FILE *dosya = fopen(“dosya.txt”, “r”);

  while(! feof(dosya) ){

    putchar(fgetc(dosya));

  }

  fclose(dosya);

  return 0;

}

C PROGRAMLAMA DİLİ DOSYA SİLME

Örnek:

C Programlama Dili;

#include <stdio.h>

int main(){

  int sonuc = remove(“dosya.txt”);

  if(sonuc == 0){

    fprintf(stdout, “Dosya silindi”);

  } else {

    fprintf(stderr, “Dosya silinemedi”);

    return -1;

  }

  return 0;

}