Top Banner

of 32

C programlama ders 4

Apr 06, 2018

Download

Documents

Emre Dönmez
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 8/3/2019 C programlama ders 4

    1/32

    BLDRM, TANIMLAMA,

    DEMEZLER ve LEVLER

    r.Gr. Mahmut YALIN

    stanbul niversitesiElektrik Elektronik Mhendislii

    Kaynak:C ve Sistem ProgramclarDerneiKurs notu

  • 8/3/2019 C programlama ders 4

    2/32

    C Dilinin simlendirme Kurallarsimlendirmede yalnzca 63 karakter kullanlabilir. Bunlar:ngiliz alfabesinde yer alan 26 kk harf karakteri:

    a,b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z

    ngiliz alfabesinde yer alan 26 byk harf karakteri:A,B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z

    rakam karakterleri

    0, 1, 2, 3, 4, 5, 6, 7, 8, 9alttire (_) (underscore) karakteridir.simlendirmelerde yukarda belirtilen karakterlerin dnda baka birkarakterin kullanlmas geersizdir. rnein, boluk karakterleri, Trkeyezg (, , , , , , , , , , , ) karakterler, +,-, /, *, & ya da $karakterleri bir isimde kullanlamaz.

    Deiken isimleri rakam karakteriyle balayamaz. Harf karakteri ya da alttirekarakteri dnda, yukarda geerli herhangi bir karakterle balayabilir. Bukural derleyicinin deimezlerle isimleri birbirinden ayrmasn kolaylatrr.Deiken isimleri alttire '_' karakteriyle balayabilir.C'nin 32 anahtar szc isimlendirme amac ile kullanlamaz.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    3/32

    Uzun Deiken simlerisimler boluk ieremeyecei iin uygulamalarda genellikle boluk hissi vermek

    iin alttire (underscore) karakteri kullanlr.genel_katsayi_farki, square_total, number_of_cards gibi.simlendirmede baka bir seenek de her szcn ilk harfini byk, dierharfleri kk yazmaktr:GenelKatsayiFarki, SquareTotal, NumberOfCardsC dili standartlar isim uzunluu konusunda bir snrlama koymamtr. Ancakismin ilk 31 karakterinin derleyici tarafndan dikkate alnmasn zorunlu klar.Ancak derleyicilerin ou, ok daha uzun deiken isimlerini ileme sokabilirler.31 karakterden daha uzunisimler kullanldnda programc iin ok az da olsayle bir risk sz konusudur: Herhangi bir derleyici ilk 31 karakteri ayn olan ikifarkl ismi ayn isim olarak ele alabilir.

    simlendirmede Nelere Dikkat Edilmeli?simlendirme, yazlan programlarn okunabilirlii asndan da ok nemlidir. yiyazlm olan bir programda kullanlan isimlerin dilin kurallarna gre uygunolmalarnn dnda, baz baka zelliklere de sahip olmas gerekir:

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    4/32

    1. Seilen isimler anlaml olmaldr.Verilen isimler, deikenin kullanm amac hakknda, okuyana bilgi vermelidir.ou zaman, bir deikenin ismini x, y, z gibi alfabenin harflerinden semek

    kt bir tekniktir. Tanmlanan deiken, iinde neyin deerini tutacaksa bunaynelik bir isim vermek, kodu okuyann iini kolaylatrr, alglamasnhzlandrr.

    2. simler farkl zelliklere sahip deikenlerin ait olduklar grubun ismi olarakseilmemelidir.rnein saya grevini stlenen bir deikenin ismini

    counterolarak semek yerineprime_counter, valid_word_counter vs.olarak semek ok daha iyidir. Zira programn iinde birden fazla sayabulunabilir. Bunlarn isimleri, neyi saydklarna gre deiirse, kodu okuyankiinin anlamlandrmas ok daha kolaylar.

    3. simlendirmede dil btnl olmaldr.Yazlmda kullanlan temel dilin ngilizce olduunu kabul etmek zorundayz.Yazlm projelerinde isimlendirme genellikle ngilizce tabanl yaplr. Ancak bazdeikenlerin isimlerinin ngilizce seilirken baz baka deikenlerinisimlerinin Trke seilmesi programn okunabilirliine zarar verir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    5/32

    stanbul niversitesiElektrik Elektronik Mhendislii

    Bildirim rnekleriint x;unsigned long int var;

    double MFCS;unsigned _result;signed short total;Tr belirten anahtar szcklerin yazlmasndan sonra ayn tre ilikin birden fazlanesnenin bildirimi, isimleri arasna virgl atomu koyularak yaplabilir. Bildirim deyimiyine noktal virgl atomu ile sonlandrlmaldr.

    unsigned char ch1, ch2, ch3, ch4;float FL1, Fl2;unsigned total, subtotal;int _vergi_katsayisi, vergi_matrahi;Farkl trlere ilikin bildirimler virgllerle birbirinden ayrlamaz.long x, int y; /*Geersiz! */signed ve unsigned szckleri tr belirten anahtar szck(ler) olmadan yalnz balarnakullanlabilirler. Bu durumda int trden bir deikenin bildiriminin yapld kabul edilir:signed x, y;lesigned int x, y;tamamen ayn anlamdadr.

  • 8/3/2019 C programlama ders 4

    6/32

    Bildirimlerin Kaynak Kod indeki YerleriC dilinde genel olarak 3 yerde deiken bildirimi yaplabilir :1. Bloklarn iinde

    2. Tm bloklarn dnda.3. levlerin parametre deikeni olarak, ilev parametre ayralarnn iinde.C dilinde eer bildirim bloklarn iinde yaplacaksa, bildirim ilemi bloklarn ilkilemiolmak zorundadr. Baka bir deyile bildirimlerden nce, bildirim deyimiolmayan baka bir deyimin bulunmas geersizdir.Bir bildirimin mutlaka ilevin ana blounun banda yaplmas gibi bir zorunluluk

    yoktur. Eer i ie bloklar varsa iteki herhangi bir bloun banda da yani obloun ilk ilemi olacak biimde, bildirim yaplabilir.

    stanbul niversitesiElektrik Elektronik Mhendislii

    rnekler :{int var1, var2;char ch1, ch2, ch3;var1 = 10;float f; /* Geersiz */

    }

    Yukardaki rnekte var1, var2, ch1, ch2, ch3 deikenlerinin tanmlanma yerleridorudur. Ancak f deikeninin bildirimi geersizdir. nk bildirim deyimindennce bildirim deyimi olmayan baka bir deyim yer alyor. Bu durum geersizdir.

  • 8/3/2019 C programlama ders 4

    7/32

    Tanmlanan Deikenlere lkdeer VerilmesiBir deiken tanmlandnda bu deikene bir ilkdeer verilebilir (initialize).Bu zelbirszdizim ile yaplr:int a = 20;

    lkdeer verme deyimi bir atama deyimi deildir, bir bildirim deyimidir. Budeyim ile, programn alma zamannda bir deikenin nceden belirlenen birdeer ile hayata balamas salanr. Yukardaki bildirimi gren derleyici adeikenini 20 deeriilebalatacak bir kod retir. lkdeer verme deyimindeatama ilecinin sa tarafnda kullanlan ifadeye "ilkdeer verici" (initializer)denir. Bir bildirim deyimi ile birden fazla deikene de ilkdeer verilebilir:

    int a = 10, b = 20, c = 30;Yukardaki deyimle a deikenine 10, b deikenine 20, c deikenine 30ilkdeerleriveriliyor. lkdeer verme deyimi bir atama deyimi deildir:void func(){int a;a = 20;int b; /* Geersiz! *//****/}Yukardaki kod parasnda b deikeninin tanm geersizdir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    8/32

    DEMEZLERVeriler ya nesnelerin iinde ya da dorudan deimez (sabit- constant) biimindebulunur. Deimezler nesne olmayan, programc tarafndan dorudan saysal

    byklkolarak girilen verilerdir. Deimezlerin saysal deerleri derlemezamannda tam olarakbilinir. rnein:x = y + z;ifadesi bize y ve z iindeki deerlerin toplanacan ve sonucun x deikenineaktarlacan anlatr. Oysad = x + 10;ifadesindex deikeni iinde saklanan deer ile 10 says toplanmtr. Burada 10says herhangi bir deikenin iindeki deer deildir, dorudan say biimindeyazlmtr.Tamsay DeimezleriTamsay deimezlerinin (integer constants) deerleri tamsaydr.

    Bir tamsay deimezisigned intunsigned intsigned longunsigned longtrlerinden olabilir. Bir tamsay deimezinin tr, yazmnda kullanlan say

    sistemine ve deimezin ald soneke gre belirlenir. stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    9/32

    Karakter DeimezleriKarakter deimezleri tipik olarak char trden nesnelere atanan deimezlerdir.Karakterdeimezleri C'de farkl biimlerde bulunabilir.i. Bir karakterin grnts tek trnak (single quote) iinde yazlrsa derleyicitarafndan dorudan karakter deimezi olarak ele alnr. rnek :'a''J'''':'

    '8''

  • 8/3/2019 C programlama ders 4

    10/32

    Ters Bl Karakter DeimezleriKarakter deimezlerinin dier yazmlarnda tek trnak iinde ters bl '\'karakteri ve

    bunu izleyen baka karakter(ler) kullanlr.Tek trnak iindeki ters bl karakterinden sonra yer alan baz karakterler okkullanlan baz karakterlerin yerlerini tutar. Bunlarn listesi aada veriliyor:

    nceden Tanmlanm Ters Bl Karakter Deimezleri

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    11/32

    LEVLER (FONKSYONLAR)lev Nedir?C'de alt programlara ilev (function) denir. ngilizcedeki "function" szc bu

    balamda matematiksel anlamyla deil dier programlama dillerinde ya daortamlarnda kullanlan, "alt program", "prosedr", szcklerinin karl olarakkullanlr. Bir ilev, bamsz olarak altrlabilen bir program parasdr.Program levlere Blerek Yazmann FaydalarBir program alt programlara yani ilevlere blerek yazmak baz faydalar salar:1. Programn kaynak kodu klr. Bylece oluturulmas hedeflenen alabilir

    dosya da (rnein .exe uzantl dosya) klr.2. Kaynak dosyann okunabilirlii artar. Okunabilirliin artmas, kodu yazann veokuyann iini kolaylatrr. Bylece proje gelitirme sresinin azalmas ynndekazanm salanm olur.3. Belirli kod paralarnn programn farkl yerlerinde yinelenmesi, programdayaplacak olas bir deiikliin maliyetini artrr. Programn farkl yerlerinde, kodun

    kullanld yere bal olarak deiiklikler yapmak gerekir. Kaynak dosyalarda byledeiiklikleryapmak hem zaman alcdr hem de risklidir. nk bir deiikliinyaplmasnn unutulmas durumunda ya da deiiklik yaplmamas gereken biryerde kodun deitirilmesi durumunda program yanl alabilir. Oysa ortak kodparalar ilevler eklinde paketlendiinde, yalnzca ilevlerde deiiklikyaplmasyla, istenen deiiklik gerekletirilmi olur.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    12/32

    4. Programda hata arama daha kolay gerekletirilir. Projelerdeki hata arama

    maliyeti azalr.5. Yazlan ilevler baka projelerde de kullanlabilir. Alt programlar tekrarkullanlabilir (reusable) bir birim olutururlar. Bylelikle de projelerdeki kodlamagiderlerini azaltrlar.levlerC'nin temel yap talardr. altrlabilen bir C program en az bir Cilevinden oluur. Bir C programnn oluturulmasnda ilev saysnda bir

    kstlama yoktur.levlerin onlar aran ilevlerden aldklar girdileri ve yine onlar aranilevlere gnderdikleri ktlar vardr. levlerin girdilerine aktel parametreler(actual parameters) ya da argmanlar (arguments) denir. levlerin ktlarna isegeri dn deeri (return value) diyoruz.Bir ilev balca iki farkl amala kullanlabilir:

    1. lev, almas sresince belli ilemleri yaparak belirli amalar gerekletirir.2. lev, almas sonunda retecei bir deeri kendisini aran ilevegnderebilir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    13/32

    levlerin Tanmlanmas ve arlmasBir ilevin ne i yapacann ve bu ii nasl yapacann C dilinin szdizimi

    kurallarna uygun olarak anlatlmasna, yani o ilevin C kodunun yazlmasna, oilevin tanm (definition) denir. lev tanmlamalar C dilinin szdizimi kurallarnauymak zorundadr.Bir ilev ars (call / invocation) ise o ilevin kodunun almaya davet edilmesianlamna gelir. lev ar ifadesi karlnda derleyici, programn akn ilgiliilevin kodunun bulunduu blgeye aktaracak ekilde bir kod retir. Programn

    ak ilevin kodu iinde akp bu kodu bitirdiinde, yani ilevin almasbittiinde, programn ak yine ilevin arld noktaya geri dner. Bir ileveyaplacak ar da yine baz szdizimi kurallarna uymaldr.

    levlerin Tanmlanmaslevlerin kodunun yazlmas iin tanmlama (definition) terimi kullanlr. C'deilevtanmlama ileminin genel biimi yledir:

    [Geri dn deerinin tr] ([parametreler]){/***/}

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    14/32

    [Geri dn deerinin tr] ([parametreler]){

    /***/}Yukardaki gsterimde bulunmas zorunlu szdizim elemanlar asal ayraiinde, bulunmas zorunlu olmayan szdizim elemanlar ise keli ayra iindebelirtilmitir. Tanmlanan ilevler en az bir blok iermelidir. Bu bloa ilevin anablou denir. Ana blok iinde istenildii kadar i ie blok yaratlabilir. Aadaki

    ilev tanmndan func isimliilevinin parametre almad ve geri dn deerininde double trden olduu anlalr.double func(){}Yukardaki tanm inceleyin. nce ilevin geri dn deerinin trn gsteren

    anahtar szck yazlr. Bildirim ve tanmlama konusunda anlatlan C'nin doaltrlerini belirten anahtar szck(ler) ile ilevin hangi trden bir geri dn deerirettii belirtilir.Yukarda tanmlanan func isimli ilevin geri dn deeri double trdendir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    15/32

    void Anahtar SzcTanmlanan bir ilevin bir geri dn deeri retmesi zorunlu deildir. levtanmnda bu durum geri dn deerinin trnn yazld yere void anahtarszcnn yazlmasyla anlatlr:

    void func(){}Yukarda tanmlanan func ilevi geri dn deeri retmiyor. Geri dn deeriretmeyen ilevlere void ilevler denir.lev tanmnda geri dn deerinin tr bilgisi yazlmayabilir. Bu durum, ilevin

    geri dn deeri retmedii anlamna gelmez. Eer geri dn deeri tr bilgisiyazlmaz ise, C derleyicileri tanmlanan ilevin int trden bir geri dn deerinesahipolduunuvarsayar. rnein:func(){}

    Yukarda tanmlanan func ilevinin geri dn deerinin tr int trdr. Yaniilevin yukardaki tanmylaint func(){}tanm arasnda derleyici asndan bir fark yoktur.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    16/32

    levlerin Tanmlanma YerleriC dilinde bir ilev tanm iinde bir baka ilev tanmlanamaz. Yani isel ilevtanmlamalarna izin verilmez. rnein aadaki gibi bir tanmlama geersizdir,nk funcilevi tanmlanmakta olan foo ilevinin iinde tanmlanyor:

    double foo(){/***/int func() /* Geersiz */{/***/

    }/***/}Tanmlamann aadaki biimde yaplmas gerekirdi:double foo(){

    /***/}int func(){/***/}

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    17/32

    levlerin Geri Dn Deerlerinin OluturulmasC dilinde ilevlerin geri dn deerleri return deyimi (return statement) ileoluturulur. return deyiminin ikiayr biimi vardr:return;Ya da return anahtar szcn bir ifade izler:return x * y;return anahtar szcnn yanndaki ifadenin deeri, geri dn deeri olarak,ileviaran kod parasna iletilir.

    return ifadesinin deiken iermesi bir zorunluluk deildir. Bir ilev bir deimezdeerle de geri dnebilir.return 1;return deyiminin bir baka ilevi de iinde bulunduu ilevi sonlandrmasdr. Birilevin kodunun yrtlmesi srasnda return deyimi grldnde ilevinalmas sona erer.

    int func(){/**/return x * y;}

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    18/32

    Baz programclarreturn ifadesini bir ayra iinde yazarlar. Bu ayra return

    deyimine ekbir anlam katmaz. Yanireturn x * y;gibi bir deyimreturn (x * y);biiminde de yazlabilir. Okunabilirlik asndan zellikle uzun return ifadelerindeayrakullanm salk verilir.

    return (a * b - c * d);Geri dn deeri retmeyen ilevlerde, yani void ilevlerde, return anahtarszcyannda bir ifade olmakszn tek bana da kullanlabilir:return;Bu durumda return deyimi iinde yer ald ilevi, geri dn deerioluturmadan sonlandrr.

    C dilinde ilevler yalnzca tek bir geri dn deeri retebilir. Bu da ilevlerinkendilerini aran ilevlere ancak bir tane deeri geri gnderebilmeleri anlamnagelir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    19/32

    main levimain de dier ilevler gibi bir ilevdir, ayn tanmlama kurallarna uyar. Cprogramlarnn almas, ismi main olan ilevden balar. C programlar zel bir

    ilem yaplmamsa, mainilevinin almasnn bitiiyle sonlanr. main ilevinesahip olmayan bir kaynakdosyann derlenmesinde bir sorun kmaz. Ancakbalama (linking) aamasnda balayc main ilevinin bulunmadn grncebalama ilemini gerekletiremez. Balayc programlar bu durumda bir hatailetisi verir.int main()

    {return 0;}Biiminde tanmlanm birmain ilevi de int trden bir deer dndrmelidir. mainilevinin rettii geri dn deeri, programn almas bittikten sonra iletimsistemine iletilir.

    Geleneksel olarak, main ilevinin 0 deerine geri dnmesi programn sorunsuzbirekilde sonlandrld anlamna gelir. main ilevinin 0 dnda bir deere geridnmesi ise, koduokuyan tarafndan programn baarszlkla sona erdirildiibiiminde yorumlanr. Yani baz nedenlerle yaplmak istenenler yaplamam, bunedenle main ilevi sonlandrlmtr.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    20/32

    levlerin arlmasC dilinde bir ilev ars (function call -function invocation), ismi ilev arileciolanbir ile ile yaplr. lev ar ileci olarak () atomlar kullanlr.arlacak ilevin ismibuileten nce yazlr.func();Yukarda deyim ile func isimli ilev arlr.Bir ilev arld zaman programn ak, ilevin kodunun yrtlmesi iinbellekte ilevin kodunun bulunduu blgeye atlar. levin kodunun altrlmasilemi bittikten sonra da ak yine aran ilevin kalnan yerinden srer.

    levin geri dn deeri bir deikene atanabilecei gibi dorudan aritmetikilemlerde de kullanlabilir. rnein:sonuc = hesapla();Yukardaki rnekte nce hesapla() ileviarlr, daha sonra ilevin kodununaltrlmasyla elde edilen geri dn deeri sonucdeikenine atanr.lev ar ifadeleri nesne gstermez yani sol taraf deeri (L value) deildir. Yani

    Cdilinde aadaki gibi bir atama deyimi geersizdir:func() = 5; /* Geersiz*/levlerin geri dn deerleri sa taraf deeridir.sonuc = func1() + func2() + x + 10;levler, ancak tanmlanm ilevlerin iinden arlabilirler. Bloklarndndan ilev arlamaz.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    21/32

    lev Parametre Deikenlerinin Tanmlanmaslevler arldklar yerlerden alacaklar bilgileri, ilev ar ifadeleri ile alrlar. Birilevin formal parametreleri (formal parameters) ya da parametre deikenleri,ilevlerin kendilerini aran ilevlerden aldklar girdileri tutan deikenleridir. Birilevin parametre says ve bu parametrelerin trleri gibi bilgiler, ilevlerintanmlanmas srasnda derleyiciye bildirilir. lev ars ile gnderilen argman

    ifadelerin deerleri, ilevin ilgili parametre deikenlerine kopyalanr.rnein bir kpn hacmini hesaplayan ilev, arld yerden bir kpn kenaruzunluunu alacana gre, bu deerin kopyalanmas iin, bir parametredeikenine sahip olmas gerekir. Benzer ekilde iki saydan daha byk olannbulan bir ilevin iki tane parametre deikenine sahip olmas gerekir.lev parametre deikenlerinin bildirimi ilev ayralarnn iinde yalnzca bir

    kez yaplr. Bu biimde, ilevin ayralarnn iine parametre deikenin tr veyanna da ismi yazlr. Eer birden fazla ilev parametre deikeni varsa bunlarvirgllerle ayrlr, ancak her bir deikenin tr bilgisi yeniden yazlr.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    22/32

    rnek :int func(int x, int y)

    {/***/}double foo(double a, int b){

    /***/}

    lev parametre deikenleri ayn trden olsa bile her defasnda tr bilgisinin yenidenyazlmas zorunludur. rnein:int foo (double x, y) /* Geersiz */{

    /***/}

    bildirimi hataldr. Doru tanmlama aadaki biimde olmaldr:int foo (double x, double y){

    /***/}

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    23/32

    Argmanlarn Parametre Deikenlerine KopyalanmasBir ilevin parametre deikenleri, o ilevin arlma ifadesiyle kendisinegnderilen argmanlar tutacak olan yerel deikenlerdir. rnek:void func(int a)

    {/***/}int main(){int x = 10;

    /***/func (x);return 0;}Yukardaki rnekte main ilevi iinde, func isimli ilev arlyor ve arlan ilevex isimlideikenin deeri argman olarak geiliyor. lev ars, programn

    alma zamannda, programn aknn func ilevinin kodunun bulunduu yeresramasna neden olur. funcilevindeki a isimli parametre deikeni iinbellekte bir yer ayrlr ve a parametredeikenine argman olan ifadenin deeri,yanix deikeninin deeri atanr. Yaniint a = x;ileminin derleyicinin rettii kod sonucu otomatik olarak yapld sylenebilir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    24/32

    stanbul niversitesiElektrik Elektronik Mhendislii

    int add(int a, int b)

    {return a + b;}int main(){int x = 100, y = 200, z;

    z = add(x, y);/***/return 0;}Yukarda tanmlanan add ilevi arldnda programn ak bu ileve gemedennce, xve y deikenlerinin iinde bulunan deerler, add ilevinin parametre

    deikenleri olan ave b'ye kopyalanr.

  • 8/3/2019 C programlama ders 4

    25/32

    Standart C levleriStandard C ilevleri, C dilinin standartlatrlmasndan sonra, her derleyicidebulunmas zorunlu hale getirilmi ilevlerdir. Yani derleyicileri yazanlar standart Cilevlerini kendi derleyicilerinde mutlaka tanmlamak zorundadrlar. Bu durum Cdilinin tanabilirliini (portability) artran ana etmenlerden biridir.rneinprintf ilevi standart bir C ilevidir. Yani printf ilevi herderleyici paketinde ayn isimle bulunmak zorundadr.Standart C ilevlerinin derlenmi kodlar zel ktphanelerin iindedir. Balk

    dosyalar iinde, yani uzants .h biiminde olan dosyalarn iinde standart Cilevlerinin bildirimleribulunur. lev bildirimi konusu ileride ayrntl bir biimdeincelenecek.Neden Standart levlerBaz ilevlerin bulunmasnn dilin standartlar tarafndan gvence altna alnmasile aadaki faydalar salanm olur.

    i) Baz ilemler iin ortak bir arayz salanm olur. Mutlak deer hesaplayan birilevi yazmak ok kolaydr. Ancak standart bir C ilevi olan absilevininkullanlmasyla ortak bir arayz salanr. Her kaynak kod kendi mutlak deerhesaplayan ilevini tanmlam olsayd, tanmlanan ilevlerin isimleri, parametrikyaplar farkl olabilirdi. Bu durum da kod okuma ve yazma sresini uzatrd.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    26/32

    Neden Standart levler (Devam...)

    ii) Baz ileri gerekletirecek ilevlerin kodlar sistemden sisteme farkllkgsterebilir. Bu da kaynak dosyann tanabilirliini azaltr. Bu ilemleri yapanstandart ilevlerin tanmlanm olmas kaynak kodun baka sistemleretanabilirlii artrr.iii) Baz ilevlerin yazlmas belirli bir alanda bilgi sahibi olmay gerektirebilir.rnein bir gerek saynn bir baka gerek say ssn hesaplayan bir ilevi

    verimli bir ekilde yazabilmek iin yeterli matematik bilgisine sahip olmak gerekir.iv) Sk yaplan ilemlerin standart olarak tanmlanm olmas, programcnnyazaca kod miktarn azaltr. Bylece proje gelitirme sresi de ksalr.v) Derleyicilerin salad standart ilevler ok sayda programc tarafndankullanlm olduu iin ok iyi derecede test edilmilerdir. Bu ilevlerintanmlarnda bir hata olma olasl, programcnn kendi yazaca ilevlerle

    kyaslandnda ok dktr.yi bir C programcsnn C dilinin standart ilevlerini ok iyi tanmas ve builevleri yetkin bir ekilde kullanabilmesi gerekir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    27/32

    printf leviprintf standart bir C ilevidir. printf ilevi ile ekrana bir yaz yazdrlabilecei gibi,birifadenin deeri de yazdrlabilir.

    Deikenlerin iindeki deerler aslnda bellekte ikilik sistemde tutulur. Birdeikenin deerinin ekrana, hangi say sisteminde ve nasl yazdrlacaprogramcnn isteine baldr. Deikenlerin deerlerinin ekranayazdrlmasnda standartprintf ilevi kullanlr. printfaslnda ok ayrntlzelliklere sahip bir ilevdir. printfilevlerle ilgili yukarda aklanan genelkurallara uymaz. printfilevi deiken sayda parametreye sahip bir ilevdir. Bir

    ilevin ka tane parametredeikeni varsa o ilev arldnda, ileve o kadarargman geilmelidirama printfilevine istenen sayda argman geilebilir. Buileve ka tane argman geilirse ilevin o kadar sayda parametre deikeninesahip olaca dnlebilir.printf ilevine ilk gnderilen argman genellikle ift trnak iinde yer alan biryazdr. ifttrnak iinde yer alan byle yazlara dizge (string) denir. printf

    ilevine argman olarak geilen dizge iinde yer alan tm karakterler ekranayazlr. Ancakprintf ilevi dizge iindeki % karakterini ve bunu izleyen belirlisayda karakteri ekrana yazmaz. lev, dizge iindeki % karakterlerini yanndakibelirlisayda karakter ile birlikte formatlama karakterleri (conversion specifiers)olarak yorumlar.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    28/32

    printflevi (devam...)Formatlama karakterleri, ift trnaktan sonra yazlan argmanlarla bire bireletirilir. Formatlama karakterleri nceden belirlenmitir, kendileriyle elenen

    bir ifadenin deerinin ekrana ne ekilde yazdrlaca bilgisini ileve aktarrlar. Buformat bilgisi* Argman olan ifadenin hangi trden olarak yorumlanaca* fadenin deerinin ekrana hangi say sistemi kullanlarak yazlaca* fadenin ka karakterlik bir alana yazdrlaca* Pozitif tamsaylarn yazmnda '+' karakterinin yazdrlp yazdrlmayaca

    * Gerek saylarn yazmnda stel notasyonun kullanlp kullanlmayaca* Gerek saylarn yazmnda noktadan sonra ka basaman yazlacagibi aklamalardr. Aadaki program inceleyin:#include int main(){

    int x = 25;double pi = 3.1415;printf("x = %d\npi = %lf\n", x, pi);return 0;}

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    29/32

    printflevi (devam...)main ilevi iinde yaplanprintf("x = %d\npi = %lf\n", x, pi);arsnda ileve gnderilen birinci argman olan ift trnak iindeki yazda ikiayr format dizgesi kullanlyor: %d ve %lf.%d format karakterleri ikinci argman olan x ile, %lf format karakterleri ise 3.argman olanpi ile eleniyor. Format karakterleri ile elenen ifadelerin deerleri,istenenformatlama zellikleri ile ekrana yazlr. rnein yukardaki arylaekranax = 25

    pi = 3.14150yazs yazdrlr.Aada formatlama karakterlerinden bazlarnn anlam veriliyor.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    30/32

    scanf leviscanf ilevi, klavyeden her trl bilginin giriine olanak tanyan standart bir Cilevidir. scanfilevi de printf ilevi gibi aslnda ok ayrntl, geni kullanm

    zellikleri olan birilevdir. Ancak bu noktada scanf ilevi yzeysel olarak elealnacak. scanfilevinin de birinci parametresi bir dizgedir. Ancak bu dizgeyalnzca klavyedenalnacak bilgilere ilikin format karakterlerini ierir. printfilevinde olduu gibiscanfilevinde de bu format karakterleri ncedenbelirlenmitir. % karakterinin yannda yeralrlar. scanf ilevinin kulland formatkarakterlerinin printf ilevinde kullanlanlarilehemen hemen ayn olduu

    sylenebilir. Yalnzca gerek saylara ilikin format karakterlerinde nemli birfarkllk vardr.printf ilevi %f format ile hem float hem de doubletrden verileriekrana yazabilirken scanf ilevi %f format karakterini yalnzca float trden verileriin kullanr. double tr iin scanf ilevinin kulland formatkarakterleri %lfeklindedir. scanf ilevinin format ksmnda formatkarakterlerindenbaka bir eyolmamaldr.printf ilevi ift trnak iindeki format karakterleri dndaki

    karakterleri ekrana yazyordu, ancak scanf ilevi format karakterleri dndadizgeiine yazlan karakterleri ekrana basmaz, bu karakterler tamamen bakaanlama gelir. Bu nedenle ilevin nasl altn renmeden bu blgeye formatkarakterlerinden baka bir ey koymayn. Buraya konulacak bir boluk bile farklanlama gelir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    31/32

    scanf levi (devam...)#include int main(){int x, y;

    printf("iki say girin : ");scanf("%d%d", &x, &y);printf("%d + %d = %d\n", x, y, x + y);return 0;

    }Yukardaki rnekte, program kullanan kiiye deer girmesinin beklendiini syleyen bir

    yaz,printf ileviyle ekrana yazdrlyor. Bu i scanf ilevi ile yaplmazd. scanf ileviileekrana bir yaz yazdrmak mmkn deildir. scanf yalnzca giri amacyla tanmlanm birilevdir, k ilemi yapmaz.scanf("%d%d", &x, &y);ars ile programn alma zamannda klavyeden girilecek deerlerx ve ydeikenlerine aktarlr.x ve y deikenleri iin onluk say sisteminde klavyeden giriyaplr. Giri arasna istenildii kadar boluk karakteri konulabilir. Yani ilk sayy girdikten

    sonra SPACE, TAB ya da ENTER tuuna bastktan sonra ikinci deer girilebilir. rnein:5 60biiminde bir giri, geerli olaca gibi;560biiminde bir giri de geerlidir. scanf ilevine gnderilecek dier argmanlar & adresileci ile kullanlr. & bir gsterici ilecidir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C programlama ders 4

    32/32

    TO BE CONTINUED...