c-programlama-ders-5

Upload: 2kral

Post on 06-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 C-programlama-ders-5

    1/35

    LEVLER ve LELER

    r.Gr. Mahmut YALIN

    stanbul niversitesiElektrik Elektronik Mhendislii

    Kaynak:C ve Sistem ProgramclarDerneiKurs notu

  • 8/3/2019 C-programlama-ders-5

    2/35

    Klavyeden Karakter Alan C levleriSistemlerin hemen hemen hepsinde klavyeden karakter alan ayr C ilevibulunur. Bu ilevlerin biri tam olarak standarttr ama dier ikisi sistemlerin hemenhemen hepsinde bulunmasna karn standart C ilevi deildir.

    getchar leviStandart bu ilevin parametrik yaps aadaki gibidir:int getchar(void);levin geri dn deeri klavyeden alnan karakterin, kullanlan karakter setitablosundaki sra numarasn gsteren int trden bir deerdir. getchar ileviklavyedenkarakter almak iin enter tuuna gereksinim duyar.Aada yazlan programda nce getchar ileviyle klavyeden bir karakter alnyordahasonra alnan karakter ve karakterin saysal deeri ekrana yazdrlyor.#include int main(){char ch;ch = getchar();printf("\nKarakter olarak ch = %c\nASCII numaras ch = %d\n", ch, ch);return 0;}getchar derleyicilerin ounda stdio.h balk dosyas iinde bir makro olarak

    tanmlanr. stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    3/35

    getch leviStandart olmayan bu ilevin parametrik yaps ounlukla aadaki gibidir:

    int getch(void);getch standart bir C ilevi olmamasna karn neredeyse btn derleyici paketleritarafndan sunulur. Standart getchar ilevi gibi getch ilevi de klavyeden alnankarakterin kullanlan karakter setindeki sra numarasyla geri dner. Sistemlerinounda bu ilevin getchar ilevinden iki fark vardr:1. Baslan tu ekranda grnmez.

    2. Sistemlerin ounda ENTER tuuna gereksinim duymaz.Yukarda verilen programda getchar yerine getch yazarak programaltrrsanz fark daha iyi grebilirsiniz.getch ilevi zellikle tu bekleme ya da onaylama amacyla kullanlr:printf("devam iin herhangi bir tua basn...\n");getch();

    Burada klavyeden alnan karakterin ne olduunun bir nemi olmad iin ilevingeri dn deeri kullanlmyor. Derleyici paketlerinin hemen hepsinde bu ilevinbildirimi standart olmayan conio.h isimli balk dosyasnda olduundan, ilevinarld dosyaya conio.h balk dosyas eklenmelidir:#include

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    4/35

    Yorum SatrlarKaynak dosya iinde yer alan nilemci ya da derleyici programa verilmeyenaklama amal yazlara yorum satrlar (comment lines) denir.

    Yorum satrlar /* atomuyla balar */ atomuyla sonlanr. Bu iki atom ile, bu ikiatom arasnda kalan tm karakterler, nilemci programn kaynak kodu elealmasndan nce tek bir boluk karakteriyle yer deitirir. Yorum satrlarherhangi sayda karakter ierebilir. rnek:/* Bu bir aklama satrdr */Yorum satrlar birden fazla satra ilikin olabilir:

    /* Bu biraklama satrdr */Bir dizge ya da bir karakter deimezi iinde yorum satr bulunamaz:#include int main(){

    printf("/* bu bir yorum satiri degildir */");return 0;}Yukardaki programn derlenip altrlmasyla, ekrana/* bu bir yorum satr deil */yazs yazdrlr.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    5/35

    stanbul niversitesiElektrik Elektronik Mhendislii

    Bir yorum satrnn kapatlmasnn unutulmas tipik bir hatadr.#include

    int main(){int x = 1;int y = 2;x = 10; /* x'e 10 deeri atanyory = 2; /* y'ye 20 deeri atanmyor */

    printf("x = %d\n", x);printf("y = %d\n", y);return 0;}Yorum Satrlar Neden KullanlrYorum satrlar ou zaman kaynak kodun okunabilirliini artrmak iin kullanlr.

    Kaynak koddan dorudan karlamayan bilgiler aklama satrlaryla okuyucuyailetilebilir. Bazen de yorum satrlar bir kaynak dosyann blm balklarnoluturmak amacyla kullanlr.Kaynak kodun aka verdii bir bilgiyi, yorum satryla aklamak programnokunabilirliini bozar.

  • 8/3/2019 C-programlama-ders-5

    6/35

    LELER (OPERATRLER)le Nedirleler, nesneler veya deimezler zerinde nceden tanmlanm birtakm ilemleriyapan atomlardr. leler, mikroilemcinin bir ilem yapmasn ve bu ilem sonunda

    da bir deer retilmesini salar. Programlama dillerinde tanmlanm olan her bir ileen az bir makine komutuna karlk gelir.Benzer ilemleri yapmalarna karlk programlama dillerinde ile atomlarbirbirlerinden farkllk gsterebilir.C programlama dilinde ifadeler ounlukla ileleri de ierirler.c = a * b / 2 + 3 /* 4 ile vardr ifadedeki srasyla =, *, /, + */

    ++x * y-- /* 3 ile vardr, ifadedeki srasyla ++, *, -- */a >= b /* 1 ile vardr. >= */

    stanbul niversitesiElektrik Elektronik Mhendislii

    Terim Nedir

    lelerin ileme soktuklar nesne veya deimezlere terim (operand) denir. C'deileleraldklar terim saysna gre gruba ayrlabilir.i) Tek terimli ileler (unary operators)rnein ++ ve --ileleri tek terimli ilelerdir.ii) ki terimli ileler(binary operators)Aritmetiksel ileler olan toplama '+' ve blme '/' ileleri rnek olarak verilebilir.iii) terimli ile (ternary operator)C'de terimli tek bir ile vardr. Bu ilecin ismi "koul ileci" dir(conditionaloperator).

  • 8/3/2019 C-programlama-ders-5

    7/35

    leler konumlarna gre yani teriminin ya da terimlerinin neresindebulunduklarna gre de gruplanabilir:

    1. Sonek Konumundaki leler (postfix operators)Bu tip ileler terimlerinin arkasna getirilirler.rnein sonek ++ ileci (x++)2. nek Konumundaki leler(prefix operators)Bu tip ileler terimlerinin nne getirilirler.rnein mantksal deil ileci (!x)3. Araek Konumundaki leler (infix operators)Bu tip ileler terimlerinin aralarna getirilirler.rnein aritmetik toplama ileci (x + y)lelerin Deer retmesileler, yaptklar ilemin sonucunda bir deer retir. lelerin rettii deer,

    ayn ifade iinde var olan bir baka ilece terim olabilir. fade iinde en sondeerlendirilen ilecin rettii deer ise ifadenin deeri olur. Bir ifadenindeeri, ifade iinde yer alan ilelerin rettii deerlere gre saptanr.lelerin en nemli zellii, yaptklar ilemin sonucu olarak bir deerretmeleridir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    8/35

    lelerin rettii deer aadaki biimlerde kullanlabilir:i. lecin rettii deer bir baka deikene aktarlabilir:

    x = y + z;Yukardaki rnekte y + z ifadesinin deeri, yani + ilecinin rettii deer, xdeikenine aktarlr.ii. retilen deeri bir ileve argman olarak gnderilebilir:func(y + z);Yukardaki rnekte func ilevine argman olarak y + z ifadesinin deeri, yani

    toplamailecinin rettii deer gnderiliyor.iii. retilen deerreturn deyimi ile ilevlerin geri dn deerlerininoluturulmasnda kullanlabilir:int func(){return (y + z)

    }Yukarda func isimli ilevin geri dn deeri y + z ifadesinin deeri yani + ilecininrettii deerdir.lelerin rettii deerin hi kullanlmamas C szdizimi asndan bir hatayaneden olmaz. Ancak byle durumlarda derleyiciler ounlukla bir uyar iletisivererek programcy uyarr.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    9/35

    rnein:

    int main(){int x = 20;int y = 10;x + y;return 0;

    }Yukardaki kod parasnda yer alanx + yifadesinde '+' ileci bir deer retir. '+' ilecinin rettii deer terimlerinin toplamdeeri, yani 30'dur. Ancak bu deer kullanlmyor. Byle bir ilemin bilinli olarakyaplma olasl dktr. Borland derleyicilerinde verilen uyar iletisi uekildedir:warning : "code has no effect!"(uyar : "kodun etkisi yok")

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    10/35

    lelerin nceliiC dilinde ifadelerin trleri ve deerleri sz konusudur. Bir ifadenin deerini derleyiciu ekilde saptar: fade iindeki ileler ncelik sralarna gre deer retir, retilendeerler, ifade iindeki ncelii daha az olan ilelere terim olarak aktarlr. Builemin sonunda tek bir deer elde edilir ki bu da ifadenin deeridir.int x = 10;int y = 3;int z = 15;printf("%d\n", z % y / 2 + 7 -x++ * y);C'de toplam 45 ile vardr. Bu ileler 15 ayr ncelik seviyesinde yer alr.

    C dilinin ile ncelik tablosu kitabnzda 92. sayfada verilmitir.Bir ncelik seviyesinde eer birden fazla ile varsa, bu ilelerin ayn ifade iindeyer almas durumunda, ilelerin soldan saa m sadan sola m ncelikle elealnaca da tanmlanmaldr. Buna, ncelik yn (associativity) denir. Ektekitablonun 4. stunu ilgilincelik seviyesine ilikin ncelik ynn belirtiyor. Tablodanda grld gibi her ncelik seviyesi soldan saa ncelikli deildir. 2, 13 ve 14.

    ncelik seviyelerinin sadan sola ncelik ynne sahip olduunu (right associative)gryorsunuz. Dier btn ncelikseviyeleri soldan saa ncelik seviyesine (leftassociative) sahiptir. Bir simge, birden fazla ile olarak kullanlabilir. rnein, ektekitabloyu incelediinizde '*' simgesinin hem arpma ileci hem de bir gsterici ileciolan ierik alma ileci olarak kullanldn greceksiniz. Yine '&' (ampersand) simgesihem bitsel ve ileci hem de gstericilere ilikin adres ileci olarak kullanlr.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    11/35

    lelerin Yan EtkileriC dilinde ilelerin ana ilevleri, bir deer retmeleridir. Ancak baz ileler, terimiolan nesnelerin deerlerini deitirir. Yani bu nesnelerin bellekteki yerlerine yenibir deer yazlmasna neden olurlar. Bir ilecin, terimi olan nesnenin deerinideitirmesine ilecin yan etkisi (side effect) denir. Yan etki, bellekte yaplandeer deiiklii olarak tanmlanr.rnein atama ilecinin, ++ ve --ilelerinin yan etkisi vardr. Bu ileler,terimleri olannesnelerin bellekteki deerlerini deitirebilir.

    leler zerindeki KstlamalarProgramlama dilinin kurallarna gre, baz ilelerin kullanmlaryla ilgili birtakmkstlamalar sz konusu olabilir. rnein ++ ilecinin kullanmnda, ilecinteriminin nesnegsteren bir ifade olmas gibi bir kstlama sz konusudur. Eerterim olan ifade bir nesne gstermiyorsa, yani sol taraf deeri deilse, derlemezamannda hata oluur.

    Kstlama, ilecin terim ya da terimlerinin trleriyle de ilgili olabilir. rnein kalan(%) ilecinin terimlerinin bir tamsay trnden olmas gerekir. Kalan ilecininterimleri gerek say trlerinden olamaz. Terimin gerek say trlerinden birindenolmas geersizdir.leler yaptklar ilere gre snflandrlr:

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    12/35

    lelerin Yaptklar lere Gre SnflandrlmasAada ileler yaptklar ilere gre snflanyor:Aritmetik ileler(arithmetic operators)Karlatrma ileleri (relational operators)Mantksal ileler (logical operators)

    Gsterici ileleri (pointer operators)Bitsel ilem yapan ileler (bitwise operators)Atama ileleri (assignment operators)zel amal ileler (special purpose operators)lk grup, programlama dillerinin hepsinde vardr. Bitsel ilem yapan ileler vegsterici ileleri yksek seviyeli programla dillerinde genellikle bulunmaz.

    Programlama dillerinin ou, kendi uygulama alanlarnda kolaylk salayacakbirtakm zel amal ilelere de sahip olabilir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    13/35

    Aritmetik lelerAritmetik ileler, basit artimetiksel ilemler yapan ilelerdir.Toplama (+) ve karma(-) leleriki terimli, araek konumundaki (binary infix) ilelerdir. Dier btn programlamadillerinde olduklar gibi, terimlerinin toplamn ya da farkn almak iin kullanrlar.Yani rettikleri deer, terimlerinin toplam ya da fark deerleridir.Bu ilecin terimleri herhangi bir trden nesne gsteren ya da gstermeyenifadeler olabilir. Terimlerinin ayn trden olmas gibi bir zorunluluk da yoktur. lencelik tablosunun 4. seviyesinde bulunurlar. ncelik ynleri soldan saadr. Her

    iki ilecin de yan etkisi yoktur. Yani bu ileler terimlerinin bellekte sahip olduklardeerleri deitirmez.Toplama ve karma ileleri olan + ve ilelerini tek terimli + ve ileleriylekartrmamak gerekir.aret leci Olan ve +Bu ileler, tek terimli, nek konumundaki (unary prefix) ilelerdir. aret ileci

    eksi (-), teriminin deerinin ters iaretlisini retir. Yani derleyici, iaret eksiilecinin kullanlmas durumunda terim olan deeri -1 ile arpacak ekilde kodretir. Bu ilecin terimi herhangibir trden nesne gsteren ya da gstermeyenifade olabilir. le ncelik tablosunun ikinci seviyesinde bulunurlar. ncelik ynsadan soladr. lecin bir yan etkisi yoktur, yani terimi olan nesnenin bellektekideerini deitirmez.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    14/35

    "aret eksi" ilecinin rettii, bir nesne deildir, bir sa taraf deeridir. Aadakiifade matematiksel olarak doru olmasna karn C dilinde doru deildir,derleme zamannda hata oluumuna neden olur:int x;-x = 5;x bir nesne olmasna kar x ifadesi bir nesne deil, x nesnesinin deerinin tersiaretlisiolan deerdir.-x ve 0 -(x) edeer ifadelerdir.-x ifadesi bir sol taraf deeri deildir, bu ifadeye bir atama yaplamaz.

    aret ileci art (+), yalnzca matematiksel benzerlii salamak asndan Cdilineeklenmi bir iletir. Derleyici tarafndan, tek terimli, nek konumunda birile olarak ele alnr. Terimi olan ifade zerinde herhangi bir etkisi olmaz.Teriminin deeriyle ayn deeri retir. +x ifadesi ile 0 + (x) ifadeleri edeerdir.#include int main()

    {int x = -5;x = -x - x;printf("x = %d\n", x);return 0;}

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    15/35

    x = -x x;Yukardaki ifadede 3 ile vardr. Soldan saa bu ileleri sayalm: Atama ileci'=', iaret ileci eksi '-', karma ileci '-'. fadenin deerinin hesaplanmasndailenceliklerine gre hareket edilir. nce ikinci seviyede bulunan eksi iaretileci deer'5deerini retir. retilen 5 deeri karma ilecinin terimi olur.Yaplan kartma ileminden retilen deer10'dur. Bu deer de atama ilecininterimi olur, bylece xdeikenine 10 deeri atanr.

    arpma (*) ve Blme (/) leleriki terimli, araek konumundaki ilelerdir. arpma ilecinin rettii deer,terimlerinin arpmdr. Blme ilecinin rettii deer ise sol teriminin saterimine blmnden elde edilen deerdir. Bu ilelerin terimleri herhangi birtrden olabilir. Terimlerinin ayn trden olmas gibi bir zorunluluk yoktur. lencelik tablosunun 3. seviyesinde bulunurlar. ncelik ynleri soldan saadr. Her

    iki ilecin de yan etkisi yoktur.Blme ilecinin kullanmnda dikkatli olmak gerekir. lecin her iki terimi detamsay trlerinden ise ilecin rettii deer de bir tamsay olur. Yani birtamsayy baka bir tamsayya blmekle bir gerek say elde edilmez.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    16/35

    Kalan (%)leciki terimli, araek konumunda bir iletir. Terimlerinin her ikisi de tamsaytrlerinden (char, short, int, long) olmak zorundadr. Herhangi bir teriminin gereksay trnden olmas geersizdir. lecin rettii deer, sol teriminin sa terimineblmnden kalandr.

    lecin yan etkisi yoktur. rnein:k = 15 % 4; /* burada k ya 3 deeri atanr*/x = 2 % 7; /* burada x e 2 deeri atanr*/int c = 13 - 3 * 4 + 8 / 3 - 5 % 2;Burada c deikenine 2 deeri atanr. nk ilem u ekilde yaplr:c = 13 - 12 + 2 - 1;

    c = 2;

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    17/35

    Aadaki programda 3 basamakl bir saynn birler, onlar ve yzler basamaklarekranayazdrlyor:#include int main(){int x;

    printf("3 basamakli bir sayi girin: ");scanf("%d", &x);printf("birler basamagi = %d\n", x % 10);printf("onlar basamagi = %d\n", x % 100 / 10);printf("yuzler basamagi = %d\n", x / 100);return 0;

    }

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    18/35

    Artrma (++) ve Eksiltme (--) leleriArtrma (++) ve eksiltme (--) ileleri C dilinin en ok kullanlan ilelerindendir. Tekterimli ilelerdir. nek ya da sonek durumunda bulunabilirler. ++ ileci terimi olandeikenin deerini 1 artrmak, --ileci de terimi olan deikenin deerini 1eksiltmekiin kullanlr. Dolaysyla yan etkileri sz konusudur. Terimleri olannesnenin bellekteki deerini deitirirler. Bu iki ile de 2. ncelik seviyesindebulunduundan dier aritmetik ilelerden daha yksek ncelie sahiptir. 2. ncelikseviyesine ilikin ncelik yn sadan soladr.Yaln olarak kullanldklarnda, yani bulunduklar ifade iinde kendilerinden bakahibir ile olmakszn kullanldklarnda nek ya da sonek durumlar arasndahibir fark yoktur. ++ ileci terimi olan nesnenin deerini 1 artrr, --ileci terimi olannesnenindeerini 1 eksiltir. Bu durumda++c; ve c++ ;deyimleri tamamen birbirine denk olupc = c + 1;

    anlamna gelirler.--c; ve c--;deyimleri tamamen birbirine denk olupc = c - 1;anlamna gelir. Bir ifade iinde dier ilelerle birlikte kullanldklarnda, nek vesonek biimleri arasnda farkllk vardr: nek durumunda kullanldnda, ilecin

    rettii deer, artrma ya da eksiltme yapldktan sonraki deerdir.stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    19/35

    Yani terimin artrlm ya da azaltlm deeridir. Sonek durumunda ise ilecinrettii deer, artrma ya da eksiltme yaplmadan nceki deerdir. Yani terimi olannesnenin artrlmam ya da azaltlmam deeridir. Nesnenin deeri ifadenin tmdeerlendirildikten sonra artrlr ya da eksiltilir.x = 10;y = ++x;Bu durumda:++x => 11ve y = 11 deeri atanr.x = 10;y = x++;

    Bu durumdax++ => 10ve y deikenine 10 deeri atanr.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    20/35

  • 8/3/2019 C-programlama-ders-5

    21/35

    Aadaki rnei inceleyin:#include

    int main(){int x = 10;int y = 5;int z = x++ % 4 * --y;printf("z = %d\n", z);

    printf("x = %d\n", x);printf("y = %d\n", y);return 0;}Yukarda kodu verilen main ilevinde ilem sras u ekilde olur:z = x++ % 4 * 4;

    z = 10 % 4 * 4;z = 2 * 4;z = 8;y => 4x => 11

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    22/35

    C Standartlarnda Kullanlan Baz nemli Terimlere likin AklamaC ve C++ standartlarnda sklkla kullanlan ve derleyicinin kodu yorumlama biimi

    hakknda bilgi veren nemli terimler vardr:DavranDerleyicinin belirli bir kod parasn yorumlama ve anlamlandrma biimine"derleyicinin davran" (behavior) denir.Tanmsz DavranC'de ve C++'da baz ifadeler, derleyiciden derleyiciye deiebilen fakatstandartlarda ak olarak belirtilmemi olan yorumlama farllklarna yol aabilir.Byle ifadelerden kanmak gerekir. Bu tr ifadelerde derleyicinin davranna"tanmsz davran(undefined behavior) denir. Programcnn byle ifadeleryazmas programlama hatasolarak kabul edilir. nk eer bir ifade tanmszdavran olarak belirleniyorsa bir sistemde programn altrlmas sonucundanasl bir durumla karlalacann hibir gvencesi yoktur. Tanmsz davrana yolaan kodlar szdizimi asndan geerlidir.rnein bir ifadede bir deiken ++ ya da - ilecinin terimi olarak kullanlmsaayn ifadede o deiken artk bir kez daha yer almamaldr. Yer alrsa artk tanmszdavrantr.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    23/35

    Belirlenmemi Davran

    Kaynak kodun derleyici tarafndan farkl yorumlanabildii fakat bu konudaseeneklerin snrl olduu durumlara belirlenmemi davran (unspecifiedbehavior) denir. Derleyicilerbelirsiz davranlarda hangi seenein seilmiolduunu belgelemek zorunda deildir. phesiz programcnn belirsiz davranayol aacak ifadelerden kanmas gerekir.Derleyiciye zg Davran

    C dilinin baz zellikleri, esneklik salamak amac ile standartlarda derleyiciyazanlarn seimlerine braklmtr. rnein int trnn uzunluunun ne olduu,varsaylan char trnn signed m unsigned m olduu, i ie yorumlamalarnkabul edilip edilmediitamamen derleyici yazanlara baldr. Derleyiciler, buzelliklerin nasl seildiklerini belgelemek zorundadr. Bu tr davrana derleyiciyezg davran (implementation dependent behaviour) denir. Bu davran zellikleri

    pekok derleyicide menlerden deitirilebilmektedir.++ ve -- leleriyle lgili Tanmsz Davranlar++ ve -- ilelerinin baz kullanmlar, tanmsz davran zellii gsterir. Bylekodlardan saknmak gerekir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    24/35

    1. Bir ifadede bir nesne ++ ya da --ilelerinin terimi olmusa, o nesne o ifadede birkezdaha yer almamaldr. rnein aadaki ifadelerin hepsi tanmsz davran zelliigsterirler:int x = 20, y;int a = 5;

    y = ++x + ++x; /* tanmsz davran */y = ++x + x ; /* tanmsz davran */a = ++a; /* tanmsz davran */"Koul ileci", "mantksal ve ileci", "mantksal veya ileci" ve "virgl" ileciyleoluturulan ifadelerde bir sorun yoktur.2. Bir ilev arlrken ileve gnderilen argmanlarn birinde bir nesne ++ ya da --

    ilecinin terimi olmusa, bu nesne, ileve gnderilen dier argman olan ifadelerdekullanlmamaldr. Argman olan ifadelerin, ilevlerin ilgili parametre deikenlerinekopyalanmasna ilikin sra, standart bir biimde belirlenmemitir. Bu kopyalama ilemi,baz sistemlerde soldan saa baz sistemlerde ise sadan soladr.int a = 10;void func(int x, int y)

    {/***/}int main(){func (a, a++); /* Tanmsz davran */

    /***/} stanbul niversitesi

    Elektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    25/35

    Karlatrma leleri (ilikisel ileler)

    C programlama dilinde toplam 6 tane karlatrma ileci vardr:< kktr ileci (less than)> byktr ileci (greater than)= byktr ya da eittir ileci (greater than or equal)== eittir ileci (equal)

    != eit deildir ileci (not equal)Bu ilelerin hepsi, iki terimli, araek konumundaki (binary infix) ilelerdir.lk drt ile, ile ncelik tablosunun 6. seviyesinde bulunurken dier ikikarlatrma ileci ncelik tablosunun 7. seviyesinde bulunur. Yani karlatrmaileleri, kendi aralarnda iki ncelik grubu oluturur. Karlatrma ileleri,aritmetik ilelerden daha dk ncelikli seviyededir.

    C dilinde karlatrma ileleri, oluturduklar nermenin doruluu ve yanllnagre int trden 1 ya da 0 deerini retir. nerme doru ise 1 deeri retilirken,nerme yanl ise 0 deeri retilir. Bu ilelerin rettii deerler de tpk aritmetikilelerin rettii deerler gibi kullanlabilir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    26/35

    Aadaki signum isimli ilevin tanmn inceleyin:int signum(int val){return (val > 0) - (val < 0);

    }signum ilevine gnderilen argman 0'dan byk bir deerse ilev +1 deerine,argman 0'dan kk bir deerse ilev-1 deerine, argman 0 deeriyse ilev, 0deerine geri dnyor. signum ilevinin geri dn deeri, karlatrma ilelerinin deerretmesinden faydalanlarak elde ediliyor.x = y == z;Yukardaki deyim, C dili iin son derece doaldr ve okunabilirlii yksektir. Bu deyimin

    yrtlmesiylex deikenine ya 1 ya da 0 deeri atanr. Karlatrma ileci, atamailecinden daha yksek ncelik seviyesine sahip olduuna gre nce karlatrma ileci olan'==' deer retir, ilecin rettii deer bu kez atama ilecinin terimi olur. Budurumda ydeikeninin deerinin z deikenine eit olup olmamasna gre x deikenine 1 ya da 0deeri atanr.Karlatrma ilecinin kullanlmasnda baz durumlara dikkat edilmelidir:int x = 12;5 < x < 9Yukardaki ifade matematiksel adan doru deildir. nk 12 deeri 5 ve 9 deerlerininarasnda deildir. Ancak ifade C kodu olarak ele alndnda doru olarak deerlendirilir.nk 6. seviyede olan kktr(

  • 8/3/2019 C-programlama-ders-5

    27/35

    Mantksal lelerBu ileler, terimleri zerinde mantksal ilem yapar. Terimlerini doru (true) ya da

    yanl (false) olarak yorumladktan sonra ileme sokar. C'de ncelikleri farklseviyede olan mantksal ile vardr:(!) mantksal deil ileci (logical not)(&&) mantksal ve ileci (logical and)(||) mantksal veya ileci (logical or)C'de mantksal veri tr olmadn biliyorsunuz. Mantksal veri tr olmad iinbu trn yerine int tr kullanlr ve mantksal doru olarak 1, mantksal yanlolarak da 0 deeri kullanlr.C dilinde herhangi bir ifade, mantksal ilelerin terimi olabilir. Bu durumda szkonusu ifade, mantksal olarak yorumlanr. Bunun iin ifadenin saysal deerihesaplanr. Hesaplanan saysal deer, 0 d bir deer ise doru (1), 0 ise yanl(0) olarakyorumlanr. rnein:25 Doru (nk 0 d bir deer)-12 Doru (nk 0 d bir deer)0 Yanl (nk 0) ifadesi mantksal bir ilecin terimi olduu zaman yanl olarakyorumlanr. nk saysal deeri sfra eittir.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    28/35

    Mantksal Deil leciMantksal deil ileci, nek konumunda bulunan tek terimli bir iletir. Bu ile, terimininmantksal deerinin tersini retir. Yani terimi mantksal olarak "doru" biiminde yorumlananbir deer ise ile yanl anlamnda int trden 0 deerini retir. Terimi, mantksal olarak"yanl" biiminde yorumlanan bir deer ise ile doru anlamnda int trden 1 deerini

    retir.x !xDoru (0 d deer) Yanl (0)Yanl (0) Doru (1)rnekler :a = !25; /* a deikenine 0 deeri atanr */b = 10 * 3 < 7 + !2lem sras:!2 = 010 * 3 = 307 + 0 = 730 < 7 = 0b = 0 (atama ileci en dk ncelikli iletir)

    y = 5;x = !++y < 5 != 8;lem sras:++y 6!6 0 /* ++ ve ! ileleri ayn ncelik seviyesindedir ve ncelik yn sadan soladr. */0 < 5 11 != 8 1

    x = 1 stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    29/35

    Mantksal ve (&&) ileciBu ile ilikisel ilelerin hepsinden dk, || (veya / or) ilecinden ykseknceliklidir. Terimlerinin ikisi de doru ise doru (1), terimlerinden biri yanl iseyanl (0) deeriniretir.

    x = 3 < 5 && 7;3 < 5 17 11 && 1 1x = 1&& ilecinin, nce sol tarafndaki ilemler ncelik srasna gre tam olarak yaplr.Eer bu ilemlerde elde edilen saysal deer0 ise, && ilecinin sa tarafndakiilemler hiyaplmadan, yanl (0) saysal deeri retilir. rnein:x = 20;b = !x == 4 && sqrt(24);!20 00 == 4 0Sol taraf 0 deeri alacandan ilecin sa taraf hi yrtlmez dolaysyla da sqrt

    ileviarlmaz. Sonu olarak b deikenine 0 deeri atanr. stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    30/35

    Mantksal veya (||) lecincelii en dk olan mantksal iletir. ki teriminden biri doru ise dorudeeriniretir. ki terimi de yanl ise yanl deerini retir.

    a = 3 || 5 /* a = 1 */

    x = 0 || -12 /* x = 1 */sayi = 0 || !5 /* sayi = 0 */&& ve || lelerinin Ksa Devre Davran"Mantksal ve", "mantksal veya" ilelerinde nce soldaki terimlerinindeerlendirilmesi gvence altna alnmtr. "Mantksal ve" ilecinin soldaki terimiyanl olarak yorumlanrsa ilecin sa terimi hi ele alnmaz. Ayn durum

    "mantksal veya" ileci iin de geerlidir. "Mantksal veya" ilecinin nce soldakiterimine baklr. Sol terimi doru olarak yorumlanrsa ilecin sa terimi hi dikkatealnmaz. C dili tarafndan gvence altna alnan bu zellie "ksa devre davran"(short circuit behavior) denir. Ksa devre davranna neden gerek duyulmutur?nk bu zellik baz kodlarn ok daha verimli yazlmasn salar. C'nin ileridegreceimiz birok kalp kodu ksa devre davrannn kullanmna baldr.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    31/35

    Atama leleriAtama ileleri, C dilinde ncelik tablosunun en alttan ikinci seviyesinde, yani 14.seviyesinde bulunur ve yalnzca virgl ilecinden daha yksek nceliklidir. Atama

    ilelerinin bulunduu 14. seviye, sadan sola ncelik ynne sahiptir.Yaln Atama leciDier ileler gibi atama ileci de, yapt atama ileminin yansra, bir deer retir.Atama ilecinin rettii deer, nesneye atanan deerin kendisidir. #includeint main()

    {int x;printf("ifade degeri = %d\n", x = 5);printf("x = %d\n", x);return 0;}

    main ilevi iinde yaplan birinci printf ars ile, x = 5 ifadesinin deeriyazdrlyor. x = 5 ifadesinin deeri atama ilecinin rettii deer olan 5 deeridir.Yani ilk printfars ile ekrana 5 deeri yazdrlr. Atama ileci yan etkisi sonucu xnesnesinin deerini 5 yapar. Bu durumda ikinci printf ars ile x deikeninindeeri ekrana yazdrldndan ekrana yazlan, 5 deeri olur.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    32/35

    lemli Atama leleri

    Bir ilemin terimi ile, ilem sonucunda retilen deerin atanaca nesne ayn ise,ilemli atama ileleri kullanlabilir. = ilem ile ilem= ayn anlamdadr.lemli atama ileleri, atama ileciyle ayn ncelik seviyesindedir. lemli atamaileleri, hem okunabilirlik hem de daha ksa yazm iin tercih edilir.Aadaki ifadeler edeerdir:deger1 += 5; deger1 = deger1 + 5;sonuc *= yuzde; sonuc = sonuc * yuzde;x %= 5 x = x % 5;katsayi = katsayi * (a * b + c * d);ifadesi de yinekatsayi *= a * b + c * d;

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    33/35

    imdi de aadaki main ilevini inceleyin:#include int main()

    {int x = 3;int y = 5;x += y *= 3;printf("x = %d\n", x);printf("y = %d\n", y);

    return 0;}x += y *= 3;deyimiyle nce y deikenine 15 deeri atanr. Bu durumda *= ileci 15 deerini retirveretilen 15 deeri bu kez += ilecinin terimi olur. Bylece x deikenine 18 deeriatanr.zellikle += ve -= ilelerinin yanl yazlmas, bulunmas zor hatalara neden olabilir.x += 5;deyimix deikeninin deerini 5 artrrken, ilecin yanllkla aadaki gibi yazlmasdurumundax =+ 5;

    x deikenine 5 deeri atanr. nk burada iki ayr ile sz konusudur: Atama ileciolan = ve iaret ileci olan +.

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    34/35

    ncelik lecincelik ileci ( ), bir ifadenin nceliini ykseltmek amacyla kullanlr.x = (y + z) * t;ncelik ileci, C'nin en yksek ncelikli ileler grubundadr. ncelik ileci de,kendi arasnda soldan saa ncelik kuralna uyar. rnein:a = (x + 2) / ((y + 3) * (z + 2) 1);ifadesinde ilem sras yledir :i1 : x + 2i2 : y + 3i3 : z + 2i4 : i2 * i3i5 : i4 1i6 : i1 / i5

    i7 : a = i6ncelik ilecinin terimi nesne gsteren bir ifade ise, ilecin rettii ifade de nesnegsterir:int x;(x) = 20; /* Geerli */

    stanbul niversitesiElektrik Elektronik Mhendislii

  • 8/3/2019 C-programlama-ders-5

    35/35

    TO BE CONTINUED...