235
6$'(&(.øùø6(/.8//$1,0ødø1'ø5 STANDART C PROGRAMLAMA DİLİ Fedon Kadifeli A. C. Cem Say M. Ufuk Çağlayan

Standart C Programlama Dili - suhagokalp.comsuhagokalp.com/wp-content/uploads/2015/03/CKITABI.pdf · C programlama dili, günümüzde en yaygın kullanılan dillerden biridir

  • Upload
    ledien

  • View
    305

  • Download
    9

Embed Size (px)

Citation preview

  • STANDART

    CPROGRAMLAMA DL

    Fedon KadifeliA. C. Cem Say

    M. Ufuk alayan

  • zgn metin 1990, 1988 M. U. alayan, F. Kadifeli ve A. C. C. Say.

    Geniletilmi Trke bask 2000, 1993 F. Kadifeli, A. C. C. Say ve M. U. alayan.

    Her hakk mahfuzdur. Bu yaynn hibir blm, yazarlarn izni olmadanfotokopi, teksir veya baka bir yolla oaltlamaz, saklanamaz veyayaynlanamaz.

    Kitabn ngilizcesi ilk defa Trkiyede 1990 Austosunda yaynlanmtr.

    Trkeye uyarlayan ve gncelleyen Fedon Kadifeli.

    Apple, Macintosh, MacWrite, MacDraw ve MacPaint, Apple Computer, Inc.nonayl markalardr.

    Courier, Smith-Corona Corporationn onayl bir markasdr.

    IBM, International Business Machines Corp.n onayl bir markasdr.

    Microsoft, MS, MS-DOS, CodeView,QuickC ve Word, Microsoft Corp.n onayl markalardr.

    OS/2, Microsofta lisansl onayl bir markadr.

    PDP, Digital Equipment Corp.n ticari bir markasdr.

    Times ve Times Roman, Linotype AG ve/veya ubelerinin onayl markalardr.

    UNIX, AT&T Bell Laboratoriesin onayl bir markasdr.

    Windows, Microsoft QuickBasic ve Visual C++, Microsoft Corp.n ticarimarkalardr.

  • Ailelerimize

  • vii

    NSZ

    C programlama dili, gnmzde en yaygn kullanlan dillerden biridir. C dili, COBOL,FORTRAN, PL/I gibi eski programlama dilleri grubuna dahil edilemeyecei gibi, Ada,Modula-2 gibi yeni saylabilecek dil grubuna da girmez.

    C dili, klasik programlama dilleri kavramlarnn, yeni, basit ve kolay kullanlr birekilde saland pratik bir dildir. Cnin poplaritesi daha ok UNIXinki ile ilikilidir,nk C, ilk olarak, UNIX dnyasnn programlama dili olarak ortaya kmtr. Bupoplarite, kiisel bilgisayarlarn oalmas ve bunlar zerindeki gl derleyici ileprogramlama ortamlarnn kullanlabilir hale gelmesinden sonra daha ok artmtr.

    Bu ders kitab, programlama dilleri zerine Trkiyede hazrlanan ders kitaplaran kapatma amacn gtmektedir. Bilgisayar sistemlerine giri, sistem programlama,sistem yazlm ve iletim sistemleri gibi, C dilinin programlama projelerigelitirilmesinde retildii ve kullanld dersler iin tasarlanmtr.

    Kitap, niversite birinci ve ikinci snfnda okuyan renciler iin hedeflenmitir,ancak daha yksek dzeyde de bir bavuru kitab olarak kullanlabilir. Bu kitabokuyacaklarn, en az bir yapsal programlama dilinirnein Pascal, QuickBasic veyaCOBOLbilmeleri ve veri yaplar konusunda temel bilgilere sahip olmalarbeklenmektedir. Bu kitap, zellikle yazlm gelitirme projelerinde C dilini kullanmaydndkleri iin, programlama dili bilgilerini geniletmek isteyen bilgi ilem uzmanlargibi kiilerin kendi balarna okuyabilecekleri ekilde de hazrlanmtr.

    Bu ders kitab, C programlama dilinin btn ynlerini kapsamas asndan tamdr.nemli miktarda rnek program ve altrmalar verilmitir. Okuyucularn, en azndan birIBM kiisel bilgisayarn veya uyumlusunu ve Microsoft C Derleyicisi Uyarlama 5.00veya daha yukarsn kullanabilecekleri beklenmektedir. Ancak, ekler dnda, kitaptaverilen bilgiler deiik C programlama ortamlar iin de geerlidir.

    Bu kitabn Boazii niversitesi Yaynlar arasnda ngilizce olarak yaplan ilkbasm halen Boazii niversitesi Bilgisayar Mhendislii Blmnde letimSistemleri dersinde yardmc ders kitab olarak kullanlmaktadr. Kitap u anda tamamen

  • viii NSZ

    gncelletirilmitir ve ANSI Standardnn tm zelliklerini kapsamaya almaktadr. Bukitap sayesinde, yeni C derleyicileri tarafndan desteklenen, Standart Cnin hem yeni hemde eski C programclar tarafndan kullanlmaya balanacan umuyoruz.

    Bu kitabn hazrlanmas ve yaynlanmasnda deerli nerileri, dzeltmeleri, desteklerive katklar olan Rasim Mahmutoullar, Sema Akgn, Ouz Sinanolu, lk Karada,Ahmet Demirhan, Mustafa Elbir, Hasan Gltekin, Nezihe Bahar ve adnsayamayacamz daha birok kiiye teekkrlerimizi bor biliriz.

    Yk. Mh. F. KadifeliY. Do. Dr. A. C. C. SayDo. Dr. M. U. alayan

    stanbulEkim 1993

  • ix

    NDEKLER

    NSZ ............................................................................................................................vii

    NDEKLER................................................................................................................ ix

    EKLLER VE ZELGELER LSTES .................................................................... xv

    BLM 0: GR ............................................................................................................1

    0.1. C Dilinin Ksa Bir Tarihi ......................................................................................1

    0.2. C Dilinin stnlkleri ..........................................................................................2

    0.3. Kullanlan Sistem..................................................................................................3

    0.4. Kitabn Yaps Ve Kullanlan Kurallar .................................................................4

    Problemler ...................................................................................................................4

    BLM 1: TEMEL KAVRAMLAR VE GENEL BR BAKI ...................................5

    1.1. Aklamalar, Tantc Szckler Ve Anahtar Szckler .......................................5

    1.2. Deimezler ..........................................................................................................7

    1.3. Temel Veri Tipleri Ve Tanmlar...........................................................................9

    1.4. #define Ve #include nilemci Emirleri ............................................................12

    1.5. leler, fadeler Ve Atama Deyimleri................................................................13

    1.6. Tip Dnm Ve Kalplar ................................................................................16

  • x NDEKLER

    1.7. Basit Girdi/kt .................................................................................................17

    1.8. C Deyimleri Ve Program Gvdesi......................................................................21

    1.9. Bir C Program Nasl letilir..............................................................................22

    1.10. rnek Programlar .............................................................................................24

    Problemler .................................................................................................................26

    BLM 2: DEYMLER VE KONTROL AKII........................................................29

    2.1. C Dilinin Deyimleri ............................................................................................29

    2.2. Bantsal Ve Mantksal leler.........................................................................30

    2.3. Doruluk-Deerli fadeler ..................................................................................32

    2.4. if Deyimi Ve Koullu le .................................................................................33

    2.5. while Deyimi ......................................................................................................35

    2.6. do Deyimi ...........................................................................................................36

    2.7. for Deyimi Ve Virgl leci ................................................................................37

    2.8. continue Deyimi..................................................................................................38

    2.9. break Deyimi ......................................................................................................39

    2.10. goto Deyimi Ve Etiketler..................................................................................39

    2.11. switch Deyimi...................................................................................................40

    2.12. Bir rnekSay Sralama................................................................................42

    Problemler .................................................................................................................43

    BLM 3: GSTERGELER VE BT LEME.........................................................45

    3.1. Gsterge Deikenleri Ve lemleri....................................................................45

    3.1.1. & Ve * leleri ...............................................................................................46

    3.1.2. Gsterge Deikenleri Bildirimleri..................................................................47

    3.1.3. Gsterge Aritmetii .........................................................................................47

    3.2. Gstergeler Ve Diziler........................................................................................49

    3.3. Karakter Dizileri.................................................................................................51

    3.4. Bitsel leler ......................................................................................................53

    3.5. le ncelii Ve Birleme.................................................................................57

    Problemler .................................................................................................................58

  • NDEKLER xi

    BLM 4: FONKSYONLAR VE PROGRAM YAPISI ..........................................59

    4.1. Fonksiyon Tanmlama ........................................................................................60

    4.2. Fonksiyon arlar ............................................................................................62

    4.2.1. Deer le ar ................................................................................................64

    4.2.2. Referans le ar ............................................................................................65

    4.2.3. main Fonksiyonunun Parametreleri .................................................................67

    4.3. Bellek Snflar....................................................................................................69

    4.3.1. auto Deikenler ..............................................................................................70

    4.3.2. register Deikenler .........................................................................................70

    4.3.3. static Deikenler Ve Fonksiyonlar .................................................................71

    4.3.4. Fonksiyonlar Ve extern Deikenler................................................................72

    4.3.5. lkleme.............................................................................................................73

    4.4. zar ...............................................................................................................75

    4.5. Fonksiyonlara Gstergeler..................................................................................78

    4.6. Bir rnek8 Vezir Problemi.............................................................................80

    Problemler .................................................................................................................84

    BLM 5: TRETLM TPLER VE VER YAPILARI.......................................87

    5.1. Saym Tipleri ......................................................................................................87

    5.2. Yaplar ................................................................................................................89

    5.3. Yeni Tip Tanmlama...........................................................................................92

    5.4. sizeof leci.........................................................................................................94

    5.5. Birlikler ..............................................................................................................95

    5.6. Alanlar ................................................................................................................96

    5.7. Bellek Ayrma.....................................................................................................98

    5.8. Karmak Tipler..................................................................................................98

    5.8.1. Dizi Dizileri .....................................................................................................99

    5.8.2. Dizilere Gstergeler.......................................................................................100

    5.8.3. Gsterge Dizileri ...........................................................................................101

    5.8.4. Gstergelere Gstergeler ...............................................................................102

    5.9. Bir rnekDosya Sralama.............................................................................103

  • xii NDEKLER

    Problemler ...............................................................................................................107

    BLM 6: NLEMC ............................................................................................109

    6.1. #define Ve #undef Emirleri ..............................................................................110

    6.2. #include Emri ...................................................................................................112

    6.3. Koullu Derleme...............................................................................................113

    6.4. Dier Emirler....................................................................................................115

    6.5. nceden Tanmlanm simler ..........................................................................115

    6.6. Bir rnekctype.h Balk Dosyas..................................................................116

    Problemler ...............................................................................................................117

    BLM 7: DOSYALAR VE GRD/IKTI .............................................................119

    7.1. Dosya Esaslar ..................................................................................................119

    7.2. Dosya EriimiBaka Yntemler....................................................................121

    7.3. Rastgele Eriim.................................................................................................123

    7.4. Dosyalarla lgili Baka Bilgiler ........................................................................124

    7.5. Sistem le lgili Fonksiyonlar............................................................................125

    7.6. Dosya Tanmlayclar Ve lgili Fonksiyonlar ..................................................126

    7.7. Bir rnekrenci Veritaban .......................................................................128

    Problemler ...............................................................................................................132

    EK A: KARAKTER KODLARI ZELGES...........................................................135

    EK B: MICROSOFT C DERLEYCS HAKKINDA TEMEL BLGLER..........145

    B.1. Bellek Modelleri ..............................................................................................145

    B.1. QC Ktphanesi...............................................................................................146

    B.3. CL Eniyiletirici Derleyicisi.............................................................................147

    EK C: MICROSOFT CODEVIEW HATA DZELTCSNE GENEL BRBAKI ....................................................................................................................151

    EK D: MICROSOFT LIB VE NMAKE YARDIMCI PROGRAMLARINAGENEL BR BAKI..............................................................................................155

  • NDEKLER xiii

    D.1. LIB Yardmc Program ...................................................................................155

    D.2. NMAKE Yardmc Program ...........................................................................156

    EK E: DLLERARASI ARILAR ..........................................................................159

    E.1. Birletirici le Balaycnn Kullanlmas .........................................................159

    E.2. Satrii Birletiricisinin Kullanlmas ...............................................................162

    E.3. Bir rnekDisket Saklama.............................................................................163

    EK F: STANDART C PROGRAMLAMA DLNN DERZELLKLER .....................................................................................................169

    F.1. C Dnyann Her YerindeYreler..................................................................169

    F.2. Geni Karakterler Ve okbaytl Karakterler ....................................................170

    F.3. l Karakterler ...............................................................................................170

    F.4. Zaman Fonksiyonlar ........................................................................................171

    F.5. Standart Balk Dosyalar .................................................................................173

    F.6. evirme Snrlar ..............................................................................................181

    EK G: SELM PROBLEMLERE YANITLAR...................................................183

    EK H: TRKE-NGLZCE VE NGLZCE-TRKE TERMLERSZL..............................................................................................................187

    H.1. Trke-ngilizce Szlk...................................................................................187

    H.2. ngilizce-Trke Szlk...................................................................................198

    BBLYOGRAFYA ......................................................................................................209

    DZN.............................................................................................................................213

  • xv

    EKLLER VE ZELGELERLSTES

    ZELGE 2.1 C dilinin deyimleri.....................................................................................30

    ZELGE 2.2 C ile ncelii ve birleme.......................................................................32

    EKL 2.1 while ve do deyimleri iin ak izenekleri.....................................................36

    ZELGE 3.1 C ile ncelii ve birleme.......................................................................57

    EKL 4.1 main fonksiyonuna geirilen komut satr argmanlar ...................................69

    EKL 5.1 Bir rnek ikili aa .......................................................................................104

  • 1

    BLM 0: GR

    /* Ilk program */

    #include

    void main (void){ int kar; if ((kar=getchar())!='\n') main(); putchar(kar);}

    Eer bir C programnn nasl grndn merak ettiyseniz, yukarda, yararl veanlaml bir i yapan tam bir C programnn durduunu renmek sizi artabilir. Bir Cderleyiciniz varsa ve nasl kullanacanz biliyorsanz, bu program yazn, derleyin vealtrn. Fakat nce, programn ne yapabilecei konusunda lgn tahminlerdebulunmaktan da ekinmeyin.

    ...

    Eer tahmininiz doru kmadysa, zlmeyin. Bu, sadece C hakknda ilginiziekmek iindi ve umarz yle oldu! Bu basit gibi grnen, ancak Cnin birtakm ilerizelliklerini kullanan program, kitabn yarsn bitirinceye kadar anlamanzbeklemiyoruz ve bu kitab bitirdiinizde ok daha karmak programlar bileanlayabileceinizi ve yazabileceinizi bekliyoruz.

    0.1. C Dilinin Ksa Bir Tarihi

    UNIX iletim sistemi ile C programlama dili birbirleriyle yakndan ilikilidir. Tarihleri70lerin banda balar. lgin olan ey de, AT&T Bell Laboratuvarlarndan KenThompson tarafndan yazlan bir bilgisayar oyun programndan kaynaklanmalardr.

  • 2 GR BLM 0

    Thompson, programn bir PDP-7 bilgisayarna uyarlamak istediinde, bu kk makinahakknda ok ey rendi, ancak iletim sistemini pek beenmedi. Bunun zerine, ozamanlar daha byk bir makinada kullanlan MULTICS iletim sistemininbasitletirilmi ve deitirilmi bir uyarlamasn yazmaya karar verdi. Daha sonra, DennisM. Ritchie de ona katld ve Brian W. Kernighan tarafndan UNICS (UniplexedInformation and Computing ServiceBirletirilmi Bilgi ve Hesaplama Hizmeti) adverilen iletim sisteminin ilk uyarlamas dodu. Bu kii C ve UNIXin tarihinde ennemli rol oynadlar. Balangta, Thompson, daha nceleri 1967 civarnda gelitirilenBCPL adl tipsiz dilden de byk lde etkilenerek B dilini tasarmlad. Bundan sonra,Ritchie UNIXi daha kolay bir ekilde yazma amacyla C adnda yeni bir dil tasarmlad.1973 ylnda ise Ritchie ve Thompson Cyi kullanarak UNIXi yeni batan yazdlar. Sonuo kadar iyiydi ki, 1983te ACMin Turing dln almaya hak kazandlar.

    O zamandan beri, C ok deimedi. Dilde yaplan baz kk geniletmeler, DennisM. Ritchie tarafndan hazrlanan The C Programming LanguageReference Manual (CProgramlama DiliBavuru Elkitab) adl, 1983 basml, Bell Laboratuvarlar yaynndaanlatlmaktadr. ANSInin (American National Standards InstituteAmerikan UlusalStandartlar Enstits) X3J11 komitesi tarafndan 1988 Ekiminde sunulan, C Standardnnson tasla bu deiiklikleri resmiletirmekte ve kendi bana yenilerini eklemektedir.Yaplan dzenlemelerle, birtakm programc hatalarn azaltmak iin derleyici kontrolleriartrlm ve dile yararl birka zellik daha katlmtr. Ancak, tasarmclarnn felsefesineaykr olduu iin dilin daha fazla geniletilmesi beklenmemelidir. Bunun yerine, budilden yeni diller ortaya kmaktadr. Bir rnek, C++dr. Bu dil, nesneye ynelikprogramlama ve veri soyutlama teknikleri salarken, Standart C ile uyumlu kalmaya abagstermektedir. Bu zellikleri, dili daha kapsaml bir uygulama programlama diliyapmaktadr. Yakn zamanda ise C++nn Cnin yerini almas beklenmektedir, ancak yinede C++ renecek birisinin nce Standart Cyi bilmesi gerekmektedir.

    0.2. C Dilinin stnlkleri

    nceki ksmdan, Cnin pratik gereksinmelerden ortaya kt sonucuna varabiliriz; yanibelirli bir sistem iin yapay hazrlanm bir dil deildir. C, birletirici dilinin sorunlarnksmen zmek iin, dk dzeyli programlamay destekleyici kolaylklar olan yksekdzeyli bir dil olarak tasarmlanmtr. rnein, dilde girdi/kt deyimleri yoktur.Kullanc, girdi/kt yapmak iin getchar ve putchar gibi baz fonksiyonlararr. Derleyici bu fonksiyonlarn anlam hakknda hibir ey bilmez. Sadece, Cktphanesinde tanml olan bu fonksiyonlara arlar retir. Bu da, iyi bir ktphaneninCye ok ey kazandraca anlamna gelir.

    Cnin dier dillere gre baz avantajlar vardr. Bunlar aada zetlenmektedir:

    C, ksa, zl, verimli, esnek ve ifadeli bir dildir. Az sayda anahtar szce sahiptir,fakat doru kontrol yaplar, gl ileleri (dier adyla, ilem operatrleri) ve kolaycabirletirilen veri tipleri vardr. Bu da, dili renmenin ve bir C derleyicisinin yazlmasnnkolay olduu ve bu dilde yazlan programlarn ksa, fakat bazen izlemesi zor olduu

  • BLM 0 GR 3

    anlamna gelir. Baz ileler dier dillerde yoktur, fakat bunlar kolayca makine dilineevrilebilirler, bu da C dilinde yazlan programlarn dier dillerde yazlanlara gre dahaverimli almalarnn nedenini aklar. Bundan dolay, baz sistemlerde C, birletiricidilinin yerini almtr.

    C, popler bir iletim sistemi olan UNIXin temel dilidir. Bu da, en azndan bu iletimsisteminde, bu dili vazgeilmez klmaktadr. Buna ramen, C baka sistemlerde dekullanlmaya balanmtr ve, tanabilme zelliinden dolay, bir sistem iin yazlmprogramlar kolayca baka sistemlere de aktarlabilmekte ve orada baz ufak tefekdeiikliklerden sonra derlenip doru bir ekilde altrlabilmektedir. Bu durum dilinamalarndan biridir: programcnn makine bamllklarn bir tarafta ayrmas vegereksinim duyduunda program yeni ortamlara kolayca uyarlayabilmesi. C nilemcisibu konuda nemli bir rol stlenmektedir.

    C modler programlamay tevik etmektedir. Dier ada programlama dilleri kadaryaygn olmamasna ramen, programcnn bunu salamas iin baz seimler sunar. eitlibellek snflar eitli dzeylerde gizlilik ve modlarite salar. Dildeki tek modl yapsolan fonksiyon tanm iin C tek bir dzeye izin verir; btn fonksiyonlar dsaldr.Programc, kolayca, kullanc tarafndan tanmlanm kaynak veya ama ktphaneleriyaratabilir ve bu yolla ok byk programlar hazrlayabilir.

    Cnin dezavantajlar da vardr. C dilinde yazlan programlarn izlenmesi bir miktarzor olabilir, nk zengin ile kmesi program okunaklln azaltr. C kat-tiplenmi birdil deildir; bir dizinin snrlar dnda indisleme yapmaya almak gibi, baz programchatalar iin yrtme zaman destei salamaz; baz durumlarda, derleyici, ifadeleriindeki alt-ifadelerin veya argman listeleri iindeki ifadelerin hesaplanma sralarndeitirebilir; ayn simgelerin birden fazla amaca hizmet etmesi baz programlamahatalarna yol aabilireitlik testi ve atama ilelerinin kartrlmas gibi; baz yaplarrnein switch deyimidaha iyi tasarlanabilirdi. Bu sorunlarn bazlar, Cnin ANSIStandardn izleyen baz yeni derleyicilerde iyiletirilmitir. Ayrca, Cye dayanarakgelitirilen C++ dili, baz sorunlar zm ve birok yeni zellikler katmtr. Gerek birC programcsnn, Cnin dezavantajlar ile birlikte yaamay renmesi gerektiineinanyoruz.

    0.3. Kullanlan Sistem

    C tanabilir bir dil olmasna ramenki, bu da, belirli bir sistem iin yazlm olan birC programnn baka bir sisteme aktarldnda orada baarl bir ekilde derlenipyrtlebilecei anlamna gelirsistemler arasnda baz farkllklar olabilmektedir. Bukitapta verilen program veya program paralar Microsoft QuickC Uyarlama 1.01 (1988),Microsoft C Derleyicisi Uyarlama 5.00 (1987) ve Microsoft C/C++ EniyiletiriciDerleyicisi Uyarlama 8.00 (1993) kullanlarak denenmitir. Kullandmz iletim sistemiIBM uyumlu bir PCde alan MS-DOS Uyarlama 5.00 (1991) veya daha yukarsdr. Birsonraki blmde bu ortamlarn nasl kullanlabilecei konusunda daha detayl baz bilgilerverilmitir. Ayrca Ek Bye baknz.

  • 4 GR BLM 0

    0.4. Kitabn Yaps Ve Kullanlan Kurallar

    Bu kitabn ngilizce olan ilk uyarlamas bir Apple Macintosh Plusta Word ve MacDrawisimli yazlmlar kullanlarak hazrlanmtr. Kitap en son olarak, IBM uyumlu bir PCdealan Windows iin Word Uyarlama 2.0c kullanlarak gncelletirilmi ve Trkebaskya hazr hale getirilmitir. Temel yaz tipi Times Romandr. Szdizimselgsterimde, szdizimsel snflar italik yaz stili ile gsterilmitir. stee bal blmler,arkalarnda satr altna yazlan opt simgesiyle gsterilmitir. Program blmleri, ekranveya yazc ktsna benzetilmek iin, Courier yaz tipiyle yazlmtr. C anahtarszckleri koyu, program aklamalar ise italik ile yazlmtr. Bilgisayargirdi/kts da Courier yaz tipiyle gsterilmitir; kt, girdiden ayrt edilmesi iin,alt izgili yazlmtr.

    Kitabn geri kalan ksmnda 7 blm, 8 ek ve C programlama diliyle ilgili bazkaynaklarn liste halinde verildii bir bibliyografya vardr. Blm 1de dile bir giriyaplmakta ve ok basit programlar yazmak iin gerekli olan genel bilgiler verilmektedir.Blm 2, C dilindeki kontrol deyimlerini ve doruluk-deerli, yani mantksal, ifadelerianlatmaktadr. Blm 3 gstergeler ve bit ilemleri hakkndadr. Blm 4te fonksiyonlarve deikenlerle fonksiyonlara uygulanabilecek eitli bellek snflar anlatlmaktadr.Blm 5, karmak veri yaplar tanmlamada anahtar olan, btn tretilmi veri tiplerinikapsamaktadr. Blm 6, C nilemcisine ayrlmtr ve btn nilemci emirlerinianlatmaktadr. Blm 7de, dier baz fonksiyonlarla beraber, Standart Cktphanelerinde tipik olarak rastlanan girdi/kt ilemleri anlatlmaktadr. Ekler iseMicrosoft C Derleyicisi ve evresinin baz zelliklerini anlatmakta, baz problemlerinyantlarn vermekte ve kitapta kullanlan terimlerin ngilizce karlklarn bulmak iin birTrke-ngilizce ve ngilizce-Trke terimler szl iermektedir. Kitapta, olanaklardahilinde, yaygn olarak kullanlan Trke terimler tercih edildii iin, ngilizcebilgisayar terimleri hakknda bilgi sahibi olan okuyucu, bu kitapta kullanlan Trketerimleri anlamak iin sk sk Ek Hde verilen bu szlklere bavuracaktr.

    Problemler

    1. Bu blmn banda verilen program sisteminizde altrn. Eer herhangi birzorlukla karlarsanz sisteminizin yardm zellikleri, elkitaplar veya deneyimliprogramclara bavurun. Bu program altrmak iin ka komuta gereksiniminizvar?

    2. Bir nceki altrmadaki program tekrar yazn (veya deitirin), fakat bu kez, ikisatr, tek satrda, arada bir boluk karakteri brakarak yazn. # ile balayan satrnarkasna bir ey yazmamaya dikkat edin. Derleyicinin ayn ekilde kabul etmesigerekir. imdi, program iinde, rastgele yerlere boluklar, satr balar veya duraklar(tab) ekleyin. Derlerken ortaya kacak hata mesajlar varsa, bunlar anlamaya vedzeltmeye aln.

  • 5

    BLM 1: TEMEL KAVRAMLARVE GENEL BR BAKI

    imdi, C dilinin temel yap talarn anlatp, birtakm temel programlama kavramlarnn Cdilinde nasl gerekletirildiini gstereceiz. Bu blmn amac, mmkn olduu kadarabuk, basit C programlar yazmak ve altrmak iin gerekli olan bilginin okuyucuyakazandrlmasdr. Okuyucunun zaten en az bir programlama dilini bildii farz edildiiiin, burada bahsedilecek olan temel programlama kavramlar detayl olarakaklanmayacaktr. Bir sonraki blmden balayarak, bu kavramlar C dilinin genelerevesi iinde ele alnarak derinlemesine aklamalar verilecektir.

    1.1. Aklamalar, Tantc Szckler Ve AnahtarSzckler

    Aklamalar

    Bl-yldz (/*) ile ondan sonraki ilk yldz-bl (*/) arasnda bulunan herhangi birkarakter dizisi bir program aklamasdr ve derleyici asndan bir bolua edeerolarak kabul edilir. Bir aklama grubunun yle yazlmas nerilmektedir:

    /* * * * * * * * * * * * * * * * * * * * * * * * * * *\ * * * Buyuk bir aciklama obegi... * * *\* * * * * * * * * * * * * * * * * * * * * * * * * * */

    veya

    /* Daha kucuk bir aciklama obegi... */

  • 6 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    Program aklamalar bu kitapta italik olarak yazlm ve sistemler arasndakiuyumsuzluklardan kanmak iin Trke karakterler kullanlmamtr.

    Tantc Szckler

    Deikenler, deyim etiketleri, tip isimleri, fonksiyon isimleri gibi, programc tarafndanoluturulan btn nesneleri isimlendirmek iin tantc szckler, bir dier adyla,program isimleri kullanlr. Tantc szckler iin u kurallar geerlidir:

    1. Herhangi bir sayda karakterlerden oluur, ancak ilk 31 karakter dikkate alnr.2. lk karakter bir harf veya altizgi (_) olmaldr.3. Geri kalan btn karakterler bir harf, rakam veya altizgi olabilir.

    rnek olarak, A12, a12, sayfa_basi deiken ismi olarak kullanlabilir. Kkve byk harflerin farkl olduuna dikkat ediniz, yani A12 ile a12 farkl tantcszcklerdir. Ancak, baz ortamlarda kk byk harf ayrm yaplmayabilir. Bundandolay, ayn program iinde, harf ayrm dnda, birbirine benzeyen iki farkl isimkullanmaktan kann. Ayrca, bir tantc szckte, ilk karakter olarak altizgidenkanlmas nerilir, nk bu tip isimler derleyiciye zg baz anahtar szckler veyadier isimler iin kullanlmaktadr.

    Anahtar Szckler

    C dilinde 32 adet anahtar szck vardr; hepsi kk harfle yazlr. Anahtar szcklertantc szck olarak kullanlamazlar; kendilerine zg kullanm alanlar vardr. Cdilindeki btn anahtar szcklerin snflandrlm bir listesi aada verilmitir. Programiinde kullanacanz isimlerin aadaki listede olmamasna dikkat edin.

    veri tipi bellek snf deyim ilechar auto break sizeofconst extern casedouble register continueenum static defaultfloat typedef doint elselong forshort gotosigned ifstruct returnunion switchunsigned whilevoidvolatile

    Kullanlan makine ve derleyiciye bal olarak, C dilinin zel durumundan dolaybaka anahtar szckler de olabilir. Bunlar genelde altizgi karakteriyle balarlar.

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 7

    1.2. Deimezler

    C dilinde, tamsay, kayan noktal, yani gerek say, karakter ve karakter dizisideimezleri bulunur.

    Tamsay Deimezleri

    Tamsay deimezleri, program iinde, ondalk, sekizli veya onaltl saylar eklindebelirtilebilirler ve derleyicinin tipine gre, 16 bit veya 32 bit eklinde saklanrlar.Aadaki rneklerde baz tamsay deimezleri grlmektedir:

    123 ondalk 1230123 sekizli 123 = ondalk 83083 geersiz bir say0x123 onaltl 123 = ondalk 2910XFF onaltl FF = ondalk 255

    Saynn nndeki bir sfr rakamnn, geri kalan rakamlarn sekizli (yani, 0-7) ve saynndeki bir sfrla onun arkasndan gelen kk veya byk x harfinin, geri kalanrakamlarn onaltl (yani, 0-9, A-F veya a-f) olmas gerektiini gsterdiine dikkat edin.Saynn program iindeki gsterimi ne olursa olsun, makine iinde her zaman bitlerhalinde ikili sistemde saklanr; ancak bu durum genelde programcy ilgilendirmez.

    Bir tamsay deimezi, eer deeri 16 bite syorsa, ksa formda (16 bit) saklanr,aksi takdirde uzun formda (32 bit) saklanr. Tamsay bir deimezin uzun formdasaklanmasn zorlamak iin deimezin arkasna l veya L harfi eklenmelidir. 1 says ilekartrlmamas iin, kk l yerine byk L harfinin kullanlmas nerilir.

    123 16 bitte saklanr123l 32 bitte saklanr123L 32 bitte saklanr077 000077 eklinde, 16 bitte saklanr077L 0...077 eklinde, 32 bitte saklanr0xFFFF 16 bitte saklanr0xFFFFL 0000FFFF eklinde, 32 bitte saklanr0xFFFFF 000FFFFF eklinde, 32 bitte saklanr

    Bir sekizli veya onaltl tamsay deimezi, daha byk bir bellek alannayerletirildii zaman, soluna sfr konur. Yani byle deimezlerin iaretsiz olduuvarsaylr. Ondalkl bir tamsay deimezinin iaretsiz olarak ilem grmesini salamakiin arkasna u veya U eki konulmaldr, rnein 65000U.

    Kayan Noktal Say Deimezleri

    Kayan noktal say deimezleri ya tamsay ile kesir ksm arasna nokta konarak yadabilimsel gsterimde belirtilirler. kinci yntem, genelde, ok byk veya ok kksaylar iin kullanlr. Aada baz rnekler vardr:

  • 8 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    1.1231.23E20 = 1.231020

    1.23e20 = 1.231020 (byk veya kk harf olabilir)123E18 = 1.231020

    1.23E-20 = 1.2310-20

    Deimezin iinde herhangi bir boluun olmamas gerektiine dikkat edin.Normalde, kayan noktal deimezler 8 baytta, yani double (ift) duyarlkta, saklanr.Eer kayan noktal deimezde f veya F eki bulunuyorsa, o zaman 4 baytta, yani tekduyarlkta; eer l veya L eki kulanlrsa, o zaman long double (uzun ift veya drtl)duyarlkta saklanr.

    Karakter Deimezleri

    Bir karakter deimezi, 'A', 'a', '%' gibi trnak iaretleri arasna konulan tek birkarakter veya tek bir karaktere edeer olan bir ka srasdr. Bir ka sras bir tersbl iareti ile bir harf veya rakamlardan oluur. C dilinde sadece u ka sralarkullanlr:

    \n yeni satr\b geri alma\r satrba\t durak (tab)\f sayfa ilerletme\v dikey durak\a zil\' tek trnak\" ift trnak\? soru iareti\\ ters bl\ddd sekizli kodu ddd olan karakter\xhhh onaltl kodu hhh olan karakter (Ek Aya baknz)

    Ek olarak, aada baz karakter deimezleri rnekleri vardr:

    '\0' bo karakter'\'' bir karakter deimezi olarak tek trnak'\"' bir karakter deimezi olarak ift trnak'\\' bir karakter deimezi olarak ters bl'\101' sekizli kodu 101 olan karakter (ASCII sisteminde 'A' harfi)'\x041' onaltl kodu 41 olan karakter (ASCII sisteminde 'A' harfi)

    Bir karakter deimezinin tipi inttir. Karakterler ise tipik olarak bir baytta (8 bit)saklanr ve tamsay gibi ilem grrler. Ancak signed (iaretli) veya unsigned(iaretsiz) olduklar veya kullanlan kodlama sistemi C Standardnda belirtilmemitir.Bizim sistemimizde, ASCII kodlama sistemi kullanlr (Ek Aya baknz). Normalkarakterlerin (rnein, sistemimizdeki 7 bitlik ASCII karakterlerinin) iaretsiz olduklar

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 9

    garanti edilmitir. Gerektiinde, bir karakter deikeninin iaretli olup olmadprogramc tarafndan aka belirtilmelidir.

    Karakter Dizisi Deimezleri

    Bir karakter dizisi deimezi ift trnaklar arasnda yazlm herhangi bir sayda karakterveya yukarda listesi verilmi ka srasndan oluur. te baz rnekler. Son rnekteki,yeni satr (\n) ve tek trnak (\') ka sralarna dikkat edin.

    "" bo karakter dizisi"Merhaba" 7 karakterlik bir karakter dizisi"Isminizi girin,\nveya ENTER\'a basin"

    iki satrdan oluan bir karakter dizisi

    Bir karakter dizisi deimezi bellekte sakland zaman, dizinin sonuna otomatikolarak bo karakter (\0) eklenir; bundan dolay diziyi saklamak iin kullanlan bayt saysdizinin uzunluundan bir fazladr. Bir program iinde, aralarna hibir iaret koymadanpepee yazlan karakter dizisi deimezleri birletirilir ve tek bir dizi deimezi olarakalnrlar. Diziler, baz sistemlerde, salt-okunur bellee yerletirilebilirler, bu da onlardeitirilemez klabilir. Ayrca, birbirine tpatp benzeyen iki veya daha fazla karakterdizisi ayn bellek blgesinde saklanabilir.

    Sistemler arasndaki uyumsuzluklardan kanmak iin, bu kitaptaki karakter dizisideimez rneklerinde Trke karakterler kullanlmamtr.

    Bir Sonraki Satra Devam Etme

    Bir deyim veya karakter dizisi deimezi programn tek bir satrna smyorsa ve birsonraki satra devam etmek gerekiyorsa, satrn sonuna ters bl (\) iareti konup birsonraki satra devam edilebilir. Ayrca, uzun bir karakter dizisi deimezi iki satrda ikiayr karakter dizisi eklinde de yazlabilir.

    1.3. Temel Veri Tipleri Ve Tanmlar

    Bir deiken ismi, deikenin alaca deerlerin tr ve ilevini yanstacak ekildedikkatlice seilen bir tantc szcktr. Genelde, kalan_gunler veya kalanGunlereklinde bir deiken ismi x132 gibi bir isme tercih edilmelidir. Deiken isimlerindebyk harfler yerine kk harflerin kullanlmas allagelmitir.

    Bir C programnda, kullanlmadan nce, tm deiken ve fonksiyonlarn tanm veyabildirimi yaplmaldr. Temel veri tiplerinin, yani tamsay, kayan noktal saylar vekarakterlerin bildiriminde kullanlan anahtar szckler unlardr:

  • 10 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    int tamsaysigned, unsigned iaretli veya iaretsiz tamsaylarshort, long ksa veya uzun tamsaylarfloat, double tek veya ift duyarlkl kayan noktal saylarchar karakter

    Bir tanm, bir tip ismi ile tanmlanmakta olan nesnelerin virglle ayrlm listesindenoluur ve bir noktal virgl ile sona erer. Aada birka rnek tanm gsterilmitir:

    int x;int x1, y1, z1;long d, d1;char c;char c1, c2, c3;float a;float a1, a2, a3;int u[3];float k[10*20];

    Son iki tanmda, tek boyutlu ve elemanl bir tamsay dizisi ile tek boyutlu ve 200elemanl kayan noktal saylardan oluan bir dizi tanmlanmtr. Dizinin boyunun derlemeesnasnda hesaplanabilen deimez bir ifade olduuna dikkat edin.

    Aada grld gibi, deikenler tanmlandklar zaman ilk deerleri deverilebilir:

    int x = 0;int x1 = 10, x2 = 20, x3 = 30, x4 = 60 * 60; /* ilk deger degismez bir ifadedir */char c1 = 'a', c2 = 'z';

    Buna ilkleme diyoruz. lk deer olarak bir ifadenin de yazlabileceine dikkat edin.Tanmlanan deikenlerin ilklenmesi iyi bir alkanlktr.

    simlendirilmi deimezler, yani deerleri deitirilemeyecek olan deikenler,const tip niteleyicisi kullanlarak tanmlanrlar:

    int const x = 100;char const ys = '\n';float const a = 123.45;

    Bu tip deimez deikenlerin const ile tanmlanmasnn en azndan iki avantajvardr:

    1. Programc yanllkla bu tip bir deikene atama yapmaya kalkar veya deerinideitirebilecek bir ekilde kullanmaya kalkarsa, derleyici onu uyaracaktr.

    2. ok kullancl sistemlerde bu tip deikenlerin ortak ve deitirilemez bir bellekkesimine yklenmesi salanabilir.

    Ayn anda baka bir sre (program) tarafndan kullanlan veya deitirilebilendeikenlerin, derleyicinin olas bir eniyileme yapmasn engellemek iin, volatile tip

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 11

    niteleyicisi kullanlarak tanmlanmas gerekmektedir. rnein, ok kullancl ortamlardaiki deiik sre tarafndan ortak kullanlan bir deikenin volatile tanmlanmasgerekir.

    Tanmlanm bir deiken, bir deyim iinde ismi verilerek anlr. Dizi elemanlarnaulamak iin eitli yollar olmasna ramen, ou zaman dizi isminin arkasna keliparantezler iinde indis belirtilerek kullanlrlar. Eleman says BOY olan bir dizi iinindisin alabilecei deerler 0dan BOY-1e kadar deiir. Yani, yukarda tanmlanmolan u tamsay dizisinin elemanlar u[0], u[1] veya u[2] eklinde kullanlabilir.ndisin her zaman deimez bir tamsay olmasna gerek yoktur; genelde bir ifade olur.Yani, u[x+5] geerli bir kullanmdr. Doal olarak, eer x+5 ifadesinin deeri 0, 1veya 2 deilse, beklenmeyen sonular elde edilebilir. Bu tip kullanmlar kontrol altndatutmak tamamen programcnn sorumluluundadr.

    Deiik tiplerde tanmlanm deikenler iin, mevcut derleyiciler tarafndan ayrlanbellek miktar ile alt ve st limit deerleri yledir:

    tip anlam bayt says limitlerchar ? 1 ?-- signed char 1 -127..127-- unsigned char 1 0..255short signed short int 2 (1)int signed int 2 veya 4 (1) veya (2)long signed long int 4 (2)signed short signed short int 2 (1)signed signed int 2 veya 4 (1) veya (2)signed long signed long int 4 (2)unsigned short unsigned short int 2 (3)unsigned unsigned int 2 veya 4 (3) veya (4)unsigned long unsigned long int 4 (4)float -- 4 (5)double -- 8 (6)long double -- 8 veya 10 (6) veya (7)

    (1) -215 .. 215-1 = -32 768 .. 32 767. (16 bitlik bilgisayarlar iin)(2) -231 .. 231-1 = -2 147 483 648 .. 2 147 483 647. (32 bitlik bilgisayarlar iin)(3) 0 .. 216-1 = 0 .. 65 535. (16 bitlik bilgisayarlar iin)(4) 0 .. 232-1 = 0 .. 4 294 967 295. (32 bitlik bilgisayarlar iin)(5) -1038 .. -10-38, 0, 10-38 .. 1038.(6) -10308 .. -10-308, 0, 10-308 .. 10308.(7) -104932 .. -10-4932, 0, 10-4932 .. 104932.Not: 16 bitlik bilgisayarlarda veya derleyicilerde (signed veya unsigned) int 16bittir; 32 bitliklerde ise 32 bittir.

  • 12 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    Tam saylar ve kayan noktal saylar iin her bilgisayarda farkl olabilecek buzellikler, tam olarak limits.h ve float.h adl balk dosyalarnda tanmlanmtr.Birtakm varsaymlar yapmak yerine, bu balk dosyalarnda tanmlanm bulunandeimezlerin kullanlmas zellikle nerilir. (Balk dosyalar iin bir sonraki ksma veayrca Ksm F.5e baknz.)

    1.4. #define Ve #include nilemci Emirleri

    Hemen btn C derleyicileri, zel nilemci emirlerini tanyan bir nilemciyi yaplarndabulundururlar. nilemci emirleri, bir bakma, C derleyicisinin girdisini, yani kaynakkodu, kontrol etmede kullanlr. Bir nilemci emrinin ilk karakteri her zaman numaraiaretidir (#) ve kaynak programda satrn ilk karakteri olmaldr. Normalde, nilemciemirlerinin ou, kaynak programn bana, bildirimlerden nce yazlr.

    C programlarnda oka kullanldklar iin, bu blmde sadece #define ve#include nilemci emirleri anlatlmaktadr. Dier nilemci emirlerinin daha detaylbir anlatm Blm 6da verilmektedir.

    #define emri u ekildedir:

    #define tantc_szck karakter_dizisi

    Bu tr bir #define emri, emirden sonra gelen program deyimlerinde tantc_szckbulunan her yerde, onun yerine karakter_dizisinin konulacan gsterir. rnein,

    #define XYZ 100

    emri, daha sonra, XYZnin her rastland yerde 100 konulmasn salar. Program iindekullanlacak deimezleri tanmlamann yaygn bir yolu da budur. #define emirleriyletanmlanan tantc szcklerin byk harfle yazlmas allagelmitir.

    #include emri ya

    #include "dosya_ad"

    yada

    #include

    eklinde olur ve nilemciye #include satrnn yerini, belirtilen dosyann alacangsterir. Eer dosya_ad ift trnak iine alnmsa, o zaman nilemci, dosyay kaynakprogram dosyasnn sakland altdizinde arar. Eer dosya_ad al parantezler iinde ise,o zaman dosya, byle #include emirleri iin aramalarn yapld standartaltdizin(ler)de aranr. Normalde, bu \include altdizini olur.

    #include emri, daha nceden hazrlanan, standart veya kullanc tarafndantanmlanan dosyalarda saklanan, sk kullanlan veri ve fonksiyon bildirimlerini programadahil etmede kullanlr. Byle dosyalara balk dosyalar ad verilir ve isimleridosyaadi.h eklinde olur.

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 13

    1.5. leler, fadeler Ve Atama Deyimleri

    C dili, salad ileler (ilem operatrleri) asndan ok zengindir. letilebilir Cdeyimlerinin ou bir ifade eklinde yazlr. Bu ifade belirli kurallara uygun olarakoluturulmu bir ilenenler ve ileler karmdr. Dier programlama dillerine karlk, Cdilinde bir atama bile zel bir eit ifadedir.

    Bir ifade iinde, bir ilenen ya bir deimez, ya bir deikenin kullanlmas, ya birfonksiyon ars yada baka bir (alt)ifade eklinde karmza kar. leler (ilemoperatrleri), aritmetik ilemler, atama, bantsal ve mantksal karlatrmalar, bitilemleri, adreslerle ilgili ilemler ve baka ilerde kullanlrlar. Cde kullanlan aritmetikileler ve anlamlar liste eklinde aada verilmitir:

    + toplama veya tekli art- karma veya olumsuzlama* arpma/ blme% kalan (5%2 ifadesinin deeri, 5/2den arta kalan, yani 1dir. lenenler

    olumlu tamsaylar olmaldr.)++ anlam, ilecin, ilenenin nnde veya arkasnda olmasna bal olarak

    deiir; ancak sonuta ilenenin deeri bir artrlr-- anlam, ilecin, ilenenin nnde veya arkasnda olmasna bal olarak

    deiir; ancak sonuta ilenenin deeri bir azaltlr

    Basit bir atama deyimi u ekildedir:

    deiken = ifade;

    ve ifadenin deerinin hesaplandktan sonra, deikenin deerinin buna eitleneceianlamna gelir. fadeden sonraki noktal virgle dikkat edin. Bu noktal virgl deyimisonulandrr.

    te baz rnekler. Son iki rnein, ayn anlam tadna dikkat edin.a = b + 10;c = d + c * e - f / g + h % j;x = y * sin(z - 3.14);z = u[2] * u[0];u[1] = -123.45;x = 10;(x) = 10;

    C dilinde, dier programlama dillerine karlk, atamann kendisi de bir ifadedir,bundan dolay bir deere sahiptir. Bir atama ifadesinin deeri, deeri hesaplanarak soltaraftaki deikene atanan ifadenin deeridir. Atama ifadesinin tipi ise soldaki ilenenintipiyle ayndr. Bu olgu, C dilinde ok kullanlr. rnein, bir ifadenin deeri ayn andabirden fazla deikene, u ekilde, atanabilir:

    a = b = c = 0;

  • 14 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    c deikeni 0n deerini, b cnin deerini ve a bnin deerini alr; bylece btndeikenler 0a eitlenir.

    Aada ++ ve -- ilelerini aklamak iin baz rnekler verilmitir:

    x = y++; ynin deeri nce xe atanr, sonra da bir artrlr. Bu unaedeerdir: x = y; y = y+1;

    x = ++y; ynin deeri nce bir artrlr, sonra da xe atanr. Bu unaedeerdir: y = y+1; x = y;

    x = y--; ynin deeri nce xe atanr, sonra da bir azaltlr. Bu unaedeerdir: x = y; y = y-1;

    x = --y; ynin deeri nce bir azaltlr, sonra da xe atanr. Bu unaedeerdir: y = y-1; x = y;

    ++ ve -- ileleri yan etkisi olan ilelerdir, nk tek bir atama deyimi ile birdenfazla deikenin deeri deitirilebilir. Programclarn bu ileleri karmak ifadeleriinde kullanmalar uygun deildir, nk byle bir kullanm nispeten daha zoranlalabilir ve hatalarn daha zor dzeltildii programlarn ortaya kmasna neden olur.

    Basit atama ileci (=) dnda, atamay aritmetik ilemlerle birletiren atama ileleride vardr. Bunlar +=, -=, *=, /= ve %=dr. te baz rnekler:

    x += y; xe y eklenir, bu da x = x + (y); anlamna gelir.x -= y; xten y karlr, bu da x = x - (y); anlamna gelir.x *= y; x y ile arplr, bu da x = x * (y); anlamna gelir.x /= y; x yye blnr, bu da x = x / (y); anlamna gelir.x %= y; xe xin ye blmnden arta kalan atanr, bu da x = x %

    (y); anlamna gelir.

    Tabii ki, yukardaki deyimlerin herhangi birinde y deikeninin yerine genel bir ifadekonulabilir. Sol taraftaki x deikeni yerine de bellekteki belli bir konuma karlk gelendaha karmak bir ifade konulabilir; rnein u[a+b]. Bu durumda bu ifade bir kezhesaplanr. Dier baz ilemlerle atamay birletiren atama ileleri daha sonrakiblmlerde tartlacaktr.

    ncelik Ve Birleme Kurallar

    Bir ifade iinde, ilelerin ilenenleri ya

    1. C dili tarafndan belirlenmi bulunan ilelerin ncelik ve birleme zelliklerine,yada

    2. ilenen ifadelerini parantez iine alarak

    belirlenir.

    Parantezler, bir ilecin ilenenlerini, o ilecin nceliine bal olmadan belirtmekveya ilelerin ilenenlerini daha aklayc olacak ekilde yazmak iin kullanlrlar. kincineden kolayca anlalr ifadeler yazmak iin nemlidir, nk C dilinde ncelik vebirleme zellikleri kolayca anmsanamayacak kadar ok ile bulunmaktadr.

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 15

    rneina = b + c * d

    ifadesinde ileler ve ilenenler yledir:

    ile ilenenler* c ve d+ b ve (c * d)nin deeri= a ve (b + (c * d))nin deeri

    Eer ifadea = b + (c * d)

    eklinde yazlrsa, ilenenler ayndr, ancak parantezler ilelerin ilenenlerini daha akhale getirirler.

    Fakat, ifadea = (b + c) * d

    eklinde yazlrsa, ileler ve ilenenler yle olur:

    ile ilenenler+ b ve c* (b + c)nin deeri ve d= a ve ((b + c) * d)nin deeri

    Yukardaki rneklerden de grlebilecei gibi, bir ilecin ncelik dzeyi ilelereatanacak olan ilenenlerin srasn belirlemeye yarar. Daha yksek ncelii olan bir ilecinilenenleri daha dk olan bir ileten nce atanacaktr. Eer ilelerin ncelik dzeyleriaynysa, o zaman birleme kural ilenenlerin soldan saa m yoksa sadan sola matanacan belirtir. Aadaki izelgede, imdiye kadar anlatlm bulunan ilelerinncelik dzeyleri ve birleme zellikleri verilmitir:

    ile ncelik birleme[] indisleme en yksek +, -, ++, -- tekli : *, /, % arpma : +, - toplama : =, +=, vs atama en dk

    Burada, sadan sola ve soldan saa birlemeyi gsterir. rnein

    a/b/c ile (a/b)/c ayn anlama gelir

    ve

    a=b=c ile a=(b=c) ayn anlama gelir

    Bir baka rnek olarakc = d + c * e - f / g + h % j

  • 16 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    ifadesic = (((d + (c * e)) - (f / g)) + (h % j))

    eklinde, ilelerin ilenenlerini ve ifadenin anlamn deitirmeden, parantezlenebilir.

    Dikkat: Bir ilecin ilenenlerinden hangisinin nce hesaplanacann belirtilmemiolduuna dikkat edin. rnein

    a = ++b - b

    ifadesinin deeri, derleyiciye bal olarak, ya 0 yada 1 olabilir; bu yzden bu tr, yanetkisi olan, ifadelerden kanlmas gerekir. Ayrca, + ve * gibi, birleme ve deimezellii gsteren ilelerde, parantezlerin bulunmasna ramen, birleme kural bazderleyiciler tarafndan dikkate alnmayabilir.

    Deimez fadeler

    Baz ilelerrnein, atama ve ++ ile -- ileleri dnda, imdiye kadar renmiolduumuz ilelerdeimezlere (veya deimez ifadelere) uygulandklarnda deimezifadeler olutururlar. Deimez ifadelerin avantaj derleme srasndahesaplanabilmeleridir. Derleyici deimez ifadenin deerini hesaplayp yerine deimezdeeri koyar. Deimez ifadeler bir deimezin beklendii yerlerde kullanlabilirler.rnein, dizi boylar deimez olmaldr, bu durumda

    int a[MAXL*5+4];

    tanm, eer MAXL nilemci tarafndan (#define ile) tanmlanm bir deimez isekabul edilebilecek, fakat eer MAXL bir deiken ise reddedilecektir. Programnanlalabilirliini gelitirebilecei iin deimez ifadelerin kullanmndan kanmamakgerekir.

    1.6. Tip Dnm Ve Kalplar

    Bir ile, ilenen(ler)ine uyguland zaman, belirli bir tipten bir deer oluturur.Meydana kan deerin tipi, ilecin ilenen(ler)ine, ilecin kendisine ve tip dnmkurallarna baldr. rnein, x+y ifadesinin deeri hesapland zaman, x ve y tamsayise ortaya kan deerin tipi de tamsay olur. C dilinde ilelerin ou, deiik tiplerdeilenenleri kabul ettikleri iin genel olma zelliini tar. rnein, yukardaki ifadede eery double olsayd, ortaya kacak deer de double tipinde olacakt.

    Deiik tipte ilenenlerin bulunduu ifadelere kark-tip ifadeler denir. Kark-tipifadelerin deerleri hesaplandnda, ara ve/veya sonu deerlerin tipleri, ya dolaylolarak otomatik tip dnmyle belirlenir yada ak olarak kalp kullanlarak kontroledilir.

    Deiik tipten iki ilenen varsa, C dili kurallarna gre, otomatik tip dnmuygulanr. Bu kurallar yledir:

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 17

    1. nce, char ve short olan ilenenleri inte veya gerekiyorsa unsignedadntr.

    2. Sonra, aadaki listeye uygun bir ekilde, dk tipten olan ilenenin tipini dahayksek tipten olannkine dntr:

    tip dzeylong double en yksekdouble :float :unsigned long :long : unsignedn tm olas deerlerinin

    long tarafndan ierildii varsaylrsaunsigned :int en dk

    Tip dnm zerine birka rnek. i, jnin int, xin float, dnin double vecnin char olduunu kabul edin.

    i = j + x + d;c = c + 'A' - 'a';

    lk ifadede, j floata dntrlr, j+xin deeri doublea dntrlr vej+x+dnin deeri doubledan inte evrilir. kinci ifadede, cdeki kk harfi byeevirmek iin tamsay aritmetii kullanlr.

    Otomatik tip dnm, programlarda nemli bir hata kayna olduu iin, tipdnmnn, aka kalplar kullanlarak, kontrol edilmesi nerilir. Bir kalp, basite,ifadenin nne konulan parantez iine alnm bir tiptir; yani,

    (tip) ifade

    ifadenin tipinin parantez iine alnm olan tipe dntrleceini gsterir. Gerekte,parantez iine alnm olan tip, ifadenin deerini amalanan tipe dntren zel biriletir. Bu ilecin ncelii dier tekli ilelerin ncelii ile ayndr. te baz rnekler. x,y, znin float, i, jnin int olduunu varsayn. y ve znin hesaplanmasndaki farkadikkat edin.

    x = (float) i;y = (float) (i / j); /* int bolme islemi */z = (float) i / (float) j; /* float bolme islemi */i = (int) (x * (float) j);

    1.7. Basit Girdi/kt

    Girdi ve kt deyimleri gerekte C dilinin bir paras deildir. Yani, dier programlamadillerinin tersine, C dilinin iine konmu girdi/kt deyimleri yoktur. Girdi/kt ilemleri,her zaman, fonksiyonlar arlarak yaplr. Tabii ki, girdi/kt yapmak iin kullanlan

  • 18 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    fonksiyonlarn programc tarafndan yazlmasna gerek yoktur. Hemen hemen btn Cortamlarnda girdi/kt fonksiyonlar ieren standart ktphaneler bulunmaktadr. Buktphanelerde tanmlanm bulunan fonksiyonlar (ile alabilecekleri argmanlar) ve ilgilibirtakm deikenlerin bildirisi ise bir balk dosyasna konur. stdio.h byle bir balkdosyasdr ve herhangi bir standart girdi/kt fonksiyonu arlmadan veya deikenlerikullanlmadan nce

    #include

    yazlarak kaynak programn iine kopyalanmas gerekir.

    Kullancnn girdi/kt yapmas iin, girdi/kt ara dosyasnn tanm ncedenyaplmtr. Bunlar unlardr:

    stdin standart girdistdout standart ktstderr standart hata kts

    ve normal olarak kullancnn klavye ve ekranna balanmtr.

    Programcnn basit girdi/kt ilemleri yapmas iin, sadece gerekli olan printf,scanf, getchar, putchar, _getch ve _getche fonksiyonlar bu ksmdaanlatlacaktr. Dier girdi/kt fonksiyonlar iin girdi/kt ile ilgili blme baknz.

    printf(kontrol_karakter_dizisi, argman_listesiopt) Fonksiyonu

    Bu fonksiyon stdouta yaplacak biimli kt iindir. Kontrol_karakter_dizisi,argman_listesindeki argmanlarn deerlerinin ktsn denetleyen sfr veya daha fazladnm tanmlamalar salar. Argman_listesi virgllerle ayrlm argmanlardan oluurve bulunmas zorunlu deildir.

    En basit dnm tanmlamas u ekildedir:

    %z

    Burada znin yerine aadaki dnm karakterlerinden biri gelmelidir:

    dnm karakteri ktc iaretsiz bir karakters karakter dizisi (karakter gstergesi)

    d veya i iaretli bir ondalk tamsayu iaretsiz bir ondalk tamsay

    x, X iaretsiz bir onaltl tamsayo iaretsiz bir sekizli tamsayf doublee, E e veya E gsteriminde doubleg, G e (E) veya fnin en ksasp bir gstergenin deerin imdiye kadar yazlm olan karakterlerin says

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 19

    Genelde, bir dnm tanmlamas u ekildedir:

    %f0w.plz

    Burada f istee bal olarak aadaki bayraklardan biridir:

    bayrak anlam- kt alannda sola yanatr+ ne bir iaret koy# kayan noktal saylar iin mutlaka nokta konmasn

    sala; sekizli iin ne 0, onaltl iin ne 0x (0X)koy

    boluk karakteri eer iaret yoksa bir boluk koy

    stee bal olan 0, saynn solunu sfrla doldurmak iindir. stee bal olan w says,kt deerini alacak olan kt alannn geniliini belirtir. stee bal olan p says,kayan noktal bir say iin kesir ksmndaki rakamlarn saysn, bir karakter dizisi iinyazlacak en fazla karakter saysn veya bir tamsay iin yazlacak en az rakam saysngsterir. stee bal olan l ise argmann ksa (h), uzun (l) bir tamsay veya uzun (L) birdouble olduunu gsterir.

    float iin bir dnm tanmlamas olmadna dikkat edin; herhangi bir floatifadeyi bir kalp kullanarak doublea dntrn. w ve pnin yerine konulacak bir *,geniliin argman_listesindeki bir int argmandan alnacan gsterir. Normalde,deerler kt alanlarnda saa yanatrlrlar.

    te baz rnekler. cnin int, toplamn da double olduunu varsayn. Yeni satrkarakterlerine dikkat edin.

    printf("Merhaba\n");printf("%s\n", "Merhaba"); /* yukaridakiyle ayni cikti */printf("\nSayi=%d adet", c); /* c'nin degeri gereken */ /* genislikte bir tamsayi olarak yazilir */printf("\nSayi=%4d adet", c); /* yukaridakiyle ayni, ancak alan genisligi en az 4 */printf("\nToplam=%5.2f", toplam);printf("\nToplam=%*.*f", 5, 2, toplam); /* toplam'in degeri dd.dd biciminde yazilir */printf("\nToplam=%5.2f Sayi=%4d", toplam, c);

    Eer %den sonraki karakter geerli bir karakter deilse, sonucun ne olacabelirsizdir; %% tek bir yzde iareti basar. printf fonksiyonu hakknda daha fazla bilgiiin, ilgili C derleyicisinin girdi/kt ktphane fonksiyonlar el kitabna veya evrimiiyardm kolaylklarna baklmas nerilir.

    scanf(kontrol_karakter_dizisi, argman_listesiopt) Fonksiyonu

    Bu fonksiyon stdinden biimli girdi yapmak iindir. Kontrol_karakter_dizisi,argman_listesindeki argmanlara verilecek deerleri kontrol eden sfr veya daha fazladnm tanmlamalar salar. Kontrol_karakter_dizisindeki dnm karakterleri

  • 20 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    dndaki karakterlerin, girdi akmnda karlk gelen karakterlerle ayn olmas beklenir.Argman_listesi girdi deerleri iin hedef olan deikenlerin adreslerinin, birbirindenvirglle ayrlarak, yazlmasndan oluur. Yaplm olan baarl dnmlerin says,fonksiyonun deeri olarak geri dndrlr.

    Dnm tanmlamalar u ekildedir:

    %*wlz

    Burada * deerin argmana atanmasn engeller, w en byk alan geniliini belirtir, l iseargmann bykln gsterir. de istee baldr. z dnm karakteri geneldeprintfteki gibidir. Girdi akmnda, bir alan, beyaz (boluk, tab, yeni satr vs) olmayanbir karakterle balayp, ilk gelen beyaz karakterle veya belirtilen alan uzunluu sonundabiter.

    te baz rnekler. c1, c2nin char, inin int, ynin float, dnin double vesnin char dizisi olduunu varsayn. %lf bir saynn okunmasn ve double olarakdepolanmasn salar. long double iin %Lf kullann. & ilecinin, fonksiyonadeikenin deerinin deil de adresinin iletilmesi iin kullanldna dikkat edin. Bu ileBlm 3te anlatlacaktr.

    scanf("%d", &i);scanf("%4d", &i);scanf("%c%c%*3s%d%f%lf", &c1, &c2, &i, &y, &d);scanf("%[^.].", s);scanf("%[ABC]", s);

    Son iki rnein ilki, (beyaz boluk karakterlerinden biriyle deil de) bir nokta ilesonlandrlm bir karakter dizisinin okunarak noktann atlanmasn salar. Son rnekte,sadece A, B veya C karakterlerini ieren bir karakter dizisi okunmaktadr. scanffonksiyonunun kullanm hakknda daha fazla bilgi iin, derleyicinizin elkitaplarna veyaevrimii yardm kolaylklarna bavurunuz.

    getchar() Ve putchar() Fonksiyonlar

    Bu fonksiyonlar stdinden veya stdouta bir karakterin girilmesini veya ktsnnyaplmasn salarlar. Tipik bir kullanm yledir. cnin char veya int olduunufarzedin.

    c = getchar();putchar(c);

    Eer klavyeden girilen bir karakter dizisi arka arkaya getchar fonksiyonununarlmasyla okunursa, getchar()n verecei son karakter satr ilerletme karakteri('\n') olacaktr, nk satrba karakteri ('\r') standart girdi/kt yordamlartarafndan elenmektedir. Ayn ekilde, putchar() kullanldnda, satr sonuna '\n'yazlmas yeterlidir; '\r' karakteri otomatik olarak '\n'nin nne eklenecektir.

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 21

    _getch() Ve _getche() Fonksiyonlar

    Standart olmayan bu fonksiyonlar, klavyedeki bir tua yaplan tek bir vurutan ortayakan karakteri verirler. Yani programn bilgi alabilmesi iin, getchar() gibi, satrnENTERla bitirilmesini beklemezler. _getche()de girilen karakter ekrana yanstlr,_getch()de bu olmaz. Not: Bu fonksiyonlar standart olmadklar iin, isimlerininnnde altizgi (_) karakteri bulunmaktadr; ancak baz sistemlerde, rnein Microsoft Cderleyicisinin eski uyarlamalarnda, altizgi karakteri olmadan kullanlmalar gerekebilir.Verilen rnek programlarda bunu dikkate alarak, kendi sisteminiz iin gereklidzenlemeleri yapabilirsiniz.

    Girdide Dosya Sonu Kontrol

    stdio.h balk dosyasnda #define ile tanmlanm bulunan EOF ismi dosya sonunukontrol etmek iin kullanlabilir. Sistemimizde, dosya sonu ASCII ondalk kodu 26 olanCONTROL+Z (klavyedeki CONTROL tuu basl iken Zye baslarak oluturulur) karakterininalnmas eklinde tanmlanmtr. Ancak C ktphanesindeki standart bir fonksiyontarafndan dndrlen dosya sonu iareti EOFtur. if deyiminin henz anlatlmamasnaramen, aadaki rnek stdinden dosya sonunun nasl anlalabileceini gsterir.Dikkat: cnin tipi en azndan int olmaldr.

    c = getchar();if (c == EOF) { /* eger dosya sonu ise */ ... dosya sonu ilemleri yapan deyimler ...}

    1.8. C Deyimleri Ve Program Gvdesi

    C programlar deyimlerden oluur. Yazlabilecek en basit deyim bir ifade deyimidir. Birifade deyimi, arkasna noktal virgl konmu herhangi bir ifadedir. rnein,

    a + b * c;i++;

    iki ayr ifade deyimidir; ancak bunlardan ilki pek bir ie yaramaz, oysa ikincisi, yanetkisinden dolay, bir ie yarar: inin deerinin bir artrlmasna neden olur.

    Bileik bir deyim dnda her deyim noktal virglle sona erer.

    Bir bileik deyim (ayrca, bildirimler ierdii zaman, blok da denir), aadaki gibiengelli parantezler arasna alnm bir deyimler srasdr. Bileik deyimden sonra noktalvirgl olmadna dikkat edin.

    { bildirimleropt deyim1opt deyim2opt ... deyimn opt }

  • 22 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    Szdizimsel adan bir bileik deyim tek bir deyime edeerdir. stee bal olarak,bir bileik deyimin ilk yrtlebilir deyiminden nce deiken tanmlar ve bildirimleribulunabilir. Tanmlarn bir bileik deyim iine konmasnn nemli bir sonucu vardr.Yrtme esnasnda, bir bileik deyim iinde tanmlanm bulunan deikenler iin bloagirildiinde bellek ayrlr; bloktan kldnda ise bu bellek blgesi serbest braklr. Eerbileik deyim dnda ayn isimde deikenler varsa, bloa girildiinde, bunlarnkimlikleri geici olarak unutulur ve yeni tanmlar etkili olur. Bloktan kldnda eskitanmlar etkilerini tekrar kazanrlar. Bu durum iie olan bloklar iin meydana gelebilir.

    imdilik, bir C programnn genel ekli aadaki gibi zetlenebilir:

    /* * * * * * * * * * * * * * * * * * * * * * * * * * *\ * * * Programin ne yaptigini, kimin tarafindan, ne * * zaman yazildigini vs belirten aciklamalar. * * *\* * * * * * * * * * * * * * * * * * * * * * * * * * */...btn nilemci emirleri...void main (void){ ... veri tanmlar ... deyimler ...} /* main */

    Program gvdesinin byk bileik bir deyimden olutuuna dikkat ediniz. Daha sonraanlatlaca gibi, fonksiyon tanmlar da ayn ekilde yazlr, yani ana program da birbakma bir fonksiyondur.

    1.9. Bir C Program Nasl letilir

    Birok bilgisayar ve iletim sistemi iin ok sayda C program gelitirme ortamlar vederleyicileri mevcuttur. Bu ksmda, IBM Kiisel Bilgisayarlar veya uyumlularnn MS-DOS iletim sistemi altnda alan Microsoft QuickC (MS-QC) Uyarlama 1.01inkullanm ksaca anlatlacaktr. Microsoft komut satr derleyicisi (MS-CL) ise dahadetayl olarak Ek Bde anlatlmaktadr.

    MS-QC, kullanm ok kolay olan bir C programlama ortamdr, bundan dolayonunla balamanz neririz. MS-QC, btnlemi bir kaynak program editr, detaylsaylabilecek yardm kolayl ve yrtme zaman hata dzelticisiyle birlikte gelir. Yenibir C programcs, MS-QC ortamndan ayrlmadan bir C program yazabilir, derleyebilir,altrabilir ve hatalarn dzeltebilir.

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 23

    MS-QC, uygun bir ekilde, hard diskinize yerletirilmise veya datm disketi disketsrcnze yerletirilmise, iletim sistemi iletisine QC yazn. sterseniz, C programnzieren kaynak dosya adn da belirtebilirsiniz. rnein,

    C>QC mprog.c

    MS-QC, tepesinde birtakm men maddelerinin bulunduu ve komut satrnda belirtilenkaynak dosyadan satrlarla doldurulan bir grntleme blgesinden oluan bir ekransunacaktr. Eer kaynak dosya belirtilmemise grntleme blgesi bo olacaktr. Hemenyeni C programnz yazmaya balayabilirsiniz veya aadaki dzenleme tularnkullanarak eski bir programda deiiklikler yapabilirsiniz:

    Yukar, aa, sola, saa oklar,PAGE UP (sayfa yukar),PAGE DOWN (sayfa aa) imle hareketiINSERT araya ekleme/ste yazmaDELETE imlecin arkasndaki karakteri silme

    Dier klavye tularnn dzenleme ilevlerini ortaya karmak iin deneme yanlmayntemini kullann. MS-QC editrnn kullanm temelde MS-DOSdaki EDITkomutuna benzemektedir.

    Bir C program yazldktan sonra, bir men maddesi seilerek derlenebilir,altrlabilir, hatalar dzeltilebilir veya bir dosyada saklanabilir. Eer fareniz varsa,seime doru srn ve tulayn. Yoksa, men maddesinin ilk harfinin x olduunuvarsayarsak, ALT+xe basn. Ayn ekilde, ALTa basp, ok tularn kullanarak menmaddesini seip ENTERa da basabilirsiniz. MS-QC men maddesinde alt izilmi harfebasarak ilgili seenek seilebilir. rnein,

    ALT+F: Dosya mensn aX: MS-DOSa kS: Program saklavs.

    ALT+R: Gei mensn aC: DerleS: Derlenmi program yrtmeye balavs.

    vs.

    ESC: Alt men penceresini kapa

    Bir men maddesinin seilmesi, diyalog penceresi denilen, ya ek seimler yada bilgiveren mesajlar sunan baka bir pencerenin grntlenmesine yol aabilir. Bu tip menmaddelerinin sonunda nokta bulunur.

    Szdizimsel ynden hatal bir program derlendiinde, MS-QC btn szdizimhatalarn bulup ilk hatal deyimi grntleyecektir. mle, hatann zerinde duracak veekrann alt tarafndaki diyalog kutusunda bir hata mesaj grntlenecektir. Bir nceki

  • 24 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    veya sonraki hata blgesi SHIFT+F3 veya SHIFT+F4e baslarak grntlenebilir. Buekilde, tekrar derlemeden nce, btn hatalar bulup dzeltebilirsiniz.

    Bir C program ayrca, basite SHIFT+F5e baslarak veya RUN altmensndenSTART seilerek derlenip altrlabilir. Szdizimsel hatalar az nceki gibibildirilecektir, fakat uyar dnda baka hata yoksa, programn yrtlmesine geilecektir.Programn kts otomatik olarak kt ekrannda grntlenir. MS-QC grntsne geridnmek iin ENTERa basn. kt ekrann tekrar grntlemek iin F4e basn.

    imdi de hata bulma konusunda bir iki sz. Aadaki yntemleri kullanmak iinprogramnzn DEBUG modunda derlenmesi gerekmektedir. Bunun iin, nce ALT+Ryesonra Cye basn. Gelen pencerenin sa tarafnda Debug yazsnn nnde X iareti olupolmadn kontrol edin. Eer yoksa ALT+Dye basn. Daha sonra ENTERa basp programderleyin.

    Programnz altrmaya balamadan nce, deyime bir kesilme noktas (breakpoint)koyarak, yrtmenin o deyime gelince beklemesini salayabilirsiniz. Sadece imlecideyimin stne gtrp F9a basmanz yeterlidir. Daha sonra, kesilme noktasnkaldrmak isterseniz ayn ilemi tekrarlayn.

    Programn almas devam ettii esnada bir deikenin ve/veya ifadenin deerinigrntleyebilirsiniz. DEBUG altmensndeki ADD WATCH men maddesini sein vesrekli grntlemek istediiniz deikeni veya ifadeyi yazn.

    altrlmakta olan deyimleri grntlemek iin bir izleme (trace) kolayl damevcuttur. Bir fonksiyon ars esnasnda fonksiyon iindeki deyimleri izlemek iin F8ebasn, fonksiyon iindeki deyimlerin izlenmesini atlamak iin F10a basn.

    QuickCnin, C programlamasn kolay hale getiren baka birtakm kolaylklar davardr. Kullancnn ilgili elkitaplarna bakmas ve/veya men seimlerini deneyerek bukolaylklar ortaya karmas nerilir. Microsoft Visual C++ Development System forWindows paketi iindeki Visual Workbench program kullanm bakmndan MS-QCyeuyumlu, ancak profesyonel kullanclara ynelik ok daha gelimi bir ortam salar. Dieretkileimli C ortamlarnda da benzer olanaklar sunulmaktadr.

    1.10. rnek Programlar

    Bu ksmdaki rnek programlar, ne ie yaradklar hakknda kendi kendilerini aklayacakekilde yazlmlardr, ancak henz anlatlmamif ve while gibibaz deyimler veileler ierirler. Bunlarn anlamlarn ortaya karmak iin, okuyucu, eski programlamadeneyimlerine dayanarak bir kestirimde bulunabilir.

    rnek Program 1

    Bu programda kullanlan _getche fonksiyonu, bir standart girdi fonksiyonu olmadiin, dosya sonu kontrol MS-DOS standardna uygun olarak CONTROL+Z karakteri

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 25

    kullanlarak yaplmaktadr. Not: _getche fonksiyonunun kullanmndan dolay, buprogram ANSI Standardna uygun deildir.1. /* * * * * * * * * * * * * * * * * * * * *\2. * *3. * Bu program, CONTROL+Z girilinceye *4. * kadar, klavyeden girilen her karak- *5. * terin ASCII kodunu verir. *6. * *7. \* * * * * * * * * * * * * * * * * * * * */8.9. #include 10. #include 11. void main (void)12. {13. int c;14. char ctrlz = 26; /* ASCII ond. kodu 26 (CONTROL+Z) */15.16. printf("\nBazi kontrol karakterleri disinda,"17. "\ngirilen karakterin kodu goruntulenecek.");18. while (1) {19. /* Ekrana yansitarak bir klavye tusunu oku.20. * CONTROL+Z'ye basilmissa programi bitir.21. */22. printf("\nBir karakter girin: ");23. if ((c = _getche()) == ctrlz)24. break;25. /* Girilen karakterle ayni satirda ondalik, onaltili26. * ve sekizli olarak ASCII kodunu goruntule.27. */28. printf(", ondalik: %d, onaltili: %x, sekizli: %o",c,c,c);29. } /* while */30. } /* main */

    rnek Program 21. /* * * * * * * * * * * * * * * * * * * * * * * * * * *\2. * *3. * Bu program, -1 girilinceye kadar, klavyeden *4. * girilen ondalik sayilari kabul eder, daha sonra, *5. * girilen sayilarin agirlikli toplamini, ortala- *6. * masini ve varyansini hesaplayip goruntuler. *7. * *8. * Uyari: Cok buyuk sayilarin ve rakam olmayan *9. * karakterlerin girilmesi sorun yaratabilir. *10. * *11. \* * * * * * * * * * * * * * * * * * * * * * * * * * */12.13. #include 14. #define AGIRLIK 1.015. /* Eger veri degerleri agirlikli olarak hesaplanacaksa,16. * agirliga farkli bir deger verin.17. */18.

  • 26 TEMEL KAVRAMLAR VE GENEL BR BAKI BLM 1

    19. void main (void)20. {21. int sayi;22. int adet = 0;23. double kn_sayi, toplam=0.0, karelerin_toplami=0.0;24. double ortalama=0.0, varyans=0.0;25.26. printf("\nToplam, ortalama ve varyans hesaplayan program."27. "\n\nLutfen ilk sayiyi (veya cikmak icin -1) girin: ");28. scanf("%d", &sayi);29. /* Girilen sayi olumsuzsa programi bitir. */30. while (sayi >= 0) {31. adet++; /* Sayaci artir */32. /* Sayiyi double'a cevirip AGIRLIK'la carp. */33. kn_sayi = (double)sayi * AGIRLIK;34. /* Yeni toplami ve karelerin toplamini hesapla. */35. toplam += kn_sayi;36. karelerin_toplami += kn_sayi * kn_sayi;37. /* Yeni ortalama ve varyansi hesapla. */38. ortalama = toplam / (double)adet;39. varyans = ortalama*ortalama-karelerin_toplami/(double)adet;40. if (varyans < 0.0)41. varyans = -varyans;42. /* Hesaplanan degerleri goruntule. */43. printf("\nAdet = %d", adet);44. printf(", toplam = %.2f", toplam);45. printf(", ortalama = %.2f", ortalama);46. printf(", varyans = %.2f", varyans);47. /* Bir sonraki sayiyi al. */48. printf("\nLutfen bir sonraki sayiyi "49. "(veya cikmak icin -1) girin: ");50. scanf("%d", &sayi);51. } /* while */52.53. /* En son hesaplanan degerleri bir daha ve degisik54. * bir bicimde goruntule.55. */56. printf("\nVerilerin adedi: %12d", adet);57. printf("\nToplam : %15.2f", toplam);58. printf("\nOrtalama : %15.2f", ortalama);59. printf("\nVaryans : %15.2f", varyans);60. } /* main */

    Problemler

    1. Kernighan ve Ritchienin (1978de yaynlanan) The C Programming Language adlkitaplarnn ilk basksnda entry ad verilen bir anahtar szckten bahsedilmekteidi. u anki Standartta ve grdmz herhangi bir derleyicide mevcut deildir;ileride kullanlmak amacyle ayrld sylenmekte idi. Derleyicinizde entrynin biranahtar szck olup olmadn belirlemede size yardmc olacak bir programdeneyin.

    2. Soyaacnz basan bir program yazn. ( dzey yeterlidir.)

    3. Aadaki deyimin sonucunu aklamaya aln:

  • BLM 1 TEMEL KAVRAMLAR VE GENEL BR BAKI 27

    printf("%d", printf("C iyi bir dildir.\n"));

    4. Aadaki geerli bir deyim midir?((x) = (5));

    5. Aadaki geerli bir C deyimi midir?{{{}}}

    6. Aadaki programn, girdi olarak verilen bir gerek saynn tamsay ksmngrntleyeceine inanlmaktadr:#include void main (void){ float x; scanf("%f", x); printf("%d", x);}

    Fakat alr gibi gzkmemektedir. Dzeltin. pucu: Derleyicinin bulamayaca ikiayr hata bulunmaktadr.

  • 29

    BLM 2: DEYMLER VEKONTROL AKII

    Dnlecei gibi, her deyim, bilgisayara ne yapacan syleyen, temel bir programadmdr. Bu blme, tm C deyimlerinin bir listesini vermekle balayacaz. Ondansonra, kontrol ak deyimleri iindeki ifadelerde ska kullanlan ile grubundanbahsedeceiz. Blmn geri kalannda, C program deyimlerinin yrtlme srasnkontrol eden deyimler detayl olarak anlatlacaktr.

    Bir C program main fonksiyonunun ilk deyiminden almaya balar. Eer kontrolak baka yne ynlendirilmezse, deyimler, program iindeki sralarnda ard ardailetilir ve yrtme mainin son deyiminden sonra durur. Kontrol akn ynlendirmeninbir yolu da bir fonksiyon ars yapmaktr. Bu blmde ayrntl olarak anlatlacakdeyimler ise kontrol akn kendilerine zg yollarla etkilerler.

    Balamadan nce, Pascal-severlere nemli bir uyarmz var: C dilinde, noktal virgl,deyimleri ayrmak iin deil, baz deyimleri bitirmek iin kullanlr. Yani, noktal virgldeyimin bir parasdr. Gerek olmadn sandnz baz yerlere noktal virgl koymanzgerekebilir. rnekleri grdke, kurallarn daha ak olacan umuyoruz.

    2.1. C Dilinin Deyimleri

    izelge 2.1de btn C deyimleri liste halinde verilmitir. Bu izelgenin ilk iki maddesinceki blmde zaten anlatlmt. Geri kalanlar ise temelde kontrol ak deyimleridir ve,return dnda, hepsi bu blmde anlatlacaktr.

  • 30 DEYMLER VE KONTROL AKII BLM 2

    ZELGE 2.1 C dilinin deyimlerideyim ilevifade eitli (atama, fonksiyon arma vs)bileik birden fazla deyimden tek bir deyim olutururif koullu yrtmeswitch (herhangi bir sayda seeneklerle) koullu yrtmewhile (devam testinin her yinelemeden nce olduu) dngfor while gibi, fakat bir ilkleme blm vardo (devam testinin her yinelemeden sonra olduu) dngbreak bulunulan bloktan dar atlanmascontinue mevcut yinelemenin geri kalannn atlanmasgoto (bulunulan fonksiyon iinde) herhangi bir blgeye atlanmasetiketli gotonun hedefireturn (olas bir deerle) fonksiyondan dnbo hi (baz szdizimsel kullanmlar vardr)

    2.2. Bantsal Ve Mantksal leler

    C dilinde dokuz ile, doru veya yanl diye yorumlanabilecek deerler verir. Cnin zelbir Boolean (yani mantksal) veri tipi yoktur ve bu ilelerle oluturulmu bir ifadenindeeri, eer ifade doru ise, 1, yanlsa 0dr. Aslnda, sfrdan farkl her say C dilindedoru anlamn tar. Byle bir sonucun tipi her zaman inttir. Aada, bu ileler,azalan ncelik sralarna gre anlatlmaktadr. Btn doruluk-deerli ileler, structve trevleri dnda, her tipten ilenen kabul eder. Sadan sola doru birleen ! tekli ilecidnda, burada anlatlan tm ileler soldan saa birleirler. Bantsal ve mantksalileler deimez ifadelerde de kullanlabilirler.

    Mantksal Olumsuzlama leci !

    ! (deil) ileci ilenenin mantksal deerini olumsuzlar; yani eer ilenen 0sa 1 verir,eer ilenen sfrdan farkl ise 0 verir. rnekler:

    /* Bu ve bir sonraki kisimda; a=150, b=45.33, c=-132, d=0 */!a deeri 0dr!c deeri 0dr!d deeri 1dir!(b+c) deeri 0dr!!c deeri 1dir

    Bantsal leler , =

    Bu ilelerin isimleri yledir:

  • BLM 2 DEYMLER VE KONTROL AKII 31

    ile isim< kktr> byktr= byk veya eittir

    Bantsal ileler ilenenlerini karlatrr ve duruma gre doru veya yanl birdeer verirler. rnekler:

    a=d deeri 1dira>b>c (a>b)>cye edeerdir ve deeri 1dira

  • 32 DEYMLER VE KONTROL AKII BLM 2

    Mantksal VEYA leci ||

    || ileci ilenenlerinin mantksal VEYAsn verir, yani eer her iki ilenen yanl isesonu 0 olur, aksi takdirde 1dir. Grdnz gibi, eer ilenenlerden biri sfrdan farklise, teki ilenenin deeri ne olursa olsun sonu 1dir. Yukarda anlatlan yararl zellikburada da geerli olur; eer ilk ilenen sfrdan farkl ise, ikinci ilenen hesaplanmaz.rnekler:

    a||d !(!a&&!d)e edeerdir ve deeri 1dira||b deeri 1dirc||d deeri 1dird||(!c) deeri 0dr

    2.3. Doruluk-Deerli fadeler

    Birok yeni ile rendiimize gre, Blm 1de verilmi olan ile ncelii ve birlemeizelgesinin geniletilmi bir uyarlamasn verelim. Bu izelge 2.2de gsterilmektedir.

    ZELGE 2.2 C ile ncelii ve birleme[]

    ! ++ -- + - (tip) * / %

    + - < >=

    == != && ||

    = *= /= %= += -=

    Bir nceki ksmdaki ileler kullanlarak yazlm baz doruluk-deerli ifadernekleri yledir:

    !(acye edeerdir ve deeri 1dir!a>c 0>cye edeerdir ve deeri 1dir!(a==b) a!=bye edeerdir ve deeri 1dirad 0==0a edeerdir ve deeri 1dir!a

  • BLM 2 DEYMLER VE KONTROL AKII 33

    2.4. if Deyimi Ve Koullu le

    if deyimi, if anahtar szcnn arkasna parantez iine yazlm bir ifade ve peindengelen bir deyimden oluur. Tm bunlarn arkasnda, istee bal olarak, bir else anahtarszc ve bir deyim bulunabilir. ifin bu iki ekli aadaki gsterimdezetlenmektedir:

    if (ifade) deyim

    ve

    if (ifade) deyimelse deyim

    te elsei olmayan bir if deyimi rnei:if (yas > 65) { yasli_kisiler++; printf("Yasli bir kisisiniz.\n");}

    Eer yas 65ten bykse, blok iindeki deyimler altrlr, aksi takdirde, kontroldorudan bir sonraki deyime geer. Bu deyimi, her yatan kiiye hitap edecek ekildedeitirelim:

    if (yas > 65) { yasli_kisiler++; printf("Yasli bir kisisiniz.\n");} else printf("Henuz yasli bir kisi degilsiniz.\n");

    imdi, deyiminiz, eer yas 65in stnde ise, az nceki deyimle ayn ekildedavranacaktr, aksi takdirde yeni mesaj grntlenecektir. Genelde, parantez iine alnmifadenin deeri doru (sfrdan farkl) ise, ifadeden sonra gelen deyim iletilir; ifadenindeeri yanl (sfr) ise, else anahtar szcnden sonra gelen deyim (varsa) iletilir.rneklerimizde de grld gibi, bu deyimler bileik deyimler olabilir, bu da bileikdeyimlerin daha nce belirtiimiz iyi zelliidir: Birok deyimden tek bir deyimolutururlar. Ayrca, bileik deyim balatan { karakterinin ifade ile ayn satrda, onunkarl olan } karakterinin de anahtar szckle ayn stuna yazldna dikkat ediniz.Bu karakterlerin tam yeriblou doru bir ekilde ayrdklar srecederleyiciyiilgilendirmez, ancak bu ekilde yazmann programlar anlamay kolaylatracainancndayz ve bunu kitap iinde uygulamaya devam edeceiz.

    phesiz, iie if deyimleri yazabilirsiniz. Tipik bir rnek yle olabilir:

  • 34 DEYMLER VE KONTROL AKII BLM 2

    if (yas > 65) { yasli_kisiler++; printf("Yasli bir kisisiniz.\n");} else if (yas > 40) { orta_yastaki_kisiler++; printf("Orta yastasiniz.\n");} else if (yas > 17) { genc_kisiler++; printf("Gencsiniz.\n");} else printf("Cocuksunuz.\n");

    Bunun tek bir deyim olduuna dikkat ediniz. imdi unun zerinde dnn:

    if (yas < 65) if (yas > 40) printf("Orta yastasiniz.\n");else printf("Cok yaslisiniz.\n");

    Eer yas 65ten byk veya eitse ne olacaktr? Dier bir deyile, else hangiife aittir? Mesajlar ve ierlek yazma ekli, bu deyimi yazan kiinin ilk ife aitolduunu dnd izlenimini uyandryor, fakat bu doru deil! Kural yledir: Herelse en yakn elsei olmayan ife aittir. Bundan dolay, yukarda yaplmak istenen iidoru ekilde yapan if udur:

    if (yas >= 65) printf("Cok yaslisiniz.\n");else if (yas > 40) printf("Orta yastasiniz.\n");

    veya,

    if (yas < 65) if (yas > 40) printf("Orta yastasiniz.\n"); else ;else printf("Cok yaslisiniz.\n");

    elseten sonraki noktal virgl bir bo deyim oluturur. Grdnz gibi,szdizimin bir deyim gerektirdii, fakat yaplacak bir ey olmad yerde bo deyimkullanlabilir. Baka bir yol olarak, ikinci ifi bir blok iine alrsak, bo deyimli elsekullanmak zorunda kalmayz.

    if (ifade_1) deiken = ifade_2;else deiken = ifade_3;

    eklindeki bir if deyimi, koullu ile kullanlarak

  • BLM 2 DEYMLER VE KONTROL AKII 35

    deiken = ifade_1 ? ifade_2 : ifade_3;

    eklinde basite yazlabilir. Genelde, C dilindeki tek -ilenenli (l) ile olan ?:ileci, nce ifade_1i hesaplar ve eer ifade_1 doru ise ifade_2nin deerini, aksitakdirde ifade_3n deerini verir. Son iki ifadeden sadece biri hesaplanr. Sonucun tipi,nceki blmde anlatlan dnm kurallarna gre ifade_2 ve ifade_3 birlikte dikkatealnarak belirlenir. ?: ilecinin sadan sola doru birleme zellii vardr ve nceliiKsm 2.2de grlen tm ilelerden dk, atama ilecinden ise yksektir.

    ?: ilecinin ileri nasl kolaylatrdna bir rnek:

    printf(yas>65 ? "Yasli birisiniz.\n" : "Henuz yasli degilsiniz.\n");

    Grdnz gibi, hem ifade_2 hem de ifade_3 karakter dizileri ise, sonu bir karakterdizisidir. ?: ileci deimez ifadelerde de kullanlabilir.

    2.5. while Deyimi

    Dier programlama dillerinde olduu gibi, while deyimi dngler oluturmak iinkullanlr. Szdizimi yledir:

    while (ifade) deyim

    nce ifade hesaplanr. Eer doru ise, deyim yrtlr, sonra da ifade tekrar hesaplanr.fadenin hesaplanmasnda yanl (0) sonucu elde edilinceye kadar bu devam eder; budurumda kontrol bir sonraki deyime geer. Eer balangta ifade yanlsa, tekrarlanandeyim hi altrlmaz. ekil 2.1deki ak izenei while deyiminin yrtlme eklinigsterir.

    te bir while deyimi:while (yas

  • 36 DEYMLER VE KONTROL AKII BLM 2

    yanl

    doruifadeyihesapla

    deyimiyrt

    yanl

    doru

    ifadeyihesapla deyimiyrt

    while deyimi do deyimi

    EKL 2.1 while ve do deyimleri iin ak izenekleri

    2.6. do Deyimi

    do deyimi while deyiminin yakn bir akrabasdr; o kadar ki szdiziminde whileanahtar szcn ierir:

    do deyimwhile (ifade);

    donun whiledan tek fark ifadeyi, tekrarlanan deyimin yrtlmesinden sonrahesaplamasdr. Bunun anlam, ne olursa olsun, do deyiminde en az bir defa dngyegirildiidir. ekil 2.1de verilen ak izeneklerindeki farkllklara dikkat edin.

    Birisinin yan sorup, olumlu bir say girilinceye kadar sormaya devam eden, rnekbir do deyimi yledir:

    do { printf("Lutfen yasinizi giriniz.\n"); scanf("%d", &yas);} while (yas

  • BLM 2 DEYMLER VE KONTROL AKII 37

    2.7. for Deyimi Ve Virgl leci

    for deyimi, for anahtar szc, arkasnda parantez iinde iki noktal virglle ayrlm ifade ve ondan sonra gelen bir deyimden oluur. fadelerden herhangi biri varolmayabilir, ancak noktal virgller bulunmaldr. for deyiminin nasl ilediinianlatmann en iyi yolu, edeer bir while deyimi ile onu ifade etmektir. imdi, eer

    for (ifade_1opt ; ifade_2opt ; ifade_3opt) deyim

    eklinde bir deyimimiz varsa,

    ifade_1;while (ifade_2) { deyim ifade_3;}

    deyimi, for deyimi ile ayn ii yapacaktr. Eer for deyimindeki ifade_2 bosa, srekliolarak doru olduu eklinde yorumlanacak ve sonsuz bir dngnz olacaktr. fade_1indngy kontrol eden deikenleri ilklemek iin; ifade_2nin dngy durdurmak iingereken koullar belirlemede; ifade_3n de dng iindeki baz deikenlerindeerlerini deitirmede kullanlacana dikkat edin. rnek:

    for (i=0; i

  • 38 DEYMLER VE KONTROL AKII BLM 2

    for ( ; sayac_1 && sayac_2; sayac_1--, sayac_2--) { ...}

    Bu, virgl ilecinin en ok kullanld yerlerden biridir. Grdnz gibi, virglileci iki ifadeden tek bir ifade oluturmaya yarar. Her zaman ikinci ilenenden nce ilkileneni hesaplar ve soldan saa birleir. Sonucu ise sadece ikinci ifadenin deeridir.Sonucun tipi de ikinci ifadenin tipiyle ayndr. Virgl ileci, Cnin ileleri arasnda endk ncelie sahiptir.

    Virgl karakterinin, C dilinde baka amalar iin de kullanldna dikkat ediniz.Bildirimlerde deiken isimlerini ayrmak buna bir rnektir. Bu durumlarda, sz konusuolann bir ayrc deil de, bir ile olduunu belirtmek iin virgl ifadesi parantezler iinealnmaldr.

    2.8. continue Deyimi

    continue deyimi sadece bir dngnn gvdesi iinde, yani while, do veya foruntekrarlanan deyiminde, geerlidir. Bu deyim yrtldnde, dng gvdesinin iindekigeri kalan deyimler atlanr ve hemen dngnn devamllk testine geilir. rnein,

    for (a=10; a>0; a--) { b = -a; if (b==-5) continue; printf("%d sayisinin olumsuzu %d sayisidir.\n", a, b);}

    deyiminde (5 hari) 10dan 1e kadar btn tamsaylar, olumsuzlar ile birlikte,yazlrlar. Dier bir rnek olarak,

    a = 0;while (a

  • BLM 2 DEYMLER VE KONTROL AKII 39

    ifade_3 her yinelemenin sonunda batan hesaplanr. Bylece, bu ksmda verilen fordeyiminin whilela yazlm edeeri yledir:

    a=10;while (a>0) { b=-a; if (b==-5) { a--; continue; } printf("%d sayisinin olumsuzu %d sayisidir.\n", a, b); a--;}

    2.9. break Deyimi

    break deyimi continue ile yakndan ilintilidir. continue deyimi yeni biryinelemenin balamas amacyla dngnn sonuna atlarken, break, iinde kald enkk dngnn dna atlar ve dng deyiminin tamamen sona ermesine yol aar. Bakadurumlar dnda, break sonsuz dnglerden k iin kullanlr. rnein:

    while (1) { scanf("%d", &yas); if (yas

  • 40 DEYMLER VE KONTROL AKII BLM 2

    goto tantc_szck;

    Tantc_szck ayn fonksiyon iinde var olan bir etiket olmaldr. goto kullanarak,fonksiyon iinde (dnda deil) herhangi bir yere atlanabilir; ileri veya geriye doru,istenildii kadar iie gemi dng veya bloklarn iine veya dna, istediiniz bir yeregidebilirsiniz. gotonun sorumsuzca kullanm, anlalmas ve bakm yaplmasolanaksz programlar yaratabilir. Kuramsal olarak, anlambilimsel hibir yitimeuratlmadan, goto bir programdan karlp yerine dng ve if deyimleri konulabilir.Buna ramen, hata ileme gibi, baz durumlarda ileri kolaylatrabilir. rnein:

    while (bir_kosul) { ... do { ... for (...; ...; ...) { ... if (guuum) goto felaket; ... } } while (baska_kosul); ...}...felaket: hata ilemleri

    Bu durumda bile, goto deyimi kaldrlabilir. Hata ilemlerinin, baz temizlik ileriyapp, olas bir hata kodu ile, aran fonksiyona dn yaptn varsayn. O zaman, niyebu ileri goto deyiminin bulunduu yerde yapp bir return kullanmayalm? (returndeyimi bir fonksiyondan dnmek iin kullanlr ve Blm 4te ilenmektedir.) break,continue ve return gibi daha uygun yaplarn bulunduu, C gibi bir dilde,gotolardan kanlabilir ve kanlmaldr. yi bir programc gotoyu ve hattacontinueyu hemen hi bir zaman kullanmaz. switch dnda da, break deyiminiok seyrek kullanr. Bu arada, goto kullanmadan bile, kontrol ak anlalmayanprogramlar yazmak olasdr. Dikkatli tasarm, ayrntl belgeleme ve makul ierlek yazmaalkanl, bundan kanmann baz yollardr.

    2.11. switch Deyimi

    switch (ifade) deyim

    switch deyimi birok ktan bir tanesini semede kullanlr. te kullancyamenler sunan bir programda bulunabilecek bir switch:

  • BLM 2 DEYMLER VE KONTROL AKII 41

    switch (_getche()) { case 'r': case 'R': rezervasyon_yapma(); break; case 'l': case 'L': yolcu_listeleme(); break; case 'i': case 'I': rezervasyon_iptali(); break; case 'c': case 'C': cikis(); break; default: printf("Yanlis secenek... Tekrar deneyin.\n");}

    Bu rnek switchin tm nemli zelliklerini gstermektedir. Parantez iineyazlm tamsay tipindekibu rnekte olduu gibi, bir karakter de olabilirsay ifadesihesaplanr, nne case anahtar szc getirilmi olan deimez ifadelerden birinindeeri buna uyuyorsa kontrol bu case etiketli deyime aktarlr ve buradan sral olarakdevam eder. Eer hibir case etiketindeki deer ifadenin deerine uymuyorsa, ikiolaslk vardr: Deyim iinde bir default etiketi varsa, kontrol buraya aktarlr, aksitakdirde switch deyiminden klr.

    Yukardaki deyimde hibir break konulmad takdirde, r veya R girildiinde,btn fonksiyonlar (rezervasyon_yapma, yolcu_listeleme vs) arlacak vehata mesaj da baslacaktr. Bundan dolay hemen hemen btn switch deyimlerindebreakler bulunur. rnekte olduu gibi, switchteki parantez iindeki ifadeden sonragelen deyim genelde bir bloktur.

    case ve default etiketleri switch deyimleri dnda kullanlamazlar. Ayrca, birswitch deyimi iinde birden fazla default etiketi ve ayn switch iinde ayn deeresahip birden fazla case etiketi olamaz.

    switchin yksn baka bir ilgin rnekle bitiriyoruz:switch (yas) case 20: case 40: case 60: printf("20, 40 yada 60 yasindasiniz.\n");

  • 42 DEYMLER VE KONTROL AKII BLM 2

    2.12. Bir rnekSay Sralama1. #include 2. #define GOZCU 03. #define LIMIT 254.5. void main (void)6. {7. int i, j, k;8. int sayi, gecici;9. int sayilar[LIMIT];10.11. /* girdi */12. i=0;13. while (i

  • BLM 2 DEYMLER VE KONTROL AKII 43

    lk blmn sonunda, ide, sayilar dizisinin son dolu elemannn indisinin birfazlas bulunur. Bundan dolay, ikinci blm (Satr 21-28) iyi bir azaltarak balar.Arkadan gelen for deyimi, sralamay salamak iin, i ile beraber j ve k adnda ikisaya kullanr. Dtaki (yukardaki) for, sayilar dizisinin ilk i-1 elemanna bakar.Dtaki for tarafndan sayilar dizisinin baklan her jinci eleman iin, iteki for,j+1den iye kadar indislenmi elemanlara bakar. Yani, if deyiminin yrtld hersefer sayilar dizisinin iki farkl eleman, sayilar[j] ve sayilar[k],karlatrlr ve jsayilar[k] ise ikielemann deerlerini dei toku ederiz. Bu ilemin yapld yer Satr 25-27dir.

    nc blm (Satr 31-34), bir do kullanarak, (artk sralanm saylar ieren)dizideki ilk i+1 eleman basar. Eer, en bata, ilk (ve son) deer olarak sfr girersek, bublm gereksiz ve ilgisiz bir say basacaktr. (Bunun nedenini syleyebilmemiz gerekir.)Bu, en ksa ve basit gibi grnen programlarn bile, en beklenmeyen zamanda kendinigsteren, hatalar ierebileceini gsterir.

    Problemler

    1. do deyimini baka kontrol ak deyimleri kullanarak formle edin.

    2. Aadaki ifin grevini yapan bir switch yazn.if (yas == 16) printf("Onumuzdeki yil " "surucu belgesi alabilirsiniz!\n");

    3. while deyimini baka kontrol ak deyimleri kullanarak yazn.

    4. Bir tamsay okuduktan sonra, 1den girilen sayya kadar olan btn tamsaylarnkareleri ile kart (1/say) deerlerini basan bir program yazn.

    5. Sfrla sonlandrlm bir tamsay serisini okuyup sonunda saylarn en kk, enbyk ve ortalamasn veren bir program yazn.

    6. Bir karakter srasn okuyup arka arkaya tam 3 defa rastlad karakterleri basan birpr