欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言自定義函數(shù)的實現(xiàn)

 更新時間:2021年01月29日 11:43:13   投稿:zx  
這篇文章主要介紹了C語言自定義函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

函數(shù)是一段可以重復(fù)使用的代碼,用來獨立地完成某個功能,它可以接收用戶傳遞的數(shù)據(jù),也可以不接收。接收用戶數(shù)據(jù)的函數(shù)在定義時要指明參數(shù),不接收用戶數(shù)據(jù)的不需要指明,根據(jù)這一點可以將函數(shù)分為有參函數(shù)和無參函數(shù)。

將代碼段封裝成函數(shù)的過程叫做函數(shù)定義。

C語言無參函數(shù)的定義

如果函數(shù)不接收用戶傳遞的數(shù)據(jù),那么定義時可以不帶參數(shù)。如下所示:

dataType functionName(){
  //body
}
  • dataType 是返回值類型,它可以是C語言中的任意數(shù)據(jù)類型,例如 int、float、char 等。
  • functionName 是函數(shù)名,它是標(biāo)識符的一種,命名規(guī)則和標(biāo)識符相同。函數(shù)名后面的括號( )不能少。
  • body 是函數(shù)體,它是函數(shù)需要執(zhí)行的代碼,是函數(shù)的主體部分。即使只有一個語句,函數(shù)體也要由{ }包圍。
  • 如果有返回值,在函數(shù)體中使用 return 語句返回。return 出來的數(shù)據(jù)的類型要和 dataType 一樣。

例如,定義一個函數(shù),計算從 1 加到 100 的結(jié)果:

int sum(){
  int i, sum=0;
  for(i=1; i<=100; i++){
    sum+=i;
  }
  return sum;
}

累加結(jié)果保存在變量sum中,最后通過return語句返回。sum 是 int 型,返回值也是 int 類型,它們一一對應(yīng)。

return是C語言中的一個關(guān)鍵字,只能用在函數(shù)中,用來返回處理結(jié)果。

將上面的代碼補充完整:

#include <stdio.h>
int sum(){
  int i, sum=0;
  for(i=1; i<=100; i++){
    sum+=i;
  }
  return sum;
}
int main(){
  int a = sum();
  printf("The sum is %d\n", a);
  return 0;
}

運行結(jié)果:
The sum is 5050

函數(shù)不能嵌套定義,main 也是一個函數(shù)定義,所以要將 sum 放在 main 外面。函數(shù)必須先定義后使用,所以 sum 要放在 main 前面。

注意:main 是函數(shù)定義,不是函數(shù)調(diào)用。當(dāng)可執(zhí)行文件加載到內(nèi)存后,系統(tǒng)從 main 函數(shù)開始執(zhí)行,也就是說,系統(tǒng)會調(diào)用我們定義的 main 函數(shù)。

無返回值函數(shù)

有的函數(shù)不需要返回值,或者返回值類型不確定(很少見),那么可以用 void 表示,例如:

void hello(){
  printf ("Hello,world \n");
  //沒有返回值就不需要 return 語句
}

void是C語言中的一個關(guān)鍵字,表示“空類型”或“無類型”,絕大部分情況下也就意味著沒有 return 語句。

C語言有參函數(shù)的定義

如果函數(shù)需要接收用戶傳遞的數(shù)據(jù),那么定義時就要帶上參數(shù)。如下所示:

dataType functionName( dataType1 param1, dataType2 param2 ... ){
  //body
}

dataType1 param1, dataType2 param2 ...是參數(shù)列表。函數(shù)可以只有一個參數(shù),也可以有多個,多個參數(shù)之間由,分隔。參數(shù)本質(zhì)上也是變量,定義時要指明類型和名稱。與無參函數(shù)的定義相比,有參函數(shù)的定義僅僅是多了一個參數(shù)列表。

數(shù)據(jù)通過參數(shù)傳遞到函數(shù)內(nèi)部進行處理,處理完成以后再通過返回值告知函數(shù)外部。

更改上面的例子,計算從 m 加到 n 的結(jié)果:

int sum(int m, int n){
  int i, sum=0;
  for(i=m; i<=n; i++){
    sum+=i;
  }
  return sum;
}

參數(shù)列表中給出的參數(shù)可以在函數(shù)體中使用,使用方式和普通變量一樣。

調(diào)用 sum() 函數(shù)時,需要給它傳遞兩份數(shù)據(jù),一份傳遞給 m,一份傳遞給 n。你可以直接傳遞整數(shù),例如:

int result = sum(1, 100); //1傳遞給m,100傳遞給n

也可以傳遞變量:

int begin = 4;
int end = 86;
int result = sum(begin, end); //begin傳遞給m,end傳遞給n

也可以整數(shù)和變量一起傳遞:

int num = 33;
int result = sum(num, 80); //num傳遞給m,80傳遞給n

函數(shù)定義時給出的參數(shù)稱為形式參數(shù),簡稱形參;函數(shù)調(diào)用時給出的參數(shù)(也就是傳遞的數(shù)據(jù))稱為實際參數(shù),簡稱實參。函數(shù)調(diào)用時,將實參的值傳遞給形參,相當(dāng)于一次賦值操作。

原則上講,實參的類型和數(shù)目要與形參保持一致。如果能夠進行自動類型轉(zhuǎn)換,或者進行了強制類型轉(zhuǎn)換,那么實參類型也可以不同于形參類型,例如將 int 類型的實參傳遞給 float 類型的形參就會發(fā)生自動類型轉(zhuǎn)換。

將上面的代碼補充完整:

#include <stdio.h>
int sum(int m, int n){
  int i, sum=0;
  for(i=m; i<=n; i++){
    sum+=i;
  }
  return sum;
}
int main(){
  int begin = 5, end = 86;
  int result = sum(begin, end);
  printf("The sum from %d to %d is %d\n", begin, end, result);
  return 0;
}

運行結(jié)果:
The sum from 5 to 86 is 3731

定義 sum() 時,參數(shù) m、n 的值都是未知的;調(diào)用 sum() 時,將 begin、end 的值分別傳遞給 m、n,這和給變量賦值的過程是一樣的,它等價于:

m = begin;
n = end;

函數(shù)不能嵌套定義

強調(diào)一點,C語言不允許函數(shù)嵌套定義;也就是說,不能在一個函數(shù)中定義另外一個函數(shù),必須在所有函數(shù)之外定義另外一個函數(shù)。main() 也是一個函數(shù)定義,也不能在 main() 函數(shù)內(nèi)部定義新函數(shù)。

下面的例子是錯誤的:

#include <stdio.h>
void func1(){
  printf("http://c.biancheng.net");
  void func2(){
    printf("C語言小白變怪獸");
  }
}
int main(){
  func1();
  return 0;
}

有些初學(xué)者認(rèn)為,在 func1() 內(nèi)部定義 func2(),那么調(diào)用 func1() 時也就調(diào)用了 func2(),這是錯誤的。

正確的寫法應(yīng)該是這樣的:

#include <stdio.h>
void func2(){
  printf("C語言小白變怪獸");
}
void func1(){
  printf("http://c.biancheng.net");
  func2();
}
int main(){
  func1();
  return 0;
}

func1()、func2()、main() 三個函數(shù)是平行的,誰也不能位于誰的內(nèi)部,要想達到「調(diào)用 func1() 時也調(diào)用 func2()」的目的,必須將 func2() 定義在 func1() 外面,并在 func1() 內(nèi)部調(diào)用 func2()。

有些編程語言是允許函數(shù)嵌套定義的,例如 JavaScript,在 JavaScript 中經(jīng)常會使用函數(shù)的嵌套定義。

遞歸函數(shù)(兩個簡易的遞歸調(diào)用)

1,階乘

函數(shù)的聲明

int MyFun(int num);

函數(shù)的實現(xiàn)

int MyFun(int num){
//  普通函數(shù)
//  int sum1=1;
//  for (int i=1; i<=num; i++) {
//    sum1*=i;
//  }
//  return sum1;
  // 遞歸調(diào)用
  if (num==1||num==0) {
    return 1;
  }else {
    return num*MyFun(num-1);
  
  }
}

調(diào)用

 printf("sum=%d\n",MyFun(6));

運行效果

 

2,菲波那切數(shù)列數(shù)列

函數(shù)的聲明

int fbsnq(int num);

函數(shù)的實現(xiàn)

int fbsnq(int num){
  // 遞歸
  if(num==1||num==2){
    return 1;
  }
  return fbsnq(num-1)+fbsnq(num-2);
  //普通
//  int n1=1,n2=1,temp=0;
//  if (num==1||num==2) {
//    return 1;
//  }
//  int i=2;
//  for(;i<num;i++){
//    temp=n1+n2;
//    n1=n2;
//    n2=temp;
//  }
//  return temp;
}

函數(shù)的調(diào)用

  for (int i=1; i<=30; i++) {
    if ((i-1)%5==0) {
      printf("\n");
    }
      printf("%10d", fbsnq(i));
  }

  printf("\n\n");

運行結(jié)果

到此這篇關(guān)于C語言自定義函數(shù)的實現(xiàn)的文章就介紹到這了,更多相關(guān)C語言自定義函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用C語言實現(xiàn)單鏈表的各種操作(二)

    用C語言實現(xiàn)單鏈表的各種操作(二)

    本篇文章是對用C語言實現(xiàn)單鏈表的各種操作進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言超詳細(xì)講解雙向帶頭循環(huán)鏈表

    C語言超詳細(xì)講解雙向帶頭循環(huán)鏈表

    帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨存儲數(shù)據(jù)。實際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實現(xiàn)以后會發(fā)現(xiàn)結(jié)構(gòu)會帶來很多優(yōu)勢,實現(xiàn)反而簡單
    2023-02-02
  • C++ 流插入和流提取運算符的重載的實現(xiàn)

    C++ 流插入和流提取運算符的重載的實現(xiàn)

    這篇文章主要介紹了C++ 流插入和流提取運算符的重載的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C語言遞歸在實踐題目中應(yīng)用詳解

    C語言遞歸在實踐題目中應(yīng)用詳解

    遞歸是C語言中非常重要的知識點,其中的大事化小等思想對初學(xué)C語言的小伙伴來說不是很友好,因此我整理了遞歸的經(jīng)典題目并向外拓展,給你全面的介紹,重新認(rèn)識遞歸
    2022-05-05
  • C++11中l(wèi)ambda、std::function和std:bind詳解

    C++11中l(wèi)ambda、std::function和std:bind詳解

    大家都知道C++11中增加了許多的新特性,下面在這篇文中我們就來聊一下lambda表達式,閉包,std::function以及std::bind。文中介紹的很詳細(xì),相信對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • QT5編譯使用QFtp的方法步驟

    QT5編譯使用QFtp的方法步驟

    這篇文章主要介紹了QT5編譯使用QFtp的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C語言、C++中的union用法總結(jié)

    C語言、C++中的union用法總結(jié)

    這篇文章主要介紹了C語言、C++中的union用法總結(jié),本文講解了什么是union、C中使用union、當(dāng)union遇到對象等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C語言二維數(shù)組的處理實例

    C語言二維數(shù)組的處理實例

    這篇文章主要介紹了C語言二維數(shù)組的處理實例,有需要的朋友可以參考一下
    2013-12-12
  • C語言獲得電腦的IP地址的小例子

    C語言獲得電腦的IP地址的小例子

    C語言獲得電腦的IP地址的小例子,需要的朋友可以參考一下
    2013-05-05
  • VC使用編譯時間作為版本號標(biāo)識的方法

    VC使用編譯時間作為版本號標(biāo)識的方法

    這篇文章主要介紹了VC使用編譯時間作為版本號標(biāo)識的方法,需要的朋友可以參考下
    2017-03-03

最新評論