




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、會(huì)計(jì)學(xué)1第五部分函數(shù)第五部分函數(shù)abcdefgS1S2S3xyz)(21)()(zyxczcycxccarea 5.1.1 引例 已知五邊形的各條邊的長(zhǎng)度,計(jì)算其面積 計(jì)算多邊形面積,可將多邊形分解成若干個(gè)三角形 計(jì)算三角形面積的公式如下: 5.1 函數(shù)的定義、調(diào)用與說(shuō)明第1頁(yè)/共58頁(yè)用前面所學(xué)的知識(shí)實(shí)現(xiàn):#include math.h#include iostream.hvoid main()float a,b,c,d,e,f,g,p1,p2,p3,s1,s2,s3,s; cinabcdefg; p1=(a+b+c)/2; s1=sqrt(p1*(p1-a)*(p1-b)*(p1-c);
2、p2=(c+d+e)/2; s2=sqrt(p2*(p2-c)*(p2-d)*(p2-e); p3=(e+f+g)/2; s3=sqrt(p3*(p3-e)*(p3-f)*(p3-g); s=s1+s2+s3; coutsabcdefg; s=area(a,b,c)+area(c,d,e) +area(e,f,g); coutsy) z=x; else z=y; return z; /將大的數(shù)返回void main() int a,b,c,m; cinabc; m=max(a,b); m=max(c,m); coutmendl; 第4頁(yè)/共58頁(yè)【例5.2】編一程序,輸出如右圖形。 void
3、pic(int n) for(int i=0;in;i+) cout.width(10-i); /控制每行輸出的起始位 for(int j=0;j2*i+1;j+)cout*; coutendl; void main() pic(4); pic(6); 將n行構(gòu)成的三角形獨(dú)立出來(lái)編一函數(shù): 第5頁(yè)/共58頁(yè)說(shuō)明:函數(shù)類型指函數(shù)返回值的數(shù)據(jù)類型函數(shù)體由語(yǔ)句和其它分程序組成。形式參數(shù)可以為空,但圓括號(hào)不能省略。函數(shù)體中不允許再嵌套定義函數(shù)對(duì)沒(méi)有返回值的函數(shù),函數(shù)類型定為void型(無(wú)類型或空類型)。第6頁(yè)/共58頁(yè)函數(shù)名(實(shí)在參數(shù)表) 注意: 實(shí)參與形參的個(gè)數(shù)、位置與類型必須一致。它可以是同類型的
4、常量、變量或表達(dá)式。 調(diào)用的形式可以是表達(dá)式,也可以是語(yǔ)句。 函數(shù)定義中的形參只有當(dāng)發(fā)生函數(shù)調(diào)用時(shí),才被分配內(nèi)存單元。函數(shù)調(diào)用的過(guò)程: 第7頁(yè)/共58頁(yè)#include iostream.h#include iomanip.hvoid main() pic(4); /以語(yǔ)句形式調(diào)用 pic(6);void pic(int n) for(int i=0;in;i+) cout.width(10-i); for(int j=0;j2*i+1;j+) cout*; coutmn;coutgcd(m,n)endl;coutsct(m,n)ab; c=max(a,b); coutcy?x:y ; 【例5
5、.4】函數(shù)說(shuō)明示例 省略參數(shù)名注意: 函數(shù)調(diào)用在前,定義在后,則必須對(duì)函數(shù)進(jìn)行說(shuō)明,函數(shù)說(shuō)明可以放在函數(shù)調(diào)用之前所在的函數(shù)內(nèi),也可以放在源文件開頭、函數(shù)的外部。 函數(shù)說(shuō)明和函數(shù)定義在返回類型、函數(shù)名和參數(shù)表上必須要完全一致。第12頁(yè)/共58頁(yè)5.2.1 傳值參數(shù)特點(diǎn):形參的改變不會(huì)影響實(shí)參的值【例5.5】m是一個(gè)3位的正整數(shù),將滿足m、m2、m3均為回文數(shù)的正整數(shù)輸出。所謂回文數(shù)是指順讀與倒讀數(shù)字相同,如4、151、34543。分析:將正整數(shù)的每位數(shù)取出,構(gòu)造一個(gè)逆序的正整數(shù),若該數(shù)與原來(lái)的相同,即為回文數(shù)。bool palindrome(int x) int m=x,n=0,k; while
6、(x!=0) /構(gòu)造一逆序數(shù) k=x%10; n=n*10+k; x/=10; return m=n; 實(shí)參:常量、變量和表達(dá)式。形參:變量第13頁(yè)/共58頁(yè)#include iostream.hvoid swap(int x,int y)int temp; temp=x;x=y;y=temp;void main()int a,b;cinab;swap(a,b);couta=a b=bab; swap(&a,&b); coutabendl;void swap(int *x,int *y)int temp=*x;*x=*y;*y=temp; 第15頁(yè)/共58頁(yè)【例5.8】隨機(jī)生成10個(gè)1100之
7、間的數(shù)放在一維數(shù)組中,求其平均值及最大的元素值 。程序:#include iostream.h#include stdlib.hconst int N=10;void fun(float *p,float *p1,int *p2) float sum,max1; sum=max1=*p+; for(int i=1;iN;i+) if (max1*p) max1=*p; sum=sum+*p;p+; *p1=sum/N; *p2=max1;void main() float a10,aver,max,x; for(int i=0;i10;i+) x=rand()%100+1; ai=x; fun
8、(a,&aver,&max);/注意實(shí)參的寫法 coutavermaxendl;第16頁(yè)/共58頁(yè)【例5.9】字符串的復(fù)制#include iostream.hvoid copy_string(char *from, char *to) while(*from!=0) *to+=*from+; *to=0; void main() char a=I am a teacher., b=You are a student.; coutaendlbendl; copy_string(a,b); coutaendlbab;copy_string(a,b);couta bendl;delete a; d
9、elete b;若該二語(yǔ)句刪除,程序運(yùn)行時(shí)將異常終止。 第18頁(yè)/共58頁(yè)2形參為常指針 防止被調(diào)函數(shù)對(duì)實(shí)參所指對(duì)象的修改 #include iostream.h int f(const int * p) int a=100; a=*p; return a;void main() int x=5; coutf(&x); *p=a; return *p;錯(cuò)誤,不能修改const對(duì)象 第19頁(yè)/共58頁(yè)注意:若實(shí)參是常對(duì)象的地址,則形參必須定義為常指針。#include iostream.hint f(const int *p)int a=100; a=*p; return a;void main
10、() const int x=5; coutf(&x);形參不能定義為int *p第20頁(yè)/共58頁(yè)3函數(shù)返回值為指針 即函數(shù)的返回值可以是變量的地址、數(shù)組名或指針變量等。 如:float *fun(float x,float y);char *strcat(char *strDest,const char *strSource); 在說(shuō)明或定義返回值為指針的函數(shù)時(shí),只須在函數(shù)名前加一指針類型說(shuō)明符即可。第21頁(yè)/共58頁(yè)【例5.10】拼接兩個(gè)字符串s1和s2,將拼接后的字符串存于s1中返回。 char *strcat1(char *s1,const char *s2) char *p=s1;
11、 while(*p+); -p; while(*p+=*s2+) ; return(s1); 思考:若不定義為返回指針值的函數(shù),則程序應(yīng)如何修改?第22頁(yè)/共58頁(yè)注意:不能返回一個(gè)局部變量(在函數(shù)內(nèi)定義的變量)的地址#include iostream.hint *fun(int x) int y=x*x; return &y;void main() int a=5, *p; p=fun(a); coutab; swap(a,b); couta=ab=10&flag) /判斷是否降序數(shù) if(x/10%10=x%10) x/=10; else flag=0; return flag;第25頁(yè)/
12、共58頁(yè)特點(diǎn):在被調(diào)函數(shù)中對(duì)形參數(shù)組的任何改變均會(huì)影響實(shí)參所指地址里的內(nèi)容 。形參:數(shù)組名 實(shí)參:數(shù)組名或指針變量 【例5.12】對(duì)含有n個(gè)元素的整型數(shù)組a,從大到小進(jìn)行排序。 調(diào)用:sort(a,10);void sort(int x,int n) int i,j,k,w; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+)if(xkxj)k=j; if(i!=k)w=xi;xi=xk;xk=w; 數(shù)值型數(shù)組的元素個(gè)數(shù)一般須傳給形參第26頁(yè)/共58頁(yè)【例5.13】 求字符串長(zhǎng)度,并調(diào)用之。 int len(char s)int i=0; while(si!=0)i+
13、; return i; 調(diào)用: cout=0) count+; k=str1.GetLength(); str1=str1.Mid(i+1,k-i); i=str1.Find(sub); return count;第29頁(yè)/共58頁(yè)用自身的結(jié)構(gòu)來(lái)描述自身就稱為遞歸。最典型的例子是對(duì)階乘運(yùn)算: 特點(diǎn): 原始問(wèn)題可轉(zhuǎn)化為解決方法相同的新問(wèn)題; 新問(wèn)題的規(guī)模比原始問(wèn)題??; 新問(wèn)題又可轉(zhuǎn)化為解決方法相同的規(guī)模更小的新問(wèn)題,直至終結(jié)條件為止。第30頁(yè)/共58頁(yè)遞推回歸fac(2)=2*fac(1)fac(1)=1fac(4)=4*6fac(3)=3*2fac(2)=2*1fac(3)=3*fac(2)f
14、ac(4)=4*fac(3)【例5.15】編fac(n)=n! 的遞歸函數(shù)long fac(int n) if(n=1) return(1); return (n*fac(n-1);遞推過(guò)程每調(diào)用自身,當(dāng)前參數(shù)壓棧,直到達(dá)到遞歸結(jié)束條件?;貧w過(guò)程不斷從棧中彈出當(dāng)前的參數(shù),直到??铡K伎迹喝鬴ac函數(shù)中沒(méi)有語(yǔ)句 if(n=1) return(1);程序運(yùn)行結(jié)果將如何?第31頁(yè)/共58頁(yè)【例5.16】用遞歸函數(shù)實(shí)現(xiàn)將一個(gè)十進(jìn)制整數(shù)轉(zhuǎn)換成二至十六任意進(jìn)制的字符 void convert(int m,int r) char b17=0123456789ABCDEF;if(m!=0) convert(m
15、/r,r);cout=eps) w+=t; t=t*x/(n+); return w; void main() couts1=s(2.0); couts2=s(3.0); couts3=s(1.0,1e-5); 參數(shù)eps取默認(rèn)值1e-6參數(shù)eps的值為1e-5【例5.17】求下面級(jí)數(shù)的部分和。精度為: .!.!212nxxxsn第33頁(yè)/共58頁(yè) 默認(rèn)參數(shù)的說(shuō)明必須出現(xiàn)在函數(shù)調(diào)用之前。若一個(gè)函數(shù)說(shuō)明已給出參數(shù)的默認(rèn)值,則在函數(shù)定義中不允許再設(shè)置。 要求賦予默認(rèn)值的參數(shù)必須放在形參表列中的最右端。說(shuō)明:分析下面各例: void fun(int i, int j, int k, int m=3,
16、int n=4); 假設(shè)函數(shù)調(diào)用語(yǔ)句為: fun(1,2); /錯(cuò)誤,至少應(yīng)有三個(gè)實(shí)參 fun(10,20,30); /正確,m、n取默認(rèn)值 fun(10,20,30,40); /正確,m取40 、n取默認(rèn)值4 fun(10,20,30, ,50); /錯(cuò)誤,只能從左至右匹配第34頁(yè)/共58頁(yè)#include #include void main()int x1=-1; double x2=2.5; long x3=3L; coutabs(x1)endl; coutfabs(x2)endl; coutlabs(x3)endl; 不足:易出錯(cuò)、難記憶函數(shù)重載:一組參數(shù)(個(gè)數(shù)或類型)不同的函數(shù)共用
17、一個(gè)函數(shù)名。不同名函數(shù)實(shí)現(xiàn)同一類的操作第35頁(yè)/共58頁(yè)#include int abs(int x)return x0?x:-x; double abs(double x)return x0?x:-x; long abs(long x)return x0?x:-x; void main()int x1=1; double x2=2.5; long x3=3L; coutabs(x1)endl; coutabs(x2)endl; coutabs(x3)endl; 一. 參數(shù)類型不同的重載函數(shù)編譯器根據(jù)函數(shù)參數(shù)的類型來(lái)確定應(yīng)該調(diào)用哪個(gè)函數(shù)【例5.18】第36頁(yè)/共58頁(yè)二. 參數(shù)個(gè)數(shù)不同的重載函
18、數(shù)可見:重載使得函數(shù)的使用更加靈活、方便。 它體現(xiàn)了c+對(duì)多態(tài)性的支持一個(gè)名字,多個(gè)入口 。 【例5.19】 #include int min(int a,int b) return ab?a:b; int min(int a,int b,int c)int t=min(a,b); return min(t,c);int min(int a,int b,int c,int d)int t1=min(a,b); int t2=min(c,d); return min(t1,t2);void main() coutmin(13,5,4,9)endl; coutmin(-2,8,0)endl;編譯器
19、根據(jù)調(diào)用語(yǔ)句中實(shí)參的個(gè)數(shù)來(lái)確定應(yīng)該調(diào)用哪個(gè)函數(shù)注意:不要同時(shí)使用重載函數(shù)和缺省參數(shù)函數(shù)。第37頁(yè)/共58頁(yè) 使用函數(shù)重載需編寫多個(gè)函數(shù),而利用函數(shù)模板只需定義一個(gè)通用函數(shù)即可。 利用函數(shù)模板定義的函數(shù)稱為模板函數(shù),形式:template 類型 函數(shù)名( 參數(shù)表)#include template T min(T a,T b)return ab?a:b; void main() coutmin(3,5)endl; coutmin(8.5,5.6)endl;【例5.20】定義一個(gè)數(shù)據(jù)類型T使用模板函數(shù)時(shí),模板中的類型參數(shù)T用實(shí)參的類型替換第38頁(yè)/共58頁(yè)分析以下幾種模板函數(shù):template T
20、 fun1(T a,int b) /可含有模板參數(shù)表中未給出的數(shù)據(jù)類型 template /模板中可帶有多個(gè)參數(shù) void fun1(T1 a,T2 b,T3 c) template void fun1(int a,int b) /必須至少有一個(gè)參數(shù)的類型為模板的類型參數(shù) template void fun1(int a,int b) T i,j; 第39頁(yè)/共58頁(yè)【例5.21】定義一個(gè)通用的函數(shù),對(duì)n個(gè)數(shù)按遞增排序。 #include iostream.h template void sort(TEM x,int n) int i,j,k; TEM w; for(i=0;in-1;i+)
21、k=i; for(j=i+1;jxj)k=j; if(i!=k) w=xi;xi=xk;xk=w; void main()int i,a6=6,9,2,4,1,0;double b4=5.5,8.0,3.3,0;sort(a,10);sort(b,5);for(i=0;i10;i+)coutaiendl;for(i=0;i5;i+)coutbix; cout digit(x)endl;從下面三方面分析各變量作用域(可見性): 在什么范圍內(nèi)可以訪問(wèn) 空間概念生存期: 在什么時(shí)間存在 時(shí)間概念 初始化 全局變量(外部變量): 在函數(shù)外部定義的變量局部變量(內(nèi)部變量):在函數(shù)內(nèi)部定義的變量, 包括形
22、式參數(shù)【例5.22】第41頁(yè)/共58頁(yè) 作用域:從定義點(diǎn)開始到所在的分程序結(jié)束 生存期:開始執(zhí)行分程序就生成,分程序執(zhí)行結(jié)束就消亡 初始化:可以初始化,缺省值為隨機(jī)值。作用域不可以擴(kuò)展 #include iostream.h int f(int x)x+;int y=5; /auto int k=5;y+;return x+y; void main()int k=2; coutf(k)endl; coutf(k+1)endl; 缺省的存儲(chǔ)類別:auto注意:只有內(nèi)部變量存儲(chǔ)類別才能auto【例5.23】第42頁(yè)/共58頁(yè)作用域:從定義點(diǎn)開始到所在的分程序結(jié)束。生存期:程序的執(zhí)行周期初始化:可以
23、初始化,缺省值為0或0 。 初始化一次 在開始執(zhí)行程序時(shí)初始化作用域不可以擴(kuò)展一個(gè)函數(shù)可能被調(diào)用多次,前一次調(diào)用的結(jié)果帶到下一次去。#include iostream.hint fac(int n) static int f=1; f=f*n; return(f);void main()auto int i; for(i=1;i=5;i+) couti!=fac(i);【例5.24】第43頁(yè)/共58頁(yè)作用域:從定義點(diǎn)開始到所在的文件結(jié)束生存期:程序的整個(gè)執(zhí)行周期初始化:可以初始化,缺省值為0或0 。作用域可以擴(kuò)展: 向上擴(kuò)展 橫向擴(kuò)展,擴(kuò)展到另一個(gè)文件注意:擴(kuò)展的地方不能初始化第44頁(yè)/共58
24、頁(yè)#include iostream.hint m=10; void f1(int n) n=2*n;m=m/3; int n; void f2() n=5;m+;n+; void main() int n=2; f1(n); f2(); coutmnendl; 【例5.25】外部變量示例注意: 外部變量的作用域只限于定義處到文件結(jié)束,定義點(diǎn)之前的函數(shù)或其它文件中的函數(shù)不可以引用該外部變量。可以使用extern聲明符來(lái)擴(kuò)展外部變量的作用域 外部變量與局部變量同名,起作用的是局部變量第45頁(yè)/共58頁(yè)(1)作用域向定義點(diǎn)之前的函數(shù)擴(kuò)展 #include extern int i;void fun
25、() /extern int i; 錯(cuò)誤 couti;void g()i+;int i=5;void main() int j=20; coutj; g(); fun();#include extern int i; /不能初始化void fun() / extern int i; couti;int i=5;void main() int j=20; coutj; fun();第46頁(yè)/共58頁(yè)(2)作用域擴(kuò)展到另一個(gè)文件【例5.26】作用域橫向擴(kuò)展示例 /file1.cppextern max,min; #include iostream.hvoid main() void maxmin(
26、int x,int n); int a10=11,2,3,-4,5,6,7,8,0,20; maxmin(a,10); coutmax minendl;/file2.cppint max,min; void maxmin(int x,int n) max=x0;min=x0; for(int i=0;imax)max=xi; if(xix; for(n=6;n=x;n+=2) for(a=3;a=n/2;a+=2)if(isprime(a) b=n-a; if(isprime(b) coutn=a+b0。但這樣處理的數(shù)據(jù)是從個(gè)位向前的,所以還要作反轉(zhuǎn)處理。第51頁(yè)/共58頁(yè)程序: #inclu
27、de iostream.h #include string.h void main() void itoc(int,char ); int n;char s100; cinn; itoc(n,s); coutsendl; void itoc(int n,char s) void reverse(char ); int i=0; int sign; if(sign=n)0); if(sign0) si+=-; si=0; reverse(s); void reverse(char s) int c,i,j;j=strlen(s)-1;for(i=0;ij;i+,j-) c=si;si=sj;sj=c; si+j+1=0;第52頁(yè)/共58頁(yè)【例5.29】用梯形法求積分:分析:n等分積分區(qū)間a,b,每一個(gè)小梯型的面積和即近似為f(x)在a,b的積分值。即將求積分轉(zhuǎn)化求和。第53頁(yè)/共58頁(yè)#include iostream.h#include math.hdouble f(double x) return exp(-x*x/2);double integral(double
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 付款轉(zhuǎn)讓協(xié)議合同范例
- LCL型并網(wǎng)逆變器解耦和諧波抑制策略的研究
- 耦合計(jì)算機(jī)視覺(jué)及高精度雨洪數(shù)值模擬的城市內(nèi)澇實(shí)時(shí)減災(zāi)研究
- 加盟商合同范例
- 保潔砌墻施工合同范例
- 加工服務(wù)協(xié)議合同范例
- 供貨合同范例知識(shí)
- 農(nóng)業(yè)眾籌合同范本
- 會(huì)議餐合同范本
- 修建圍擋合同范例
- 《圖書館資源利用》課件
- 北師大版七年級(jí)生物下冊(cè)第9章人體內(nèi)的物質(zhì)運(yùn)輸?shù)?節(jié)血液循環(huán)第2課時(shí)課件
- 2024年10月自考01685動(dòng)漫藝術(shù)概論試題及答案含評(píng)分參考
- 2024 IMT-2030(6G)推進(jìn)組白皮書 -面向6G的智能超表面技術(shù)研究報(bào)告
- 中華人民共和國(guó)保守國(guó)家秘密法實(shí)施條例培訓(xùn)課件
- 八年級(jí)數(shù)學(xué)分式經(jīng)典練習(xí)題分式的乘除
- 設(shè)備工程師招聘面試題與參考回答
- 讀書分享讀書交流會(huì)《你當(dāng)像鳥飛往你的山》課件
- 口腔牙齒美白課件
- 2024年中國(guó)山地滑道市場(chǎng)調(diào)查研究報(bào)告
- GB/T 2423.65-2024環(huán)境試驗(yàn)第2部分:試驗(yàn)方法試驗(yàn):鹽霧/溫度/濕度/太陽(yáng)輻射綜合
評(píng)論
0/150
提交評(píng)論