




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第八章函數(shù)8.1函數(shù)概述8.2函數(shù)定義的一般形式8.3函數(shù)參數(shù)和函數(shù)的值8.4函數(shù)的調(diào)用8.5函數(shù)的嵌套調(diào)用8.7數(shù)組作為函數(shù)參數(shù)8.8局部變量和全局變量8.9變量的存儲類別8.1函數(shù)概述一、有關(guān)C函數(shù)的介紹一個源程序文件由一個或多個函數(shù)組成(一個源程序文件是一個編譯單位)2.一個C程序由一個或多個源程序文件組成3.C程序從main函數(shù)開始執(zhí)行,
調(diào)用其他函數(shù)后再返回到main函數(shù)4.所有函數(shù)都是平行的,定義函數(shù)時是互相獨(dú)立的,
函數(shù)之間可以互相調(diào)用,但是不能調(diào)用main函數(shù)#include<stdio.h>#include<math.h>main(){inta,b,c;
scanf(“%d%d”,&a,&b);c=a+abs(b);
printf(“c=%d\n”,c);}二、C函數(shù)的分類1.從用戶使用角度分為:標(biāo)準(zhǔn)函數(shù)和用戶自定義函數(shù)2.從函數(shù)的形式分為:無參函數(shù)和有參函數(shù)#include<stdio.h>intmax(intx,inty){intz;if(x>y)z=x;elsez=y;
return(z);}main(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“max=%d”,c);}函數(shù)定義函數(shù)調(diào)用形式參數(shù)#include<stdio.h>main(){printf(“******\n”);printf(“good\n”);printf(“******\n”);}#include<stdio.h>list(){printf(“******\n”);}main(){list();printf(“good\n”);
list();}實(shí)在參數(shù)(3)形式參數(shù)①書寫格式:每一個參數(shù)都要寫上數(shù)據(jù)類型和參數(shù)名,參數(shù)之間以逗號分隔。②作用:表示將從主函數(shù)中接收哪些類型的信息例:intmax(intx,inty){intz;z=x>y?x:y;return(z);}(4)函數(shù)體:由變量聲明和語句組成①函數(shù)體內(nèi)定義的變量是局部量,只在執(zhí)行該函數(shù)時存在②函數(shù)體可以為空(即存在空函數(shù))f(){}8.3函數(shù)參數(shù)和函數(shù)的值一、形式參數(shù)和實(shí)在參數(shù)1.形式參數(shù):在定義函數(shù)時寫在函數(shù)名后面的括號內(nèi)的變量2.實(shí)在參數(shù):在調(diào)用函數(shù)時寫在函數(shù)名后面的括號內(nèi)的變量3.說明程序在編譯時不為形參分配存儲空間,只有當(dāng)函數(shù)被調(diào)用時,形參被分配存儲空間,在調(diào)用結(jié)束后,形參所占的空間被釋放(2)實(shí)參可以是常量,變量或表達(dá)式(有確定的值)(3)實(shí)參和形參的類型應(yīng)相同或賦值相容(4)實(shí)參對形參的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞二、函數(shù)的返回值1.函數(shù)的返回值通過函數(shù)中return語句獲得
return語句的作用:使流程返回主調(diào)函數(shù);
將函數(shù)值送回到調(diào)用表達(dá)式中2.函數(shù)類型決定函數(shù)返回值的類型一般函數(shù)值的類型和return語句中表達(dá)式的類型應(yīng)一致如果二者不一致,則以函數(shù)值的類型為準(zhǔn)3.有的函數(shù)中沒有return語句,因?yàn)樗恍枰獛Щ刂?這時可以將函數(shù)類型定義為void型voidlist(){printf(“******\n”);}4.一個函數(shù)允許有一個或多個return語句,但每個return后的表達(dá)式類型要相同;當(dāng)執(zhí)行到其中任何一個return語句時會立即返回主調(diào)函數(shù)intfun(intn){if(n>10)return(n);elsereturn(2*n);}
4.函數(shù)調(diào)用過程:(1)形參與實(shí)參各自占有一個獨(dú)立的存儲空間
(2)形參的存儲空間在函數(shù)被調(diào)用時才分配
(3)函數(shù)返回時,形參占據(jù)的臨時存儲區(qū)被撤消
特點(diǎn):函數(shù)中對形參變量的操作不會影響到實(shí)參#include<stdio.h>intf(intx,inty){x=x+2;y=y*2;
return(x+y);}main(){inta,b,c;scanf(“%d%d”,&a,&b);
c=f(a,b);
printf(“%d\n”,c);}假設(shè)輸入為:35main函數(shù)f函數(shù)abcxy353551015#include<stdio.h>main(){intf(intx,inty);inta,b,c;scanf(“%d%d”,&a,&b);c=f(a,b);printf(“%d\n”,c);}intf(intx,inty){x=x+2;y=y*2;return(x+y);}#include<stdio.h>intf(intx,inty);main(){inta,b,c;scanf(“%d%d”,&a,&b);c=f(a,b);printf(“%d\n”,c);}intf(intx,inty){x=x+2;y=y*2;return(x+y);}4.聲明的位置:(1)在main函數(shù)中聲明(2)所有函數(shù)進(jìn)行外部聲明函數(shù)聲明函數(shù)聲明函數(shù)定義函數(shù)定義8.5函數(shù)的嵌套調(diào)用C語言規(guī)定函數(shù)定義都是平行的、獨(dú)立的,即函數(shù)不能進(jìn)行嵌套的定義,但是函數(shù)可以進(jìn)行嵌套調(diào)用
.
函數(shù)的嵌套調(diào)用是指在調(diào)用一個函數(shù)的過程中調(diào)用另一個函數(shù).main(){:fun();:}voidfun(void){:g();:}main函數(shù)fun函數(shù)g函數(shù)調(diào)用調(diào)用嵌套調(diào)用#include<stdio.h>voidfa(void){putchar(‘a(chǎn)’);}voidfb(void){fa();putchar(‘t’);}main(){putchar(‘c’);fb();}main輸出c調(diào)用fb結(jié)束fb調(diào)用fa輸出tfa輸出a結(jié)束結(jié)束輸出結(jié)果:cat8.6函數(shù)的遞歸調(diào)用1.函數(shù)遞歸調(diào)用的概念:在調(diào)用一個函數(shù)的過程中又直接或間接地調(diào)用該函數(shù)自己復(fù)習(xí)上次內(nèi)容(提問)1、函數(shù)分類:標(biāo)準(zhǔn)自定義有參無參2、函數(shù)定義:intmax(intx,inty){}3、函數(shù)形參實(shí)參4、函數(shù)調(diào)用:函數(shù)語句函數(shù)表達(dá)式函數(shù)參數(shù)5、函數(shù)返回值:return(z)6、函數(shù)聲明:在main()中聲明在所有函數(shù)外部聲明7、函數(shù)嵌套調(diào)用8.7數(shù)組作為函數(shù)參數(shù)一、數(shù)組元素作函數(shù)參數(shù)其用法與變量作實(shí)在參數(shù)一樣,是單向傳遞。例已知10個三角形的邊,求它們的面積。#include“math.h”floatarea(floata,floatb,floatc){floatp,s;p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));return(s);}數(shù)組元素就是下標(biāo)變量,它與普通變量并無區(qū)別。數(shù)組元素只能用作函數(shù)實(shí)參,其用法與普通變量完全相同:在發(fā)生函數(shù)調(diào)用時,把數(shù)組元素的值傳送給形參,實(shí)現(xiàn)單向值傳送。例寫一函數(shù),統(tǒng)計字符串中字母的個數(shù)。intp(charc){if(c>='a'&&c<='z'||c>='A'&&c<='Z')
return(1);elsereturn(0);}main(){inti,num=0;charstr[255];printf("Inputastring:");gets(str);for(i=0;str[i]!='\0';i++)if(p(str[i]))num++; puts(str); printf("num=%d\n",num);
}
說明:(1)用數(shù)組元素作實(shí)參時,只要數(shù)組類型和函數(shù)的形參類型一致即可,并不要求函數(shù)的形參也是下標(biāo)變量。換句話說,對數(shù)組元素的處理是按普通變量對待的。(2)在普通變量或下標(biāo)變量作函數(shù)參數(shù)時,形參變量和實(shí)參變量是由編譯系統(tǒng)分配的兩個不同的內(nèi)存單元。在函數(shù)調(diào)用時發(fā)生的值傳送,是把實(shí)參變量的值賦予形參變量。#include<stdio.h>main(){inti,sum,s[40];floatave;for(i=0;i<=39;i++)scanf(“%d”,&s[i]);
sum=0;for(i=0;i<=39;i++)sum=sum+s[i];ave=sum/40;
printf(“ave=%f”,ave);}#include<stdio.h>floataverage(ints[40]);main(){inti,sc[40];floataver;for(i=0;i<=39;i++)scanf(“%d”,&sc[i]);
aver=average(sc);printf(“aver=%f”,aver);}floataverage(ints[40]){intsum,i;floatave;
sum=0;for(i=0;i<=39;i++)sum=sum+s[i];
ave=sum/40;return(ave);}例:求某班成績的平均分?jǐn)?shù)組占用存儲空間sc[0]sc[1]sc[2]::::sc[39]mainaverages[0]s[1]s[2]::::s[39]main輸入sc的40個元素aver=average(sc)輸出aver調(diào)用averagescssum=0計算sum返回ave的值結(jié)束ave=sum/40788490::::668.8(8.9)變量的作用域和存儲方式一、局部變量:指在一個函數(shù)內(nèi)部定義的變量,它只在本函數(shù)的范圍內(nèi)有效,在此函數(shù)之外不能使用這些變量說明:1.main函數(shù)中定義的變量是局部變量,它們只能在main函數(shù)中使用2.不同函數(shù)中可以使用相同名字的變量,它們互不干擾3.形式參數(shù)也是局部變量4.可在一個復(fù)合語句中定義變量,它們只在復(fù)合語句內(nèi)有效變量分類按生存期靜態(tài)存儲變量動態(tài)存儲變量按作用域全局變量局部變量#include<stdio.h>sort(inta[],intn);main(){intb[6],i;for(i=0;i<6;i++)scanf(“%d”,&b[i]);sort(b,6);for(i=0;i<6;i++)printf(“%3d”,b[i]);
}
sort(
inta[],intn){
inti,j,k;
for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[k]>a[j])k=j;if(k!=i){intt;
t=a[i];a[i]=a[k];a[k]=t;}}}main函數(shù)中的局部變量:b和isort函數(shù)中的局部變量:i,j,k參數(shù)a和n也是局部變量t是復(fù)合語句中的局部變量,只能在以下3個賦值語句中使用二、全局變量:指在所有函數(shù)之外定義的變量(外部變量),
它的有效范圍從定義變量的位置開始到本源文件結(jié)束#include<stdio.h>intp=1,q=5;floatf1(inta){floatr;:}ints[10];intf2(intb,intc);{intsum;:}floatm,n;main(){floatx,y;:}全局變量m和n的有效范圍全局變量數(shù)組s的有效范圍全局變量p和q的有效范圍2.建議不要過多的使用全局變量
(1)全局變量在程序的執(zhí)行過程中一直占用存儲單元
(2)它使函數(shù)的通用性降低
(3)它會降低程序的清晰性3.在一個源文件中如果局部變量和全局變量同名,在局部變量起作用的范圍內(nèi),全局變量不起作用#include<stdio.h>intx=10;f(){intx=1;x=x+1;printf(“x=%d\n”,x);}main(){x=x+1;
printf(“x=%d\t”,x);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自卸汽車運(yùn)碎石土施工方案
- 2025年金屬復(fù)合材項(xiàng)目發(fā)展計劃
- 黑龍江水下封堵施工方案
- 水泥屋頂光伏施工方案
- 河北立體綠化施工方案
- 數(shù)控加工工藝與編程技術(shù)基礎(chǔ) 教案 模塊三 項(xiàng)目三 自動編程(1-2)
- 2025年山東省聊城市高三下學(xué)期一模生物試題(原卷版+解析版)
- 智研咨詢發(fā)布:2025年中國制氫催化電極行業(yè)市場全景調(diào)查及投資前景預(yù)測報告
- 【市占率證明權(quán)威指南】制藥裝備行業(yè)市占率全解(智研咨詢發(fā)布)
- 低碳技術(shù)的研發(fā)與應(yīng)用策略
- 基于核心素養(yǎng)導(dǎo)向大單元教學(xué)設(shè)計培訓(xùn)課件(共41張ppt)
- 滁州康華電子材料有限公司(5G 基站)集成線路板相關(guān)材料項(xiàng)目環(huán)境影響報告書
- 工程項(xiàng)目客戶評價表
- 兒童安全座椅行業(yè)基本風(fēng)險特征分析
- 景觀藝術(shù)原理-670年代以來的景觀設(shè)計新思潮
- 餓了么外賣送餐規(guī)章制度
- GB/T 14002-1992勞動定額術(shù)語
- GB/T 12688.1-2011工業(yè)用苯乙烯試驗(yàn)方法第1部分:純度和烴類雜質(zhì)的測定氣相色譜法
- 9-馬工程《藝術(shù)學(xué)概論》課件-第九章(20190403)【已改格式】.課件電子教案
- 體育賽事管理課程第一篇第一章體育賽事運(yùn)作管理緒論課件
- 社區(qū)工作者經(jīng)典備考題庫(必背300題)
評論
0/150
提交評論