夜间福利网站,免费动漫av,一级做a爰片久久毛片免费陪,夜夜骑首页,黄色毛片视频,插插插操操操,综合av色

如何快速掌握C語(yǔ)言函數(shù)

時(shí)間:2025-10-13 04:35:53 賽賽 C語(yǔ)言 我要投稿

如何快速掌握C語(yǔ)言函數(shù)

  C源程序是由函數(shù)組成的。最簡(jiǎn)單的程序有一個(gè)主函數(shù) main(),但實(shí)用程序往往由多個(gè)函數(shù)組成,由 主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。函數(shù)是C源程序的基本模塊,程序的許多功能是通過(guò)對(duì) 函數(shù)模塊的調(diào)用來(lái)實(shí)現(xiàn)的,學(xué)會(huì)編寫和調(diào)用函數(shù)可以提高編程效率。下面是小編為大家?guī)?lái)的如何快速掌握C語(yǔ)言函數(shù)的知識(shí),歡迎閱讀。

  1、函數(shù)的定義

  C源程序是由函數(shù)組成的。最簡(jiǎn)單的程序有一個(gè)主函數(shù) main(),但實(shí)用程序往往由多個(gè)函數(shù)組成,由 主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。函數(shù)是C源程序的基本模塊,程序的許多功能是通過(guò)對(duì) 函數(shù)模塊的調(diào)用來(lái)實(shí)現(xiàn)的,學(xué)會(huì)編寫和調(diào)用函數(shù)可以提高編程效率。

  函數(shù)的定義通常包含以下內(nèi)容:

  類型 函數(shù)名(形參表說(shuō)明) /*函數(shù)首部*/

  {

  說(shuō)明語(yǔ)句 /*函數(shù)體*/

  執(zhí)行語(yǔ)句

  }

  對(duì)上面的定義形式進(jìn)行以下說(shuō)明:

  (1)“類型”是指函數(shù)返回值的類型。函數(shù)返回值不能是數(shù)組,也不能是函數(shù),除此之外任何合法的數(shù)據(jù)類型都可以是函數(shù)的類型,如:int,long,float,char 等。函數(shù)類型可以省略,當(dāng)不指明函數(shù)類型時(shí),系統(tǒng)默認(rèn)的是整型。

  (2)函數(shù)名是用戶自定義的標(biāo)識(shí)符,在 C 語(yǔ)言函數(shù)定義中不可省略,須符合 C 語(yǔ)言對(duì)標(biāo)識(shí)符的規(guī)范, 用于標(biāo)識(shí)函數(shù),并用該標(biāo)識(shí)符調(diào)用函數(shù)。另外函數(shù)名本身也有值,它代表了該函數(shù)的入口地址,使用指針 調(diào)用函數(shù)時(shí),將用到此功能。

  (3)形參又稱為“形式參數(shù)”。形參表是用逗號(hào)分隔的一組變量說(shuō)明,包括形參的類型和形參的標(biāo)識(shí) 符,其作用是指出每一個(gè)形參的類型和形參的名稱,當(dāng)調(diào)用函數(shù)時(shí),接收來(lái)自主調(diào)函數(shù)的數(shù)據(jù),確定各參 數(shù)的值。

  (4)用{ }括起來(lái)的部分是函數(shù)的主體,稱為函數(shù)體。函數(shù)體是一段程序,確定該函數(shù)應(yīng)完成的規(guī)定的 運(yùn)算,應(yīng)執(zhí)行的規(guī)定的動(dòng)作,集中體現(xiàn)了函數(shù)的功能。函數(shù)內(nèi)部應(yīng)有自己的說(shuō)明語(yǔ)句和執(zhí)行語(yǔ)句,但函數(shù) 內(nèi)定義的變量不可以與形參同名。花括號(hào){ }是不可以省略的。

  根據(jù)函數(shù)定義的一般形式,可以定義一個(gè)最簡(jiǎn)單的函數(shù):

  add()

  {

  ;

  }

  這是 C 語(yǔ)言中一個(gè)合法的函數(shù),函數(shù)名為 add。它沒(méi)有函數(shù)類型說(shuō)明,也沒(méi)有形參表,同時(shí)函數(shù)體內(nèi) 也沒(méi)有語(yǔ)句。實(shí)際上函數(shù) add 不執(zhí)行任何操作和運(yùn)算,它是一個(gè)空函數(shù),在一般情況下是沒(méi)有用途的,但 在程序開(kāi)發(fā)的過(guò)程中有時(shí)是需要的,常用來(lái)代替尚未開(kāi)發(fā)完畢的函數(shù)。

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

  主調(diào)函數(shù)使用被調(diào)函數(shù)的功能,稱為函數(shù)調(diào)用。在 C 語(yǔ)言中,只有在函數(shù)調(diào)用時(shí),函數(shù)體中定義的功 能才會(huì)被執(zhí)行。C語(yǔ)言中,函數(shù)調(diào)用的一般形式為:

  函數(shù)名(類型 形參,類型 形參...);

  對(duì)無(wú)參函數(shù)調(diào)用時(shí)則無(wú)實(shí)際參數(shù)表。實(shí)際參數(shù)表中的參數(shù)可以是常數(shù)、變量或其他構(gòu)造類型數(shù)據(jù)及表 達(dá)式,各實(shí)參之間用逗號(hào)分隔。

  在C語(yǔ)言中,可以用以下幾種方式調(diào)用函數(shù)。

  (1)函數(shù)表達(dá)式:函數(shù)作為表達(dá)式中的一項(xiàng)出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運(yùn)算。這種 方式要求函數(shù)是有返回值的。例如:

  z=max(x,y);是一個(gè)賦值表達(dá)式,把 max 的返回值賦予變量 z。

  (2)函數(shù)語(yǔ)句:函數(shù)調(diào)用的一般形式加上分號(hào)即構(gòu)成函數(shù)語(yǔ)句。

  例如:

  printf ("%d",a);

  scanf ("%d",&b);

  都是以函數(shù)語(yǔ)句的方式調(diào)用函數(shù)。

  (3)函數(shù)實(shí)參:函數(shù)作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實(shí)參進(jìn) 行傳送,因此要求該函數(shù)必須是有返回值的。例如:

  1printf("%d",max(x,y)); /*把 max 調(diào)用的返回值作為 printf 函數(shù)的實(shí)參*/

  在主調(diào)函數(shù)中調(diào)用某函數(shù)之前應(yīng)對(duì)該被調(diào)函數(shù)進(jìn)行聲明。在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)進(jìn)行說(shuō)明的目的是

  使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類型,以便在主調(diào)函數(shù)中按此種類型對(duì)返回值進(jìn)行相應(yīng)的處理。其一般

  形式為:

  類型說(shuō)明符 被調(diào)函數(shù)名(類型 形參,類型 形參...);

  需要注意的是,函數(shù)的聲明和函數(shù)的定義有本質(zhì)上的不同。主要區(qū)別在以下兩個(gè)方面:

  (1)函數(shù)的定義是編寫一段程序,應(yīng)有函數(shù)的具體功能語(yǔ)句——函數(shù)體;而函數(shù)的聲明僅是向編譯系 統(tǒng)的一個(gè)說(shuō)明,不含具體的執(zhí)行動(dòng)作。

  (2)在程序中,函數(shù)的定義只能有一次,而函數(shù)的聲明可以有多次。

  3、變量的存儲(chǔ)類型

  在 C 語(yǔ)言中,變量是對(duì)程序中數(shù)據(jù)所占內(nèi)存空間的一種抽象定義,定義變量時(shí),用戶定義變量的名、 變量的類型,這些都是變量的操作屬性。不僅可以通過(guò)變量名訪問(wèn)該變量,系統(tǒng)還通過(guò)該標(biāo)識(shí)符確定變量 在內(nèi)存中的位置。在計(jì)算機(jī)中,保存變量當(dāng)前值的存儲(chǔ)單元有兩類,一類是內(nèi)存,另一類是 CPU 的寄存 器。變量的存儲(chǔ)類型關(guān)系到變量的存儲(chǔ)位置,C 語(yǔ)言中定義了 4 種存儲(chǔ)屬性,即自動(dòng)變量、外部變量、靜 態(tài)變量和寄存器變量,它關(guān)系到變量在內(nèi)存中的存放位置, 由此決定了變量的保留時(shí)間和變量的作用范圍。

  變量的保留時(shí)間又稱為生存期,從時(shí)間的角度,可將變量分為靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)兩種情況。靜態(tài)存 儲(chǔ)是指變量存儲(chǔ)在內(nèi)存的靜態(tài)存儲(chǔ)區(qū),在編譯時(shí)就分配了存儲(chǔ)空間,在整個(gè)程序的運(yùn)行期間,該變量占有 固定的存儲(chǔ)單元,程序結(jié)束后,這部分空間才釋放,變量的值在整個(gè)程序中始終存在;動(dòng)態(tài)存儲(chǔ)是指變量 存儲(chǔ)在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū),在程序的運(yùn)行過(guò)程中,只有當(dāng)變量所在的函數(shù)被調(diào)用時(shí),編譯系統(tǒng)才臨時(shí)為該 變量分配一段內(nèi)存單元,函數(shù)調(diào)用結(jié)束,該變量空間釋放,變量的值只在函數(shù)調(diào)用期存在。

  變量的作用范圍又稱為作用域,從空間角度,可以將變量分為全局變量和局部變量。局部變量是在一 個(gè)函數(shù)或復(fù)合語(yǔ)句內(nèi)定義的變量,它僅在函數(shù)或復(fù)合語(yǔ)句內(nèi)有效,編譯時(shí),編譯系統(tǒng)不為局部變量分配內(nèi) 存單元,而是在程序運(yùn)行過(guò)程中,當(dāng)局部變量所在的函數(shù)被調(diào)用時(shí),編譯系統(tǒng)根據(jù)需要,臨時(shí)分配內(nèi)存, 調(diào)用結(jié)束,空間釋放;全局變量是在函數(shù)之外定義的變量,其作用范圍為從定義處開(kāi)始到本文件結(jié)束,編 譯時(shí),編譯系統(tǒng)為其分配固定的內(nèi)存單元,在程序運(yùn)行的自始至終都占用固定單元。

  1. 自動(dòng)變量

  函數(shù)中的局部變量,如不專門聲明為 static 存儲(chǔ)類別,都是動(dòng)態(tài)地分配存儲(chǔ)空間的,數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài) 存儲(chǔ)區(qū)中。函數(shù)中的形參和在函數(shù)中定義的變量(包括在復(fù)合語(yǔ)句中定義的變量)都屬此類,在調(diào)用該函 數(shù)時(shí)系統(tǒng)會(huì)給它們分配存儲(chǔ)空間,在函數(shù)調(diào)用結(jié)束時(shí)就自動(dòng)釋放這些存儲(chǔ)空間。這類局部變量稱為自動(dòng)變 量。自動(dòng)變量用關(guān)鍵字 auto 進(jìn)行存儲(chǔ)類別的聲明,例如聲明一個(gè)自動(dòng)變量:

  int fun(int a)

  {

  auto int b,c=3; /*定義 b,c 為自動(dòng)變量*/

  }

  a 是函數(shù) fun()的形參,b、c 是自動(dòng)變量,并對(duì) c 賦初值 3。執(zhí)行完 fun()函數(shù)后,自動(dòng)釋放 a、b、c 所占的存儲(chǔ)單元。

  2. 外部變量

  外部變量(即全局變量)是在函數(shù)的外部定義的,它的作用域?yàn)閺淖兞慷x處開(kāi)始,到本程序文件的末尾。如果外部變量不在文件的開(kāi)頭定義,其有效的作用范圍只限于定義處到文件末尾。如果在定義點(diǎn)之前的函數(shù)想引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字 extern 對(duì)該變量進(jìn)行“外部變量聲明”。表示該 變量是一個(gè)已經(jīng)定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量.

  用 extern 聲明外部變量,擴(kuò)展程序文件中的作用域

  3. 靜態(tài)變量

  有時(shí)希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,這時(shí)就應(yīng)該指定局部變量為靜 態(tài)局部變量,用關(guān)鍵字 static 進(jìn)行聲明。

  4. 寄存器變量

  為提高效率,C 語(yǔ)言允許將局部變量的值存放在 CPU 的寄存器中,這種變量叫做寄存器變量,用關(guān)鍵字 register 聲明。使用寄存器變量需要注意以下幾點(diǎn):

  (1)只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量。

  (2)一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個(gè)寄存器變量。

  (3)不能使用取地址運(yùn)算符“&”求寄存器變量的地址。

  C語(yǔ)言函數(shù)的遞歸和調(diào)用

  一、要點(diǎn):

  1、C語(yǔ)言函數(shù)可以遞歸調(diào)用。

  2、可以通過(guò)直接或間接兩種方式調(diào)用。目前只討論直接遞歸調(diào)用。

  二、遞歸條件

  采用遞歸方法來(lái)解決問(wèn)題,必須符合以下三個(gè)條件:

  1、可以把要解決的問(wèn)題轉(zhuǎn)化為一個(gè)新問(wèn)題,而這個(gè)新的問(wèn)題的解決方法仍與原來(lái)的解決方法相同,只是所處理的對(duì)象有規(guī)律地遞增或遞減。

  說(shuō)明:解決問(wèn)題的方法相同,調(diào)用函數(shù)的參數(shù)每次不同(有規(guī)律的遞增或遞減),如果沒(méi)有規(guī)律也就不能適用遞歸調(diào)用。

  2、可以應(yīng)用這個(gè)轉(zhuǎn)化過(guò)程使問(wèn)題得到解決。

  說(shuō)明:使用其他的辦法比較麻煩或很難解決,而使用遞歸的方法可以很好地解決問(wèn)題。

  3、必定要有一個(gè)明確的結(jié)束遞歸的條件。

  說(shuō)明:一定要能夠在適當(dāng)?shù)牡胤浇Y(jié)束遞歸調(diào)用。不然可能導(dǎo)致系統(tǒng)崩潰。

  三、遞歸實(shí)例

  例:使用遞歸的方法求n!

  當(dāng)n>1時(shí),求n!的問(wèn)題可以轉(zhuǎn)化為n*(n-1)!的新問(wèn)題。

  比如n=5:

  第一部分:5*4*3*2*1 n*(n-1)!

  第二部分:4*3*2*1 (n-1)*(n-2)!

  第三部分:3*2*1 (n-2)(n-3)!

  第四部分:2*1 (n-3)(n-4)!

  第五部分:1 (n-5)! 5-5=0,得到值1,結(jié)束遞歸。

  源程序:

  fac(int n)

  {int t;

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

  else

  { t=n*fac(n-1);

  return t;

  }

  }

  main( )

  {int m,y;

  printf(“Enter m:”);

  scanf(“%d”,&m);

  if(m<0) printf(“Input data Error!n”);

  else

  {y=fac(m);

  printf(“n%d! =%d n”,m,y);

  }

  }

  四、遞歸說(shuō)明

  1、當(dāng)函數(shù)自己調(diào)用自己時(shí),系統(tǒng)將自動(dòng)把函數(shù)中當(dāng)前的變量和形參暫時(shí)保留起來(lái),在新一輪的調(diào)用過(guò)程中,系統(tǒng)為新調(diào)用的函數(shù)所用到的變量和形參開(kāi)辟另外的存 儲(chǔ)單元(內(nèi)存空間)。每次調(diào)用函數(shù)所使用的變量在不同的內(nèi)存空間。

  2、遞歸調(diào)用的層次越多,同名變量的占用的存儲(chǔ)單元也就越多。一定要記住,每次函數(shù)的調(diào)用,系統(tǒng)都會(huì)為該函數(shù)的變量開(kāi)辟新的內(nèi)存空間。

  3、當(dāng)本次調(diào)用的函數(shù)運(yùn)行結(jié)束時(shí),系統(tǒng)將釋放本次調(diào)用時(shí)所占用的內(nèi)存空間。程序的流程返回到上一層的調(diào)用點(diǎn),同時(shí)取得當(dāng)初進(jìn)入該層時(shí),函數(shù)中的變量和形參 所占用的內(nèi)存空間的數(shù)據(jù)。

  4、所有遞歸問(wèn)題都可以用非遞歸的方法來(lái)解決,但對(duì)于一些比較復(fù)雜的遞歸問(wèn)題用非遞歸的方法往往使程序變得十分復(fù)雜難以讀懂,而函數(shù)的遞歸調(diào)用在解決這類 問(wèn)題時(shí)能使程序簡(jiǎn)潔明了有較好的可讀性;但由于遞歸調(diào)用過(guò)程中,系統(tǒng)要為每一層調(diào)用中的變量開(kāi)辟內(nèi)存空間、要記住每一層調(diào)用后的返回點(diǎn)、要增加許多額外的 開(kāi)銷,因此函數(shù)的遞歸調(diào)用通常會(huì)降低程序的運(yùn)行效率。

  五、程序流程

  fac(int n) /*每次調(diào)用使用不同的參數(shù)*/

  { int t; /*每次調(diào)用都會(huì)為變量t開(kāi)辟不同的內(nèi)存空間*/

  if(n==1)||(n==0) /*當(dāng)滿足這些條件返回1 */

  return 1;

  else

  { t=n*fac(n-1); /*每次程序運(yùn)行到此處就會(huì)用n-1作為參數(shù)再調(diào)用一次本函數(shù),此處是調(diào)用點(diǎn)*/

  return t; /*只有在上一句調(diào)用的所有過(guò)程全部結(jié)束時(shí)才運(yùn)行到此處。*/

  }

  }

【如何快速掌握C語(yǔ)言函數(shù)】相關(guān)文章:

Java程序如何調(diào)用C/C++語(yǔ)言函數(shù)11-15

什么是C語(yǔ)言函數(shù)01-22

淺談C語(yǔ)言函數(shù)11-11

C語(yǔ)言的數(shù)組與函數(shù)02-28

C語(yǔ)言函數(shù)的定義03-07

C語(yǔ)言函數(shù)的含義09-30

C語(yǔ)言函數(shù) atoi()09-18

如何運(yùn)用C語(yǔ)言malloc和free函數(shù)10-01

C語(yǔ)言中如何定義函數(shù)式宏02-15

  • 相關(guān)推薦