Skip to main content

Ücretsiz Full C Programlama Dili Öğren -4 | C Programlama Eğitimi

C PROGRAMLAMA DİLİ EĞİTİM ve ÖRNEKLER -3

C programlama dili birlikler nedir ? C programlama Dosya İşleme ve Veri Hiyerarşisi Nedir ? Veri Yapıları Nedir ? Bildiriler Nedir ?Bugün C programlama dili eğitim ve örnekler serisinin 4. yazısını sizlerle paylaşıyoruz.

Başlayalım.

C PROGRAMLAMA DİLİ EĞİTİMİ -3

BİRLİKLER : 

Birliklerde yapılar gibi türetilmiş veri tipleridir.Aynı depolama alanını kullanırlar.

Birliğin elemanı her tipte olabilir.Birlik içerisinde verinin uygun tipte kullanılmasını sağlamak programcının sorumluluğundadır.

Bir birlik ‘union’  anahtar kelimesi ile yapılarla aynı biçimde bildirilir.

Örnek : union kelimesi ile ;

Union sayi {

İnt x ;  double y;    };

Bit Operatörleri :

Her bit yalnızca 0 ya da 1 değerini alabilir.8 bit 1 byte’ı oluşturur.

Bit operatörleri şunlardır ;

And (&) , Or (|) , Exclusive Or (^),  Sola kaydırma (<<)  , Sağa kaydırma (>>) , Tümleyen (~)

And : İki operandın ikisinin de ilgili bitlerinde 1 varsa , sonuçtaki bitler 1 yapılır

Or : İki operandın ilgili bitlerinden en az biri 1 ise sonuçtaki bitler 1 yapılır

Exclusive or : iki operandın ilgili bitlerinden yalnızca biri 1 ise sonuçtaki bitler 1 yapılır

Sola Kaydırma : İlk operandın bitleri ikinci operandında belirtilen sayı kadar sola kaydırır.Sağdan itibaren 0 ile doldurur.

Sağa kaydırma : İlk operandındaki bitleri ikinci operandında belirtilen sayı kadar sağa kaydırır.Soldan itibaren yapılacak doldurma makine bağımlıdır.

Tümleyen : Tüm 0 bitleri  1 , tüm 1 bitleri 0 yapılır.

Bit Atama Operatörleri :

&=   And atama operatörü

|=   Or atama operatörü

^=  Exclusive Or atama operatörü

<<=  Sola kaydırma atama operatörü

>>=  Sağa kaydırma atama operatörü

Sayma Sabitleri :

Bir sayma , enum anahtar kelimesi ile tanıtılır ve tanıtıcılar ile temsil edilen tamsayı sabitlerinin kümesidir.

Bu sayma sabitleri , değerleri otomatik olarak belirlenen sembolik sabitlerdir.

‘Enum’ içindeki değerler aksi belirtilmedikçe 0 ile başlar ve 1 artırılır.

Örnek : enum aylar {OCA=1 , SUB , MAR , NIS , MAY , HAZ , TEM , AGU , EYL , EKI , KAS, ARA};

Burada ilk değer 1 yapıldığından , kalan değerler 1 arttırılarak 1-12 değerleri oluşturulur.

Saymada kullanılan tanıtıcılar özel olmalıdır.

Sayma sabitleri için yalnızca büyük harfler kullanmak program içinde bu sabitlerin daha belirgin hale gelmesini sağlar.

DOSYA İŞLEME :

Değişken ve diziler içinde depolanan veriler geçicidir ve program sonlandığında   kaybolurlar.

Dosyalar ise büyük miktarda veriyi kalıcı olarak tutmak için kullanılırlar.

Veri Hiyerarşisi :

Neticede bilgisayar tarafından işlenen tüm veriler , sıfır ve birlerin kombinasyonlarına indirgenirler.

Bilgisayarlar tarafından işlenen veri parçaları , bitlerden karakterlere , karakterlerden alanlara ve bu şekilde ilerleyerek daha büyük ve karmaşık bir hale geldikçe bir veri hiyerarşisi oluşturur.

Bir alandaki ilgili dosyaların topluluğuna genellikle veritabanı (database) denir.Veri tabanı oluşturmak ve veri tabanını yönetmek için kullanılan programlara veri tabanı yönetim sistemleri(data base management system) denir.

C programlama dili eğitimleri

Dosya ve Akışlar (Stream) :

Program çalışmaya başladığında , üç dosya ve bu dosyalarla ilişkili akışlar ; standart giriş , standart çıkı ve standart hata otomatik olarak açılır.

FILE yapısını  (<stdio.h> içinde tanımlanmıştır) gösteren bir gösterici döndürür.Bu yapı ise açık dosya tablosu (open file table) adı verilen işletim sistemi dizisi için dizin gösteren bir dosya belirteci (file descriptor) içerir.

Her dizi elemanı da işletim sisteminin bir dosyayı yönetebilmesi için kullandığı dosya kontrol bloğunu (File Control Block) içerir.

Standart giriş / çıkış ve hata stdin , stdout , stderr göstericileri ile yönetilir.

Fgetc fonksiyonu , getchar fonksiyonu gibi fonksiyonlar dosyadan bir karakter okur.

Fputc fonksiyonu , argüman olarak yazdırılacak bir karakter ve karakterin yazdırılacağı dosyayı gösteren bir gösterici alır

Programda kullanıcıya her kayıt için çeşitli alanları doldurması ya da veri girişinin sonlandığını belirten dosya sonu belirteci girmesini söyleyen mesaj için ;

While (! feof (stdin))  kullanılabilir.

Feof satırı stdin’in belirttiği dosyanın dosya sonu belirtecinin elde edilip edilemediğine karar verir.

‘ w ’  : yazma modu (Yazma yapmak için bir dosya yarat)

‘ r ’  : okuma modu (Bir dosyayı okumak için aç)

‘ a ‘  : varolan dosyaya kayıtlar eklemek için dosyayı ekleme modunda açmak için gerekir.

‘ r+’ modu : dosyayı okumak ve yazmak için açar (Bir dosyayı güncellemek)

‘ w+’ modu : yazma ve okuma için bir dosyayı yaratır. (Güncelleme için bir dosya yarat)

‘ a+ ‘ modu : dosyayı okuma  ve yazma yapmak için açar ve önceki içerikler kaybolur (Güncelleme için)

Eğer dosyayı herhangi bir moda açarken bir hata oluşursa  fopen NULL  döndürür.

Not : Genel hatalardan birisi var olmayan bir dosyayı okuma yapmak için açmaktır.

Sıralı Erişimli Dosyadan Veri Okumak :

Sıralı erişimli bir dosyadan verileri geri elde etmek için , program okuma yapmaya dosyanın başından başlar ve istenen veri bulunana kadar sırayla tüm veriler okunur.

Rewind (cfPtr) ; gibi bir ifade programın dosya pozisyon göstericisini (okuma yazma işlemindeki bir sonraki byte numarasını belirtir).cfPtr ile gösterilen dosyanın başına (0. Byte’a) geri döndürmesini sağlar.

Rasgele Erişimli Dosyalar ;

Biçimlendirilmiş çıktı fonksiyonu fprintf ile oluşturulan kayıtlar aynı uzunlukta olmak zorunda değildir.Ancak rasgele erişimli bir dosyadaki tüm kayıtlar sabit uzunluğa sahiptirler.

Fwrite fonksiyonu , hafızada belirlenmiş bir konumdan aldığı belli sayıdaki byte’ı dosyaya aktarır.

Fread fonksiyonu dosya içinde dosya pozisyon göstericisi ile belirlenen konumdan aldığı belli sayıdaki byte’ı , belirlenen adresten başlayarak hafızaya aktarır.

Not : sizeof operatörü parantez içindeki nesnenin boyutunu byte olarak döndürür.sizeof operatörü işaretsiz bir tamsayı döndüren derleme zamanlı tekli bir operatördür.

Fseek fonksiyonunun prototipi ise , ANSI standartına göre ;

int fseek (FILE *stream , long int offset , int whence);

Burada offset , stream ile belirtilen dosyadaki whence konumundan itibaren byte sayısıdır.

Whence argümanı , dosyada aramanın başlayacağı konumu belirten SEEK_SET , SEEK_CUR , SEEK_END değerlerinden biridir.

SEEK_SET : aramanın dosyanın başından başlayacağını

SEEK_CUR : aramanın dosyadaki o anda bulunulan konumdan başlayacağını

SEEK_END : aramanın dosya sonundan başlayacağını belirtir

Bu üç sembolik <stdio.h> öncü dosyasında tanımlanmıştır.

VERİ YAPILARI :

Dinamik Hafıza Tahsisi :

Dinamik veri yapıları yaratmak ve yönetmek için dinamik hafıza tahsisi yapmak gerekir.

Malloc ve free fonksiyonları ile sizeof operatörü , dinamik hafıza tahsisi için gereklidir.

Malloc fonksiyonu ; tahsis edilecek byte sayısını argüman olarak alır ve tahsis edilen alanı gösteren void* tipte bir gösterici döndürür.

Malloc fonksiyonu normalde sizeof operatörü ile kullanılır.

Örnek  :   yeniPtr = malloc (sizeof (struct dugum)) ifadesi ‘struct dugum’ tipindeki yapının boyutunu byte olarak hesaplar.

Free fonksiyonu tahsis edilen alanı serbest bırakır.(Hafıza sisteme geri döndürülür , böylece ileride yeniden tahsis edilebilir.)Malloc çağrısı dinamik olarak tahsis edilen hafıza alanını serbest bırakmak içindir.

Bağlı Listeler :

Bir bağlı liste , düğüm adı verilen ve gösterici bağları sayesinde birleştirilmiş kendine dönüşlü yapıların doğrusal bir birlikteliğidir.

Yığınlar :

Bir yığın , bağlı listelerin kısıtlanmış bir çeşididir.Yeni düğümler yığına yalnızca en üstten eklenir ve düğümler yığının yalnızca en üstünden çıkartılabilir.Bu sebeple yığınlar son giren ilk çıkar (LIFO last in – first out) veri yapıları olarak adlandırılır.Burada kullanılan temel fonksiyonlar ;

Push ve pop fonksiyonlarıdır.

Push fonksiyonu ; yeni bir düğüm yaratır ve yığının üstüne yerleştirir.

Pop fonksiyonu ; yığının üstündeki düğümü çıkartır , çıkartılan bu düğüm için tahsis edilmiş olan hafızayı serbest bırakır ve çıkartılmış değeri döndürür.

Yığınlar bir fonksiyonun her çağrısında yaratılan otomatik değişkenler için bir alan içerir.

Sıralar :

Sıralar , oldukça yaygın bir veri yapısıdır.Bu veri yapısında ilk giren ilk çıkar (FIFO First in First out) veri yapısı mantığı kullanılır.

Ekleme çıkarma işlemleri sirayaGir ve siradanCik olarak bilinir.

Ağaçlar :

Bağlı listeler , yığınlar ve sıralar doğrusal veri yapılarıdır.Bir ağaç , doğrusal olmayan iki boyutlu ve özel amaçlı bir veri yapısıdır.

Ağaç düğümleri iki ya da daha fazla bağ içerebilir.

Kök düğüm (root node) ağaçtaki ilk düğümdür

Kökteki her bağ bir çocuğu (child) belirtir

İlk sol çocuk , sol ağaççıktaki (subtree) ilk düğümdür ve sağ çocuk sağ ağaççıktaki ilk düğümdür.

Bu düğümün çocuklarına kardeşler (siblings) denir.

Çocukları olmayan düğüme, yaprak düğüm (leaf node) denir.

C ÖNİŞLEMCİSİ :

Bütün önişlemci komutları ‘ # ‘ ile başlar.

#INCLUDE Önişlemci Komutu :

Bu komut belirlenen dosyanın kopyasının , komutun bulunduğu yere eklenmesini sağlar.

İki şekilde kullanılır ;   #include <dosyaismi>     ve #include “dosyaismi”

İkisi arasındaki fark , önişlemcinin dahil edilecek dosyayı aradığı konumdur.Eğer dosya ismi tırnak içinde ise , önişlemci dosyayı aranan dosya eklendikten sonra derlenecek dosyanın bulunduğu dizin içinde arar.

Eğer ‘ <  > ‘ içinde ise , bu yöntem standart kütüphane öncü dosyalarını eklemek için kullanılır.

#include komutu stdio.h ve stdlib.h gibi öncü dosyaları eklemek için kullanılır.

#DEFINE Önişlemci Komutu :

#define komutu ,sembolik sabitler ve makrolar yaratır.Örnek :

#define tanıtıcı yer değiştirme_metni

Örnek : #define PI 3.14159 ; Bu komutla PI sembolik sabiti ile karşılaşılan heryerde PI , 3.14159 nümerik sabiti ile değiştirilir.

Define Önişlemci Komutu : Makrolar

Bir makro , #define önişlemci komutu içinde tanımlanmış bir işlemdir.

Örnek olarak bir çemberin alanı içinde tek argümanlı bir makro ele alalım :

#define CEMBER_ALANI  (x)   ( (PI) * (x) * (x) )

Sembolik sabit ve makroların geçerliliğini sonlandırmak için #undef önişlemci komutu kullanılır.

#undef komutu bir sembolik sabiti ya da makro ismini tanımsız hale getirir.

Not :    #define  getchar ()  getc ( stdin )

Getchar’ın makro tanımı , getc fonksiyonunu standart girişten bir karakter almak için kullanmaktadır.

Stdio.h içerisindeki putchar fonksiyonu ve ctype.h içindeki karakter işleme fonksiyonları sıklıkla makro olarakta uygulanır.

Koşullu Derleme  :

Koşullu derleme , programcının önişlemci komutlarının çalışmasını ve program kodunun derlenmesini kontrol edebilmesini sağlar.

Koşullu önişlemci oluşturmak , if seçim yapısına oldukça benzer.

Örnek :     #if !defined  (NULL)   #define NULL0    #endif

Bu komutlar NULL’un tanımlı olup olmadığına karar vermektedir.

#ifdef kısaltması = # if defined

#ifndef kısaltması = #if ! defined

Programcı programda kodun derlenmemesi için ;

#if

Derlenmesi engellenen kod

#endif    kullanabilirler.

Not : Çok kısımlı bir koşullu önişlemci oluşumu , #elif ve #else komutları kullanılarak denenebilir.

#ERROR ve #PRAGMA  Önişlemci Komutları :

#error komutu olan #error atomlar ; komutta belirlenen atomları içeren mesajları , uygulama-bağımlı olarak yazdırır.Atomlar  , boşluklarla birbirinden ayrılmış karakter serileridir.

#pragma komutu olan #pragma atomlar ; uygulama-bağımlı bir işlem gerçekleştirir.Uygulama tarafından tanınamayan bir pragma ihmal edilir.

# ve ## Operatörleri :

# ve ## önişlemci operatörleri , standart C içinde mevcuttur.

# operatörü , bir yerdeğiştirme metni atomunun , tırnak içine alınmış bir string haline dönüştürülmesini sağlar.

# operatörü , makro içinde argümanlarla kullanılmak zorundadır çünkü # operatörünün operandı makro içindeki bir argümanı belirtir.

## operatörü ise , iki atomu birleştirir.

#define ATOMEKLE(x,y)  x##y

Satır Numaraları :

#line önişlemci komutu , kendinden sonra gelen tüm kaynak kod satırlarının ,belirlenen tamsayı sabitinin değerinden başlanarak numaralandırılmasını sağlar.

#line 100 ; komutundan sonraki kaynak satırı , 100’den başlayarak numaralandırılır.

#line komutu içinde bir dosya ismi yer alabilir . Örnek : #line 100 ‘’file1.c’’

ÖNCEDEN TANIMLANMIŞ SEMBOLİK SABİTLER :

__LINE __     : Kullanılan kaynak kodun satır numarası

__FILE__       : Kaynak kodun varsayılan ismi

__DATE__     : Kaynak kodun derlendiği tarihtir

__TIME__      : Kaynak dosyanın derlendiği zamandır

BİLDİRİLER (Assertions) :

Assert makrosu , (assert.h öncü dosyası içinde tanımlanmıştır) bir deyimin değerini test eder.

Eğer deyimin değeri 0 ise assert bir hata mesajı yazdırır ve abort fonksiyonunu programı sonlandırması için çağırır.

NDEBUG sembolik sabiti ise , ondan sonraki bildirileri ihmal eder.

#define NDEBUG kullanılarak , tüm bildirileri elle silmek yerine otomatik olarak geçersiz kılmak mümkün olur.

UNIX ve DOS Sistemlerinde GİRİŞ/ÇIKIŞI Yeniden Yönlendirmek :

$ , Unix komut satır başlangıcını belirtir.

$ toplam<giriş

Girişi değiştirmenin ikinci yolu ise piping’dir.Bir pipe (|) , bir programın çıktısının diğer programın çıktısının diğer programın girişi olarak kullanılmasını sağlar.

Rasgele programının toplam programında giriş olarak kullanılması için ;

$ rasgele | toplam    şeklinde bir komut kullanılır

Uzunluğu Değişebilen Argüman Listeleri :

Stdarg.h’ın makroları ve tanımlamaları ;

Va_list        : va_start , va_arg ve va_end makrolarının ihtiyaç duyduğu bilgiyi tutmak için uygun bir tiptir.Değişken uzunlukta argüman listesindeki argümanlara erişmek için va_list tipinde bir nesne bildirilmelidir.

Va_start    : Değişken uzunlukta bir argüman listesindeki argümanlara erişmeden önce çağrılan bir makrodur.

Va_arg       : Değişken uzunlukta argüman listesi içindeki bir sonraki argümanın tipi ve değerinde bir deyime genişleyen bir makrodur.

Va_end      : Değişken uzunluktaki argüman listesi va_start ile belirlenmiş bir fonksiyondan , normal geri dönüş yapılmasını sağlayan bir makrodur.

Exit ve Atexit İle Program Sonlandırma :

Atexit fonksiyonu , argüman olarak fonksiyonu gösteren fonksiyon ismini bir gösterici alır.

Exit fonksiyonu bir argüman alır.

Dosyalar Üzerinde Notlar :

Standart kütüphane “wb+” modunda geçici bir dosya açan tmpfile fonksiyonunu sunar.

Rb   : ikili dosyayı okumak için aç

Wb  :  Yazmak için ikili bir dosya yarat.Önceki dosyanın içeriğini siler

Ab   :  Ekle , ikili bir dosyayı okumak için ya da dosyanın sonuna yazma yapmak için aç

Rb+  :  ikili bir dosyayı güncellemek için aç

Wb+  : Güncellemek için ikili bir dosya yarat

Ab+  : Ekle , İkili bir dosyayı güncellemek için aç ya da yarat.

Sinyal İşleme :

SIGABRT :  Programın normal olmayan şekilde sonlanması

SIGFPE  : Hatalı bir aritmetik işlem , örneğin sıfıra bölme ya da taşma ile sonuçlanacak bir işlem

SIGILL : İllegal emrin tespiti

SIGINT  : Etkileşimli sinyalin alınması

SIGSEGV  : Depolamaya geçersiz erişim

SIGTERM : Programı sonlandırma isteği

Dinamik Hafıza Tahsisi : Calloc ve Realloc Fonksiyonları :

Prototip : void *calloc (size_t nmemb , size_t size);

Bu prototip iki argüman alır , eleman sayısı (nmemb) ve her elemanın boyutu (size)

Malloc ile Calloc arasındaki temel fark ; calloc fonksiyonunun tahsis ettiği hafızayı temizlemesi ancak malloc’un temizlememesidir.

Realloc fonksiyonu kendinden önce malloc , calloc ya da realloc çağrılarak tahsis edilmiş nesnenin boyutunu değiştirir.

Not : C , tamsayı ve ondalıklı sayı sabitlerinin tiplerinin belirlenmesi için sonekler kullanılmasına izin vermektedir.

Tamsayı sonekleri unsigned bir tamsayı için u ya da U , long tamsayılar için I yada L ve unsigned long tamsayı için ul , lu , UL ya da LU olarak belirlenmiştir.Eğer bir tamsayı sabitine sonek eklenmişse , tipi o büyüklükteki bir değeri tutabilecek ilk tip olarak belirlenir.

C PROGRAMLAMA DİLİ EĞİTİM ve ÖRNEKLER -2 SONUÇ :

Bugünki yazımızda C programlama dili eğitim ve örnekler yazı dizinin 4. yazısını sizlerle paylaştık.Umuyorum faydalı birtakım bilgiler edinmişsinizdir.

İyi Çalışmalar.

Ücretsiz Full C Programlama Dili Öğren -2 | C Programlama Eğitimi

C PROGRAMLAMA DİLİ EĞİTİM ve ÖRNEKLER

C Programlama dili nedir ve nasıl öğrenilir? C dili örnekleri nedir ? C dili ile neler yapabiliriz ?C yüksek seviyeli bir dil midir ? C ile programlamaya giriş nedir ? Hafıza konuları , C dilinde aritmetik vb. her başlığa yer verdiğimiz C programlama dili eğitim ve örnekler adlı yazımızla karşınızdayız.

Başlayalım.

Not : C dili örnekleri için -> TIKLA

C PROGRAMLAMA DİLİ EĞİTİMİ

Bilgisayar nedir ?

Bilgisayarlar hesaplamaları ve mantıksal kararlar vermeyi insanlardan milyonlarca hatta milyarlarca kez hızlı yapabilme yeteneğine sahip cihazlardır.

Yazılım Geliştirme Yöntemleri Nedir ?

Yapısal programlama , yukarıdan aşağıya adımsal iyileştirme , fonksiyonellik , nesne tabanlı programlama , nesneye yönelik programlama , event driven ve generic olarak ayrılırlar.

Bilgisayar Organizasyonu Nedir  ?

Giriş ünitesi , Çıkış ünitesi , Hafıza ünitesi , Aritmetik Mantık Ünitesi(ALU) , Merkezi İşleme Ünitesi(CPU) ve İkincil Depolama Ünitesidir.

Bilgisayar Dilleri Tipleri Nedir ?

Günümüzde genel tip olarak 3 çeşide ayrılır ; Makine dilleri , Assembly dilleri , Yüksek seviyeli diller

Herhangi bir bilgisayar doğrudan makine dilini anlayabilir.Makine dili bilgisayarın doğal dilidir.

Makine dillerinde yaşanan programlama zorlukları ya da yaşanan hatalar nedeniyle programcılar İngilizceye yakın kısaltmalar kullanmaya başlarlar.Bu kısaltmalar assembly dilinin temelini oluşturur.Assembler olarak adlandırılan çevirici programlar , assembly dilinde yazılmış programları makine diline çevirirler.

Makine Dilinde :  +130042774                   Assembly Dilinde : LOAD SAYI1

+14000593419                                                      ADD SAYI2

+1200274027                                                         STORE TOPLAM

Programlama sürecini hızlandırabilmek için Yüksek Seviyeli Diller geliştirildi.Derleyici(Compiler) olarak adlandırılan bu programlar , yüksek seviyeli dilleri makine dillerine çevirirler.

Örnek :  “ toplam = sayi1 + sayi2 “

C Dilinin Tarihçesi Nedir ?

Temelinde iki eski dil yatmaktadır. Bu diller BCPL ve B. BCPL.1967 Yılında Martin Richards tarafından geliştirilmiştir.Ken Thompson , BCPL çalışmalarının ardından  kendi yarattığı B dilini geliştirmiştir.

C dili 1972 yılında yine bu çalışmaların ardından Bell labaratuvarlarında Dennis Ritchie tarafından DEC PDP-11 bilgisayarlarında geliştirilmiştir.

Standart C Kütüphanesi Nedir ?

C programları fonksiyon adı verilen parçalardan ya da modüllerden oluşmaktadır.

C öğrenmede asıl olan iki kısım bulunmaktadır ;

1) C dilinin kendisini , 2) C Standart Kütüphanesindeki fonksiyonların kullanımı

C ile çalışırken kullanacağımız bloklar ; C standart kütüphane fonksiyonları , Kendi yazdığımız fonksiyonlar ve diğer programcıların yazdığı fonksiyonlar

İpucu : Kendi yazacağımız fonksiyonlar yerine , ANSI standart kütüphane fonksiyonlarını kullanmak programın performasını arttırır.Çünkü bu fonksiyonlar verimli çalışma adına dikkatle yazılmıştır.

Diğer Yüksek Seviyeli Diller Nedir ?

Önemli olan birkaçına göz atacak olursak ;

FORTRAN (Formula Translator) : IBM tarafından 1954 ve 1957 yıllarında geliştirilen ve bilimsel uygulamalarda kullanılan , mühendislik uygulamalarında kullanılan bir programdır

COBOL (Common Bussiness Oriented Language) : 1959 yılında bilgisayar üreticileri , devlet ve endüstriyel bilgisayar kullanıcıları tarafından geliştirilmiştir.Daha çok büyük verilerin kullanımını gerektiren ticari uygulamalar da kullanılır.

Pascal ve C aynı zamanlarda , Profesör Niklaus Wirth tarafından akademik kullanım amacıyla geliştirilmiştir.

C Dili Program Geliştirme Ortamı Temelleri Nedir ?

Bu sistemler genellikle birkaç kısımdan oluşmaktadır ;

Program geliştirme ortamı , Dilin kendisi , C standart kütüphanesi

Tipik bir C programı çalışmadan önce  6  safhadan geçmektedir ;

Yazım (edit) , Önişleme(preprocess) , Derleme (compile) , Bağlama (link) , Yükleme (load) ve Çalıştırma (execute).

İpucu : 0’a bölme gibi hatalar programın çalışması esnasında ortaya çıkmaktadır.Bu yüzden bu hatalara çalışma zamanı hataları yani ‘Runtime/Execution Time Error’ denilir.0’a bölmek ölümcül hata anlamına gelir ve  programın başarılı bir şekilde tamamlanmadan sonlanması anlamına gelir.Ölümcül olmayan hatalar ise programın yanlış sonuç verecek biçimde çalışmasına sebep olur.

C ile Programlamaya Giriş Nedir ;

‘/* ‘ ile başlanan yorum satırının sonuna ‘ */ ’ işaretini koymayı unutmayın

Main () : main’den sonra bulunan parantezler main’in fonksiyon adı verilen program oluşturma bloklarından biri olduğunu gösterir ve her programda fonksiyonların içinde en az biri ‘main’ olmalıdır.

Printf (“     \n”)  ; tırnaklar içindeki karakterleri aynen ekrana yazdırır. ‘ \ ‘ ters eğik çizgi , çıkış karakteri olarak adlandırılır.

‘ \n ’ ise yeni satır anlamına gelir ve imleci yeni satırın başına taşır.

‘ \t ’ ise yatay tab anlamına gelir.İmleci bir sonraki tab başlangıcına taşır.

‘ \a ’ ise alarm anlamına gelir.Sistemdeki zili çalar.

‘ \\’ ise ters çizgi anlamındadır.Printf içindeki ters çizgi karakterini yazdırır.

‘  \”  ’  ise tırnak anlamındadır.Printf içerisindeki tırnak karakterini yazdırır.

[ int  tamsayi1 , tamsayi2 , toplam ; ] satırındaki kod ile ‘Bildirim’ yapmış oluyoruz.Burada tamsayi1 ya da tamsayi2 değişkendir.Değişkenlerin kullanılabilmesi  için bu değişkenlerin isim ve değişken tipiyle beraber main fonksiyonunu belirten ‘{ ’ küme işaretinden sonra tanımlanmaları gerekmektedir.

C programlama dili eğitimi

Örnek : main {  int tamsayi1  ,  …

Diğer bir ifade Scanf (” %d ” , &tamsayi1) ; Burada %d dönüşüm belirtecidir ve verinin tamsayı olması gerektiğini belirtir. ‘ & ‘ karakterine ise adres operatörü denilmektedir.

Printf (“Toplam %d dir\n”, toplam); satırında ise ‘%d’ dönüşüm belirtecini  içerir.Bir tamsayının yazılacağını gösterir.

Return 0 ; 0 değerini programın çalıştırıldığı işletim sistemi ortamına gönderir ve böylece  programın başarılı bir şekilde çalıştığını gösterir.

Hafıza Konuları Nedir ?

Scanf operatörü ile bir tamsayi değeri aldığınızı düşünelim.Kullanıcı 40 tamsayısı girdiğinde bu değer , daha önceden o hafıza konumunda bulunan değerin üzerine yazılır.Bu işleme de ‘destructive read-in’ adı verilir.

Bir hafıza konumundan okuma işlemi yapıldığında ise buna non-destructive read-out adı verilir.

Dipnot :

Bilgisayar programlarında ifadelerin çalıştırılma sıralarını belirlemeye program kontrolü denir.

Sahte kod ise programcıların algoritma geliştirmelerine yardımcı olan yapay bir dildir.Sahte kodlar günlük konuşma diline yakın olup , bilgisayarda çalıştırılmazlar.

Akış grafiği , algoritmanın grafik ile gösterimidir.Akış grafikleri dikdörtgen , çember gibi özel sembollerden oluşur.

Programların çoğu mantıksal olarak 3 kısma ayrılabilir ;

Programların değişkenlerinin bildirildiği ve değişkenlere ilk değer atandığı bildirim safhası;

Girilen verilerin değerlerinin işlendiği ve program değişkenlerinin ayarlandığı işleme safhası ;

Sonuçların hesaplandığı ve yazdırıldığı sonlandırma safhası .

C Programlama Dilinde Aritmetik :

Toplama = ‘+’

Çıkarma = ‘ – ’

Çarpma = ‘ * ’

Bölme = ‘ / ’

Mod Alma = %

İşlem Sırası ise ;

Önce parantez içi hesaplanır , ardından çarpma , bölme ve mod alma işlemleri hesaplanır.En sonda ise toplama ve çıkarma işlemi gerçekleşir.

Eşitlik ve Karşılaştırma Operatörleri  :

Eşitlik operatörleri ;

‘ == ‘ ; x==y    (X eşittir Y anlamındadır)

‘ != ’ ; x!=y   (X eşit değildir Y anlamındadır)

Karşılaştırma Operatörleri ;

‘ > ‘ ;  x>y  (X büyüktür Y)

‘ < ’ ; x<y (X küçüktür Y)

‘ ≤ ’ ; x <= y (X küçüktür ya da eşittir Y)

‘≥’ ; x >= (X büyüktür ya da eşittir Y)

Örnek Program ;

#include <stdio.h>

#include <stdlib.h>

int main()

{

float ortalama ;

int sayici,not,toplam ;

toplam=0;

sayici=0;

printf(“Notu gir :”);

scanf(“%d”,&not);

while (not !=1) {

toplam = toplam + not;

sayici = sayici +1;

printf(“Notu Giriniz : “);

scanf(“%d”,&not);

}    if (sayici !=0 ){

ortalama = (float) toplam/sayici;

printf(“Sınıf ortalaması %2f”,ortalama);

}

else

printf(“Not girilmedi! \n”);

return 0;   }

Bu programda sayıcı kontrollü döngülerle sınıf ortalaması bulan bir program oluşturulmuştur.

Ortalama sonucunun ondalıklı olması durumu için float veri tipi’de kullanılmıştır.Yine bu programda dikkat edilmesi gereken bir yer olan ’ %2.f ‘ ifadesidir.

Burada ‘f’ ondalıklı bir değer yazdırılacağını bildirir ve önünde bulunan ‘ .2 ‘ ise  hassasiyeti belirtir.Yine burada belirtildiği gibi virgülden sonra 2 basamak geleceğini ifade eder.

Atama Operatörleri :

‘ += ‘ operatörü : c += 7 -> c = c+7

‘ -= ’ operatörü : d -=4 -> d = d – 4

‘ *= ’ operatörü : e *=5 -> e = e*5

‘ /= ’ operatörü : f /=6 -> f = f/6

‘ %= ‘ operatörü : g %=7 -> g = g%7

Arttırma ve Azaltma Operatörleri ;

Tekli Artırma (++) ve Tekli Azaltma (–);

Ön arttırma (Preincrement)

Ön azaltma (Predecrement)

Son artırma (Postincrement)

Son azaltma (Postdecrement)

Örnek : ‘ ++a ’ ifadesi , a’yı bir arttır ve a’nın yeni değerini a’nın içinde bulunduğu deyimde kullan anlamına gelir.

‘a++’ ifadesi ise , a’nın değerini a’nın içinde bulunduğu deyimde kullan ve daha sonra a’yı bir arttır.

Üs Almak İçin Yöntemler :

C dilinde üs almak için özel bir operatör bulunmasa da bunun yerine standart kütüphane fonksiyonlarından ‘pow’ fonksiyonu bu amaçla kullanılabilir.

Pow (x,y) komutu x’in y’ninci kuvvetini hesaplar.Bu fonksiyon double tipte iki eleman alır ve double tipinde bir sonuç döndürür.

Pow vb. matematik fonksiyonu programda kullanıldığında , math.h dosyasının programa eklenmesi gerekmektedir.Aksi takdirde sistem hatalı çalışabilir.

GetChar Komutu kullanımı :

While ((not =getchar()) !=EOF  ) ; satırında ilk önce parantez içerisindeki atama olan (not =getchar) çalıştırılır.getchar fonksiyonu (standart giriş/çıkış kütüphanesi içindedir) ve klavyeden bir karakter okur ve bu karakteri not tamsayı değişkeni içerisinde depolar.(EOF : End of file)

Karakter genellikle char tipinde saklanırlar.C dilinde yine en önemli özelliklerden biri de bu karakterlerin tamsayı veri tip ile saklanabilmesi özelliğidir.

Örnek olarak : printf (“ (%c) karakteri  %d değerine sahiptir. \n” , ‘a’ , ‘a’);

Unix sistemleri ve ya diğer sistemlerde EOF değeri ; <return> ya da <ctrl-d> kombinasyonu ile girilir.

Switch Yapısında ;

Case ‘\n’ : case ‘ ’ ;

Break;    satırları programın boşluk karakterini ve yeni satır karakterlerini atlamasını sağlatır.

C dili Mantıksal Operatörleri  :

&& (Mantıksal  Ve ) anlamındadır

|| (Mantıksal Veya) anlamındadır

! (Mantıksal Değil) anlamındadır.

Not : ‘ ==  ‘(Eşitlik)  // ‘ = ’ (atama) operatörleridir ve karıştırılmamalıdır.

C Dili Fonksiyonlar :

C dilinde modüllere fonksiyon adı verilir.

Fonksiyonlar , fonksiyon çağrıları sayesinde çağrılırlar.Fonksiyon çağırmak demek fonksiyonu kullanmamız gerektiği anda onu programa dahil etmek demektir.

Matematik Kütüphanesindeki Fonksiyonlar :

Burada bulunan kütüphane fonksiyonları , genel matematik işlemlerini yapmasını sağlar.

Örneğin ; 900.0 sayısının karekökünü bulmak ve yazdırmak isteyen bir programda , kullanıcı ‘sqrt’ fonksiyonu ile bu işlemi gerçekleştirebilir ( printf (“%.2f”, sqrt(900.0)); )

Sqrt fonksiyonu double tipte argüman kullanır ve aslında Matematik kütüphanesinde bulunan fonksiyonların hepsi double veri tipini döndürürler.

Matematik Kütüphanesi Fonksiyonları ve Tanımları ;

Sqrt (x) : x’in karekökü

Exp (x) : e^x üssel fonksiyon

Log (x) : x’in e tabanına göre logaritması

Log10 (x) : x’in 10 tabanına göre logaritması

Fabs (x) : x’in mutlak değeri

Ceil (x) : x’i kendinden büyük ilk tamsayıya yuvarlar

Floor (x) : x’i kendinden küçük ilk tamsayıya yuvarlar

Pow (x) : x^y  ‘x üzeri y’

Fmod (x,y) : x/y işleminin kalanını bulur

Sin (x) : x’in sinüsünü hesaplar (x radyan)

Cos (x) : x’in cosinüsünü hesaplar (x radyan)

Tan (x) : x’in tanjantını hesaplar (x radyan)

Bir Fonksiyon Tanımının Biçimi ;

Geri dönüş tipi   fonksiyonun ismi (parametre listesi)

{

Bildirimler

İfadeler

}

Not : Void tipinde geri dönüş değeri , fonksiyonun herhangi bir değer geri döndürmeyeceğini gösterir.

Veri Tipleri :

Printf ile Kullanılan : Long double (%Lf ) ,Double (%f), Float (%f) , Unsigned long int (%lu) , Long int (%ld) , Unsigned int (%u) , İnt (%d) , Short (%hd) , Char (%c)

Scanf ile Kullanılan : Long double (%Lf ) ,Double (%lf), Float (%f) , Unsigned long int (%lu) , Long int (%ld) , Unsigned int (%u) , İnt (%d) , Short (%hd) , Char (%c)

Öncü (Header) Dosyalar ;

Her standart kütüphane , o kütüphanedeki her fonksiyonun prototiplerinin yer aldığı ve bu fonksiyonlar tarafından kullanılabilecek çeşitli veri tipleriyle , bazı sabitlerin bulunduğu bir öncü dosyaya sahiptir.

Standart kütüphane öncü dosyası ;

<assert.h>  : Programın hatalarının ayıklanmasında yardımcı olması için eklenen teşhislerin makroları ve bilgilerini içerir.

<ctype.h> : Karakterleri belli özelliklere göre test eden fonksiyonların ve küçük harfi büyük harfe çeviren fonksiyonların (terside geçerlidir) prototiplerini tutar.

<errno.h> : Hata mesajlarını iletmek için gereken makroları tanımlar

<float.h> : Sistemin ondalıklı sayılar için limitlerini tutar

<limits.h> : Sistemin integral limitlerini tutar

<locale.h>  : Programın çalıştırıldığı yerdeki yerel bilgilere göre değiştirilebilmesini sağlayan fonksiyon prototiplerini ve bunların ihtiyaç duyabileceği bilgileri içerir.Yerel gösterimler bilgisayar sisteminin tarih, zaman , para birimleri ve dünya üzerindeki büyük sayılar için değişik gösterim biçimlerini doğru bir şekilde kullanılmasını sağlatır.

<math.h> : Matematik kütüphane fonksiyonlarının prototiplerini tutar

<setjmp.h> : Fonksiyon çağrıları ve geri dönüşleri arasındaki geçişlere izin veren fonksiyonların prototiplerini tutar

<signal.h> : Programın çalıştırılması esnasında oluşabilecek çeşitli durumları gerçekleştiren makroları ve fonksiyon prototiplerini tutar.

<stdarg.h> : Sayısı ve tipleri belli olmayan argüman listesine sahip fonksiyonların çalışmasını sağlayan makroları tutar

<stddef.h> : C’de belli hesaplamaları yaptığımız tiplerinin genel tanımlarını tutar ve standart giriş/çıkış kütüphane fonksiyonlarının prototiplerini ve bunlar tarafından kullanılan bilgileri tutar

<stdio.h> : Standart giriş/çıkış kütüphane fonksiyonlarının prototiplerini ve bunlar tarafından kullanılan bilgileri tutar.

<stdlib.h> : Sayıları yazılara, yazıları sayılara çeviren , rastgele sayılar üreten , hafıza ayrılmasını sağlayan fonksiyonların prototiplerini tutar.

<string.h> : String işlemlerini yapan fonksiyonların prototiplerini tutar

<time.h> : Zamanla ve tarihle ilgili işlemler yapan fonksiyonların prototiplerini tutar

Not : Programlama yapan kişide öncü dosyalar oluşturabilir.Bu dosyalar ‘ .h ‘ uzantısı ile bitmelidir.

Fonksiyonları çağırmak adına 2 yol bulunmaktadır ;

Değere göre çağırma ve Referansa göre çağırma

C dilinde tüm çağırmalar değere göre yapılır.

Rand Komutu :

Rand fonksiyonu  0 ile RAND_MAX (<stdlib.h> öncü dosyasında tanımlı sembolik sabit) değeri arasında bir tamsayı yaratır.

6 yüzlü bir zar atıldığını düşündüğümüzde ;

Rand ()%6  işlemi 0 ile 5 dizisindeki (0,1,2,3,4,5) tamsayılarını üretecektir.Bu işleme derecelendirme yani scaling denilmektedir.Burada ‘6’ rakamı ise derecelendirme faktörü olarak geçmektedir.Burada önceki sonuca ‘+1’ ekleyerek sayıların dizilerini kaydırıyoruz.

Rand fonksiyonu gerçekte sahte rastgele sayılar üretir.Rand fonksiyonunu tekrar tekrar çağırmak , rastgele gibi görünen bir dizi sayı oluşmasına sebep olur.Bu işleme ‘Rassallaştırma’ adı verilir ve bu işlem standart kütüphane fonksiyonu olan ‘Srand’ ile yapılır.Srand fonksiyonu ‘unsigned’ tipte bir tamsayıyı argüman olarak kullanır.

Depolama Sınıfları :

C dili auto , register , extern ve static depolama sınıfları belirteçleriyle belirlenebilen dört depolama sınıfına sahiptir.

Auto ve register anahtar kelimeleri , otomatik depolama süreçli değişkenleri kapsar

Extern ve static anahtar kelimeleri ise , statik depolama süreçli değişken ve fonksiyon tanıtıcıları için kullanılırlar.

C PROGRAMLAMA DİLİ EĞİTİM ve ÖRNEKLER SONUÇ :

Bugünki yazımızda C programlama dili eğitim ve örnekler adlı yazımızı sizlerle paylaştık.Umuyorum faydalı birtakım bilgiler edinmişsinizdir.

İyi Çalışmalar