C語言第四節-函數

函數的概述

函數:由功能相對獨立的代碼段來組成的
優點:1、提高程序的可讀性
           2、提高開發的效率
           3、提高代碼的複用性

分類
     函數定義的角度:1、庫函數:只需引入原型
                                  2、用戶定義函數:不僅需要定義本身,還需要聲明被調函數的類型
     返回值角度:有無返回值
     主調函數和被調函數數據傳送角度:無參函數,有參函數
     庫函數又以功能角度:字符類型函數、轉換函數、圖形函數等

自定義函數的書寫格式
     步驟:1、申明 2、 定義函數 3、 調用函數
     格式:(數據類型,命名規範)
             返回值類型     函數名稱(參數){
                           函數體;          
             }
主函數:main()
無參無返回值:void 函數名(){
                         申明部分       // 定義局部變量
                         語句
}
無參有返回值:返回值類型  函數名(){
                          
                         申明部分          // 定義局部變量
                         語句

                         return 語句       返回值類型變量或常量   //返回給主調函數
}
有參無返回值:void 函數名(參數名列表){    
                          //參數(形式參數)寫法:數據類型 參數名
                          申明部分
                           語句
}
有參有返回值:返回值類型 函數名(參數名列表){
                         //多個形參,應用,'隔離
                         申明部分          // 定義局部變量
                         語句

                         return 語句       //返回給主調函數,return之後的代碼永不執行
}

函數參數
     
     形式參數(形參):在函數的定義中,函數名後面小括號中的參數
     實際參數(實參):在函數的調用時,小括號中的參數
     注意:    1、形式參數與實際參數個數,類型必須一致(個數不一致錯誤,類型不一致精度丟失
               2、形參定義後,並不會立即分配存儲空間,在函數調用時纔會分配,形參只有在函數內部有效,函數調用結束後,不能再使用形參
            3、多個形參,應用,'隔離
            4、在函數定義中,不能定義和形參同名的變量

函數參數傳遞過程:1,形參只有在調用時纔會被分配空間(調用結束,便被釋放)
                                2,實參在函數調用時,必須有值,然後傳值給形參(把實參的值賦值給形參)值傳遞
                                 3,在函數中形參的值可以被修改,但不會影響實參的值,用完就被釋放

函數返回值及注意事項
     函數的值(函數返回值):函數被調用後,返回給主調函數的值
     主調、被調函數是一個相對的概念
     注意:1、使用一個關鍵字return,可以返回常量,變量,表達式,可以加()
                2、return類型應與函數定義類型一致,如果不一致,以函數類型爲準
                3、int類型的函數定義可以省略(系統默認int),不建議這麼做

函數聲明
     在主調函數中,調用某函數之前應該對被調函數進行說明(聲明),告訴編譯器這個函數已經存在了,告訴編譯器被調函數的返回值類型
     格式:(把被調函數的頭部copy一份,加上分號;)
                返回值類型 被調用函數名 (類型 形參名);    形參名可以省略
     注意:1、返回值類型爲int,可以不做聲明(不推薦
                2、被調函數寫在主調函數之前,不作聲明

函數調用
     一般形式:函數名(實際參數表);
     注意:1、函數表達式
               2、函數調用可以作爲另外一個函數的實參
               3、函數嵌套調用,自己調自己
     
遞歸函數概述

遞歸函數:一個函數在他的函數體,調用自身
注意:爲了防止遞歸函數無休止的調用,陷入死循環,應加入限制條件,使遞歸結束
構成遞歸的條件:1、調用自身
                             2、有限制條件
                             3、能夠找出規律,縮小問題的規模
遞歸階段:1、遞推階段:問題規模縮小的過程
                  2、迴歸迭代階段:迭代計算值的過程
內存棧:先進後出(壓棧操作,出棧操作)
//遞歸函數,調用自身
//5個人,問第五人年齡,第五比第四大2.....第一個人說我10歲,求第五個人的年齡
//規律:age(n) = age(n-1) + 2; age(1) = 10;
int getAge(int n) {
   
int age;
   
//如果n=1,年齡10
   
if (n ==1) {
        age =
10;
    } else {
    //如果不是第一個人,找前一個人+2
        age = getAge(n - 1) + 2;
    }
   
   
return age;
}

//實現XY次方,比如23次方=834次方=81,遞歸實現
//2^3  2*2*2 2^2 * 2
//3^4  3*3*3*3 3^3 * 3
//x^y x^(y-1) * x
int xy(int x, int y) {
   
int ji;
   
//判斷y==1
   
if (y == 1) {
        ji = x;
    }
else {
        ji =
xy(x, y - 1) * x;
    }
   
return ji;
}

Xcode運行原理
  自動編譯編譯.o(目標文件)鏈接(庫函數).out執行
Mac基於UNIX文件系統,所有文件都在根目錄下,沒有windows的C,D盤之類的
常用UNIX命令:
sudo -i:管理員模式
ls:列出當前目錄的內容(文件)
pwd:顯示當前目標的名稱
cd:改變當前操作的目錄
who:顯示當前用戶名
clear:清除所有內容(清屏)
mkdir:創建一個目錄
rm:刪除文件
rm -r:刪除文件夾  -f:強制刪除
touch:創建文件
vi/open:打開、創建文件  -q:退出   -wq:保存並退出 -q!:強制退出   :wq!
     vi(i:進入編輯模式  esc:退出編輯模式  )
cat/more:查看更多內容
方向鍵:查看歷史命令

  手動編譯寫.c源程序編譯.o(目標文件)鏈接.out執行
編譯命令:cc -c 文件名(xx.c)  →.o文件
鏈接命令:cc .o(xx.o)          →.out文件
運行命令:/文件名.out(xx.out)
發佈了43 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章