C Programlama Ders Notları - user.ceng.metu.edu.truser.ceng.metu.edu.tr/~erman/kku/programlama_1/kaynaklar/ders... · C Programlama Ders Notlar ... Algoritma Çalıştırma konusunda

  • Upload
    buiphuc

  • View
    281

  • Download
    14

Embed Size (px)

Citation preview

  • C Programlama Ders Notlar

    Revizyon ve Bask Bilgisi54/17.10.2007 01:35:00 PM

  • C Programlama Ders Notlar

    indekilerindekiler...................................................................................................................................2nsz..........................................................................................................................................6

    Yaralanlabilecek Dier Kaynaklar.........................................................................................6Program Nedir?...........................................................................................................................7Programlama Dili Nedir?............................................................................................................8C Nasl Bir Programlama Dilidir?..............................................................................................9C'de Program Yazma.................................................................................................................10

    nn niversitesi nternet Merkezinde Program Yazma.....................................................10Kendi Yerel Bilgisayarnzda program yazma......................................................................11Yazlm Program Kat zerinde altrma.......................................................................12

    Genel Program Yaps...............................................................................................................13Balarken...............................................................................................................................13Deikenler ve Aritmetik ilemler........................................................................................15

    Deiken Tanmlama Kurallar.................................................................................................18Sabitler..................................................................................................................................18Deiken Trleri....................................................................................................................19

    Deiken Adlandrma Kurallar........................................................................................19Alfa saysal Deikenler...................................................................................................19Saysal Deikenler...........................................................................................................20Tanmlamalar.....................................................................................................................20

    Aritmetik fadeler..................................................................................................................21Aritmetik Operatrler............................................................................................................21Mantksal ifadeler.................................................................................................................22Karlatrma leleri ve Mantksal Operatrler..................................................................22

    Karlatrma ileleri.......................................................................................................22Mantksal Operatrler.......................................................................................................23

    Tr Dnmleri...................................................................................................................24Artrma ve Eksiltme operatrleri..........................................................................................25Mantksal Bit operatrleri.....................................................................................................25Deer Atama ifadeleri...........................................................................................................26Koullu fadeler.....................................................................................................................26

    Giri k lemleri..................................................................................................................27Standart Ktphaneye Eriim...............................................................................................27Standart Giri, Standart k ve Hata k noktalar..........................................................27Standart Giri k Fonksiyonlar .......................................................................................28Biimlendirilmi klar......................................................................................................30Biimlendirilmi Giriler......................................................................................................31Bellek Biim dnm fonksiyonlar...................................................................................32Karakter dizesinin Okunup-Yazlmas..................................................................................33nemli bir takm fonksiyonlar..............................................................................................33

    Karakter Snama ve dntrme fonksiyonlar.................................................................33ungetc................................................................................................................................34

    Program Ak ve Program Ak Denetimi................................................................................35Komutlar ve Bloklar..............................................................................................................35If-Else komutu.......................................................................................................................35Else if komutu....................................................................................................................37

    54/17.10.2007 01:35:00 PM 2

  • C Programlama Ders Notlar

    Etiketler ve goto komutu.......................................................................................................38switch komutu.......................................................................................................................39Dng Komutlar - while......................................................................................................41Dng Komutlar - for..........................................................................................................42Dng Komutlar - do...while...............................................................................................45Dng k Komutu - break................................................................................................46Dng devam Komutu - continue.........................................................................................47

    Fonksiyonlar ve Genel Program Yaps.....................................................................................48Ana program blou (main)....................................................................................................48C program genel yaps........................................................................................................49

    #include Tanmlar............................................................................................................49#define Tanmlar..............................................................................................................49Dier blmler..................................................................................................................49

    Temeller.................................................................................................................................50Fonksiyon parametreleri hakknda........................................................................................51Deikenlerin etkili olduu blgeler.....................................................................................52Genel Deikenler.................................................................................................................52extern deikenler.................................................................................................................53static deikenler...................................................................................................................53register deikenler...............................................................................................................53Blok Yaps............................................................................................................................54lk deer atama......................................................................................................................54zyineleme (Recursion).......................................................................................................54C dili nilemcisi..................................................................................................................55

    Dosya Dahil etme..............................................................................................................55Makro veya sembolik sabit tanmlama.............................................................................56

    Diziler........................................................................................................................................57Dizi Nedir?............................................................................................................................57Bir Vektrn veya matrisin Tanmlanmas............................................................................57Diziler ve Matrisler zerinde uygulanabilecek ilemler.......................................................58

    Dizi sralama.....................................................................................................................59Dizi ierisinde istenilen bir eyler bulma..........................................................................59Matrisin devriini alma.....................................................................................................60

    Karakter dizeleri (Dizge)..........................................................................................................62Karakter dizesi tanmlama ve kullanma................................................................................62

    Gstergeler-aretiler...............................................................................................................65aretiler ve Adresler...........................................................................................................65aretiler ve Fonksiyon parametreleri..................................................................................67aretiler ve diziler...............................................................................................................68Adres Aritmetii....................................................................................................................69Karakter aretileri ve Fonksiyonlar...................................................................................70...............................................................................................................................................72...............................................................................................................................................72...............................................................................................................................................72...............................................................................................................................................72

    Dosyalarla ilgili ilemler...........................................................................................................73Dosya Trleri ve eriim.........................................................................................................73Metin Dosyalar.....................................................................................................................74

    Dosya ama ilemi............................................................................................................74Dosyadan okuma ..............................................................................................................75

    54/17.10.2007 01:35:00 PM 3

  • C Programlama Ders Notlar

    Dosyaya yazma.................................................................................................................75Dosya kapama...................................................................................................................75

    Dorudan Eriimli Dosyalar.................................................................................................76Dosya ama ilemi............................................................................................................76Dosyadan okuma ..............................................................................................................76Dosyaya yazma ................................................................................................................76Dosya kapama ilemleri....................................................................................................77Dorudan eriimli dosyalara zel durumlar......................................................................77

    Veri Yaplar (structure).............................................................................................................78Temel Tanmlar.....................................................................................................................78Veri Yaplarnn fonksiyonlarla kullanlmas........................................................................80...............................................................................................................................................81...............................................................................................................................................81...............................................................................................................................................81...............................................................................................................................................81...............................................................................................................................................81TypeDef.................................................................................................................................81

    Hazr Fonksiyonlar....................................................................................................................83Diyagnostik ile ilgili fonksiyonlar........................................................................................83

    void assert(int ifade);........................................................................................................83Karakter Fonksiyonlar.........................................................................................................83

    int isalnum(int c)...............................................................................................................83int isalpha(int c)................................................................................................................83int iscntrl(int c)..................................................................................................................83int isdigit(int c)..................................................................................................................83int islower(int c)................................................................................................................83int isspace(int c)................................................................................................................84int isupper(int c)................................................................................................................84int tolower(int c)................................................................................................................84int toupper(int c)................................................................................................................84

    Matematik Fonksiyonlar......................................................................................................84double acos(double x).......................................................................................................84double asin(double x)........................................................................................................84double atan(double x)........................................................................................................84double cos(double x).........................................................................................................84double sin(double x)..........................................................................................................85double tan(double x).........................................................................................................85double log(double x).........................................................................................................85double log10(double x).....................................................................................................85double pow(double x, double y).......................................................................................85double sqrt(double x)........................................................................................................85double log(double x).........................................................................................................85double ceil(double x)........................................................................................................85double floor(double x)......................................................................................................85double fabs(double x)........................................................................................................85

    Genel Amal Fonksiyonlar..................................................................................................86double atof(const char *nptr)............................................................................................86int atoi(const char *nptr)...................................................................................................86long int atol(const char *nptr)...........................................................................................86int rand(void).....................................................................................................................86

    54/17.10.2007 01:35:00 PM 4

  • C Programlama Ders Notlar

    void srand(unsigned int sed).............................................................................................86void *malloc (size_t miktar).............................................................................................86void *realloc(void *ptr, size_t miktar)..............................................................................86void free(void *ptr)...........................................................................................................87void exit(int status)............................................................................................................87int abs(int j).......................................................................................................................87

    Karakter Dizisi Fonksiyonlar...............................................................................................87char *strcpy(char *s1, const char *s2)..............................................................................87char *strncpy(char *s1, const char *s2, size_t n)..............................................................87int strcmp(char *s1, const char *s2)..................................................................................87int strncmp(char *s1, const char *s2, size_t n).................................................................87char *strcat(char *s1, const char *s2)...............................................................................87char *strncat(char *s1, const char *s2, size_t n)...............................................................87size_t strlen(const char *s)................................................................................................88

    Tarih ve Saat Fonksiyonlar..................................................................................................88Double difftime(time_t zaman1, time_t zaman0).............................................................88time_t time(time_t timer)..................................................................................................88char *asctime(const struct tm *timeptr)............................................................................88struct tm *gmtime(const time_t *timer)............................................................................89struct tm *localtime(const time_t *timer).........................................................................89

    ...................................................................................................................................................90Derleyici Bildirimleri................................................................................................................90

    #include bildirimi..................................................................................................................90#define bildirimi....................................................................................................................90#if...#endif bildirimi..............................................................................................................92#error ve #pragma bildirimleri..............................................................................................93

    Parametre Tanmlama................................................................................................................94...................................................................................................................................................96

    54/17.10.2007 01:35:00 PM 5

  • C Programlama Ders Notlar

    nszBu ders notlarnn yazlmasnda Brian W Kernighan ve Dennis Ritchie isimli yazarlarn The C Programming Language isimli kitabndan faydalanlmtr. Bu kitab nn niversitesi Ktphanesinde bulabilmeniz mmkndr. Bu ders notlar hem ierik olarak hem de takip ettii mfredat olarak yukarda bahsi geen kitab rnek olarak almtr.

    Yaralanlabilecek Dier Kaynaklar

    54/17.10.2007 01:35:00 PM 6

  • C Programlama Ders Notlar

    Program Nedir?Program, gnlk hayatta bir sorunu bilgisayar ile zmek, rutin ilemleri kolaylatrmak iin yazlan yazlmlardr. Bir program bilgisayar zerinde alr ve insanlarn gnlk hayatlarn kolaylatrr.

    Kiinin program yazmas iin ncelikle Genel Programlama Bilgisine sahip olmas gerekir. Peinden bir Programlama Dili bilmek gereklidir. Burada nemli olan programlama bilgisidir. Bu konuda kendinizi iyi hissedebiliyorsanz herhangi bir programlama dili ile programlarnz yazabilirsiniz. Dil tercihi yazlacak programa, soruna ve platforma uygun olarak yaplabilir.

    54/17.10.2007 01:35:00 PM 7

  • C Programlama Ders Notlar

    Programlama Dili Nedir?Programlama Dili bilgisayarda zlecek bir sorun iin zmn bilgisayara adm adm yazlmasn salayan biimsel kurallar olan ve bu kurallara sk skya bamll gerektiren bir tanmlar kmesidir.

    Belki daha ksa bir tanm ile sizinle bilgisayar arasnda bir tercmandr demek doru olur.

    Bir sorun zlecei zaman ncelikle iyice anlalm olmaldr. Sonra bu sorunu zebilecek bir zm zihinsel olarak hazrlanr. Bu zm bilgisayara uygun bir zm olmaldr. yle ki her zm bilgisayarda uygulanamaz. nk her zmn takip ettii yol yeteri kadar basit olmayabilir. retilen zm son derece basit admlarla anlatlabilmelidir. Bu admlarla zmn anlatlmasna Algoritma denir Bu admlar alt alta yazlmak suretiyle oluturulan zm bilgisayar iin uygundur. Ancak ihtiya var ise bu admlar Ak izgesine evrilebilir. Algoritma doal bir dille yazlr ve sk skya kurallar bulunmaz. Anlalmasnn kolay olmas yeterlidir. Ak izgesinde belirlenmi semboller yer alr ve bu semboller tm dnyada standarttr. Ksmen biimsel olan bu izge sorunun zmn daha evrensel bir dille ifade eder.

    Son adm olarak sra Ak izgesi veya Algoritma ile elde edilen zmn bir Programlama dili ile Bilgisayar ortamna aktarlmasna gelmitir. Programlama dili son derece standart tanmlar ierir ve bir program yazarken bu tanmlardan bir an iin bile uzaklaamazsnz. O nedenle de bir program parasndan bakalarnn bakadan bakalarnn baka eyler anlamas mmkn deildir. Yazlan bu programlar bir derleyici vastas ile Makine diline evrilir varsa hatalarn bulunmasn salar ve kullanc bu hatalar dzeltir.

    54/17.10.2007 01:35:00 PM 8

  • C Programlama Ders Notlar

    C Nasl Bir Programlama Dilidir?C Makine Dili ile st dzey programlama dili arasnda olan son derece esnek kullanml bir programlama dilidir. Esnek olmas yazacanz programda daha dikkatli olmanz gerektii anlamna gelir. Unutulacak bir iaret belki derleyici hatasna neden olmayacaktr ancak programnz da doru altrmayacaktr.

    Genel Amal, olduka ok sayda ifade, denetim komutlar bulunduran, gl veri yaplarna sahip olan bir programlama dilidir. lk balarda UNIX zerinde tasarlanp gelitirilen bu dil imdi tm iletim sistemlerin de yaygn olarak kullanlmakta ve dier baz programlama dillerinde olduu gibi modernlik kavramn yitirmemektedir.

    "Bir Assembler derleyicisinin salad esneklik ve gc salarken st dzey bir programlama dilinin salad kolay anlalabilirlik zelliini de sunmaktadr"

    54/17.10.2007 01:35:00 PM 9

  • C Programlama Ders Notlar

    C'de Program Yazma...ok basit anlamda bir metin dzenleyici ve bir derleyiciniz var ise C'de program yazabilirsiniz.

    Eer TC (Turbo C) ortamn kullanyorsanz metin dzenleyici ve derleyici i iedir.

    nn niversitesi nternet Merkezinde Program Yazma

    Eer nternet Merkezindeki Bilgisayarlardan faydalanarak C Programlarn LINUX zerinde gelitirecekseniz u admlar takip etmeniz gerekecek:

    1. ncelikle Kendinize -hala yoksa- bir mail adresi aln. Bu ayn zamanda sizin LINUX makine zerinde kullanc ifreniz olacaktr.

    2. ster Windows makinelerden isterseniz de LINUX makinelerden stu.inonu.edu.tr adresine telnet yapn

    3. Kullanc ad ve ifrenizi kullanarak sisteme login olun. 4. pico merhaba.c

    yazarak Pico editorunun bo bir sayfa ile gelmesini salayn.

    rnein u program yazn:

    #include main(){printf("Merhaba Millet\n");

    54/17.10.2007 01:35:00 PM 10

  • C Programlama Ders Notlar

    }

    5. Ctrl-X tularna basarak pico editrnden kn. Soraca "Kaydedilsin mi?" (Save modified buffer....?) sorusuna "Y" ile karlk verin. Dosya ad ne olacak eklindeki soruya uygun bir dosya ad ile cevap verin. Burada merhaba.c zaten yazyordur. Enter tuuna basp geebilirsiniz.

    6. Linux'a dnnce komut satrndangcc merhaba.c -o merhaba yazarak program derleyin hata mesaj alrsanz 4. adma geri dnn. Eer o ksmndan sonra bir ey yazmazsanz bu programn derlendikten sonra a.out ismiyle kaydedilmesini salam olursunuz. Burada unutulmamas veya kartrlmamas gereken ey merhaba.c programn kaynak kodlardr. Sizin yazdnz C komutlardr. Merhaba dosyasna kaydedilen program ise makine diline evrilmi olan programdr. Ve program altrmak iin merhaba dosyasna zerinde deiiklik yapmak iin merhaba.c dosyasna ihtiya vardr.

    ./merhaba yazarak programnz altrn. Bu komut yazlp ENTER tuuna basldktan sonra ekrana Merhaba Millet yazld grlecektir.

    7.8. Tm almalarnz bitirdikten sonra sistemden kmak iin

    logout veya exit yazmay unutmayn.

    Kendi Yerel Bilgisayarnzda program yazma

    54/17.10.2007 01:35:00 PM 11

  • C Programlama Ders Notlar

    Yazlm Program Kat zerinde altrma

    Algoritma altrma konusunda grdmz gibi bazen de yazlan programlar kat zerinde altrlmak zorunda kalnabilir. Geri bir fiziksel bilgisayar ortam var ise bu ileme gerek olmayabilir. Ancak mantksal bir hatann nerde olduunu grmenin en iyi yollarndan biri program el ile kat zerinde altrmaktr. Yani programn her bir adm tek tek programc tarafndan altrlr ve deikenlere ilikin deerler bir tabloda sra ile gsterilir. Bu hem programda nerede hata yaptnz anlatr hem de programn ne sonular reteceini size gsterir.

    54/17.10.2007 01:35:00 PM 12

  • C Programlama Ders Notlar

    Genel Program YapsBu blmde Genel bir C Programnn yapsn C programlama dilinin detaylarna fazla girmeden gstermeye alacaz. Bu noktada amacmz mkemmel programlar ve eksiksiz tanmlar yapmak deil olabildiince hzl bir ekilde C programlarnn genel grnleri ve ileyileri hakknda bilgi vermektir. lerleyen blmlerde bu programlarda yazdmz bir takm yaplar, komutlar detaylca anlatlacaktr.

    Bu nedenle bu blmde ele alp ilemi olabileceimiz bir konu dier blmlerde daha detayl ilenebilecektir. Umarz bu sizlerin daha iyi renmenizi ve daha fazla zevk almanz salayacaktr.

    Balarken

    Bir Programlama dilini renmenin en iyi ve en kolay yolu o dilde programlar yazmaktr. Bir ok programlama dilinde genellikle kullanlan u program yazalm. Ekrana Merhaba yazan bir programdan bahsediyoruz.

    Bu bir ok programlama dilinde temel olarak ele alnan en basit konudur. nemli olanlardan biri bu program yazabilmek, baarl bir ekilde derleyebilmek, altrabilmek ve elde edilen sonular grebilmeyi anlatr.

    #include main(){ printf(Merhaba Dnya\n);}

    Bu program nasl derleyip altracanz kullandnz iletim sistemi ve derleyiciye baldr. Bir nceki konuda bunun hakknda yeterli bilgi verdik.

    Dier sistemlerde bu ilem farkllklar gsterebilecektir. Yukardaki program yazarak derleyiniz ve altrmaya alnz.

    Program hakknda yaplacak bir takm aklamalar unlar olabilir. Bir C program boyutu ne olursa olsun bir ya da daha fazla fonksiyon denilen bloktan oluur. Bu fonksiyonlarn her biri gerek ilemlerin yapld yerlerdir. Bu rnekte main byle bir fonksiyondur. Normal olarak fonksiyonlarnza istediiniz ad verme zgrlne sahipsiniz. Ancak main zel bir isimdir. C programnz bu fonksiyonun balad yerden itibaren icra edilmeye balanr. Bu ayn zamanda her programn bir main fonksiyonunun olmas gerektii anlamna gelir. Genellikle bu fonksiyon dier fonksiyonlar ararak, C komutlarn icra ederek veya hazr dier fonksiyonlar ararak yapmas gereken ilemleri yapar.

    54/17.10.2007 01:35:00 PM 13

  • C Programlama Ders Notlar

    Fonksiyonlar arasnda haberleme ve deerlerin transferi parametre-argmanlar maharetiyle gerekleir. Fonksiyon adndaki parantezler arasnda parametre listesi yer alr. Bu rneimizde main fonksiyonunun parametresi olmad iin parantezler arasnda herhangi bir ifade bulunmamaktadr. Kme parantezleri arasnda yazlan C ifadeleri bu fonksiyonu meydana getiren komutlarn balad ve bittii yerleri tanmlar.Bir fonksiyon normal olarak isminin anlmas ile icra edilir. Eer fonksiyonun parametreleri var ise parantezler arasnda bu parametre listesi virgllerle ayrlm olarak verilir. Fonksiyonu aran zel ayrlm bir kelime ya da komut bulunmamaktadr. Fonksiyon parametre listesi almasa bile parantezler yazlmak zorundadr.

    printf(Merhaba Dnya\n); satr ad printf olan bir fonksiyon arr. Bu arda parametre olarak Trnak ierisinde yazl olan ifade kullanlr. printf ekrana bir bilginin yazlmasn salayan bir ktphane fonksiyonudur. Bu durumda bu fonksiyon, ekrana, parametre olarak gnderilen ifadeyi yazacaktr.

    ... eklindeki ift trnaklarn arasna yazlan ifadelere karakter sabiti veya alfabetik sabit denir. imdilik biz bu tr sabitleri sadece printf ve benzeri fonksiyonlarda parametre olarak kullanacaz.

    Bu karakter dizisi iinde yer alan \n ifadesi yeni satr veya bir alt satr anlamna gelen dizedir. Bu dizenin karlald karakter sabitinde bir alt satra geilir. Eer bu \n ifade iinde yer almazsa program ktsnda bir alt satra geilmediini greceksiniz. Yeni bir satra geebilmek iin programda \n ifadesini uygun bir yerde kullanmak zorundasnz. Aksi halde printf(Merhaba Dnya);eklinde bir ifade yazarak yeni bir satr elde etme ansnz olmad gibi derleyici hatalar ile karlaacaksnz.

    printf fonksiyonu asla otomatik bir yeni satra gei ilemi salamaz. O nedenle bir satr bilgi yazabilmek iin birden fazla printf kullanlabilir. rnein programmz u ekilde yazlabilir.

    main(){ printf(Merhaba, ); printf(Dnya); printf(\n)}

    eklindeki bir kt demin ki ktnn aynsn retecektir.

    \n ifadesinin tek bir karakter anlattn bilmenizde fayda var. Escape sequence denilen bu sistemde grnmeyen karakterleri ifade edebilmek mmkndr. Bu tarz karakterlerin arasnda unlarn da bulunduunu

    54/17.10.2007 01:35:00 PM 14

  • C Programlama Ders Notlar

    syleyebiliriz: \t tab iin, \b geriye doru silme ilemi iin (Backspace), \ ift trnan kendisi iin, \\ \ kendisi iin kullanlan dizelerdir.

    Deikenler ve Aritmetik ilemler

    Sonraki program Fahrenheit scaklk deerleri ile santigrat scaklk l karlklarn veren bir tabloyu ekrana yazabilecektir. Bu ilem iin kullanlan forml u ekildedir. C=(5/9)(F-32).

    /* Fahrenheit ve santigrat Tablosu f=0, 20, ... ,300 deerleri iinmain(){ int alt, ust, adim; float fahr, celcius; alt=0; ust=300; adim=20; fahr=alt; while (fahr

  • C Programlama Ders Notlar

    C dilinde baka temel deiken trleri bulunur.char, double, long, short gibi ifadelerle bunlar anlatlrlar. Bu deikenlerin byklkleri makineye bamldr. Bunlarn haricinde diziler (arrays), yaplar (structures), unions tarznda deiken trlerinin tanmlanabilecei ifadeler bulunacaktr.

    Programda aadaki ilemler aritmetik deer atama ilemleridir. Deer hesaplama bu ksmda bahsi geen komutlar ile balar.

    alt=0;ust=300;adim=20;fahr=alt;

    Bu komutlar deikenlerimize ilk deer atamalarn salar her komutun noktal virgl ile bittiine dikkatlerinizi ekmek isteriz.

    Tablonuzun her satrndaki deer ayn yntemle hesaplanr.yleyse her satr her seferinde hesaplayan bir dng komutu ilemimizi rahatlkla ifade edebilir. Bu amala while komutu kullanlmtr.while (fahr

  • C Programlama Ders Notlar

    olabilecekken neden byle bir yol seilmitir. nk C dilinde tamsay blme ileminden elde edilen sayda tam ksm alnr kesirli ksmlar imha edilir. Kesirli bir ondalk basamann sfr olsa bile belirtilmesi bu ifadenin bir kesirli blme olduunu C diline anlatr ve sonu kesirli say olarak istediimiz ekilde elde edilir.

    Tr evrimleri ile ilgili konulara daha sonra deinilecektir. Ancak burada unu syleyebiliriz

    fahr=alt veya while (fahr

  • C Programlama Ders Notlar

    Deiken Tanmlama KurallarDeiken, bir programda deiik zamanlarda deiik deerler tutan bellek birimleridir. Bir deiken programlar iin ok nemlidir. nk matematiksel, alfabetik vb. tm ilemler bu deikenler zerinde yaplr ve sonular bu deikenler zerinde tutulur. Her programlama dilinde deikenler, ilerinde saklayaca bilginin trne gre snflandrlr. Deikenler haricinde bir bilgisayar programnda sabitler bulunur. Bu sabitler yine trlerine gre snflandrlr ancak ifade ettikleri deer sabittir.

    Deiken Tanmlarnda deiken listesi, deikenin tr ve gerekiyorsa ilk deerler verilir.

    Sabitler

    Bir Program ierisinde kullanlan tm alfabetik ve saysal deerler sabit olarak adlandrlr. Bu adan sabitler saysal ve alfabetik sabitler olarak ikiye ayrlr.

    SABTLERSAYISAL SABTLERTAM SAYILAR KESRL SAYILAR ALFASAYISAL SABTLER

    81212564 gibi

    12.453.345e+0372.0 gibi

    "Enformatik Blm""nn niversitesi""4.56" Gibi

    Dikkat edilirse alfa saysal sabitler -"-(Trnak) ifadeleri arasnda yazlarak ifade edilirler. Trnak ierisinde yazlan her ey Alfa saysal sabit olup bu deerleri aritmetik ileme sokmak ya da bunlar bir say gibi deerlendirmek mmkn deildir. Trnak iindeki ifade her ne kadar say olsa da aslnda o bir alfa saysal ifadedir. ki harf veya daha fazla harften oluan alfabetik sabitler ift trnak iinde anlatlrken tek harfli sabitler tek trnak iinde anlatlr. Ekranda belki grnmeyen ancak zel etkileri olan bir takm karakterlerimizde iki harf gibi grnseler de tek karakterlik deikenler grubunda ele alnrlar ve tek trnak iinde yazlrlar. \n, \t, \0, \\ \ \ gibi. Ayrca \ddd eklinde yazlan bir ifade aslnda ddd deeri ile ifade edilen sradaki karakteri anlatr. rnein \014 FormFeed karakterini anlatan bir sabittir.

    Sekizli ve Onaltl gsterimde tutulan sabitlerin de belirtilmesi gerekebilir. Herhangi bir deerin nndeki 0 (sfr) sekizli bir sabiti anlatr. 0x eklinde balayan bir say ise on altl bir sabiti ifade ediyor demektir. rnein 31 deeri onlu bir sabiti anlatrken 037 sekizli bir sayy anlatyor demektir. Ve 0x15 gibi bir say da on altl bir sabiti anlatyor demektir.

    54/17.10.2007 01:35:00 PM 18

  • C Programlama Ders Notlar

    \0 sabiti bir karakter katarnda katarn sonland noktay gsteren zel sfr deerli karakterdir.

    Sabit ifade sadece sabit deerleri anlatan ifadelerdir. Bu ekildeki ifadeler derleme aamasnda hesaplanrlar. alma zaman iin byle bir tanmn etkisi bulunmaz. Hatta derleyici derleme aamasnda ilgili sabit tanmlarn yerine sabit deerleri yerletirerek derleme ilemine devam eder.

    #define MAXSAT 1250char satirlar[MAXSAT+1]; ifadesinde define ile yaplan tanmda ad MAXSAT olan sabite 1250 deeri yklenir ve aslnda derleyici MAXSAT grd tm yerlere 1250 yazar ve gerekiyorsa hesap yapar ve sonra derler.

    Deiken Trleri

    C'de Temel olarak alfa saysal ve saysal deiken trleri bulunmaktadr. Aslnda yukardakine benzer bir tablodan bahsetmek mmkn. Ancak saysal dei mmkn. Ancak saysal deiken trleri sayca daha fazladr.

    C'de Bir deiken Tanmlamak iin Genel olarak u biim kullanlr:Tr_ad Deiken_ad1 [,Deiken_ad2[...]];

    Burada Tr_ad ile verilen bilgi C Deiken trlerinden biridir. Deiken ad ise sizce isimlendirilecek olan ihtiyacnza cevap verecek bir veya daha fazla deikendir. Deikenler birden fazla olacak ise virgl ile ayrlmaldrlar. Sonuna noktal virgl konulmas zorunludur.

    Deiken Adlandrma Kurallar

    Bir deikene isim verilirken harf ile balamanz gerekmektedir. Sonraki karakterler harf-rakam kark olabilir.

    Deiken adlar ierisinde Trke harf olarak isimlendirebileceimiz ve sadece Trke alfabede bulunan , , , , , , , , , , , harfleri kullanmamanz gerekmektedir. Ayrca deikenlerinize vereceiniz isimler ierisinde *, /, +, }, ], gibi zel simgeler ve boluk karakteri bulunamaz. Boluk Karakteri yerine _ -alt tire- sembol kullanlabilir.

    C iin ayrlm szck olarak kullanlan ifadeler deiken ad olarak kullanlamaz.

    Alfa saysal Deikenler

    char deiken_adi;

    54/17.10.2007 01:35:00 PM 19

  • C Programlama Ders Notlar

    Kuralna gre tanmlanan deikenlerdir. C dilinde bu ekilde tanmladnz bir alfa saysal deiken ierisinde sadece 1 harf saklayabilirsiniz. Eer birden fazla harf saklanmas gerekiyorsa u tanm kullanmanz daha uygun olacaktr:

    char isim[28];

    Bu tanmda ise toplam 28 karakter uzunluunda ad isim olan bir alfa saysal deiken tanmlanmtr.

    Saysal Deikenler

    Tr Ad Tanm ve Aklamaint Tamsay deiken tanmlama iin kullanlr.Unsigned int aretsiz yani Pozitif Tamsay deiken tanmlama iin kullanlr.

    long int Uzun Tamsay (Yani daha byk tam saylar) deiken tanmlama iin kullanlr. Unsigned long int aretsiz uzun Tamsay deiken tanmlama iin kullanlr.Float Kesirli deiken tanmlama iin kullanlr.Double Kesirli ift duyarlkl deiken tanmlama iin kullanlr.long double Kesirli ift duyarlkl uzun deiken tanmlama iin kullanlr.

    Tanmlamalar

    Kullanlmadan nce tm deikenler tanmlanmaldr. Hatta baz deiken tanmlar sadece kullanldklar fonksiyon iinde yer verilebilir. Bir tanm bir tr bilgisi ve yannda bu trden olacak deiken listelerinden oluur. rnein:

    int alt, ust, adim;char c, ad[25];

    Deikenler muhtelif tanm satrlar ierisinde datlm olabilirler. Yani yukardaki tanm u ekilde yazlm olabilirdi:

    int alt;int ust;int adim;char c;char ad[25];

    Bu gsterim programnzn kaynak kodlarnda daha fazla yer igal edecektir. Ancak her deikene aklama satrlar koymak vb. dzeltmelerin kolay yaplmasn salamak amacyla uygun bir gsterim olabilirdi.

    Deikenler tanmlandklar srada ilk deer atamas ile sfrlanabilirlerde. Eer bir deiken tanmlama satrnda deiken adndan sonra = iareti ve

    54/17.10.2007 01:35:00 PM 20

  • C Programlama Ders Notlar

    onun yanna bir sabit yazyorsanz bir deikeni herhangi bir deerle sfrlam olursunuz.

    char bs = \\int i = 0; gibi.

    Bu tr bir ifadede sz konusu deiken external ya da static tanmlanm ise bu deer sfrlama ilemi bir kez ve program almaya balamadan nce yaplr. Dier normal tanmlanm deikenler. Fonksiyon her arldnda yeniden sfrlama ilemine tabii tutulurlar. Eer her hangi bir deiken sfrlanmadan (balang deeri verilmeden) kullanlacak olursa ilk deeri tanmsz bir deer olacaktr. External ve static deikenlerin ilk deerleri 0 (Sfr) olarak atanacaktr. Byle olmasna ramen hangi tr deiken ile alyor olursanz olun sizin bir deer atama ilemi yapmanz en iyisidir.

    Yeni deiken trleri ile tantka deer sfrlama ilemlerini anlatmaya devam edeceiz.

    Aritmetik fadeler

    Bir matematiksel ilem yapabilen deimlerdir. ounlukla bir deer aktarma ve deer ileme blmlerinden oluur. lenen deerler bir aktarma deimi ile (ounlukla =) baka bir deikene aktarlr. Ancak bazen bu bulunan deer dorudan ekrana yazdrlabilir veya baka bir noktaya ynlendirilebilir.

    rnein k=5*l+2 ifadesi bir deer aktarma deimidir ve bir aritmetik ifadedir.

    Ancak Tek bana l*25/100 ifadesi de bir aritmetik ifadedir. Bir aritmetik ifade ierisinde saysal deikenler, saysal sabitler ve aritmetik operatrler yer alr.

    Aritmetik Operatrler

    C dili aritmetik operatrler yn ile ok zengin bir dildir. lemleri kolaylatran bir ok ifadeyle karlamak mmkndr. kili (Binary) operatrler +,-, /, * ve % operatrleridir. Tekil (Unary) operatrler ise ve + olarak karmza kmaktadr. Tamsay blme yapldnda elde edilen sonucu tamdr. Kesirler kesilip atlr. X % Y ilemi Xin Yye blmnden kalan bulur. rnein artk yl 4e tam blnebilen, fakat 100e tam blnemeyen ancak 400e tam blnebilen yllardr.

    if (yil %4 == 0 && yil % 100 != 0 || yil % 400 == 0) artk yldr

    54/17.10.2007 01:35:00 PM 21

  • C Programlama Ders Notlar

    else artk yl deildir.

    % operatr float ve doublea yani kesirli deerlere uygulanamaz.

    + ve operatrleri ayn ncelie sahiptir. Ancak bu operatrlerin ncelii *, /, % operatrlerinden daha dktr. aret deitirme operatr olan en ncelikli ilemdir. E ncelikli operatrler soldan saa doru ilenirler. Ancak parantezler kullanlarak ilem ncelikleri deitirilebilir. Genelde a + (b + c) ilemi (a + b) + c ilemi ile ayn sonucu retir. Ancak bazen deiken ierisine deerin smamas ve alt tama veya st tamadan dolay bu deerler birbirine eit olmayabilir.

    Mantksal ifadeler

    Sonucunda doru ya da yanl deer retilen ifadelere mantksal ifade denir. Ancak C dili asndan zellikle doru ya da yanl diye bir kavram bulunmaz. Onun yerine 0 ve 0'dan farkl deerler sz konusudur. Bu bakmdan 0 deeri yanl olarak alglanmaldr. Dier deerler doru olarak alglanmaldr.

    Bu sebeple bir C Mantksal ifadesi aslnda herhangi bir saysal deer'dir ve illa karlatrma operatrleri veya mantksal operatrlerle ifade edilmi olmak zorunda deildir. C dilinin bu zelliini bir ok program parasn incelediinizde grmeniz mmkndr.

    if (1)printf("Merhaba\n");else printf("Yanl\n");

    ifadesinde ekrana her halkarda Merhaba yazlacaktr. nk 1 deeri mantksal doru deerini de tamaktadr.

    Karlatrma leleri ve Mantksal Operatrler

    Karlatrma ileleri

    ki Deeri birbirleri ile karlatrp mantksal doru ya da mantksal yanl deerlerinden birini elde eden operatrlerdir. Bu iki deerin birbirine gre eitlik, byklk veya kklk gibi ilgilerini karlatrr.

    Op. Aklama rnek> Operatrn solundaki deer sandaki deerden byktr. k>123< Operatrn solundaki deer sandaki deerden kktr. k= Operatrn solundaki deer sandakinden byk ya da eittir. k>=123

    54/17.10.2007 01:35:00 PM 22

  • C Programlama Ders Notlar

  • C Programlama Ders Notlar

    Bu rnekte yeni bir karakter okumadan nce tampon sahada (s dizgisi) yeterli yer olup olmad denetlenmelidir. O nedenle i

  • C Programlama Ders Notlar

    Eer trlerden bir long ise dier tr longa evrilir ve sonu long olarak bulunur.

    Trlerden bir unsigned ise dieri de unsigned tre evrilir ve sonu unsigned olarak bulunur.

    Dier durumlarda ilenenler int trdedir ve sonu int olarak bulunur.

    Sonu olarak baz durumlarda da tr dnmleri zorunlu olarak program/programc tarafndan yaplmaldr. Bu durumda

    (tr-ad) ifade

    tanm ile ifade ile belirtilen deerler istenilen tre dntrlrler. Bu ileme cast denilir.

    Artrma ve Eksiltme operatrleri

    C dilinde deikenlerin deerini artran veya eksilten allmadk iki operatr bulunur. Arttrma operatr ++ ilemi yanndaki deikenin deerini bir arttrrken eksiltme operatr olan yanndaki deikenin deerini bir eksiltir. Deikenlerin deerlerini ++ operatr ile arttrrz. Allmadk dier bir konu ise ++ veya operatrlerinin hem nek (deikenden nce ++n) hem de sonek (deikenden sonra n++) olarak kullanlabiliyor olmasdr. Her iki durumda da nin deeri bir arttrlr. Fakat ++n ileminde nin deeri kullanlmadan nce arttrlrken; n++ ileminde n deeri nce kullanlr. sonra 1 arttrlr. Bu durumda unu syleyebiliriz: nin deeri 5 olmak kaydyla

    X=n++ ilemi sonucunda xin deeri 5 n'in deeri ise 6 olurken

    X=++n ilemi sonucunda xin deeri 6 ni deeri ise 6 olur. Grld zere her iki durumda da nin deeri ayn olurken xin deeri deimektedir. ++ veya -- operatrleri sadece deikenlerle birlikte kullanlabilir. Yani x=(+j)++ uygun bir kullanm deildir.

    Mantksal Bit operatrleri

    C dilinde bir grup operatr bit dzeyinde ilem yapabilmektedir. Bu operatrler float ve double trleri zerinde ilem yapamamaktadr.

    & Bit dzeyli VE ilemi | Bit dzeyli VEYA ilemi ^ Bit dzeyli XOR ilemi (Dlayan ya da) > bitleri saa kaydr

    54/17.10.2007 01:35:00 PM 25

  • C Programlama Ders Notlar

    & operatr ounlukla saysal bir deer zerinde istenilen bitlerin maskelenmesini salar. | operatr bu ilemin tersinin yaplmasn salar. Bu operatrlerin && ve || ile kartrlmamas gereklidir.

    Deer Atama ifadeleri

    i=i+1 eklindeki ifadeleri C dilinde i+=2 biiminde anlatabiliriz. Burada += eklinde bir deer atama operatr kullanlmtr. kili operatrlerin hepsinin bu ekilde deer atama deimleri bulunur. yle ki;

    ifade1 op= ifade2 ifadesi ifade1 = ifade1 op ifade2 eklinde anlatlabilir.

    Koullu fadeler

    if (a>b) z=a;else z=b;

    ifadesi a veya b deerlerinden byk olann deerini bulan ifadedir. Bu ilemin karl olarak u ekilde bir ifade ile yazmak mmkn olmaktadr.

    z=(a>b) ? a : b;

    bu ifadenin genel gsterimi u ekildedir:

    ifade1 ? ifade2 : ifade3

    Bu gsterimde ncelikle ifade1 mantksal ifadesi hesaplanr. Eer mantksal olarak doru ise veya 0dan farkl bir deer hesaplanrsa ifade2 ile gsterilen

    54/17.10.2007 01:35:00 PM 26

  • C Programlama Ders Notlar

    Giri k lemleriGiri k Komutlar bir Programlama dili iin olduka nemlidir. nk oluan ktlarn kullanc veya programcya ulamas gerektii gibi kullancnn da Programa veri vermesi gerekebilir. Ancak gerekte giri/k imkanlar C dilinin bir paras deillerdir. C Programlama dilinde Giri k ilemleri gerekte komutlar ile deil stdio.h ktphanesinde bulunan fonksiyonlar ile gerekletirilir. Bu blmde standart G/ ktphanesinde yer alan ve C programlarnda kullanlan fonksiyonlardan bahsedeceiz. Fonksiyonlar G/ ilemlerini kolaylkla yapabilecek tanmlara sahipler. Uygulamann ne kadar kritik olmasna bakmakszn tm programclar bu rutinleri rahatlkla ve etkin bir ekilde kullanabilirler. Ve son olarak bu fonksiyonlar tanabilir ekilde tasarlanmlardr. Yani herhangi bir programc yazd C programn C derleyicisinin bulunduu herhangi bir iletim sistemi platformuna tayabilir.

    Bu blmde G/ ktphanesi iinde yer alan tm fonksiyonlar anlatamayacaz. Bizim iin daha nemlisi youn kullanlan fonksiyonlarla tanmak ve bir C programnn iletim sistemi evre ortamyla etkileimini salayacak kurallardan bahsetmektir.

    Standart Ktphaneye Eriim

    Standart G/ ortamna mracaat eden tm C program kaynak kodlarnda aadaki satr bulunmaldr:

    #include

    Bu satr bir C programnn en balarnda yer alr. stdio.h dosyas iinde G/ ktphanesi tarafndan kullanlan bir takm makrolarn ve deikenlerin tanmlanmtr. iaretlerini ktphane adnn etrafnda kullanmay iaretlerini kullanmaya tercih ederiz. nk derleyiciye bu ktphane dosyasnn sistem tarafndan tanmlanan include klasrnde (balk dosyalarnn bulunduu klasrde) olduunu belirtmek isteriz. Eer iaretleri kullanlm olsayd bu ktphane dosyas klasrn iindedir anlamna gelecektir.

    Standart Giri, Standart k ve Hata k noktalar

    Bir C Programnda oluan deerler standart olarak ekrana yazlr. Bu birime standart k birimi denir (Standart Output).

    54/17.10.2007 01:35:00 PM 27

  • C Programlama Ders Notlar

    Bir C Programnda girilecek deerler standart olarak klavyeden okunur. Bu birime standart giri birimi denir (Standart Input).

    Bir C Programnda oluan hatalar standart olarak ekrana yazlr. Bu birime standart hata birimi denir (Standart Error).

    Bir giri k fonksiyonu kullanldnda bu fonksiyonlarn zelliine gre standart Giri veya Standart k ortamndan deer iletiiminde bulunulur.

    Standart Giri k Fonksiyonlar

    En basit giri yntemi tek bir karakterin standart giri biriminden okunmasdr. getchar() fonksiyonu giri biriminde sradaki dier karakteri dndrr. Bir ok iletim sistemi ortamnda C programlama dili terminalden/klavyeden deer okuyacana baka bir dosyadan karakterleri okuyabilir. Eer bir programda getchar() fonksiyonu kullanlm ise u ekilde yazlan bir komut satr

    prog cikisdosyasi

    eklindeki komut satrnda prog isimli programn kts terminale yazlacana cikisdosyasi isimli dosyaya yazlacaktr. Eer bu programn kts baka bir programa gnderilecekse boru iareti kullanlabilir.

    54/17.10.2007 01:35:00 PM 28

  • C Programlama Ders Notlar

    Bunun haricinde dosyalar zerinde Okuma/Yazma yapan komutlar ilerdeki konularmzda ele alnp rneklenecektir. Bu komutlar da iki farkl kategoride incelemek hi de yanl olmasa gerek.

    char c;...c=getchar();Biiminde gsterilebilecek ekilde yazlan komutumuz standart giri biriminden bir karakter okur. Yada

    char c;...c=getc(stdin); eklinde kullanldn grebilirsiniz.char c;.../* Tek karakter yazar */putc(c,stdout); putchar(c); eklinde yazlr ve c ile ifade edilen tek karakteri standart k biriminden yazar.

    rnek 1

    Aadaki Program Klavyeden girilen harfleri ekrana szerek yazmaktadr. yle ki klavyeden girilen harflerden a harfini ekrana yazmamaktadr ve bu ilemi enter tuuna baslncaya kadar devam etmektedir.

    #include main(){char c;while((c=getchar())!='\n')

    if (c!='a') putchar(c);printf("\n");

    }

    Bir ok program tek bir giri kaynandan okur ve tek bir k noktasna bu bilgileri yazar. Bu amala da getchar, putchar veya printf gibi G/ fonksiyonlar kullanlr.

    rnek 2

    Aadaki rnek klavyeden girilen karakterleri kk harfe evirerek ekrana yazan bir programdr.

    #include

    54/17.10.2007 01:35:00 PM 29

  • C Programlama Ders Notlar

    main(){ int c; while((c=getchar()) != EOF) putchar(isupper( c ) ? tolower( c ) : c);}

    Bu rnekteki isupper ve tolower makrolar stdio.h ktphanesinde tanmlanm olan fonksiyonlardr. Bu fonksiyonlardan isupper kendisine gnderilen karakterin byk harf olmas durumunda doru deer yanl olmas durumunda yanl deer dndrr. Tolower fonksiyonu ise kendisine gnderilen karakteri kk harfe evirir.

    Biimlendirilmi klar

    stenilen deerlerin uygun ekilde ve uygun yerlerde grnebilmesi iin Biimlendirilmi k Komutu kullanlabilir.

    printf("Biim Tanmlar ve Sabit ifadeler"[,Deiken1[,Deiken2...]])

    eklinde kullanlan komut bu ama iin son derece uygundur. Bu Fonksiyon Sabit ifadelerin ve deikenlerin belirlenmi biim tanmlarna gre ekrana yazlmasn salar. Biim tanmlar ve Sabit ifade dediim karakter dizisinde iki farkl trde bilgi bulunur. Bunlar normal karakterler ile ifade edilen ifadeler ve c iin bir anlam tayan dnm ifadeleri. Bu dnm ifadeleri istenilen bir deikenin parametre olarak yazlm ise istenilen bir biimde ekrana yazlmasn salar.

    printf("Merhaba %s u anda Hava %d scaklnda\n", ad, hava);

    Bu deyim Merhaba Ahmet u anda Hava 23 scaklnda gibi bir ifadeyi ekrana yazacaktr. Bu satrda yer alan ve % ile balayp bir dntrme karakteri ile biten ifade dnm yapan biim tanmdr. % iareti ile dntrme karakteri arasnda yer alan blmde u karakterler bulunabilir:

    - iareti : yazlacak ifadenin sola yanak yazlmasn salayacaktr. Saysal bir deer : yazlacak ifadenin ekranda ka basamaklk alana

    sacan belirleyen saysal bir deerdir. Eer ifade belirlenen yere samayacaksa sol taraftan krplacaktr. . iareti : alan kesirli saysal alandan ayran nokta.

    l iareti : Biim tanmnn uzun olup olmadn veren bir tanmlayc .

    Biimlendirme tanmlar ya da dntrme karakterleri iin aadaki tabloda yer alan tanmlar kullanlmaktadr.

    Biim Tanm

    54/17.10.2007 01:35:00 PM 30

  • C Programlama Ders Notlar

    d Karlk olarak gelen deikenin deerini say olarak ekrana yazar.

    oKarlk olarak gelen deikenin deerini 8'lik say olarak ekrana yazar.

    xKarlk olarak gelen deikenin deerini 16'lk say olarak ekrana yazar.

    uKarlk olarak gelen deikenin deerini iaretsiz bir deer olarak ekrana yazar.

    cKarlk olarak gelen deikenin deerini tek bir karakter olarak ekrana yazar.

    sKarlk olarak gelen deikenin deerini bir karakter dizesi olarak ekrana yazar. Bu karakter dizesi dize sonu anlamna gelen null karakteri bulununcaya kadar yazlr.

    eKarlk olarak gelen deikenin deerini bilimsel gsterimdeki say olarak ekrana yazar.

    fKarlk olarak gelen deikenin deerini kesirli say olarak ekrana yazar.

    G %e veya %fden ksa olann kullanmasn salar

    Eer % iaretinden sonra kullanlan iaret dntrme karakteri deil ise ve normal bir karakter olarak % iareti kullanlacaksa %% eklinde kullanlmaldr

    Kullanlan zel Karakterler

    \n Yeni Satr Karakteri

    \t TAB Karakteri

    \\ \ Karakteri

    \" " (Trnak) Karakteri

    Biimlendirilmi Giriler

    stenilen Deer ve ifadelerin bilgisayara girilmesini salar. Kullanm olarak printf ile ayn artlar salar. Ve bilgisayara giri yn ile alr.

    scanf("Biim Tanmlar"[,Deiken1[,Deiken2...]])

    eklinde kullanlr. scanf standart giri biriminden karakterleri okur ve verdiiniz biim tanmlarna gre okunan karakterleri yorumlar ve deerleri ilgili deikenlere yerletirir. Ancak dikkat edilmelidir ki Deiken olarak ifade edilen deikenlerin adresleri bu fonksiyona gnderilmelidir. Burada deikenleri her biri biim tanmlar ile belirlenen tanmlara birebir rtmek zorundadr. printf'de grlen tm biim tanmlayclar scanf iin de geerlidir. Deikenler ise adresleri ile verilmelidir. Eer deiken basit deiken ise bu adres deeri "&" operatr ile bulunmaldr. Eer deiken

    54/17.10.2007 01:35:00 PM 31

  • C Programlama Ders Notlar

    karakter dizesi gibi bir deiken ise sadece deiken adn vermek yeterli olacaktr.

    rnek 3

    Bu Program klavyeden farkl zelliklere sahip deerler okuyup farkl zellikler ile ekrana yazmaktadr.

    #include #include

    main(){char ifade[100];int k,uzunluk;float kesir;char cevap;printf("Ad, Scaklk, d1, kesir, cevap deerlerini giriniz?\n");scanf("%s %d %d %f %c", ifade, &k, &uzunluk, &kesir, &cevap));/* Bu komut aralarnda boluk olmak zere bir dizi deeri karlk deikenlere aktaracaktr.*/printf("Sonu\n%s\n%d\n%d\n%f\n%c", ifade, &k, &uzunluk, &kesir, &cevap));} Altrma 2

    int k;char ad[20];scanf(....,&k,ad);eklinde yazlm bir ifade de .... ile belirlenmi yere ne konmaldr.

    Altrma 3

    Klavyeden girilecek iki tam say ve bir kesirli say iin yazlmas gerekecek scanf fonksiyonunun parametreleri nelerdir?

    Bellek Biim dnm fonksiyonlar

    Scanf ve printf fonksiyonlarnn benzeri olarak sprintf ve sscanf eklinde fonksiyonlar tanmlanmtr. Ancak bu fonksiyonlar kty ekrana yazacana bir karakter dizesine yerletirir veya girdii klavyeden okuyacana bir karakter dizesinden okur. Fonksiyonlar tanmlar u ekilde verilebilir:

    54/17.10.2007 01:35:00 PM 32

  • C Programlama Ders Notlar

    sprintf(karakter dizesi deikeni, Biim ve sabit tanmlar, deiken listesi)

    sscanf(karakter dizesi deikeni, Biim tanmlar, deiken listesi)

    Karakter dizesinin Okunup-Yazlmas

    Bazen tek bir karakter veya tek bir kelime deil de Enter tuuna baslncaya kadar ya da satr sonu iaretini buluncaya kadar tm yazlanlarn okunmas gerekebilir. Bu nedenle u fonksiyonlar kullanmak yerinde olacaktr.

    char ad[30];...gets(ad);//Bir karakter dizesini klavyeden okurputs(ad);//Bir karakter dizesini ekrana yazar

    rnek 4

    Bu rnek'te Klavyeden girilen bir karakter dizesinin tersi bulunarak ekrana yazlmaktadr.

    #include #include main(){char ifade[100];int k,uzunluk;puts("fadenizi Giriniz\n");gets(ifade);uzunluk=strlen(ifade);for(k=uzunluk-1;k>=0;k--)

    putchar(ifade[k]);putchar('\n');}

    nemli bir takm fonksiyonlar

    stdio.h ktphanesi iinde kullanl olabilecek bir takm fonksiyonlar bulunur.

    Karakter Snama ve dntrme fonksiyonlar

    isalpha( c ) c karakter bilgisi tayorsa 0dan farkl bir deer deilse 0 dndrr.

    54/17.10.2007 01:35:00 PM 33

  • C Programlama Ders Notlar

    isupper( c ) c karakteri byk harf ise 0dan farkl bir deer deilse 0 dndrr

    islower( c ) c karakteri kk harf ise 0dan farkl bir deer deilse 0 dndrr

    isdigit( c ) c rakam bilgisi tayorsa 0dan farkl bir deer deilse 0 dndrr.

    isspace( c ) c boluk bilgisi tayorsa 0dan farkl bir deer deilse dndrr.

    Toupper ( c ) c karakterini byk harfe evirir.

    Tolower ( c ) c karakterini kk harfe evirir.

    ungetc

    standart giri ortamndan veya herhangi bir dosyadan okunmu karakteri geri o ortama yazan fonksiyondur.

    ungetc(c, dosyaisaretcisi);

    54/17.10.2007 01:35:00 PM 34

  • C Programlama Ders Notlar

    Program Ak ve Program Ak DenetimiC Programlarnda Program satrlar dier programlama dillerinde olduu gibi yukardan aaya icra edilirler. Her komut sonunda ; (noktal virgl) karakteri bulunur. Blok yapl bir dildir ve bu balamda deikenler tanmlandklar blok ierisinde etkilidirler. Birden fazla komutlar {...} simgeleri arasnda ele alnarak ek bir komutmu gibi bloklanabilir. Belki daha nce tantnz komutlar burada daha ayrntl bir ekilde incelemeye alacaz.

    Komutlar ve Bloklar

    C Dilinde Noktal virgl komut sonlandrma belirtecidir.

    x=0;i++;printf(.....);

    yukardaki her bir ; komutun bittiini ve dier komuta geildiini sembolize eder. Komutlar bloklamak iin {...} kme parantezleri kullanlmaktadr. Bu parantezler arasnda yazlan komutlar ka tane olursa olsun tek bir komutmu gibi alglanr. if, else, for, while gibi komutlarn hemen peinden ; kullanlmaz. Ayrca bir blou bitiren } iaretinin peinden de noktal virgl konulmaz. Bu da zmlemede istenilen ksmlarn kapal bir kutu imi gibi gsterilmesini salar.

    If-Else komutu

    Karar vermeyi salayan Komut'tur. Temel Yaps

    if (mantksal_ifade)Komut-1;

    elseKomut-2;

    Bu yapda else ksm seimliktir. Yani kullanlmasa da olur. Komutun almas u ekilde izah edilebilir:

    ncelikle mantksal ifade hesaplanr ve bir deer bulunur. Bu deer 0 haricinde bir deer ise (yani mantksal ifade doru ise)

    Komut-1 ile gsterilen komut uygulanr

    54/17.10.2007 01:35:00 PM 35

  • C Programlama Ders Notlar

    Bu deer 0 ise (yani mantksal ifade yanl ise) else'den sonraki komut-2 ile gsterilen komut uygulanr.

    Eer else ksm yok ise ve deer 0 ise Komut-1 uygulanmadan ;'den sonraki komutlardan devam edilir.

    Gerekte if komutu bir saysal deikenin deerini kontrol ediyorsa bir takm ksaltmalar kullanmak mmkndr. rnein;

    if (deiken !=0) ifadesi yerineif (deisken) yazlabilir. Ancak tercihen birinci yazlan daha anlalr ve allagelmi olandr.

    Bu yapda Komut-1 veya Komut-2 ile gsterilen yerlerde birden fazla komut uygulanmak zorunda ise bu komutlar kme parantezleri ierisine alnp tek komutmu gibi gsterilebilir.

    Bu yapda else ksm seimlik olduu iin i ie if yazmlarnda sorunlarla karlaabilirsiniz. zellikle bir if komutunun else tmcesi yok ise belirsizlik ortaya kar. Bu durumda else son ife aittir. Daha dorusu ifler iten da doru kapatlr. yle ki:

    if (n>0) if (a>b) z=a; else z=b;

    komut topluluunda else komutu ikinci sradaki if komutuna aittir. Daha anlalabilir olsun diye komutlarn yazm srasnda girinti kntlara dikkat edilmitir. Eer anlatlmak istenen bu deil de baka bir sra idiyse kme parantezleri kullanlabilirdi.

    if (n>0) { if (a>b) z=a;}else z=b;

    baz durumlarda bu belirsizlikler hatalara dahi neden olabilir. yle ki

    if (n>0) for(i=0; i0) { printf(....); return(i); }else /* Yanl fade */ printf(n negatif olamaz \n);

    54/17.10.2007 01:35:00 PM 36

  • C Programlama Ders Notlar

    Girinti kntlarn konumuna gre yaptnz ile derleyicinin anlad farkl olacaktr. Derleyici ikinci if komutunun else komutunu yazdnz sanacak ve kodu buna gre retecektir.Bylece programnzda ciddi mantksal bir hata yapm olursunuz. Bu tr bir hatay ayklamak olduka zordur.

    rnek 5

    Bu rnekte klavyeden girilen iki saysal deer karlatrlyor, byk olandan kk olan karlyor ve sonu ekrana yazlyor.

    #include #include main(){int a,b;printf("A iin bir deer giriniz?");scanf("%d",&a);printf("B iin bir deer giriniz?");scanf("%d",&b);if (a>b)

    printf("A-B=%d\n", a-b);else

    printf("B-A=%d\n", b-a);}

    Else if komutu

    Temel yaps u ekildedir.

    if (koul) komut;else if (koul) komut;else if (koul) komut;else komut;

    Bu ekilde oklu seim eklinde bir dizi if deimi arasndan bir tanesi seilecektir. Koullar sra ile kontrol edilir, koullardan ilk doru olann iliiindeki komut icra edilir. Bu doru koulun bulunup altrlmasndan sonra tm bloun almasn bitirir. Her bir komut ile ifade edilen blm tek bana bir komut olabilecei gibi kme parantezleri arasndaki bir ok komut ta olabilir.

    54/17.10.2007 01:35:00 PM 37

  • C Programlama Ders Notlar

    Komutlarn sonundaki else deimi koullardan hibirinin gerekleememesi durumunda icra edilir. Bazen koullardan hibirinin doru olmad durumlarda yaplacak deiik bir komut bulunmayabilir. Bu durumda bu satrlar (en son else satr) yazlamayabilir. Bazen de bu durum ile asla karlalmayacaksa imkansz durumu grebilmek iin yazlabilir.

    Etiketler ve goto komutu

    C iin hi tercih edilmeyen bir komut olan bu komut program akn bir noktadan dier bir noktaya ynlendirir. C Programlama dili ok etkili blok yapl bir dildir. Gl Dng Komutlar, Fonksiyonel yap ve hatta harici ktphaneler oluturup bunlar programa balama ileminden dolay byle bir komuta kesinlikle ihtiya bulunmamaktadr. Hatta onsuz program yazmann Cde ok kolay olduunu syleyebiliriz.

    Yine de eski Programlama alkanlklar olanlar iin bu komut kullanlabilir bir komut olarak C dili ierisinde vardr.

    etiket:.......goto etiket;

    eklinde kullanlmaktadr. ncelikle goto komutu ile saplacak veya dallanlacak konuma bir ad verilir. Bu konum iin verilecek ad deiken isimlendirme kurallarndaki gibi adlandrlabilir. Bu ad (: -iki nokta st ste) sembol takip etmelidir. Dng oluturmak iin tercih edilmese de belki kullanlmas gerekecek birka nokta sylenebilir. yle ki:

    ie birden fazla dng olan bir yapda en d dngye ulamak iin...

    Hata ayklama amacyla oluturulacak yaplarda kullanmak iin...

    Zorunlu olmasa da bir grup saynn iinde aradnz bulduunuzda bu durumu anlatabilmek iin...

    Altrma 4

    Klavyeden 0-Sfr girilinceye kadar girilen bir grup saynn karelerinin ortalamasn bulacak program iin C Programlama dili ile gelitiriniz.

    Altrma 5

    Klavyeden girilecek iki Pozitif tam saynn OBEB (Ortak Blenlerin En By)ini bulacak C Programn gelitiriniz. rnein elimizde 3654 ve 1365 deerleri olsun. Bu deerlerin OBEBi u ekilde bulunmaktadr.

    54/17.10.2007 01:35:00 PM 38

  • C Programlama Ders Notlar

    3654 / 1365 Kalan 9241365 / 924 Kalan 441924 / 441 Kalan 42441 / 42 Kalan 2142 / 21 Kalan 0

    Bu ilem srasn ve yineleme zelliklerini kullanarak iki saynn OBEBini bulunuz. Bu rnekte OBEB 21 deeridir.

    Altrma 6

    Klavyede girilen kesirli bir sayy a/b eklinde rasyonel olarak ifade edip ekrana yazabilecek program c ile gelitiriniz. rnein klavyeden girilecek olan 0.5 deeri iin 1/2 deerini ekrana yazmaldr.

    switch komutu

    Switch Komutu birden fazla deerden seim yapmak iin kullanlabilecek zel karar verme komutudur. ie fazla sayda if..else komutunu kullanmay gerektiren durumlarda kullanlabilecek etkili bir karar verme aracdr.

    switch(ifade){case sabit_deer1: [Komut1;]case sabit_deer2: [Komut2;]case sabit_deer3: [Komut3;]case sabit_deer4: [Komut4;]case sabit_deer5: [Komut5;]......case sabit_deerN: [KomutN;]default: [Komut;]}

    rnek 6

    Aadaki program bir ifade iindeki rakamlar, boluklar ve dier karakterleri sayan bir programdr.

    #include int c,i,nwhite,nother,ndigit[10];main(){ nwhite = nother = 0; for (i=0; i

  • C Programlama Ders Notlar

    case 3 : case 4 : case 5 : case 6 : case 7 : case 8 : case 9 : ndigit[c-0]++; break case : case \n: case \t : nwhite++; break; default : nother++; break; } printf(digits = ); for (i=0;i

  • C Programlama Ders Notlar

    bir case satrnda kullanmanz mmkn olabilmektedir. Veya birden fazla case satr iin ayn satrlarn altrlmasn salamaktadr.

    yi programlama rnekleri iin son case satrndan sonra da break komutu kullanmak gerekebilir. Mantksal olarak gereksiz grnse de bu daha sonra buraya eklenecek yeni case satrlarna yanllkla dallanmay engelleyecek be mantksal hatalarn oluumunu azaltacaktr.

    Altrma 7

    Klavyeden girilen iki say ve bir operatre gre ilem yapp sonucu ekrana yazan bir C Program gelitiriniz.

    Altrma 8

    Klavyeden girilecek olan ay ve yl bilgisine gre ayn ka gn ektiini bulacak C Programn gelitiriniz.

    Dng Komutlar - while

    Bir koul salanncaya kadar baz komutlarn tekrar edilmesini salayan dng komutudur. Bu Dng komutunun znde sadece koul snama bulunmaktadr. Deer arttrma veya ilk deer atama gibi gerekli olabilecek dier ilemler ayrca belirtilmelidir.

    while(koul){

    komut1;komut2;......

    }

    eklinde kullanlr ve koul doru olduu srece komutlarn uygulanmasn salar. Koul ile belirtilen ifade mantksal bir ifade olup doru olduu srece komut1, komut2 vb komutlarn tekrar tekrar uygulanmasn salar. Ta ki koul yanl oluncaya kadar. Koul yanl olursa veya saysal olarak 0 deerini tarsa program ak dng komutundan sonraki komuttan devam eder.

    rnek 7

    Aadaki rnekte Fibonecci dizisini bir N deerine kadar ekrana yazan program while komutu kullanlarak yazlmtr.

    #include int a,b,c;

    54/17.10.2007 01:35:00 PM 41

  • C Programlama Ders Notlar

    int n;main(){ printf(n deerini klavyeden giriniz); scanf(%d,&n); a=1; b=1; printf(%d\n%d\n,a,b); c=a+b; while(c

  • C Programlama Ders Notlar

    ifade1;

    while(ifade2){ komut1; komut2; ifade3;}

    Teknik olarak ifade olarak tanmlanm ifadelerden ifade1 ve ifade3 aritmetik ifadeleri anlatr. fade2 ise mantksal bir karlatrma ifadesidir. Bu ifadeden her hangi biri yazlmadan pas geilebilir. Ancak bu durumda bile noktal virgller yerlerinde kalmaldr.eer ifade1 ve ifade3 yazlmazsa ve hatta ifade2 for komutu iine yerletirilmezse ortaya kan komut dorudur. yle ki

    for(;;){ ...}

    eklinde yazlan komut bir sonsuz dngy anlatr. Bu tr bir dngden break veya return gibi bir komutla klaca kabul edilir.

    Burada deiken ile belirtilen ilk ksm tek bir deer aktarma ifadesi yerine virgllerle ayrlmak sureti ile birden fazla deer aktarma ifadesini barndrabilir. Bu ksm bir ilk deer aktarma ifadesi olup dng uygulanmaya balamadan nce icra edilir.

    kinci ksmda kullanlan koul dngnn sonlanma kouludur. Bu koul doru olduu srece dng yinelenir.

    Son Ksmda kullanlan deer aktarma deimleri aralarnda virgl bulunmak koulu ile birden fazla olabilir. Bu ksm ise dng iindeki komutlarn her uygulanmasndan sonra icra edilen ilemlerdir. ounlukla deer artran ifadelerdir.

    for(x=0;x

  • C Programlama Ders Notlar

    Acaba nerede while nerede for komutlarn kullanmalym? Eer deikenlere ilk deer atama ifadeleri yok ise ve dngnn ka defa uygulanaca hakknda saysal net bir tanm sylenemiyorsa kullanc davranlarna bal bir koul ile ifade edilebiliyorsa while komutu uygun bir komuttur. Eer ilk deer atama ifadeleri var ve dngnn almas konusunda saysal bir takm deerler ifade ediliyorsa for komutu daha uygun bir komuttur. nk for komutu gerek ilk deer atamalarn gerekse de koulu ilk satr zerinde gsterdii iin daha kolay anlalr ve derli toplu olarak karmzda duruyor. Bu da dng komutumuzun merkezilemesini ve programn kontrolnn kolaylamasn salar.

    rnek 8

    Bu rnekte klavyeden girilen bir N deerinin faktryeli for komutu kullanlarak hesaplanmtr.

    #includeint f,n,x;main(){ printf(n deerini giriniz); scanf(%d,&n); for(f=1,x=1;x

  • C Programlama Ders Notlar

    Altrma 5 rneini goto komutu kullanmadan while veya for ile yeniden yaznz

    Altrma 13

    Sadece toplam ve karma kullanarak iki sayy arpan ve sonucu ekrana yazan C Programn gelitiriniz.

    Altrma 14

    Sadece toplam ve karma kullanarak iki sayy blerek blm ve kalan bulan ve sonucu ekrana yazan C Programn gelitiriniz.

    Altrma 15

    Klavyeden girilecek 20 saynn tek olanlarn ayr ift olanlarn ayr toplayp sonucu ekrana yazan bir C program gelitiriniz.

    Altrma 16

    F(x)= =

    n

    x x1 21

    eklinde tanmlanm bir fonksiyonda girilen n deeri iin

    sonucu hesaplayan ve ekrana yazan C programn gelitiriniz. Program yazarken kesinlikle goto komutu kullanmaynz.

    Altrma 17

    Klavyeden girilen bir tam saynn tm tam blenlerini bulup ekrana listeleyen bir C Program gelitiriniz.

    Altrma 18

    for (x=1,f=1;x

  • C Programlama Ders Notlar

    koulunu dng sonunda snar. Bu nedenle ve dng komutunun genel grnnden dolay dng komutu iindeki komutlar en az bir kez icra edilirler.

    do{komut1;komut2;.......}while (koul);

    ncelikli olarak komutlar icra edilir sonra koul snanr. Doru ise komutlar tekrar uygulanr yani aslnda dng komutlar tekrar icra edilir. Eer ifade yanl olmusa dng son bulur.

    Tahmin edebileceiniz gibi do komutu for ve while komutuna gre olduka az kullanlan bir komuttur. Ancak tabi ki baz durumlarda olduka etkili bir dng komutudur.

    rnek 10

    Aadaki rnei inceleyelim. Bu rnekte kullanc klavyeden 0 ile 100 arasnda bir say girmeye zorlanyor. While ile yazlm olan koul inceleme satrna dikkat ediniz. Eer x100 ise dng iindeki komut tekrar ediliyor. nk bu istemediimiz bir durum. Asl istenen kullancnn geerli bir vize notu girebilmesidir.

    #include int x;main(){ do { printf(0 ile 100 arasndaki vize notunu giriniz); scanf(%d, &x); }while(x100);}

    yukardaki do...while blou klavyeden girilecek deerin 0...100 aralnda olmasn zorlar. Ve bu aralkta deilse tekrar deer girilmesini salar.

    Dng k Komutu - break

    Normal olarak bir dng koulda oluan duruma gre sonlanr veya devam eder. Dngnn ba ve sonunu belirleyen ifade veya kme parantezlerine gre dng ii ve d ayrlm durumdadr. Eer bir dngden herhangi bir anda kma ihtiyac oluursa bu komut kullanlabilir. Bu komut icra edildikten sonra dngnn sonunu belirten noktadan sonraki ilk komuttan program ak devam eder.

    54/17.10.2007 01:35:00 PM 46

  • C Programlama Ders Notlar

    break;

    eklinde Kullanlr. Bu komut en iteki dngden kmay salar.

    rnek 11

    #include int i;main(){ i=0; while (1){ if(i >100) break; printf(%d\n,i); i++; }}

    Dng devam Komutu - continue

    Break komutu tarznda bir komuttur. Bir dngde bu komutun bulunduu noktadan teye komutlarn kullanlmamasn salar. Onun yerine dng bana dnp oradan program akn devam ettirmeyi salar.

    continue;

    eklinde Kullanlr.

    Tm dng komutlarnda kullanlabilirken breakden farkl olarak switch komutu ile kullanlamaz. Dngdeki bir sonraki iterasyonun yaplmasn salar. rnek olarak:

    rnek 12

    Aadaki rnek i deeri ift olan durumlar iin dng bandan devam edilmesini salar. Yani ekrana sadece tek saylarn yazlmasn salar.

    #include int i;main(){ i=0; while (i < 100){ if(i % 2 == 0) continue; printf(%d\n,i); i++; }}

    54/17.10.2007 01:35:00 PM 47

  • C Programlama Ders Notlar

    Fonksiyonlar ve Genel Program YapsFonksiyonlar byk programlar kk paralara blen grevlerdir. Ayrca daha nce insanlarn retmi olabilecekleri zmleri sizin tekrar batan kefetmemenizi salarlar. lgili fonksiyonlar genellikle detaylar gizler. Zaten bu detaylarn programc tarafndan bilinmesinin bir anlam yoktur.

    C fonksiyon kullanmn verimli ve kolay kullanml bir ekilde tasarlamtr. Genellikle C programlar kk fonksiyonlardan olumutur. Bu arada bir C program bir yada daha fazla kaynak dosyasndan oluabilir. Bu kaynak dosyalar ayr ayr derlenmi ve birlikte ykleniyor olabilecei gibi hep birlikte de balanm olabilir.

    Aslnda C programlama dili ile yazlan tm programlar bir grup fonksiyondan ibarettir. Hatta C dilinin komutlarndan hari ok kullanl bir yn fonksiyon tanmlar sz konusudur. Belki de C dilini gl klan yaplardan biri de bu fonksiyon tanmlama ve fonksiyonlar istenilen yerlerde kullanmadr.

    Bir ok programda ktphanelerin iinde yer alan fonksiyonlar kullanmnzdr. getc, putc, sin, cos vb. fonksiyonlar bunlardandr. Bu blmde biz daha ok bu fonksiyonlar kullanmaktansa bunlar tanmlamay reneceiz. Bu ekilde kendinize ait program ktphaneleri oluturabilir ve bu program paralarn bir yerden baka bir yere tayabilirsiniz.

    Ana program blou (main)

    Bu kadar fonksiyon ierisinde unu belirtmek gerekir: Aslnda C programnn ana blou da bir fonksiyon tanmdr. Yani main diye adlandrlan bir fonksiyondur. Her Programda mutlaka bulunmas gerekir ancak parametre almak zorunda deildir ve deer dndrmek zorunda da deildir.

    tanmlar.......main(){....../* Program ile ilgili ana giri ifadeleri buraya yazlacaktr.*/......}

    54/17.10.2007 01:35:00 PM 48

  • C Programlama Ders Notlar

    C program genel yaps

    #include tanmlar#define tanmlarGlobal deiken tanmlarfonksiyon_ad(){......./*Fonksiyon tanm buraya*/.......}/* Bu programda kullanlabilecek tm fonksiyon tanmlar */main(){....../* Program ile ilgili ana giri ifadeleri buraya yazlacaktr.*/......}

    #include Tanmlar

    Programda kullanlacak harici ya da nceden tanmlanm fonksiyonlarn bulunduu ktphanenin tanmland ifadelerdir.

    Bu cins ktphane stdio.h, string.h, conio.h time.h vb. Ktphaneler olup bu ktphanelerin herbiri bir ilem grubu belirleyen fonksiyonlarn bir arada bulunduu dosyalardr.

    Bu ktphaneler, nceden tanmlanm ktphaneler (Programlama dili gelitiricileri tarafndan) olabilecei gibi, sizin oluturduunuz bir ktphaneler de olabilir.

    #define Tanmlar

    Bir Program ierisinde kullanmak isteyebileceiniz sabit ifadeleri tanmlamak iin kullanlan szcktr. Hemen ilk ksmda yer alr.

    Dier blmler

    Tm program ierisinde kullanlacak deikenler main bloundan nce tanmlanmaldr. Bu ekilde tanmladnz deikenler Global olurlar ve tm program ierisinde tanml hale gelirler.

    Daha sonra fonksiyonlar tanmlanr. Bu fonksiyonlarn tanmlanmas bir sonraki blmde ele alnmtr.

    Ana Program blounu tanmlanmas ve kodlarnn yazlmas ile program tamamlanm olur. aslnda main() diye adlandrlan bu blok normal bir fonksiyon tanmnda olduu gibi tanmlanr. Ancak ad zeldir ve

    54/17.10.2007 01:35:00 PM 49

  • C Programlama Ders Notlar

    deitirilemez veya deiik amalar iin kullanlamaz. Ayrca bir C program altrlmaya balandnda ilk olarak bu blok uygulanr. Dier fonksiyonlar veya program paralar buradan arlr veya buradan icra edilirler. Bu anlamda zel bir fonksiyondur. main() fonksiyonu. Eer altrlrken parametre ile kullanlan bir program olarak altrlrsa ()'ler arasnda gelen ifadeler o programn parametreleridir.

    Temeller

    Program birbirinden bamsz bir ksm fonksiyon tanmlarndan oluur. Fonksiyonlar arasnda haberleme, parametreler ve fonksiyonlarn dndrd deerler ile gerekleir. Bazen de bu deer transferi harici deikenler ile gerekleir.

    Fonksiyonlar kaynak kodda herhangi bir srada yazlabilir. Hatta kaynak kod birden fazla dosyaya blnebilir. nemli olan fonksiyonlarn blnmemesidir.

    Return deimi fonksiyondan deer dndrmeyi salayan ve arld yere deeri dndren deimdir. Return deimini herhangi bir ifade izleyebilir.

    return (ifade);

    aran fonksiyon dnen deeri dikkate almama hususunda serbesttir. Fonksiyonda return yanna deer yazmak da zorunlu deildir bu durumda aran fonksiyona deer dndrlmez.

    Fonksiyon, arld noktaya deer ya da hizmet dndren program paras olarak tanmlanabilir. Kullanm amac bir ilemin ok sk tekrar edilmesinden dolay paketlenmesini salamak ve kullanm annda sadece bu paketin adn kullanmaktr. Bu yntem ile ayn ii yapan bir program paras ok defa yazlacana bir defa yazlp ok yerde kullanma sunulmu olur.

    Bu yntemle yapsal programlar gelitirebilirsiniz. C dili ile en pratik program yazmann yolu fonksiyonlardan geer. zellikle ok youn ve karmak programlarn yazlmasnda hem yazm kolaylatrmak hem de anlalrl arttrmak iin fonksiyon kullanm son derece idealdir. Ayrca sorunlar zmlerken fonksiyonel kavramlarla zmlemek sorunun kolay zmlenebilmesine neden olacaktr.

    Bir Fonksiyon tanm genel olarak aadaki yapya sahiptir.

    [fonksiyonun tr] fonksiyonun_adi([P1[,P2..]])[deiskentr P1;degiskentr P2;................]{

    54/17.10.2007 01:35:00 PM 50

  • C Programlama Ders Notlar

    Fonksiyona ait deikenler ve tanmlarFonksiyona ait yaplacak ilemler ve komutlar[return deer];}

    Bu tanmda fonksiyon eer bir deer dndrmyor ise fonksiyonun_tr denilen ksm bo olabilecei gibi eer fonksiyon parametre almyor ise P1, P2 gibi ifadelere ihtiya bulunmamaktadr.

    Eer fonksiyon deer dndrmyor ise en sondaki return deer ifadesine gerek yoktur. burada deer denilen ifade fonksiyonun dndrecei deeri sembolize eder.

    Eer fonksiyonun parametreleri yok ise bu parametrelerin tr tanm yaplmaz. Burada tanmlanan bu parametreler sadece fonksiyon ierisinde kullanlabilir.

    Parametre: Bir fonksiyonda farkl deerler iin farkl sonular elde etmemizi salayan ve fonksiyona gnderilen deerlere verilen addr.

    Fonksiyon parametreleri hakknda

    u ana kadar grdmz fonksiyonlar parametreleri deerle arlmlard. Bu ynteme call by value denir ve arlan fonksiyon tm parametreler iin deeri alr ve zel yerel bir deikene kopyasn oluturur. Bu ilemde o deikenin adresi kullanlmaz. Bu ilemden de bu fonksiyonun bu deikenin deerini deitiremeyecei gibi bir sonu kar. Her fonksiyon bu tip deikenleri ve kendi yerelinde tanmlanm deikenleri sadece kendi ierisinde deitirebilir.

    Bir Fonksiyon parametresi olarak bir dizinin ad kullanldnda bu dizinin giri adresi fonksiyona iletilir. Dizinin tm deerleri fonksiyona kopyalanmaz. Fonksiyon dizinin elemanlarn indis deerleri ile marifeti ile rahatlkla deitirebilir. Buradan u sonu karlabilir diziler referans deeri ile yani adres ile fonksiyona iletilirler. Sonraki konularmzda iaretilerin kullanmnn anlatlmas ile bu konu daha net olarak aklanacaktr.

    Bu arada deiken sayda parametre alan fonksiyonlar portatif olarak yazmann bir yolu maalesef bulunmuyor. Bu nedenle de deiken sayda deerlerden en byn veya en kn bulabilecek fonksiyonu yazmak Cde yazmak ok da kolay olmasa gerek.

    Altrma 20

    Kendisine gnderilen a ve b gibi iki deikenin ierisindeki deerleri eviren swap adnda bir fonksiyon tanmlaynz. Bu tanmn program iinde nasl kullanlacan gsteriniz.

    54/17.10.2007 01:35:00 PM 51

  • C Programlama Ders Notlar

    Altrma 21

    Kendisine gnderilen bir tamsay dizisini sralayarak arana geri dndren fonksiyonu C dili ile gelitiriniz.

    Deikenlerin etkili olduu blgeler

    C Blok yapl bir programlama dilidir. Bu nedenle deikenler aslnda tanmlandklar blok ierisinde kullanlabilirler. Bir baka blok ierisinde o deiken tanmsz kabul edilir. Bir deikenin bir blok ierisinde tanmlanp tanmlanmad derleme aamasnda anlalabilir. Eer Syntax Error hatas ile karlalp undefined variable gibi hatalar alnyorsa deiken tanmlanmam veya yanl bloklarda bu deiken kullanlmaya allyor demektir.

    Bu tanmlara gre "Her deiken sadece tanmland fonksiyon ierisinde kullanlabilir" demektir. Ancak Global olarak tanmlanm deikenleriniz var ise bu deiken tm fonksiyonlarnz ierisinde kullanlabilir.

    Genel Deikenler

    C Program bir grup harici nesneden oluur. Bunlar bazen deikenler bazen de fonksiyonlardr. Bir fonksiyonun iinde tanmlanan deikenler yerel deiken olarak adlandrlrlar. Baz durumlarda bunlara dahili deiken de denebilir. Fonksiyonlarn dnda tanmlanan deikenler Genel deikenler olup bazen de harici deiken olarak adlandrlrlar.

    Genel deikenler tm fonksiyonlar tarafndan eriilebilir olduundan fonksiyon parametrelerine ve deer dndrme mekanizmasna alternatif olarak kullanlabilir. Bir fonksiyon genellikle genel olarak tanmlanm herhangi bir deikene adn anmak suretiyle eriebilir.

    Eer fonksiyonlar arasnda ortak kullanlacak deikenler ok ise uzun parametre listeleri yerine genel deiken tanmlamalar daha etkili olacaktr. Ancak bu da fonksiyonun portatifliini ve program yaps konusunda dankl belirtecektir. Bu ekilde fonksiyonlar arasnda bir ok veri ba bulunacaktr.

    Genel deikenlerin kullanlmasnn temel nedenlerinden biri de deiken deerlerinin sfrlanmasn salamaktr.

    Genel olarak tanmlanm bir deiken tm dier fonksiyonlarda tanml olaca gibi programn almasnn bittii ana kadarda bellekte tutulurlar. Halbuki bir fonksiyonun iinde tanmlanm yerel deikeniniz ise fonksiyona girdiinizde bellee alnr ve fonksiyondan kncaya kadar

    54/17.10.2007 01:35:00 PM 52

  • C Programlama Ders Notlar

    bellekte kalr. Bu nedenle iki ya da daha fazla fonksiyon verileri paylaacaksa bu verilerin genel deikenler ile paylalmas mmkndr.

    extern deikenler

    Eer bir program birden fazla dosya zerinde tanmlanmsa ve baz deikenler tm dosyalarda kullanlabilmek ve eriilebilmek istiyorlarsa bu deikenler extern olarak tanmlanrlar. rnein main fonksiyonunun olduu bir program blounda genel deikenler dzeyinde

    int kalem; eklinde bir tanm yapm olsanz ve dier bir program dosyasndan bu deikeni kullanmak isteseniz o dosyada u ekilde tanmlamanz gerekecektir.

    extern int kalem;

    bu ekilde bu deikenin bu dosya iinde deil dier bir dosya iinde tanmlanm olduunu ve bir iliki iinde olduunu grebilirsiniz.

    static deikenler

    static tanm extern gibi bir deikeninize zel bir sfat katan deimdir.

    Static deikenler genel tanmlanabildikleri gibi yerel de tanmlanabilirler. Yerel olarak tanmlanan bir static deiken sadece o fonksiyon iinde kullanlabilir ve dier fonksiyonlarda tannmaz ancak dier yerel deikenlerden farkl olarak deiken fonksiyon bitiminde bellekten atlmaz. Hatta ierisindeki deer dahi statik olarak korunur. Fonksiyonun sonraki tekrar arlmasnda iindeki deer kullanlr. Bu da u anlama gelir: yerel static bir deiken zel ama kalc bellek sahalar oluturur.

    Bu ekilde tanmlanmak istenen bir deiken iin nne static ifadesini koyanz yeterli olacaktr.

    static int k;static char buf[128] gibi.

    register deikenler

    register tanm ile verilen bir deiken program tarafndan ska kullanlacaktr anlamna gelir. Eer mmkn olursa bu deikenler bilgisayarn yazmalarna (register) yerletirilir. Bu sayede bu programlar hem hzl hem de daha kk olurlar. Register tanm ile yaplan bir deiken tanmlama satr u ekildedir:

    register int x;

    54/17.10.2007 01:35:00 PM 53

  • C Programlama Ders Notlar

    register char harf;

    Uygulamada register deikenleri ile ilgili olarak bir takm kstlamalar bulunacaktr. Bu kstlamalar donanmdan kaynaklanana kstlamalardr. Bir fonksiyonun iinde sadece birka tane deiken register olarak ayarlanabilir. Ayrca tm trlerin register olabilmesi mmkn deildir. Uygun olmayan tanmlar iin register ifadesi kullanlsa bile derleyici tarafndan grlmez. Ayrca bu kstlamalar makinadan makinaya deiebilecektir.

    Blok Yaps

    C Pascal, PL/I ve algolde olduu gibi i ie bloklarn tanmlanabildii yapda bir dil deildir. C dilinde tm fonksiyonlar ayn dzeyde tanmlanrlar ve i ie olamazlar. Ancak bu tarz bir tanm deikenler iin sz konusudur. Yani deikenler i ie bloklarda tanmlanabilirler. Ve bu bloklar kme parantezi ile belirlenir. Eer bir blok iinde tanmlanan bir deiken var ise o deiken o bloun sonuna kadar geerlidir. Bir deiken bir blok iinde tanmlanm ise ve bir st blokta da tanml ise alttaki bloa girildiinde yeni tanm geerli olur dier tanm bu blok bitinceye kadar bekletilir.

    lk deer atama

    Bu blm tanmladnz deikenlere nasl ilk deer atayabileceinizi veya ilk deer atamazsanz nelerin varsaylacan anlatr.

    extern ve static deikenler sizin tarafnzdan ayrca bir tanm yaplmad ise 0 deeri ile otomatik olarak balarlar. Register ve dier deikenlerde ilk deer atam ilemi yaplmad ise deikenin deeri rast gele bir deer olur.

    Basit deikenlere tanmlandklar anda ilk deer atamas yapabilirsiniz. Register deikenler ve normal deikenlere ilk deer atanrken sabit olma zorunluluu bulunmamaktadr. Tanml deerlerle olumu olan herhangi bir ifade de deer atama iin kullanlabilir.

    zyineleme (Recursion)

    C fonksiyonlar zyineli olarak kullanlabilirler. Yani bir C fonksiyonu kendini dorudan ya da dolayl olarak arabilir. En klasik rneklerinden biri faktriyel hesaplama olarak gsterilebilir. nk faktryel tanm gerei u ekilde anlatlabilmektedir

    rnek 13

    54/17.10.2007 01:35:00 PM 54

  • C Programlama Ders Notlar

    N!=N*(N-1)! Bu ilem n 1 oluncaya kadar devam edecek ekilde alabilir. N bir olduunda faktryel deeri zaten 1 olacaktr.

    #include int fak(int n){ if (n==1) return 1; else return n*fak(n-1) ;}main(){ int n; printf(Faktryeli hesaplanacak deeri giriniz); scanf(%d,&n); printf(N deerinin faktryeni=%d\n,fak(n));}

    Bu programda n deeri faktryeli hesaplanmak zere fak fonksiyonuna gnderiliyor. Ancak fak fonksiyonu da kendisini tekrar ararak faktryeli hesaplamaya altn grebilirsiniz.

    Altrma 22

    Klavyeden girilen herhangi bir tam saynn ikilik say sistemindeki karln ekrana yazabilecek fonksiyonu zyineli olarak tanmlaynz.

    C dili nilemcisi

    C dili dilin zelliklerini geniletmek iin bir takm deimler kullanr. Bunlara nilemci komutlar denir.

    Dosya Dahil etme

    Bir takm fonksiyonlarn prototip tanmlarn ve define ile yaplm bir takm tanmlar programa dahil edebilmek iin include adndaki komuttur.

    #include dosya

    eklinde kullanlr ve ad dosya olan dosyann iindeki tm bilgileri bu programa dahil eder. Hemen hemen her C programnda 1 yada belki 2 satr bu ekildeki tanmlar grmek mmkndr. Byk programlarda belli bir takm tanmlar tm yardmc dosyalarda grebilmek iin include ile tanmlam olabileceiniz genel bir tanm dosyasn tm dosyalara dahil ederek tanmlarn ortakln garantilemi olabilirsiniz.

    54/17.10.2007 01:35:00 PM 55

  • C Programlama Ders Notlar

    Makro veya sembolik sabit tanmlama

    #define EVET 1

    eklindeki bir tanm en basit sembolik sabit sayy tanmlar. Bu tanm ile programmzda kullanlmak zere EVET adnda sembolik bir sabit tanmlam oluruz. Derleyici program derlerken define ifadesi yannda tanmlam olabileceiniz sabiti programda yerletirir ve o ifade yerine sabiti koyarak programn derlenmesini salar.

    Bu artlar altnda u ekilde yapabileceiniz tanmlarda ilgili almn yaplmasn salarlar.

    #define kare(x) x * x

    eklindeki tanm program derlenince kare(x) yerine x*x konmasn salayacaktr.

    Altrma 23

    Kendisine gnderilen n deeri iin f(x)= =

    n

    xx

    1 fonksiyonunu hesaplayp

    arana dndren fonksiyonu C dili ile yaznz.

    54/17.10.2007 01:35:00 PM 56

  • C Programlama Ders Notlar

    DizilerBazen basit deikenler bir takm sorunlarn zlmesi iin yeterli olmazlar. rnein iki matrisin toplamn bulabilecek bir program basit deikenler ile yazlamaz. Ya da bir dizi deer zerinde sralama yapabilecek program, bir dizi say ierisinde istenilen deeri bulabilecek program yine basit deikenler ile yazlamaz.

    Bu tip programlar iin hatta bir ok benzeri program iin dizi veya matris tanmlar yapabilmeniz gerekmektedir.

    Dizi Nedir?

    Ayn zellikte olan ve ayn amala kullanlan bir grup saynn bilgisayar ortamnda tutulduu veri yapsdr.Kavramsal olarak bir dizi kutuyu dnerek benzetim yapabilirsiniz.

    Genel olarak yle tanmlanr.

    degisken_tr ad[eleman says][ikinci_boyut]...;

    Bu tanmda deikene bir ad ve tr belirlemesi yapmak gerekecektir. Tanmlayacanz dizi tek boyutlu ise sadece eleman_says ile belirtilen tanm yaplacak iki boyutlu bir matris isteniyor ise ikinci