C是模塊化程序設(shè)計(jì)語(yǔ)言
一、函數(shù)的定義
一般格式
函數(shù)類(lèi)型 函數(shù)名(形參類(lèi)型說(shuō)明表)
{
說(shuō)明部分
語(yǔ)句部分
}
程序舉例
例 空函數(shù)
dummy()
{ }
例 無(wú)參函數(shù)
printstar()
{ printf(“**********\\n”); }
或
printstar(void )
{ printf(“**********\\n”); }
例 有參函數(shù)(現(xiàn)代風(fēng)格)
int max(int x, y)
{ int z;
z=x>y?x:y;
return(z);
}
例 有參函數(shù)(傳統(tǒng)風(fēng)格)
int max(x,y)
int x,y;
{ int z;
z=x>y?x:y;
return(z);
}
二、函數(shù)的返回值
返回語(yǔ)句
形式: return(表達(dá)式);
或 return 表達(dá)式;
或 return;
功能:
使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,同時(shí)把返值帶給調(diào)用函數(shù)
說(shuō)明:
-
函數(shù)中可有多個(gè)return語(yǔ)句
-
若無(wú)return語(yǔ)句,遇}時(shí),自動(dòng)返回調(diào)用函數(shù)
-
若函數(shù)類(lèi)型與return語(yǔ)句中表達(dá)式值的類(lèi)型不一致,按前者為準(zhǔn),自動(dòng)轉(zhuǎn)換------函數(shù)調(diào)用轉(zhuǎn)換
-
void型函數(shù)
例 無(wú)返回值函數(shù)
void swap(int x,int y )
{ int temp;
temp=x;
x=y;
y=temp;
}
三、函數(shù)的調(diào)用
調(diào)用形式
函數(shù)名(實(shí)參表);
說(shuō)明:
實(shí)參與形參個(gè)數(shù)相等,類(lèi)型一致,按順序一一對(duì)應(yīng)
實(shí)參表求值順序,因系統(tǒng)而定(TurboC 自右向左)
函數(shù)的調(diào)用方式
函數(shù)語(yǔ)句:
例 printstar();
printf(“Hello,World!\\n”);
函數(shù)表達(dá)式:
例 m=max(a,b)*2;
函數(shù)參數(shù):
例 printf(“%d”,max(a,b));
m=max(a,max(b,c));
對(duì)被調(diào)用函數(shù)要求:必須是已存在的函數(shù)
庫(kù)函數(shù):
#include<*.h>
用戶(hù)自定義函數(shù):函數(shù)類(lèi)型說(shuō)明
函數(shù)說(shuō)明
一般形式:
函數(shù)類(lèi)型 函數(shù)名(形參類(lèi)型 [形參名],….. );
或 函數(shù)類(lèi)型 函數(shù)名();
作用:告訴編譯系統(tǒng)函數(shù)類(lèi)型、參數(shù)個(gè)數(shù)及類(lèi)型,以便檢驗(yàn)函數(shù)定義與函數(shù)說(shuō)明不同
函數(shù)說(shuō)明位置:程序的數(shù)據(jù)說(shuō)明部分(函數(shù)內(nèi)或外)下列情況下,可不作函數(shù)說(shuō)明
- 若函數(shù)返值是char或int型,系統(tǒng)自動(dòng)按int型處理
- 被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前
有些系統(tǒng)(如BorlandC++)要求函數(shù)說(shuō)明指出函數(shù)返值類(lèi)型和形參類(lèi)型,并且對(duì)void和int型函數(shù)也要進(jìn)行函數(shù)說(shuō)明
四、函數(shù)參數(shù)及傳遞方式
形參與實(shí)參
- 形式參數(shù):定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名
- 實(shí)際參數(shù):調(diào)用函數(shù)時(shí)函數(shù)名后面括號(hào)中的表達(dá)式
例 比較兩個(gè)數(shù)并輸出大者
main()
{ int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("Max is %d",c);
}
max(int x, int y)
{ int z;
z=x>y?x:y;
return(z);
}
說(shuō)明:
- 實(shí)參必須有確定的值
- 形參必須指定類(lèi)型
- 形參與實(shí)參類(lèi)型一致,個(gè)數(shù)相同
- 若形參與實(shí)參類(lèi)型不一致,自動(dòng)按形參類(lèi)型轉(zhuǎn)換———函數(shù)調(diào)用轉(zhuǎn)換
- 形參在函數(shù)被調(diào)用前不占內(nèi)存;函數(shù)調(diào)用時(shí)為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放
參數(shù)傳遞方式
方式:函數(shù)調(diào)用時(shí),為形參分配單元,并將實(shí)參的值復(fù)制到形參中;調(diào)用結(jié)束,形參單元被釋放,實(shí)參單元仍保留并維持原值
特點(diǎn):
- 形參與實(shí)參占用不同的內(nèi)存單元
- 單向傳遞
例 交換兩個(gè)數(shù)
#include
main()
{ int x=7,y=11;
printf("x=%d,\\ty=%d\\n",x,y);
printf("swapped:\\n");
swap(x,y);
printf("x=%d,\\ty=%d\\n",x,y);
}
swap(int a,int b)
{ int temp;
temp=a; a=b; b=temp;
}
五、函數(shù)的地址傳遞
方式:函數(shù)調(diào)用時(shí),將數(shù)據(jù)的存儲(chǔ)地址作為參數(shù)傳遞給形參
特點(diǎn):
- 形參與實(shí)參占用同樣的存儲(chǔ)單元
- “雙向”傳遞
- 實(shí)參和形參必須是地址常量或變量
例 交換兩個(gè)數(shù)
swap(p1,p2)
int *p1,*p2;
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}
main()
{int a,b;
scanf("%d,%d",&a,&b);
printf(“a=%d,b=%d\\n”,a,b);
printf(“swapped:\\n”);
swap(&a,&b);
printf(”a=%d,b=%d\\n",a,b);
}
六、函數(shù)的嵌套與遞歸調(diào)用
嵌套調(diào)用
C規(guī)定:函數(shù)定義不可嵌套,但可以嵌套調(diào)用函數(shù)
例 求三個(gè)數(shù)中最大數(shù)和最小數(shù)的差值
#include
int dif(int x,int y,int z);
int max(int x,int y,int z);
int min(int x,int y,int z);
void main()
{ int a,b,c,d;
scanf("%d%d%d",&a,&b,&c);
d=dif(a,b,c);
printf("Max-Min=%d\\n",d);
}
int dif(int x,int y,int z)
{ return max(x,y,z)-min(x,y,z); }
int max(int x,int y,int z)
{ int r;
r=x>y?x:y;
return(r>z?r:z);
}
int min(int x,int y,int z)
{ int r;
r=xreturn(r
遞歸調(diào)用
定義:函數(shù)直接或間接的調(diào)用自身叫函數(shù)的遞歸調(diào)用
說(shuō)明
C編譯系統(tǒng)對(duì)遞歸函數(shù)的自調(diào)用次數(shù)沒(méi)有限制,每調(diào)用函數(shù)一次,在內(nèi)存堆棧區(qū)分配空間,用于存放函數(shù)變量、返回值等信息,所以遞歸次數(shù)過(guò)多,可能引起堆棧溢出
七、數(shù)組作為函數(shù)參數(shù)
數(shù)組元素作函數(shù)實(shí)參—值傳遞
地址傳遞
- 在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組,且類(lèi)型應(yīng)一致
- 形參數(shù)組大小(多維數(shù)組第一維)可不指定
- 形參數(shù)組名是地址變量
例 兩個(gè)數(shù)組大小比較
a和b為有10個(gè)元素的整型數(shù)組
比較兩數(shù)組對(duì)應(yīng)元素
變量n,m,k記錄a[i]>b[i], a[i]==b[i],
a[i]k,認(rèn)為數(shù)組a>b
若n<b
若n==k,認(rèn)為數(shù)組a==b
#include
main()
{ int a[10],b[10],i,n=0,m=0,k=0;
printf("Enter array a:\\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("Enter array b:\\n");
for(i=0;i<10;i++)
scanf("%d",&b[i]);
for(i=0;i<10;i++)
{ if(large(a[i],b[i])==1) n=n+1;
else if(large(a[i],b[i])==0) m=m+1;
else k=k+1;
}
/* Output */
}
int large(int x,int y)
{ int flag;
if(x>y) flag=1;
else if(x-1;
else flag=0;
return(flag);
}
例 求學(xué)生的平均成績(jī)
#include
float average(int stu[10], int n);
void main()
{ int score[10], i;
float av;
printf("Input 10 scores:\\n");
for( i=0; i<10; i++ )
scanf("%d", &score[i]);
av=average(score,10);
printf("Average is:%.2f", av);
}
float average(int stu[10], int n)
{ int i;
float av,total=0;
for( i=0; ireturn av;
}
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4367瀏覽量
64059 -
程序控制
+關(guān)注
關(guān)注
0文章
14瀏覽量
7164 -
調(diào)用函數(shù)
+關(guān)注
關(guān)注
0文章
11瀏覽量
2389
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言程序的main函數(shù)免費(fèi)下載
C語(yǔ)言入門(mén)教學(xué)之函數(shù)資料總結(jié)免費(fèi)下載
C語(yǔ)言程序設(shè)計(jì)實(shí)用教程之函數(shù)詳細(xì)介紹和應(yīng)用

LED閃爍開(kāi)發(fā)之while循環(huán)函數(shù)和delay延時(shí)函數(shù)的資料概述

C語(yǔ)言程序設(shè)計(jì)教程課件之函數(shù)的詳細(xì)資料說(shuō)明

MySQL流程函數(shù)的操作方法

STM32 之 標(biāo)準(zhǔn)外設(shè)版USB驅(qū)動(dòng)庫(kù)詳解(架構(gòu)+文件+函數(shù)+使用說(shuō)明+示例程序)

STM32零基礎(chǔ)學(xué)習(xí)-C語(yǔ)言復(fù)習(xí)之函數(shù)(1)

C程序流程設(shè)計(jì)之選擇結(jié)構(gòu)

評(píng)論