外包工

          學(xué) JAVA 學(xué) OO

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            21 隨筆 :: 0 文章 :: 0 評(píng)論 :: 0 Trackbacks

          1.函數(shù)的用途

           

          函數(shù)(function)又稱函式﹐亦和副程式(subprogram)相似﹐利用函數(shù)有下列優(yōu)點(diǎn):

               1.1 當(dāng)某項(xiàng)工作需重覆多次時(shí)﹐可寫成函數(shù)﹐在需要時(shí)呼叫它即可﹐這樣可避免程式碼的重覆撰寫。

               1.2 因?yàn)閷⒊淌椒指畛筛饔兴救蝿?wù)的函數(shù)﹐因此程式易於了解﹐架構(gòu)清楚。

               1.3 每一函數(shù)有獨(dú)立性﹐因?yàn)楹瘮?shù)內(nèi)的區(qū)域變數(shù)只有函數(shù)本身可使用﹐所以維護(hù)也容易。(不會(huì)兩三天後就看不懂程式碼)

           

          2.函數(shù)的範(fàn)例

           

           

          //定義hello函數(shù)

          void hello(){

            printf(“Hello!\n”);

          }

           

          int main(){

            //呼叫hello函數(shù)

              hello();

          }

           

           

               

           

           

           

          3.函數(shù)的定義

           

          syntax:

           

          回傳資料型態(tài) 函數(shù)名稱([資料型態(tài)1 參數(shù)1, 資料型態(tài)2 參數(shù)2…..]){

            敘述1

            敘述2…..

            [return 回傳值]

          }

           

           

           

           

          e.g.

           

          //下列函式可回傳x、y中較大的值

          int max(int x,int y){

            if(x>y)

              return x;

            else

              return y;

          }

           

           

           

          說(shuō)明:如不須回傳資料,則回傳資料型態(tài)可用void,如不須傳入?yún)?shù),則可留空白,如前例void hello(),

           

           

           

          4.函數(shù)的呼叫

           

          syntax:

           

          函數(shù)名稱([參數(shù)1,參數(shù)2…..])

           

           

           

           

          e.g.

           

          show_table();//無(wú)參數(shù),且無(wú)回傳值的函數(shù)

          minvalue=min(15,10);//有參數(shù),且有回傳值的函數(shù) 

          printf("%d",max(5,10));

           

           

           

           

          說(shuō)明:呼叫函數(shù)時(shí),應(yīng)在呼叫前先行定義函數(shù)。另外呼叫函數(shù)時(shí),所傳入的參數(shù)數(shù)目與資料型態(tài)須與函數(shù)宣告時(shí)一致。

           

           

          5.區(qū)域變數(shù)與全域變數(shù)(Local variables vs Glabal variables)

           

           

          函數(shù)內(nèi)的變數(shù)為區(qū)域變數(shù)﹐外界無(wú)法使用。

          若定義全域變數(shù)﹐則在定義後的所有段落均可使用。

           

           

          請(qǐng)見下例:

           

          int a=1;

          void foo_before(int c)

          {

               int d=a+1;

               a=c+d;

               //b=...錯(cuò)誤!在此不能存取b,因其為main的區(qū)域變數(shù)。

          }

           

          int main()

          {

               int b=2;

               foo_before();

               printf("a=%d",a);

               //d=...錯(cuò)誤!在此不能存取d,因其為foo_before的區(qū)域變數(shù)。      //foo_after()...錯(cuò)誤!在此不能呼叫foo_after,因foo_after的宣告在後。

          }

           

          void foo_after()

          { /* Empty function */ }

           

           

           

           

          6.想想看,請(qǐng)寫出下列函數(shù)。

           

          6.1.min(x,y)(求最小值)

          6.2.power(x,y)(求x的y次方值)

          6.3.ctf(degree)(將攝氏溫度轉(zhuǎn)華氏溫度,公式為 華式溫度=1.8*攝式溫度+32)

           

           

           

          7.參數(shù)傳遞方式

           

          7.1 傳值呼叫(pass by value)

              參數(shù)利用複製值的方式傳遞﹐於函數(shù)結(jié)束時(shí)參數(shù)的值不受改變。

          7.2 傳址呼叫(pass by address)

              參數(shù)利用指標(biāo)方式傳遞(記憶體位址)﹐參數(shù)值可被更改。

          7.3 傳參考呼叫(pass by reference)

              機(jī)制類似傳址呼叫﹐但使用上較為簡(jiǎn)單方便﹐僅需在函數(shù)定義時(shí)註明&。

          7.4 e.g.﹕

           

          //x:pass by value,y:pass by address,z:pass by reference

          int foo(int x,int *y,int &z){

               x=x+1;

               *y=*y+2;

               z=z+3;

          }

           

          int main(){

               int a,*b,c;

               a=5,b=&a,c=a;

               //執(zhí)行foo()函式前,a,*b,c數(shù)值為5,5,5

               printf(“a=%d,b=%d,c=%d\n”,a,*b,c);

               foo(a,b,c);

               //執(zhí)行foo()函式後,a,*b,c數(shù)值為5,7,8

               printf(“a=%d,b=%d,c=%d\n”,a,*b,c);

          }

           

           

           

           

          7.5 想想看:

            7.5.1 寫一函數(shù)swap(x,y)﹐能將兩參數(shù)調(diào)換。

            7.5.2 寫一函數(shù)order(x,y,z)﹐能將三參數(shù)依大小順序排好。

                           

          8.遞迴函數(shù)(recursion)

           

          8.1     遞迴函數(shù)具有以下特徵

          特徵1﹕呼叫自身函數(shù)

          特徵2﹕需有終止條件

           

          8.2     範(fàn)例一﹕階乘 N!=N*(N-1)*(N-2)*...*2*1

           

          //階乘函數(shù) fact(n)=n*(n-1)*(n-2)*……*1

          int fact(int n){

               if(n==1)

                    return 1; //終止條件

                  else

                    return n*fact(n-1); //呼叫自身函數(shù)

          }

           

           

           

           

          8.3 範(fàn)例二﹕費(fèi)布納西數(shù)列 f(x)=f(x-2)+f(x-1),f(0)=1;f(1)=1

           

          int fib(int n){

               if(n==0||n==1)

                    return 1;

               else

                    return fib(n-2)+fib(n-1);

          }

           

           

           

           

          8.4 範(fàn)例三﹕河內(nèi)塔

           

          8.4.1 遊戲說(shuō)明:請(qǐng)參考九章出版社網(wǎng)址

               http://ccmp.chiuchang.com.tw/toy/hanoi/hanoi.html

           

          8.4.2 線上河內(nèi)塔游戲

               http://www.shes.hcc.edu.tw/~oddest/math181.swf

           

          8.4.3 河內(nèi)塔範(fàn)例程式

           

          #include <stdio.h>

          #include <stdlib.h>

          int steps=0;

          void honai(char src,char dest,char aux,int disk)

          {

              if(disk>=1)

              {

                honai(src,aux,dest,disk-1);

                printf("move disk %d from %c to %c\n",disk,src,dest);

                steps++;

                honai(aux,dest,src,disk-1);

              }

          }

                                                     

          int main()

          {

              int disk;

              printf("How many disks?");

              scanf("%d",&disk);

              honai('A','C','B',disk);

              printf("Total steps:%d\n",steps);

              system("pause");

          }

           

           

           

          8.5 想想看

          //待補(bǔ)遞迴之練習(xí)題及範(fàn)例
          posted on 2010-10-23 09:35 外包工 閱讀(176) 評(píng)論(0)  編輯  收藏 所屬分類: C語(yǔ)言程式設(shè)計(jì)
          主站蜘蛛池模板: 昌吉市| 日照市| 江川县| 成武县| 汪清县| 东莞市| 龙井市| 靖边县| 宝坻区| 宁化县| 秭归县| 中江县| 海原县| 阿拉善左旗| 通渭县| 旬阳县| 临桂县| 息烽县| 灵宝市| 南乐县| 响水县| 历史| 观塘区| 长治市| 铜川市| 南召县| 德安县| 苏尼特右旗| 祁门县| 木里| 嘉禾县| 饶河县| 景宁| 吉水县| 琼结县| 布尔津县| 新干县| 遂平县| 鹤庆县| 冀州市| 新蔡县|