安徽理工大學(xué)軟件教研室.ppt_第1頁(yè)
安徽理工大學(xué)軟件教研室.ppt_第2頁(yè)
安徽理工大學(xué)軟件教研室.ppt_第3頁(yè)
安徽理工大學(xué)軟件教研室.ppt_第4頁(yè)
安徽理工大學(xué)軟件教研室.ppt_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C+程序設(shè)計(jì),An Introduction to c/c+ Programming,AnHui University of Science and Technology Department of Computer Science & Technology,安徽理工大學(xué)計(jì)算機(jī)科學(xué)技術(shù)系,11:23:09,安徽理工大學(xué)軟件教研室,第五章 函數(shù),安徽理工大學(xué)計(jì)算機(jī)軟件教研室,11:23:09,安徽理工大學(xué)軟件教研室,本章重點(diǎn)內(nèi)容,5.1 函數(shù)的定義、調(diào)用與說明 5.2 函數(shù)間參數(shù)傳遞 5.3 遞歸函數(shù) 5.4 函數(shù)參數(shù)缺省 5.5 函數(shù)重載 5.6 函數(shù)模板 5.7 作用域與存儲(chǔ)類,11:23:09,安徽理工大學(xué)軟件教研室,5.1.1 引例 已知五邊形的各條邊的長(zhǎng)度,計(jì)算其面積 計(jì)算多邊形面積,可將多邊形分解成若干個(gè)三角形,計(jì)算三角形面積的公式如下:,5.1 函數(shù)的定義、調(diào)用與說明,11:23:09,安徽理工大學(xué)軟件教研室,用前面所學(xué)的知識(shí)實(shí)現(xiàn):,#include “math.h“ #include “iostream.h“ void 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); 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; coutsendl; ,11:23:09,安徽理工大學(xué)軟件教研室,用函數(shù)實(shí)現(xiàn):,#include “math.h“ #include “iostream.h“ float area(float x, float y, float z) /定義求三角形面積函數(shù) float c,s ; c = (x + y + z)/2; s = sqrt(c*(c-x) * (c-y) * (c-z); return s; void main() /主函數(shù) float a,b,c,d,e,f,g,s; cinabcdefg; s=area(a,b,c)+area(c,d,e) +area(e,f,g); coutsendl; ,11:23:09,安徽理工大學(xué)軟件教研室,特點(diǎn): 函數(shù)具有相對(duì)獨(dú)立的功能 函數(shù)與函數(shù)之間通過參數(shù)(輸入)和返回值(輸出)來聯(lián)系 使用函數(shù)有利于代碼重用,提高開發(fā)效率,11:23:09,安徽理工大學(xué)軟件教研室,5.1.2 函數(shù)的定義,函數(shù)類型 函數(shù)名(形式參數(shù)類型表) 函數(shù)體,將兩個(gè)數(shù)的比較獨(dú)立出來編一函數(shù):,【例5.1】求三個(gè)整型數(shù)中最大的數(shù)。,int max(int x,int y) int z; if(xy) 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; ,11:23:09,安徽理工大學(xué)軟件教研室,【例5.2】編一程序,輸出如右圖形。,void 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ú)立出來編一函數(shù):,11:23:09,安徽理工大學(xué)軟件教研室,說明: 函數(shù)類型指函數(shù)返回值的數(shù)據(jù)類型 函數(shù)體由語(yǔ)句和其它分程序組成。 形式參數(shù)可以為空,但圓括號(hào)不能省略。 函數(shù)體中不允許再嵌套定義函數(shù) 對(duì)沒有返回值的函數(shù),函數(shù)類型定為void型(無類型或空類型)。,11:23:09,安徽理工大學(xué)軟件教研室,非void型函數(shù) 函數(shù)體中必須有return語(yǔ)句,形式為: return 表達(dá)式 ; 或 return (表達(dá)式) ; 用于返回函數(shù)值。表達(dá)式值的類型與函數(shù)類型最好一致。 void型函數(shù) 函數(shù)體中return語(yǔ)句可以不出現(xiàn)。若出現(xiàn),則不能帶表達(dá)式。,11:23:09,安徽理工大學(xué)軟件教研室,5.1.3 函數(shù)調(diào)用,形式:,函數(shù)名(實(shí)在參數(shù)表),函數(shù)調(diào)用的過程:,11:23:09,安徽理工大學(xué)軟件教研室,注意: 實(shí)參與形參的個(gè)數(shù)、位置與類型必須一致。它可以是同類型的常量、變量或表達(dá)式。 調(diào)用的形式可以是表達(dá)式,也可以是語(yǔ)句。 函數(shù)定義中的形參只有當(dāng)發(fā)生函數(shù)調(diào)用時(shí),才被分配內(nèi)存單元。,11:23:09,安徽理工大學(xué)軟件教研室,#include “iostream.h“ #include “iomanip.h“ void 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“*“; coutendl; ,11:23:09,安徽理工大學(xué)軟件教研室,函數(shù)調(diào)用和返回的過程:,注意:數(shù)據(jù)的輸入、輸出一般放在主函數(shù)中,11:23:09,安徽理工大學(xué)軟件教研室,函數(shù)嵌套調(diào)用的示意圖:,11:23:09,安徽理工大學(xué)軟件教研室,【例5.3】 求正整數(shù)m,n的最大公約數(shù)和最小公倍數(shù) 。 分析:m、n的最小公倍數(shù)為: m*n/最大公約數(shù)。,注意: 函數(shù)中參數(shù)傳遞是單向“傳值”。,int gcd(int m,int n) /求最大公約數(shù) while(int r=m%n) m=n;n=r; return(n); ,int sct(int m,int n) /求最小公倍數(shù) return( m*n/gcd(m,n) ); ,#include “iostream.h“ void main() int m,n; cinmn; coutgcd(m,n)endl; coutsct(m,n)endl; ,11:23:09,安徽理工大學(xué)軟件教研室,5.1.4 函數(shù)說明(函數(shù)原型),形式: 函數(shù)類型 函數(shù)名(形式參數(shù)類型表);,#include “iostream.h“ void main() int a,b,c; int max(int x,int y); /函數(shù)說明,也可int max(int,int); cinab; c=max(a,b); couty?x:y ; ,【例5.4】函數(shù)說明示例,省略參數(shù)名,11:23:09,安徽理工大學(xué)軟件教研室,注意: 函數(shù)調(diào)用在前,定義在后,則必須對(duì)函數(shù)進(jìn)行說明,函數(shù)說明可以放在函數(shù)調(diào)用之前所在的函數(shù)內(nèi),也可以放在源文件開頭、函數(shù)的外部。 函數(shù)說明和函數(shù)定義在返回類型、函數(shù)名和參數(shù)表上必須要完全一致。 函數(shù)說明以分號(hào)結(jié)束。,11:23:09,安徽理工大學(xué)軟件教研室,5.2 函數(shù)間參數(shù)傳遞,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ù)與原來的相同,即為回文數(shù)。,實(shí)參:常量、變量和表達(dá)式。 形參:變量,11:23:09,安徽理工大學(xué)軟件教研室,bool palindrome(int x) /形參是普通的變量 int m=x,n=0,k; while(x!=0) /構(gòu)造一逆序數(shù) k=x%10; n=n*10+k; x/=10; return m=n; ,11:23:09,安徽理工大學(xué)軟件教研室,#include “iostream.h“ void swap(int a,int b) int temp; temp=a;a=b;b=temp; void main() int x,y; cinxy; swap(x,y); cout“x=“x“ y=“yendl; ,【例5.6】分析下面程序,能否交換兩個(gè)變量的值?,P128,11:23:09,安徽理工大學(xué)軟件教研室,5.2.1 指針參數(shù) 1形參為指針變量 特點(diǎn):形參的改變能影響實(shí)參值 【例5.7】交換兩個(gè)變量的值,實(shí)參:變量的地址、指針變量或數(shù)組名形參:指針變量,#include “iostream.h“ void swap(int * ,int * ); void main() int a,b;cinab; swap(,11:23:09,安徽理工大學(xué)軟件教研室,【例5.8】隨機(jī)生成10個(gè)1100之間的數(shù)放在一維數(shù)組中,求其平均值及最大的元素值 。,程序:,#include “iostream.h“ #include “stdlib.h“ const 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(a, ,11:23:09,安徽理工大學(xué)軟件教研室,【例5.9】字符串的復(fù)制,#include “iostream.h“ void copy_string(char *from, char *to) while(*from!=0) *to+=*from+; *to=0; void main() char a=“I am a teacher.“ char b=“You are a student.“; coutaendlbendl; copy_string(a,b); coutaendlbendl; ,程序:,11:23:09,安徽理工大學(xué)軟件教研室,注意:若對(duì)應(yīng)的實(shí)參是指針變量,則該指針應(yīng)有確定的指向。,void main() char *a,*b; a=new char40; b=new char20; cinab; copy_string(a,b); couta bendl; delete a; delete b; ,若該二語(yǔ)句刪除,程序運(yùn)行時(shí)將異常終止。,P133,11:23:09,安徽理工大學(xué)軟件教研室,2形參為常指針 防止被調(diào)函數(shù)對(duì)實(shí)參所指對(duì)象的修改,#include “iostream.h “ int f(const int * p) int a=100; a=*p+1; return a; void main() int x=5; coutf( ,錯(cuò)誤,不能修改const對(duì)象,11:23:09,安徽理工大學(xué)軟件教研室,注意:若實(shí)參是常對(duì)象的地址,則形參必須定義為常指針。,#include “iostream.h“ int f(const int *p) int a=100; a=*p; return a; void main() const int x=5; coutf( ,形參不能定義為int *p,11:23:09,安徽理工大學(xué)軟件教研室,3函數(shù)返回值為指針 即函數(shù)的返回值可以是變量的地址、數(shù)組名或指針變量等。 如:,float *fun(float x,float y); char *strcat(char *strDest,const char *strSource);,在說明或定義返回值為指針的函數(shù)時(shí),只須在函數(shù)名前加一指針類型說明符即可。,11:23:09,安徽理工大學(xué)軟件教研室,【例5.10】拼接兩個(gè)字符串s1和s2,將拼接后的字符串存于s1中返回。,char *strcat1(char *s1,const char *s2) char *p=s1; while(*p+); -p; while(*p+=*s2+) ; return(s1); ,思考:若不定義為返回指針值的函數(shù),則程序應(yīng)如何修改?,P135,11:23:09,安徽理工大學(xué)軟件教研室,注意:不能返回一個(gè)局部變量(在函數(shù)內(nèi)定義的變量)的地址,#include “iostream.h“ int *fun(int x) int y=x*x; return ,p指向的對(duì)象已經(jīng)不存在,11:23:09,安徽理工大學(xué)軟件教研室,5.2.2 引用參數(shù),#include “iostream.h“ void swap(int ,&為引用聲明符。 x是a的引用, y是b的引用。,特點(diǎn):形參的改變可影響實(shí)參值。,形參是引用 實(shí)參只能是變量名,11:23:09,安徽理工大學(xué)軟件教研室,引用是一種特殊類型的變量,可認(rèn)為是另一個(gè)變量的別名,它不占用存儲(chǔ)空間,對(duì)引用的操作就是對(duì)被引用者的操作,它們代表的是同一存儲(chǔ)單元。,11:23:09,安徽理工大學(xué)軟件教研室,【例5.11】編一函數(shù),判別一個(gè)自然數(shù)N是否是降序數(shù),同時(shí),求出該數(shù)各位數(shù)和。并加以調(diào)用,若是降序數(shù)輸出“yes”,否則輸出“no”。例如:3、441、531是降序數(shù);而412不是降序數(shù)。,bool drop(int x,int ,11:23:09,安徽理工大學(xué)軟件教研室,5.2.3 數(shù)組名作參數(shù),特點(diǎn):在被調(diào)函數(shù)中對(duì)形參數(shù)組的任何改變均會(huì)影響實(shí)參所指地址里的內(nèi)容 。,形參:數(shù)組名 實(shí)參:數(shù)組名或指針變量,11:23:09,安徽理工大學(xué)軟件教研室,【例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ù)一般須傳給形參,11:23:09,安徽理工大學(xué)軟件教研室,【例5.13】 求字符串長(zhǎng)度,并調(diào)用之。,int len(char s) int i=0; while(si!=0)i+; return i; ,調(diào)用: coutlen(str);,字符型數(shù)組的元素個(gè)數(shù)一般不用傳給形參,11:23:09,安徽理工大學(xué)軟件教研室,編一函數(shù),未二維數(shù)組mn中的最大值和最小值,void m(int x4,int m,int n, int ,不允許省略第維長(zhǎng)度,11:23:09,安徽理工大學(xué)軟件教研室,注意: 形參和實(shí)參的類型應(yīng)保持一致。 函數(shù)頭里的參數(shù),要一個(gè)一個(gè)地分別說明或列出。 下面是幾種函數(shù)頭正確與錯(cuò)誤的寫法:,int m(int x4,int y),int m(int x,int y),11:23:09,安徽理工大學(xué)軟件教研室,5.2.4 對(duì)象參數(shù),實(shí)參為CString對(duì)象,則形參可以是: (1) CString 參數(shù),對(duì)形參的改變不影響實(shí)參; (2) CString &參數(shù), 對(duì)形參的改變將影響實(shí)參; (3) const CString &參數(shù),不允許改變形參值。,11:23:09,安徽理工大學(xué)軟件教研室,int count(CString str1,const CString sub) int i,count=0,k; i=str1.Find(sub); while(i=0) count+; k=str1.GetLength(); str1=str1.Mid(i+1,k-i); i=str1.Find(sub); return count; ,【例5.14】 統(tǒng)計(jì)字符串str1中出現(xiàn)子串sub的個(gè)數(shù),11:23:09,安徽理工大學(xué)軟件教研室,5.3 遞歸函數(shù),用自身的結(jié)構(gòu)來描述自身就稱為遞歸。 最典型的例子是對(duì)階乘運(yùn)算:,特點(diǎn): 原始問題可轉(zhuǎn)化為解決方法相同的新問題; 新問題的規(guī)模比原始問題小; 新問題又可轉(zhuǎn)化為解決方法相同的規(guī)模更小的新問題,直至終結(jié)條件為止。,11:23:09,安徽理工大學(xué)軟件教研室,fac(2)=2*fac(1),fac(1)=1,fac(4)=4*6,fac(3)=3*2,fac(2)=2*1,fac(3)=3*fac(2),fac(4)=4*fac(3),【例5.15】編fac(n)=n! 的遞歸函數(shù),long fac(int n) if(n=1) return(1); return (n*fac(n-1); ,遞推過程 每調(diào)用自身,當(dāng)前參數(shù)壓棧,直到達(dá)到遞歸結(jié)束條件。 回歸過程 不斷從棧中彈出當(dāng)前的參數(shù),直到棧空。,思考:若fac函數(shù)中沒有語(yǔ)句 if(n=1) return(1);程序運(yùn)行結(jié)果將如何?,11:23:09,安徽理工大學(xué)軟件教研室,遞推,回歸,終止項(xiàng),11:23:09,安徽理工大學(xué)軟件教研室,【例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/r,r);coutbm%r; ,任何有意義的遞歸必須具有: 遞歸結(jié)束條件及結(jié)束時(shí)的值; 能用遞歸形式表示,并且遞歸向終止條件發(fā)展。,遞歸算法設(shè)計(jì)簡(jiǎn)單,程序代碼簡(jiǎn)潔易讀,但它消耗的機(jī)時(shí)和占據(jù)的內(nèi)存空間比非遞歸大。,11:23:09,安徽理工大學(xué)軟件教研室,5.4 函數(shù)參數(shù)缺省,#include “iostream.h“ #include “math.h“ double s(double x , double eps=1e-6) int n=1; double w=0.0, t=1.0 ; while(fabs(t)=eps) w+=t; t=t*x/(n+); return w; ,【例5.17】求下面級(jí)數(shù)的部分和。精度為:,11:23:09,安徽理工大學(xué)軟件教研室,默認(rèn)參數(shù)的說明必須出現(xiàn)在函數(shù)調(diào)用之前。若一個(gè)函數(shù)說明已給出參數(shù)的默認(rèn)值,則在函數(shù)定義中不允許再設(shè)置。 要求賦予默認(rèn)值的參數(shù)必須放在形參表列中的最右端。,說明:,分析下面各例: void fun(int i, int j, int k, int m=3,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ò)誤,只能從左至右匹配,11:23:09,安徽理工大學(xué)軟件教研室,5.5 函數(shù)重載,引例:求不同類型數(shù)據(jù)的絕對(duì)值 #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ù)共用一個(gè)函數(shù)名。,不同名函數(shù)實(shí)現(xiàn)同一類的操作,11:23:09,安徽理工大學(xué)軟件教研室,#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ù)的類型來確定應(yīng)該調(diào)用哪個(gè)函數(shù),【例5.18】,二. 參數(shù)個(gè)數(shù)不同的重載函數(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; ,編譯器根據(jù)調(diào)用語(yǔ)句中實(shí)參的個(gè)數(shù)來確定應(yīng)該調(diào)用哪個(gè)函數(shù),注意:不要同時(shí)使用重載函數(shù)和缺省參數(shù)函數(shù)。,11:23:09,安徽理工大學(xué)軟件教研室,5.6 函數(shù)模板,使用函數(shù)重載需編寫多個(gè)函數(shù),而利用函數(shù)模板只需定義一個(gè)通用函數(shù)即可。 利用函數(shù)模板定義的函數(shù)稱為模板函數(shù),形式:,template 類型 函數(shù)名( 參數(shù)表) ,11:23:09,安徽理工大學(xué)軟件教研室,#include template T min(T a,T b) return ab?a:b; void main() coutmin(3,5)endl; coutmin(8.5,5.6)endl; ,定義一個(gè)數(shù)據(jù)類型T 使用模板函數(shù)時(shí),模板中的類型參數(shù)T用實(shí)參的類型替換,【例5.20】,11:23:09,安徽理工大學(xué)軟件教研室,分析以下幾種模板函數(shù):,template T fun1(T a,int b) /可含有模板參數(shù)表中未給 出的數(shù)據(jù)類型,template /模板中可帶有多個(gè)參數(shù) void fun1(T1 a,T2 b,T3 c) ,11:23:09,安徽理工大學(xué)軟件教研室,template void fun1(int a,int b) /必須至少有一個(gè)參數(shù)的類型或函數(shù)類型為模板的類型參數(shù) ,template void fun1(int a,int b) T i,j; ,11:23:09,安徽理工大學(xué)軟件教研室,【例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;ixj)k=j; if(i!=k ) w=xi;xi=xk;xk=w; ,void main() int i,a6=6,9,2,4,1,0; double b3=5.5,8.0,0; sort(a,6); sort(b,3); for(i=0;i6;i+) coutaiendl; for(i=0;i3;i+) coutbiendl; ,注意w變量的定義,5.7 作用域與存儲(chǔ)類別,#include “iostream.h“ int digit(long n) int k=0; while(n!=0) n/=10; k+=1; return k; void main() long x; cinx; cout digit(x)endl; ,從下面三方面分析各變量 作用域(可見性): 在什么范圍內(nèi)可以訪問 空間概念 生存期: 在什么時(shí)間存在 時(shí)間概念 初始化,【例5.22】,11:23:09,安徽理工大學(xué)軟件教研室,5.7.1 自動(dòng)變量,作用域:從定義點(diǎn)開始到所在的分程序結(jié)束 生存期:開始執(zhí)行分程序就生成,分程序執(zhí)行結(jié)束就消亡 初始化:可以初始化,缺省值為隨機(jī)值。 作用域不可以擴(kuò)展,#include “iostream.h“ int f(int x) x+; int k=5; /auto int k=5; k+; return x+k; void main() int k=2; coutf(k)endl; coutf(k+1)endl; ,缺省的存儲(chǔ)類別:auto 注意:只有內(nèi)部變量存儲(chǔ)類別才能auto,【例5.23】,11:23:09,安徽理工大學(xué)軟件教研室,5.7.2 靜態(tài)局部變量,作用域:從定義點(diǎn)開始到所在的分程序結(jié)束。 生存期:程序的執(zhí)行周期 初始化:可以初始化,缺省值為0或0 。 初始化一次 在編譯時(shí)初始化,調(diào)用時(shí)不再初始化 作用域不可以擴(kuò)展 一個(gè)函數(shù)可能被調(diào)用多次, 前一次調(diào)用的結(jié)果帶到下一次去。,#include “iostream.h“ int fac(int n) static int f=1; f=f*n; return(f); void main() auto int i; for(i=1;i=5;i+) cout“i!=“fac(i); ,【例5.24】,11:23:09,安徽理工大學(xué)軟件教研室,5.7.3 全局變量,作用域:從定義點(diǎn)開始到所在的文件結(jié)束 生存期:程序的整個(gè)執(zhí)行周期 初始化:可以初始化,缺省值為0或0 。 作用域可以擴(kuò)展: 向上擴(kuò)展 橫向擴(kuò)展,擴(kuò)展到另一個(gè)文件 注意:擴(kuò)展的地方不能初始化,#include “iostream.h“ int 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聲明符來擴(kuò)展外部變量的作用域,外部變量與局部變量同名,起作用的是局部變量,(1)作用域向定義點(diǎn)之前的函數(shù)擴(kuò)展,#include extern int i; void fun() /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(); ,11:23:09,安徽理工大學(xué)軟件教研室,(2)作用域擴(kuò)展到另一個(gè)文件 【例5.26】作用域橫向擴(kuò)展示例,/file1.cpp extern max,min; #include “iostream.h“ void main() void maxmin(int x,int n); int a10=11,2,3,-4,5,6,7,8,0,20; maxmin(a,10); coutmax“ “minendl; ,/file2.cpp int max,min; void maxmin(int x,int n) max=x0;min=x0; for(int i=0;imax)max=xi; if(ximin)min=xi; ,11:23:09,安徽理工大學(xué)軟件教研室,總結(jié):,11:23:09,安徽理工大學(xué)軟件教研室,5.8 程序舉例,【例5.27】編一判斷質(zhì)數(shù)的函數(shù),驗(yàn)證歌德巴赫猜想:任何大于2的偶數(shù)均可表示為兩個(gè)素?cái)?shù)的和。例如:4=2+2(特例,僅此一個(gè)),6=3+3,8=3+5,。程序要求輸入任一偶數(shù),輸出6到該數(shù)范圍內(nèi)的各個(gè)滿足條件的組合。 分析:對(duì)一個(gè)偶數(shù),分解為兩個(gè)質(zhì)數(shù)和,既n=a+b。方法是從找最小的質(zhì)數(shù)a為3開始(因2是偶數(shù),另一個(gè)必定是偶數(shù),不可能是質(zhì)數(shù)),判斷b=n-a是否是質(zhì)數(shù),若b也是質(zhì)數(shù),則n符合要求;否則,找下一個(gè)質(zhì)數(shù)a,再判斷b。,程序: #include “iostream.h“ int isprime(int m) /判別m是否為質(zhì)數(shù) for(int i=2;m%i!=0;i+); return (i=m); void main() int n,x,a,b; cinx; 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“+“bendl; break; /退出a循環(huán),判別下一個(gè)n的組合 ,11:23:09,安徽理工大學(xué)軟件教研室,【例5.28】寫一函數(shù)itoc(),把數(shù)字轉(zhuǎn)變成字符串。如數(shù)字-123,經(jīng)過itoc(-123)后,變?yōu)?123。 分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論