




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第7單元
函數(shù)摘要
7.1函數(shù)定義7.2函數(shù)調(diào)用7.2.1函數(shù)調(diào)用的形式7.2.2參數(shù)的傳遞方式7.2.3函數(shù)的返回值7.2.4函數(shù)的參數(shù)類型7.3函數(shù)的嵌套調(diào)用7.4函數(shù)的遞歸調(diào)用7.5函數(shù)的聲明7.6變量的作用域和存儲(chǔ)類別7.6.1變量的作用域7.6.2變量的存儲(chǔ)類別問題1:如何定義函數(shù)?問題2:如何調(diào)用函數(shù)7.1函數(shù)定義7.1函數(shù)定義庫函數(shù)格式化輸入、輸出函數(shù)printf()scanf()字符串連接函數(shù)strcat(str1,str2)求字符串長度函數(shù)strlen(str)用戶自定義函數(shù)函數(shù)名字函數(shù)參數(shù)函數(shù)返回值函數(shù)功能返回值類型
函數(shù)名([形式參數(shù)列表]){
函數(shù)體}7.1函數(shù)定義返回值類型:指定函數(shù)返回值的數(shù)據(jù)類型。如果函數(shù)沒有返回值,則為void。函數(shù)名:指定函數(shù)的名稱,是用戶自定義的標(biāo)識(shí)符。形式參數(shù)列表:參數(shù)是調(diào)用函數(shù)時(shí)傳入的數(shù)據(jù),函數(shù)定義時(shí)需要指定函數(shù)參數(shù)的名稱和數(shù)據(jù)類型。函數(shù)體:大括號(hào)“{}”括起來的部分,用于實(shí)現(xiàn)該函數(shù)的功能,是C語言語句7.1函數(shù)定義【例】定義一個(gè)函數(shù),實(shí)現(xiàn)兩個(gè)整數(shù)的求和運(yùn)算。voidadd(intx,inty){ intresult; result=x+y; printf("%d",result);}voidadd(){ intx,y,result; scanf("%d%d",&x,&y); result=x+y; printf("%d",result);}有返回值函數(shù)無返回值函數(shù)有參函數(shù)無參函數(shù)7.1函數(shù)定義7.1函數(shù)定義函數(shù)時(shí)構(gòu)成C程序的基本單位一個(gè)源程序文件可以有多個(gè)函數(shù)一個(gè)源程序文件只能有一個(gè)main函數(shù),而且必須有一個(gè)main函數(shù)C99標(biāo)準(zhǔn)中對(duì)main函數(shù)的返回值類型定義是int。main函數(shù)intmain(){…….
return0;}7.2函數(shù)調(diào)用7.2.1函數(shù)調(diào)用的形式
要想執(zhí)行函數(shù),需要在main()函數(shù)中調(diào)用它。C語言程序必須有一個(gè)主函數(shù)main(),而且只有一個(gè)主函數(shù)main(),程序的運(yùn)行從主函數(shù)開始,主函數(shù)調(diào)用其它的函數(shù)。無參函數(shù)的調(diào)用有參函數(shù)的調(diào)用7.2.1函數(shù)調(diào)用的形式7.2.1函數(shù)調(diào)用的形式1.無參函數(shù)的調(diào)用7.2.1函數(shù)調(diào)用的形式1.無參函數(shù)的調(diào)用【例】輸出以下結(jié)果如圖所示,通過函數(shù)調(diào)用實(shí)現(xiàn)。7.2.1函數(shù)調(diào)用的形式
在輸出的結(jié)果中,第一行和第三行分別是一行“_”號(hào),使用模塊化編程思想,用一個(gè)函數(shù)show_single實(shí)現(xiàn)輸出一行“_”號(hào)的功能,用一個(gè)函數(shù)show_txt實(shí)現(xiàn)輸出第二行的信息,main函數(shù)中調(diào)用這兩個(gè)函數(shù)。#include<stdio.h>voidadd(intx,inty){ intresult; result=x+y; printf("x+y=%d\n",result);}main(){ add(5,10);}7.2.1函數(shù)調(diào)用的形式2.有參函數(shù)的調(diào)用與無參函數(shù)相比,有參函數(shù)在調(diào)用時(shí),需要調(diào)用者傳入?yún)?shù)值。7.2函數(shù)調(diào)用7.2.2參數(shù)的傳遞方式7.2.2參數(shù)的傳遞方式#include<stdio.h>voidadd(intx,inty){ intresult; result=x+y; printf("%d+%d=%d\n",x,y,result);}intmain(){ add(5,10);//調(diào)用函數(shù)add return0;}【例】定義一個(gè)函數(shù),實(shí)現(xiàn)兩個(gè)整數(shù)的求和運(yùn)算。形參實(shí)參7.2.2參數(shù)的傳遞方式1、實(shí)參可以是常量、變量或表達(dá)式,但是必須有確定的值。2、實(shí)參與形參必須:
個(gè)數(shù)相等
順序?qū)?yīng)
類型匹配7.2.2參數(shù)的傳遞方式(1)函數(shù)add被調(diào)用前,形參x和y并不占用內(nèi)存空間。(2)函數(shù)add被main函數(shù)調(diào)用時(shí),形參x和y被分配內(nèi)存空間,并且被實(shí)參5和10分別賦值。函數(shù)調(diào)用過程中的參數(shù)傳遞如圖所示。(3)函數(shù)add執(zhí)行期間,由于形參x和y已有值,所以可以執(zhí)行x+y操作,并且將結(jié)果輸出。(4)函數(shù)add執(zhí)行結(jié)束后,形參x和y的內(nèi)存空間被釋放。
7.2.2參數(shù)的傳遞方式#include<stdio.h>voidswap(intx,inty){
inttemp;
printf("函數(shù)內(nèi)部
交換之前:x=%d,y=%d\n",x,y);
temp=x;
x=y;
y=temp;
printf("函數(shù)內(nèi)部
交換之后:x=%d,y=%d\n",x,y);}intmain(){
intnum1,num2;
scanf("%d%d",&num1,&num2);
printf("交換之前:num1=%d,num2=%d\n",num1,num2);
swap(num1,num2);
printf("交換之后:num1=%d,num2=%d\n",num1,num2);
return0;}7.2.2參數(shù)的傳遞方式值傳遞思考num1和num2的值為什么沒有交換?7.2函數(shù)調(diào)用7.2.3函數(shù)的返回值7.2.3函數(shù)的返回值返回值類型
函數(shù)名([形式參數(shù)列表]){
……… return(表達(dá)式);}void函數(shù)名([形式參數(shù)列表]){
………}
如果想要通過函數(shù)調(diào)用使主調(diào)函數(shù)得到一個(gè)值,這個(gè)值就是函數(shù)的返回值。函數(shù)的返回值通過函數(shù)體中的return語句獲得。7.2.3函數(shù)的返回值#include<stdio.h>intadd(intx,inty){ intresult; result=x+y; returnresult;}intmain(){ intsum; sum=add(5,10); printf("%d\n",sum); return0;}【例】7.2.3函數(shù)的返回值函數(shù)被調(diào)用的位置可以有三種方式:(1)函數(shù)語句例如:fun();(2)函數(shù)表達(dá)式
例如:sum=add(5,10)。(3)函數(shù)參數(shù)
例如:printf("處理結(jié)果1::%d\n",add(5,10));7.2函數(shù)調(diào)用7.2.4函數(shù)的參數(shù)類型7.2.4函數(shù)的參數(shù)類型intmin(intarray[5])找出最低分intmax(intarray[5])找出最高分【例】使用函數(shù)實(shí)現(xiàn)下面功能。某位同學(xué)一學(xué)期有5門課程,根據(jù)每門課程的得分情況,找出其最低分和最高分。7.2.4函數(shù)的參數(shù)類型
當(dāng)函數(shù)的參數(shù)類型是數(shù)組時(shí),實(shí)參向形參傳遞的是數(shù)組首元素的地址,這種傳遞方式被稱為“地址傳遞”。值傳遞:實(shí)參和形參占用不同的存儲(chǔ)單元,只是存儲(chǔ)的值相同。地址傳遞:實(shí)參和形參占用相同的存儲(chǔ)單元。地址傳遞7.2.4函數(shù)的參數(shù)類型【例】某位同學(xué)第一學(xué)期有3門課程,第二學(xué)期有5門課程,根據(jù)每門課程的得分情況,找出每個(gè)學(xué)期中最高分和最低分。intmin(intarray[],intlen)//定義函數(shù)時(shí)不指定形參數(shù)組array的大小{ intminnum=array[0]; for(inti=1;i<len;i++) { if(array[i]<minnum) minnum=array[i]; } returnminnum;}7.3函數(shù)的嵌套調(diào)用7.3函數(shù)的嵌套調(diào)用#include<stdio.h>voidfun2(){
printf("調(diào)用fun2()函數(shù)\n");}voidfun1(){
printf("調(diào)用fun1()函數(shù)\n");
fun2();}intmain(){
fun1();
return0;}
函數(shù)的定義是獨(dú)立的,在一個(gè)函數(shù)中不能嵌套定義另外一個(gè)函數(shù)。但是,函數(shù)可以嵌套調(diào)用,即在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)。【例】7.4函數(shù)的遞歸調(diào)用7.4函數(shù)的遞歸調(diào)用voidfun(){ fun();}
在調(diào)用fun函數(shù)時(shí),又要調(diào)用fun函數(shù),這就是fun函數(shù)的遞歸調(diào)用。但是,這里fun函數(shù)的調(diào)用是無終止的,程序中不應(yīng)該出現(xiàn)。函數(shù)的遞歸調(diào)用必須要有終止條件,通常在函數(shù)定義時(shí)通過if語句控制。
【例】計(jì)算1~n之間整數(shù)之和。7.4函數(shù)的遞歸調(diào)用
7.4函數(shù)的遞歸調(diào)用#include<stdio.h>intfun(intn){ if(n==1)//遞歸調(diào)用結(jié)束條件 return1; else returnn+fun(n-1);//fun函數(shù)的遞歸調(diào)用}intmain(){ intsum; sum=fun(4); printf("1~4之間的整數(shù)和是%d\n",sum); return0; }
7.4函數(shù)的遞歸調(diào)用
【例】輸出斐波那契數(shù)列(FibonacciSequence)的前20個(gè)數(shù)。斐波那契數(shù)列,又稱黃金分割數(shù)列,因它是數(shù)學(xué)家萊昂納多?斐波那契以兔子繁殖為例子而引入的,故又稱為“兔子數(shù)列”。斐波那契數(shù)列可以這樣描述,數(shù)列的第1個(gè)數(shù)是1,第2個(gè)數(shù)是1,以后每個(gè)數(shù)是其前面兩個(gè)數(shù)的和,即1,1,2,3,5,8,13,21,34,55,…。利用遞歸的方法分析斐波那契數(shù)列,可以得到遞歸公式:7.4函數(shù)的遞歸調(diào)用7.5函數(shù)的聲明7.5函數(shù)的聲明1.函數(shù)聲明的方法
函數(shù)定義時(shí)的首行被稱為函數(shù)原型,函數(shù)聲明時(shí)只需要在函數(shù)的原型后面加上“;”。例如: intadd(intx,inty);
在函數(shù)聲明時(shí),形參名也可以省略。例如:intadd(int,int);7.5函數(shù)的聲明2.函數(shù)聲明的位置函數(shù)聲明在主調(diào)函數(shù)的內(nèi)部。#include<stdio.h>intmain(){intadd(int,int); intsum; sum=add(5,10); printf("%d\n",sum); return0;}#include<stdio.h>intadd(int,int);intmain(){
………….}函數(shù)聲明在主調(diào)函數(shù)的外部。7.5函數(shù)的聲明用戶自定義函數(shù)的使用包括3個(gè)環(huán)節(jié):函數(shù)聲明函數(shù)定義函數(shù)調(diào)用7.5變量的作用域和存儲(chǔ)類別7.5.1變量的作用域7.6.1變量的作用域1.局部變量
在函數(shù)內(nèi)定義的變量,它的作用域是本函數(shù)內(nèi)。2.全局變量
在函數(shù)外定義的變量,它的作用域是整個(gè)源程序文件內(nèi)。7.6.1變量的作用域1.局部變量#include<stdio.h>voidfun(){ intx=6; printf("fun函數(shù):x=%d\n",x);}intmain(){ intx=8; fun(); printf("main函數(shù):x=%d\n",x); return0;}7.6.1變量的作用域1.局部變量函數(shù)內(nèi)定義的變量函數(shù)的形參復(fù)合語句內(nèi)定義的變量7.6.1變量的作用域1.局部變量#include<stdio.h>main(){inti=1,j=3;{inti=0;i+=j*2;printf("i=%d,j=%d\n",i,j);}printf("i=%d,j=%d\n",i,j);}7.6.1變量的作用域2.全局變量#include<stdio.h>intx=10;//全局變量xvoidfun(){ printf("fun函數(shù):x=%d\n",x);}intmain(){ fun(); printf("main函數(shù):x=%d\n",x); return0;}7.6.1變量的作用域2.全局變量【例】分析程序中全局變量與局部變量同名時(shí)各自的作用范圍。inta=3,b=5;//定義全局變量a,bintmax(inta,intb)//定義局部變量a,b,只在max函數(shù)中有效{
intc;c=a>b?a:b;returnc;}intmain(){ inta=10;//定義局部變量a,只在main函數(shù)中有效 printf("%d\n",max(a,b)); return0;}7.5變量的作用域和存儲(chǔ)類別7.5.2變量的存儲(chǔ)類別7.6.2變量的存儲(chǔ)類別動(dòng)態(tài)存儲(chǔ)方式在程序運(yùn)行期間由系統(tǒng)動(dòng)態(tài)的分配存儲(chǔ)空間靜態(tài)存儲(chǔ)方式在程序運(yùn)行期間由系統(tǒng)分配固定的存儲(chǔ)空間7.6.2變量的存儲(chǔ)類別變量定義的完整形式是:
存儲(chǔ)類別
數(shù)據(jù)類型
變量名;變量的存儲(chǔ)類別:自動(dòng)的(auto)靜態(tài)的(static)寄存器的(register)外部的(extern)7.6.2變量的存儲(chǔ)類別1.局部變量的存儲(chǔ)類別自動(dòng)變量(auto)
在調(diào)用函數(shù)時(shí),系統(tǒng)為這些變量分配存儲(chǔ)空間,當(dāng)函數(shù)調(diào)用結(jié)束時(shí)就自動(dòng)釋放這些空間。靜態(tài)變量(static)
在函數(shù)調(diào)用結(jié)束后并不釋放存儲(chǔ)空間,而在下一次再調(diào)用該函數(shù)時(shí),該變量已有值。寄存器變量(register)7.6.2變量的存儲(chǔ)類別#include<stdio.h>intfun(intn){ autointx=0;//自動(dòng)變量x staticinty=3;//靜態(tài)變量y x++; y++; returnn+x+y;}intmain(){ intn=2,i; for(i=0;i<3;i++) printf("%d,",fun(2)); return0;}7.6.2變量的存儲(chǔ)類別2.全局變量的存儲(chǔ)類別靜態(tài)存儲(chǔ)類別7.6.2變量的存儲(chǔ)類別(1)將全局變量的作用域擴(kuò)展到一個(gè)文件內(nèi)#include<stdio.h>voidfun();intmain(){
externintx;//把全局變量的作用域擴(kuò)展到從此處開始
fun(); printf("main函數(shù):x=%d\n",x);
//函數(shù)main中不能引用全局變量x,程序編譯會(huì)報(bào)錯(cuò)。 return0;}
intx=10;voidfun(){ printf("fun函數(shù):x=%d\n",x);}7.6.2變量的存儲(chǔ)類別(2)將全局變量的作用域擴(kuò)展到其他文件文件file1:#include<stdio.h>#include"file2.cpp"intx=10;//全局變量xintmain(){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 股份制企業(yè)合同審查文書規(guī)范指南
- 小工程施工安全合同協(xié)議書
- 《加法結(jié)合律 》(教學(xué)設(shè)計(jì)) -2024-2025學(xué)年 北師大版四年級(jí)數(shù)學(xué)上冊
- 咸寧職業(yè)技術(shù)學(xué)院《電子測試技術(shù)(下)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西藍(lán)天航空職業(yè)學(xué)院《地學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 汕頭職業(yè)技術(shù)學(xué)院《環(huán)境前沿與熱點(diǎn)講座》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶科技學(xué)院《室內(nèi)軟裝飾設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州護(hù)理職業(yè)技術(shù)學(xué)院《軟件體系結(jié)構(gòu)與設(shè)計(jì)模式》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北美術(shù)學(xué)院《牙體牙髓病學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆輕工職業(yè)技術(shù)學(xué)院《管理文秘》2023-2024學(xué)年第二學(xué)期期末試卷
- 小學(xué)校長任期五年工作目標(biāo)(2024年-2029年)
- 2022-2024年浙江中考英語試題匯編:閱讀理解(說明文)教師版
- 第1課 中國古代政治制度的形成與發(fā)展 課件-歷史統(tǒng)編版(2019)選擇性必修1國家制度與社會(huì)治理
- 小學(xué)生思政課課件
- 2016屆高三備考建議
- 北師大版六年級(jí)下冊數(shù)學(xué)全冊表格式教案
- 2021年阿里巴巴全球數(shù)學(xué)競賽預(yù)選賽試題及參考答案
- 龐中華硬筆字帖-2500常用字-硬筆書法-描紅-全集-打印版
- 上海市崇明區(qū)2025屆高三上學(xué)期一模 英語試卷(含答案)
- 突發(fā)事件應(yīng)急預(yù)案管理辦法培訓(xùn)課件
- 國家電投《新能源電站單位千瓦造價(jià)標(biāo)準(zhǔn)值(2024)》
評(píng)論
0/150
提交評(píng)論