C語言基礎八:函數

函數
    1.實現某種特定功能的指令序列
    2.作用:
        a)模塊化的設計
        b)代碼的複用 printf/gets
    3.函數的設計
        需求分析:
            a)明確實現的功能
            b)需要的資源
            c)算法思路
            d)完成情況的結果
        
            ex.求整型數組中的最大值       ex1.統計字符串中有幾個字母?
                資源:數組、數組長度        資源:字符串、字符串的長度
                思路:max                    思路:('a'<=a[i]&&a[i]<='z')||('A'<=a[i]&&a[i]<='A')
                結果:max                    結果:幾個字母
                
            
            
    4.函數實現
            4.1格式:
                    返回值類型 函數名(參數列表)
                    {
                        聲明語句;
                        實現語句;
                        return;
                    }
                    “返回值類型”:必須單值類型,可以返回指針類型 
                    “函數名”    :只要是合法的標識符即可
                    “參數列表”  :(數據類型1 變量名1,數據類型2 變量名2)
                    return 返回值:
                            1.結束函數
                            2.返回一個與返回值類型一致的值(假設返回值類型是void  ,直接用return;)
                        
                    /*                                    /*                
                        功能:求數組的最大值                 ex.寫一個函數,求2個數的最大值            
                    */                                    */
                    int maxFun(int a[],int length)        
                    {
                        int max=a[0];
                        int i;
                        for(i=0;i<length;i++)
                        {
                            if(max<a[i])
                            {
                                max=a[i];
                            }
                        }
                        return max;
                    }
            4.2函數的調用
                1.直接調用,作爲一個單獨的語句調用
                    函數名(參數列表);
                    "函數名":調用的函數名字
                    "參數列表":(變量名1,變量名2):變量名的類型與函數定義的類型一致
                                參數列表:裏面可以是常量,變量,表達式,只要類型一致即可
                        maxFun(a,b);
                2.作爲一個表達式出現在另一個表達式中
                    int c=maxFun(a,10);
                3.作爲另一個函數的實參調用
                    maxFun(maxFun(a,b),10);
                    
           4.3基礎概念
                主調函數:主動調用別的函數的函數
                被調函數:被別的函數調用的函數
                形    參:定義函數時參數列表的參數
                實    參:調用函數時傳入的參數
         ☆4.4函數的調用過程
                .函數只有在被調用的時候纔會分配空間。
                1.把實參的值賦值給形參
                2.執行函數體內的內容
                3.使用return返回,函數執行結束,所有形參以函數裏定義的變量都會被釋放
                4.最後把返回值返回給主調調函數。
           4.5
                主調函數--->被調函數 通過實參
                被調函數--->主調函數  通過返回值
                主調函數<---->被調函數  全局變量
        ex1.寫一個函數求3個數的和,在main中調用。
            main中輸入數據
            main中輸出結果
            ps:1)函數名不能與變量名相同
                2)函數名不能使用關鍵字(int double long if/while static extern)
    5.遞歸函數
        函數自己直接或者間接的調用自己
        a)問題模型要符合遞推
        b)問題模型的解到一定層次是顯而易見的
        c)明確功能與需求的關係
        ex.要用遞歸來實現菲波那切數列
                功能:求菲波那切數列的第n項的值
                參數:
                結果:第n項的值
        ex1.
            a1=10
            An=A(n-1)+2
            a)使用遞歸求第n項的值。
                    功    能:求第n項的值
                    輸入參數:n項
                    結    果:第n項的值
                    int A(int n)
                    {
                        if(n==1)
                        {
                            return 20;
                        }
                        else
                        {
                            return A(n-1)+2;
                        }
                    }
            b)求前n項的和
                s1=10;
                S(n)=S(n-1)+A(n);
        hanoi問題:
            有ABC三座塔,有64從小到大個盤子放在塔A上,要把塔A上的盤子移到塔C上
                1.每一次只能移到一個盤子
                2.盤子只能按照上面是小的下面是大來放置。

    5.變量的存儲類別
            1.從作用範圍內來講
                1.全局變量
                    在函數外定義,一開始就會分配內存空間,並在整個程序/或者說整個工程內都有效
                    extern int a;//告訴編譯器,我文件後面定義了一個變量
                    static修飾全局變量:該全局變量僅能在定義它的文件中使用
                2.局部變量
                    在函數體內部定義,它的作用範圍從定義開始,到第一個{}結束
                    static 局部變量:一直存在,並且初始化只執行一次
                    
                    
            1.同名問題:只要作用域不同,就可以同名,名字相同,就近原則輸出
            2.static作用:
                static修飾全局變量,函數:只能在當前文件中使用
                static修飾局部變量:只初始化一次,並且變量一致存在
            3.生存期:從定義開始到最後被釋放(消失)
                        全局變量:從定義開始,整個工程;
                        局部變量:從定義開始,到第一個{}
                        static修飾的局部變量:程序運行開始就存在,直到程序結束。
                

發佈了60 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章