C01函數


一、 函數是什麼?
1.任何一個C語言程序都是由一個或者多個程序段(小程序)構成的,每個程序段都有自己的功能,我們一般稱這些程序段爲“函數”。
 所以,你可以說C語言程序是由函數構成的
2.函數就是功能。每一個函數用來實現一個特定的功能。起函數的名字時候應反映其代表的功能
3.函數形式分三種:空函數,無參函數,有參函數

二、 函數有什麼用?
1.避免主函數變得龐雜,頭緒不清,方便閱讀和維護程序
2.避免一個功能多次編寫代碼

三、 函數怎麼用?
1.定義函數應該包括的內容
 1)指定函數的名字,以便以後按名調用
 2)指定函數的類型,即函數返回值的類型
 3)指定函數的參數的名字和類型,以便在調用函數時向它們傳遞數據。對無參函數不需要這項
 4)指定函數應當完成什麼操作,也就是函數時做什麼的,即函數的功能。這是最重要的,是在函數體重解決的
2.定義函數的方法
 1)無參函數
    類型名 函數名()
    {
       函數體
    }
 2)有參函數
    類型名 函數名(形式參數列表)
    {
       函數體
    }
 3)空函數
    類型名 函數名()
    {

    }

四、 使用函數要注意什麼?
1.一個源文件程序由一個或多個函數以及其他有關內容(如指令,數據聲明與定義等)組成
2.C程序的執行是從main函數開始的,如果在main函數中調用其他函數,在調用後流程返回到main函數,在main函數中結束整個程序的運行
3.所有函數都是平行的,即在定義函數時時分別進行的,是互相獨立的。一個函數並不從屬於另一個,即函數不能嵌套定義的
4.庫函數,它是由系統提供的,用戶不必自己定義,可直接使用它們
5.用戶自己定義的函數。它是用以解決用戶專門需要的函數

五、 函數代碼舉例
  • 例1:調用函數 (比較兩個數的大小)
#include<stdio.h>
int max(int x,int y)//定義max函數,有兩個參數
{
    int z;//定義臨時變量z
    z=x>y?x:y;//把x和y大者賦給z
    return z;//把z作爲max函數的值返回main函數
}
int main()
{
    int max(int x,int y);//對max函數的聲明
    int a,b,c;
    printf("請輸入兩個整數:");//提示輸入數據
    scanf("%d,%d",&a,&b);//輸入兩個整數
    c=max(a,b);//調用max函數,有兩個實參,大數賦給變量c
    printf("最大的數是 %d",c);//輸出大數c
    return 0;
}
  • 例2:嵌套調用 (比較四個數的大小)
#include<stdio.h> 
int main() 
{
      int max4(int a,int b,int c,int d);  //對max4函數進行聲明       
      int a,b,c,d,max;
       printf("請輸入四個整數 :\n");
       scanf("%d%d%d%d",&a,&b,&c,&d); 
       max=max4(a,b,c,d);  //調用max4函數
       printf("最大的數是 :%d\n",max);
       return 0;
}

int max4(int a,int b,int c,int d)  //定義max4函數
{
    int max2(int a,int b);  //對max2函數進行聲明
    int m;
    m=max2(a,b);  //第一次調用max2函數
    m=max2(m,c);  //第二次調用max2函數
    m=max2(m,d);  //第三次調用max2函數
    return  m ;  //將函數返回值帶回到主調函數中
}

int max2(int a,int b)  //定義max2函數

{
   if(a>=b)
          return  a ;  //將函數返回值帶回到max4函數中
   else
          return  b ;  //將函數返回值帶回到max4函數中
}
  • 例3:遞歸調用 (求解一個數的連乘積)
 #include <stdio.h>
 int main() 
{
     int s,d; 
     printf("請輸入一個整數:  "); 
     scanf("%d",&s); 
     while(s<0) 
     { 
        printf("您輸入的數字有誤,請重新輸入:  ");    
        scanf("%d",&s);
     }      
    if(s>=0)  
        {
            int add(int n);
            d=add(s); 
           printf("連乘積是:  %d\n",d); 
        }
    return 0; 
} 
int add(int n) 
{
    int sum=1; 
    if(n==1) sum=1; 
    if(n>1) 
     sum=add(n-1)*n;/*這兒的add(n-1)就是要逐步地往n-1==1這個放向去發展的,也就是最後n-1必定是要等於1滴 */
    return sum; 
} 

六、 函數總結
1.形參:是在函數括號裏定義的 實參:是傳來的值
2.形參和實參間的數據傳 。在調用函數過程中,系統會把實參的值傳遞給被調用函數的形參。
 或者說,形參從實參得到一個值。該值在函數調用期間有效,可以參加該函數的運算
3.函數定義:無分號,有函數體 函數聲明:有分號,沒函數體
4.實參可以是常量、變量或表達式。實參與形參的類型應相同或者複製兼容
 在發生函數調用時,函數的形參被臨時分配內存單元,和實參的內存單元不同。因爲值內存單元不同,所有形參值的改變不會影響到實參值
6.函數的首行稱爲函數原型
7.函數聲明中形參名可以省寫,而只寫形參的類型
8.如果已在文件的開頭(在所有函數之前),已對本文件中所調用的函數進行了聲明,則在各函數中不必對其所調用的函數再作聲明
9.函數不可以嵌套定義,但可以嵌套調用
10.在調用一個函數的過程中又出現直接或間接地調用該函數本身,稱爲函數的遞歸調用。這是C語言的一大特點
11.一個遞歸的問題可以分“回溯”和“遞推”兩個階段
發佈了36 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章