Lecture04 Ham

Embed Size (px)

Citation preview

  • Hm Hm -- FunctionFunction

  • Hm Hm -- FunctionFunction

    MtMt ss nguynnguyn tctc CchCch khaikhai bobo vv gigi thcthc hinhin PrototypePrototype caca hmhm TruynTruyn thamtham ss chocho hmhm BinBin tonton cc,cc, binbin cccc b,b, binbin static,static, binbin thanhthanh ghi,ghi,

    CchCch thcthc CC thcthc hinhin cccc lili gigi hmhm stackstack..

  • Mt s nguyn tcMt s nguyn tc CcCc hmhm trongtrong NNLTNNLT CC uu ngangngang cpcp vivi nhaunhau::

    HmHm khngkhng cc khaikhai bobo lnglng nhaunhau.. ThTh tt khaikhai bobo khngkhng quanquan trngtrng..

    HmHm cc thth nhnnhn vv xx ll nhiunhiu thamtham ss hochoc khngkhng ccthamtham ss nono

    HmHm cc thth trtr vv mtmt gigi trtr hochoc khngkhng.. BinBin khaikhai bobo trongtrong hmhm FF chch cc gigi trtr trongtrong F,F, khngkhng ss

    dngdng cc binbin nyny trongtrong cccc hmhm khckhc cc..

  • V d: hm tnh xV d: hm tnh xnn

    double Power(double x, int n){

    double result = 1;for(int i=1; i< n; i++)

    result *= x;return result;

    }

    nhn vo 2 tham s khi c gikiu ca gi tr tr v

    gi tr c tr v qua lnh return

  • V d: gi thc hin hm PowerV d: gi thc hin hm Power

    #include double Power(double, int);int main(){

    double m = Power(2, 3);printf(3.5 ^ 4 = %lf, Power(3.5, 4));return 0;

    }

    Ch th cho chng trnh bit prototype ca hm Power

    3.5 v 4: 2 tham s thc s

  • Mt s li thng gpMt s li thng gp

    #include

    int main(){

    int m = Power(2, 3);printf(3.5 ^ 4 = %lf, Power(4));return 1.0;

    }

    Compiler khng hiu c hm Power

    gi tr tr v khng khp kiu

    hm Power thiu tham s

  • PrototypesPrototypes DngDng khaikhai bobo

    double Power(double, int);

    cc hiuhiu ll khaikhai bobo prototypeprototype caca hmhm PowerPower cc dngdng khikhi chngchng trnhtrnh ss dngdng mtmt hmhm trctrc khikhi

    khaikhai bobo.. KhaiKhai bobo prototypeprototype thngthng bobo chocho trnhtrnh binbin dchdch bitbit kiukiu

    caca gigi trtr trtr vv vv mm tt chichi tittit vv cccc thamtham ss caca hmhm.. CcCc hmhm thth vinvin chunchun cc khaikhai bobo prototypeprototype trongtrong cccc

    tptp tintin headerheader (stdio(stdio..h,h, conioconio..h,h, )).. CcCc hmhm dodo lplp trnhtrnh vinvin tt xyxy dngdng phiphi tt khaikhai bobo

    prototypeprototype..

  • Hm: dng tng qutHm: dng tng qut

    kiu tr v tn hm(danh sch tham s hnh thc){

    //khai bo cc bin ca hm

    //cc lnh thc thi

    return gi tr tr v; //hm void khng c gi tr tr v}

    header ca hm

    thn (body) hm

  • float g=6.5;void main(){

    int i = 5, j, k = 2;float f = 2.8F;d = 3.7;

    }void F(int v){

    double d, e = 0.0, f;i++; g--;f = 0.0;

    }

    Tm tc dng ca binTm tc dng ca bin BinBin tonton cccc::

    KhngKhng thucthuc khikhino,no, cc tctc dngdngtrongtrong tonton chngchngtrnhtrnh kk tt khikhi khaikhaibobo

    BinBin cccc bb:: khaikhaibobo trongtrong mtmt khi,khi,chch cc tctc dngdngtrongtrong khikhi nyny

    compiler khng chp nhn d, i

    f ca hm F, khng phi ca main

  • Truyn tham s cho hmTruyn tham s cho hm

    CC hh trtr 22 cchcch truyntruyn thamtham ss:: TruynTruyn thamtham ss bibi gigi trtr ((truyntruyn gigi trtr -- callcall byby

    value)value) TruynTruyn thamtham ss bibi aa chch ((truyntruyn aa chch -- callcall

    byby address)address)

    MM rngrng vivi C++C++ TruynTruyn thamtham chiuchiu (call(call byby reference)reference)

  • Truyn gi trTruyn gi tr

    HmHm ss xx ll trntrn bnbn saosao caca thamtham ss HmHm khngkhng thth thaythay ii gigi trtr caca thamtham ss cc.. cc dngdng trongtrong cccc trngtrng hphp cncn chuynchuyn dd liuliu

    vovo bnbn trongtrong hmhm xx l,l, tnhtnh tonton CcCc vv dd trntrn uu dngdng kiukiu truyntruyn thamtham ss bibi gigi trtr VV dd hmhm cc snsn caca CC truyntruyn gigi trtr::

    floatfloat sqrt(float)sqrt(float);; doubledouble pow(double,pow(double, double)double);;

  • Truyn gi tr Truyn gi tr -- v dv d#include void change(int v);int main(){

    int var = 5;change(var);printf("main: var = %i\n", var);return 0;

    }void change(int v){

    v *= 100;printf("change: v = %i\n", v);

    }

    change: v = 500main: var = 5

    hm change khng thay i gi tr ca var

  • Truyn a chTruyn a ch

    HmHm ss xx ll trntrn chnhchnh thamtham ss nhnh vovo aa chchcaca chngchng

    HmHm cc thth thaythay ii gigi trtr caca thamtham ss.. cc dngdng trongtrong cccc trngtrng hphp cncn chuynchuyn dd liuliu

    ll ktkt ququ xx ll cc bnbn trongtrong hmhm rara ngoingoi chochocccc hmhm khckhc ss dngdng..

    V d hm c sn ca C truyn a ch:V d hm c sn ca C truyn a ch:int scanf(const char *format, adr1, adr2, );int scanf(const char *format, adr1, adr2, );

    functionfunctioninputsinputs outputsoutputs

  • Truyn a ch Truyn a ch -- v dv d#include void change(int *v);int main(){

    int var = 5;change(&var);printf("main: var = %i\n", var);return 0;

    }void change(int *v){

    (*v) *= 100;printf("change: *v = %i\n", (*v));

    }

    change: *v = 500main: var = 500

    v: tham s a ch ca s int, khai bo vi du *

    truyn a ch ca var vo hm change

  • Phng thc trao i d liuPhng thc trao i d liu CC dngdng 11 stackstack lulu trtr cccc binbin cccc bb vv cccc chuynchuyn

    cccc thamtham ss chocho hmhm vivi mimi lnln gigi hmhm thcthc hinhin HmHm gigi (O)(O) ctct cccc thamtham ss vovo stackstack.. GiGi thcthc hinhin hmhm cc gigi (F)(F).. FF nhnnhn lyly cccc thamtham ss tt stackstack FF toto cccc binbin cccc bb ngng vivi cccc thamtham ss trntrn stackstack KhiKhi ktkt thc,thc, FF cpcp nhtnht gigi trtr cccc thamtham ss (ref)(ref) vv trtr iuiu

    khinkhin chocho OO OO nhnnhn lyly cccc gigi trtr mimi caca thamtham ss cngcng nhnh gigi trtr trtr

    vv

  • #include double power(int, int);int main(void){

    int x = 2;double d;d = power(x, 5);printf("%lf\n", d);return 0;

    }double power(int n, int p){

    double result = n;while(--p > 0)

    result *= n;return result;

    }

    main: x2

    main: d?

    power: p5power: n2

    power: result32.0

    Phng thc trao i d liuPhng thc trao i d liu

    32.0

  • TngTng ktkt

    KhaiKhai bobo vv gigi thcthc hinhin hmhm KhaiKhai bobo prototypesprototypes TmTm tctc dngdng caca binbin TruynTruyn thamtham ss chocho hmhm VnVn tt chcchc dd liuliu trongtrong chngchng trnhtrnh