




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++程序設(shè)計(jì)第3章(1)
━━函數(shù)的定義和調(diào)用1主要內(nèi)容函數(shù)概述函數(shù)的定義函數(shù)的調(diào)用和返回函數(shù)的參數(shù)傳遞━━值傳遞函數(shù)的參數(shù)傳遞━━引用傳遞函數(shù)的原型聲明全局變量及其作用域局部變量及其作用域C++程序的內(nèi)存布局標(biāo)識(shí)符的作用域━━塊作用域、文件作用域、函數(shù)原型作用域、函數(shù)作用域變量的存儲(chǔ)類(lèi)型和生存期函數(shù)的調(diào)用機(jī)制2函數(shù)概述關(guān)于C++函數(shù):①C++程序的結(jié)構(gòu)化特點(diǎn):就是整個(gè)程序由一個(gè)或多個(gè)函數(shù)組成,每個(gè)函數(shù)具有相對(duì)獨(dú)立的功能,函數(shù)之間有明顯的界面,程序整體具有清晰的模塊結(jié)構(gòu),易于修改。
②C++函數(shù)有兩大類(lèi):一類(lèi)是系統(tǒng)預(yù)定義的,稱(chēng)為庫(kù)函數(shù)或標(biāo)準(zhǔn)函數(shù),這些庫(kù)函數(shù)按照不同的功能進(jìn)行分類(lèi),集中定義在不同的頭文件中,用戶(hù)只要在自己的程序中包含某個(gè)頭文件,就可直接使用該頭文件中定義的函數(shù)。另一類(lèi)是用戶(hù)自定義函數(shù),用戶(hù)可以根據(jù)需要將程序中某個(gè)具有相對(duì)獨(dú)立功能的程序段定義為函數(shù)。③C++程序的基本模塊:就是函數(shù),任何一個(gè)C++程序均由若干個(gè)函數(shù)組成,其中有且僅有一個(gè)主函數(shù),它是程序執(zhí)行的入口函數(shù),VC++控制臺(tái)編程是由用戶(hù)定義的main()作為入口函數(shù),Windows編程是由編譯器定義的WinMain()作為入口函數(shù)。3函數(shù)概述④C++函數(shù)之間是并列平等的關(guān)系,在程序中的定義位置任意,一個(gè)函數(shù)可以調(diào)用其它函數(shù),也可以被其他函數(shù)所調(diào)用,但主函數(shù)只能調(diào)用其他函數(shù),而不能被調(diào)用。函數(shù)定義的并列關(guān)系函數(shù)調(diào)用的層次關(guān)系
voidf1() {f1的函數(shù)體…}
voidf2() {f2的函數(shù)體…}
voidmain() {main的函數(shù)體}
voidf3() {f3的函數(shù)體…}
voidf4() {f4的函數(shù)體…}
voidf5() {f5的函數(shù)體…}main()f1()f2()f3()f4()f6()4函數(shù)的定義函數(shù)的定義:①格式:《返回值類(lèi)型》函數(shù)名
(
《類(lèi)型1形參1
,類(lèi)型2形參2
,…,類(lèi)型n形參n》
)
{
語(yǔ)句序列
}②說(shuō)明:
返回值類(lèi)型━━可以是C++中任意基本數(shù)據(jù)類(lèi)型、已定義的構(gòu)造數(shù)據(jù)類(lèi)型;若函數(shù)沒(méi)有返回值,則返回值類(lèi)型定義為void型;若函數(shù)返回值類(lèi)型省略,表示返回值類(lèi)型為int型。函數(shù)體函數(shù)頭5函數(shù)的定義函數(shù)名━━按標(biāo)識(shí)符命名規(guī)則命名,其后括號(hào)內(nèi)定義的是函數(shù)的形式參數(shù);若該函數(shù)為無(wú)參函數(shù),括號(hào)內(nèi)的void通常省略不寫(xiě),但括號(hào)不能省略!形式參數(shù)表━━列出所有形式參數(shù)的數(shù)據(jù)類(lèi)型、參數(shù)名稱(chēng);各參數(shù)即使類(lèi)型相同,也必須分別進(jìn)行類(lèi)型說(shuō)明;形參類(lèi)型可以是C++中任意基本數(shù)據(jù)類(lèi)型、已定義的構(gòu)造數(shù)據(jù)類(lèi)型。函數(shù)參數(shù)的作用:函數(shù)調(diào)用時(shí),主調(diào)函數(shù)通過(guò)參數(shù)將數(shù)據(jù)傳遞給被調(diào)函數(shù)。函數(shù)返回值的作用:函數(shù)返回時(shí),被調(diào)函數(shù)可將一個(gè)確定的值帶回到主調(diào)函數(shù)。①若函數(shù)有返回值,則return語(yǔ)句格式為:return表達(dá)式;
且return后面表達(dá)式值的類(lèi)型必須與函數(shù)返回值類(lèi)型相匹配!
②若函數(shù)無(wú)返回值,則返回值類(lèi)型定義為void,且return語(yǔ)句格式為:return;6函數(shù)的調(diào)用和返回函數(shù)的調(diào)用:①格式:
函數(shù)名
(《實(shí)參1
,實(shí)參2
,…,實(shí)參n》)
②調(diào)用:就是控制從主調(diào)函數(shù)轉(zhuǎn)去執(zhí)行被調(diào)函數(shù)的函數(shù)體。調(diào)用時(shí),系統(tǒng)要將實(shí)參值按位置傳遞給對(duì)應(yīng)的形參,因此,一般情況下實(shí)參與形參在個(gè)數(shù)、排列順序上都必須一一對(duì)應(yīng),且類(lèi)型匹配。函數(shù)的返回:就是控制從被調(diào)函數(shù)返回到主調(diào)函數(shù)的調(diào)用點(diǎn)。返回時(shí),即在被調(diào)函數(shù)中執(zhí)行到return語(yǔ)句時(shí),若有返回值帶回,則先計(jì)算return語(yǔ)句后面表達(dá)式的值,并轉(zhuǎn)換成所規(guī)定的返回值類(lèi)型,此時(shí)系統(tǒng)會(huì)在內(nèi)存中建立一個(gè)臨時(shí)變量,用來(lái)存放該返回值,待主調(diào)函數(shù)中包含該調(diào)用式的表達(dá)式語(yǔ)句從該臨時(shí)變量中取值后,系統(tǒng)便撤消該臨時(shí)變量。7【例】(定義求三個(gè)實(shí)數(shù)中最大數(shù)的函數(shù)max()。)#include<iostream.h>float
max(floatx,floaty,floatz)
//要將三個(gè)實(shí)數(shù)傳遞給max()函數(shù),需定義三個(gè)形參。{
floatt=y>z?y:z;
return(x>t?x:t);}voidmain(){floata,b,c;cout<<“請(qǐng)輸入三個(gè)實(shí)數(shù):”;cin>>a>>b>>c;cout<<“最大數(shù):”<<max(a,b,c)<<endl;}
運(yùn)行:請(qǐng)輸入三個(gè)實(shí)數(shù):1356-89↙最大數(shù):56main()函數(shù)調(diào)用max(13,56,-89)main()函數(shù)的后續(xù)語(yǔ)句函數(shù)max(13,56,-89)return56主調(diào)函數(shù)被調(diào)函數(shù)8函數(shù)的參數(shù)傳遞形參與實(shí)參:
①函數(shù)定義時(shí),寫(xiě)在函數(shù)頭部參數(shù)表中的變量,稱(chēng)為形式參數(shù)(形參)。
②函數(shù)調(diào)用時(shí),寫(xiě)在調(diào)用式參數(shù)表中的表達(dá)式、變量、常量,稱(chēng)為實(shí)在參數(shù)(實(shí)參)形參與實(shí)參的結(jié)合:編譯時(shí),并不為各函數(shù)的形參分配存儲(chǔ)空間,只有在該函數(shù)被調(diào)用時(shí),其形參才占用存儲(chǔ)空間,并通過(guò)堆棧從主調(diào)函數(shù)中獲得值,這個(gè)過(guò)程稱(chēng)為形參與實(shí)參的結(jié)合,一旦函數(shù)調(diào)用結(jié)束,該函數(shù)的形參就被撤銷(xiāo)。函數(shù)的參數(shù)傳遞方式有三種:①值傳遞
②引用傳遞③地址傳遞9函數(shù)的參數(shù)傳遞━━值傳遞值傳遞:
①調(diào)用函數(shù)進(jìn)行值傳遞時(shí),調(diào)用式中對(duì)應(yīng)的實(shí)參可以是常量、變量、表達(dá)式。
②先計(jì)算出各個(gè)實(shí)參表達(dá)式的值,并將值賦給對(duì)應(yīng)的形參變量,其過(guò)程就是賦值,因此,要求實(shí)參值的類(lèi)型與形參變量類(lèi)型符合賦值兼容。
③由于值傳遞就是賦值傳遞,因此是單向傳遞,即實(shí)參值傳遞給形參變量后,若形參變量的值發(fā)生變化不會(huì)影響到對(duì)應(yīng)的實(shí)參變量?!纠?include<iostream.h>voidswap(
inta
,
intb
){
intt=a;a=b;b=t;
}voidmain(){intx,y;cout<<“請(qǐng)輸入兩個(gè)整數(shù):”;cin>>x>>y;cout<<“調(diào)用前:x=”<<x<<“\ty=”<<y<<endl;
swap(
x
,
y
);cout<<“調(diào)用后:x=”<<x<<“\ty=”<<y<<endl;
}
運(yùn)行:請(qǐng)輸入兩個(gè)整數(shù):5897↙調(diào)用前:x=56y=97調(diào)用后:x=56y=9710【例】#include<iostream.h>intmaxi(inta,intb){ returna>b?a:b;}floatmaxf(floata,floatb){ returna>b?a:b;}voidmain(void){floatx=3.4,y=5.6;charc1=‘A’,c2=‘B’;inti=20,j=30;cout<<maxi(x,y)
<<‘\t’;cout<<maxf(x,y)
<<‘\t’;cout<<maxi(c1,c2)
<<‘\t’;cout<<maxf(c1,c2)
<<‘\t’;cout<<maxi(i+j,45+y)
<<‘\t’;cout<<maxf(i+j,45+y)
<<endl;}運(yùn)行:floatx=3.4→inta=3floaty=5.6→intb=5floatx=3.4→floata=3.4floaty=5.6→floatb=5.6charc1=‘A’→inta=65charc2=‘B’→intb=66charc1=‘A’→floata=65charc2=‘B’→floatb=66表達(dá)式i+j值50,int型→inta=50表達(dá)式45+y值50.6,float型→intb=50表達(dá)式i+j值50,int型→floata=50表達(dá)式45+y值50.6,float型→floatb=50.611函數(shù)的參數(shù)傳遞━━引用傳遞引用類(lèi)型:是C++中一種特殊的數(shù)據(jù)類(lèi)型,
定義引用類(lèi)型變量,其本質(zhì)是給一個(gè)已定義的變量起一個(gè)別名,系統(tǒng)并不為引用類(lèi)型變量分配內(nèi)存空間,引用類(lèi)型變量與其相關(guān)聯(lián)的變量使用的是同一個(gè)內(nèi)存空間。引用類(lèi)型變量的定義:
①格式:
<類(lèi)型>&
<引用類(lèi)型變量名>
=<變量名>
②功能:定義一個(gè)引用類(lèi)型變量,必須同時(shí)對(duì)其進(jìn)行初始化,使之與一個(gè)已定義過(guò)的同類(lèi)型變量相關(guān)聯(lián),即給該已定義過(guò)的變量起一個(gè)別名?!纠?include<iostream.h>voidmain(){intx=5;int&
x1
=x;intx2=x;
x1+=2;cout<<“x=”<<x<<“\tx1=”<<x1<<“\tx2=”<<x2<<endl;}
5→7xx15x2運(yùn)行:x=7x1=7x2=512函數(shù)的參數(shù)傳遞━━引用傳遞引用類(lèi)型變量可以作為函數(shù)的形參,以實(shí)現(xiàn)參數(shù)的引用傳遞。
【例】voidswap(
int&a
,
int&b
){
intt=a;a=b;b=t;
}引用傳遞:①調(diào)用函數(shù)時(shí),系統(tǒng)對(duì)引用類(lèi)型的形參是不分配存儲(chǔ)空間的,其本質(zhì)是給對(duì)應(yīng)的實(shí)參變量起一個(gè)別名。②進(jìn)行引用傳遞時(shí),調(diào)用式中對(duì)應(yīng)的實(shí)參只能是變量。③引用傳遞時(shí)傳遞的是變量名,引用類(lèi)型的形參變量與其相關(guān)聯(lián)的實(shí)參變量使用的是同一個(gè)存儲(chǔ)空間,若引用類(lèi)型的形參變量的值發(fā)生變化,其相關(guān)聯(lián)的實(shí)參變量的值也就隨之變化,因此是雙向傳遞。13【例】(值傳遞)#include<iostream.h>voidswap(
inta
,intb
){
intt=a;a=b;b=t;}voidmain(){intx=5,y=10;cout<<“調(diào)用前:x=”<<x<<“\ty=”<<y<<endl;
swap(
x
,
y
);cout<<“調(diào)用后:x=”<<x<<“\ty=”<<y<<endl;
}
【例】(引用傳遞)#include<iostream.h>voidswap(
int&a
,int&b
){intt=a;a=b;b=t;}voidmain(){intx=5,y=10;cout<<“調(diào)用前:x=”<<x<<“\ty=”<<y<<endl;
swap(
x,y
);cout<<“調(diào)用后:x=”<<x<<“\ty=”<<y<<endl;}
運(yùn)行:調(diào)用前:x=5y=10調(diào)用后:x=10y=5引用傳遞:main():swap():x
a
10y
b
5510運(yùn)行:調(diào)用前:x=5y=10調(diào)用后:x=5y=10值傳遞:main():swap():x
a
10y
b
551051014函數(shù)的原型聲明函數(shù)的原型聲明:①C++中,把函數(shù)的定義部分稱(chēng)為函數(shù)的定義性聲明,而把對(duì)函數(shù)的引用性聲明稱(chēng)為函數(shù)的原型聲明。②當(dāng)函數(shù)定義在前、調(diào)用在后時(shí),可直接調(diào)用;當(dāng)函數(shù)調(diào)用在前、定義在后時(shí),在函數(shù)被調(diào)用前,必須對(duì)被調(diào)函數(shù)作原型聲明,函數(shù)原型聲明可放在主調(diào)函數(shù)中,也可放在所有函數(shù)之外。③函數(shù)原型聲明的目的是告知編譯系統(tǒng),該函數(shù)的返回值類(lèi)型、參數(shù)個(gè)數(shù)、順序、各參數(shù)的類(lèi)型,以便編譯系統(tǒng)對(duì)其后該函數(shù)調(diào)用式是否有效進(jìn)行語(yǔ)法檢查。函數(shù)原型聲明的格式:
格式1:
函數(shù)頭+末尾加分號(hào)
《返回值類(lèi)型》函數(shù)名
(
《類(lèi)型1形參1
,類(lèi)型2形參2
,…,類(lèi)型n形參n》
);格式2:函數(shù)頭(去掉形參變量名)+末尾加分號(hào)《返回值類(lèi)型》函數(shù)名
(《類(lèi)型1
,類(lèi)型2
,
…
,類(lèi)型n
》);15【例】(輸入一個(gè)8位二進(jìn)制數(shù),將其轉(zhuǎn)換為十進(jìn)制數(shù)輸出。例:若輸入11010001,
110100012=1(27)+1(26)+0(25)+1(24)+0(23)+0(22)+0(21)+1(20)=20910,輸出209。)#include<iostream.h>voidmain(){double
power(
double
,
int
);//power()函數(shù)的引用性聲明,即原型聲明
intvalue=0,k;charc;cout<<“請(qǐng)輸入一個(gè)8位二進(jìn)制數(shù):”;
for(inti=7;i>=0;i--)
{cin>>c; if(c==‘1’)value+=(int)power(
2
,
i);}//調(diào)用power()函數(shù)
cout<<“十進(jìn)制數(shù):”<<value<<endl;}
doublepower(doublex,intn)//power()函數(shù)的定義性聲明{doublet=1;while(n--)t*=x;
returnt
;}運(yùn)行:請(qǐng)輸入一個(gè)8位二進(jìn)制數(shù):11010001↙十進(jìn)制數(shù):20916②當(dāng)函數(shù)定義在前、調(diào)用在后時(shí),可直接調(diào)用;for(inti=1;i<=n;i++)《返回值類(lèi)型》函數(shù)名(《類(lèi)型1形參1,類(lèi)型2形參2,…,類(lèi)型n形參n》){intx=5;//x為auto局部變量,在棧區(qū)4→floata=3.③局部數(shù)據(jù)區(qū)(棧區(qū))━━存放auto局部變量。::b=::b+4;//引用全局變量b{floatt=y>z?y:z;①作用:若程序中的某個(gè)變量要被多個(gè)函數(shù)所訪(fǎng)問(wèn),可將其定義為全局變量?!洞鎯?chǔ)類(lèi)型》類(lèi)型變量名1《=初值1》《,變量名2《=初值2》,…》;《存儲(chǔ)類(lèi)型》類(lèi)型變量名1《=初值1》《,變量名2《=初值2》,…》;for(inti=1;i<=3;i++)【例】voidswap(int&a,int&b){intt=a;a=b;b=t;}【例】(求π的值,arctan(x)用級(jí)數(shù)計(jì)算,直到某項(xiàng)絕對(duì)值不大于10-15為止。)#include<iostream.h>#include<math.h>voidmain(){doublea,b;
doublearctan(doublex)
;//arctan()函數(shù)的引用性聲明,即原型聲明a=16*arctan(
1/5.
);//調(diào)用arctan()函數(shù),且如果寫(xiě)成1/5,結(jié)果就都是0b=4*arctan(
);//調(diào)用arctan()函數(shù),且如果寫(xiě)成1/239,結(jié)果就都是0cout<<“π=”<<(a-b)<<endl;}
doublearctan(doublex)//arctan()函數(shù)的定義性聲明{
doublet=x,sum=0;
for(intsign=1,i=1;
fabs(t/i)>1e-15;i+=2)
{
sum+=sign*t/i;t=t*x*x;sign*=-1;}
returnsum; }運(yùn)行:17【例】(找出11~999之間的數(shù)m,使之滿(mǎn)足m、m2、m3均為回文數(shù)?;匚模焊魑粩?shù)字左右對(duì)稱(chēng)的整數(shù)。例:11、112=121、113=1331,則輸出11。)分析:從最低位開(kāi)始,用除10取余的方法,依次取出該數(shù)的各位數(shù)字;按反序重新構(gòu)成新的數(shù),若新數(shù)與原數(shù)完全相等,則原數(shù)為回文。#include<iostream.h>voidmain(){boolsymm(intn);
//symm()函數(shù)的引用性聲明,即原型聲明for(intm=11;m<=999;m++) if( symm(m)
&&symm(m*m)
&&symm(m*m*m
)
) cout<<“m=”<<m<<“\tm*m=”<<m*m<<“\tm*m*m=”<<m*m*m<<endl;}
boolsymm(intn)//symm()函數(shù)的功能是判斷整數(shù)n是否是回文{
for(inti=n,m=0
;
i!=0;
i=i/10)
m=m*10+i%10;//m是新構(gòu)的數(shù)
return(m==n);}運(yùn)行:m=11m*m=121m*m*m=1331m=101m*m=10201m*m*m=1030301m=111m*m=12321m*m*m=136763118【例】(求如下公式,r和s值鍵盤(pán)輸入,SIN(x)用級(jí)數(shù)計(jì)算,計(jì)算精度為10-3。)#include<iostream.h>#include<math.h>voidmain(){doubletsin(double);doublek,r,s;cout<<“請(qǐng)輸入r和s的值:”;cin>>r>>s;if(r*r<=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s));elsek=tsin(r*s)/2;cout<<“r=”<<r<<“\ts=”<<s<<“\tk=”<<k<<endl;}
doubletsin(doublex){doublesum=0,t=x;
for(inti=1,sign=1,p=1;
fabs(t/p)>=1e-3
;
sign*=-1)
{
sum+=
sign*t/p;t=t*x*x;i+=2;p=p*i*(i-1);}
returnsum;}運(yùn)行:請(qǐng)輸入r和s的值:31↙19全局變量及其作用域關(guān)于全局變量:①作用:若程序中的某個(gè)變量要被多個(gè)函數(shù)所訪(fǎng)問(wèn),可將其定義為全局變量。
②全局變量:指定義在函數(shù)之外的變量。
③作用域:全局變量可以定義在函數(shù)外的任何位置,一旦在某個(gè)位置定義了全局變量,其后的任何函數(shù)均可以訪(fǎng)問(wèn)該全局變量。④存儲(chǔ)類(lèi)型:全局變量存放在全局?jǐn)?shù)據(jù)區(qū)(靜態(tài)區(qū)),分配該區(qū)時(shí)內(nèi)存自動(dòng)初始化為0,因此全局變量若不做初始化,其初值為0。⑤生存期:全局變量在程序開(kāi)始運(yùn)行時(shí)就在全局區(qū)分配,程序運(yùn)行結(jié)束才被釋放。20局部變量及其作用域關(guān)于局部變量:①塊的概念:指程序中用花括號(hào)“{}”括起來(lái)的一個(gè)程序段,稱(chēng)為一個(gè)塊。②局部變量:指定義在函數(shù)之內(nèi)或某個(gè)塊內(nèi)的變量。
③作用域:局部變量可以定義在塊內(nèi)的任何位置,一旦在塊內(nèi)的某個(gè)位置定義了局部變量,只能在該塊內(nèi)該位置之后的那個(gè)區(qū)域內(nèi)才可以訪(fǎng)問(wèn)該局部變量。④存儲(chǔ)類(lèi)型:auto自動(dòng)類(lèi)型局部變量、static靜態(tài)類(lèi)型局部變量。⑤auto自動(dòng)局部變量:存放在局部數(shù)據(jù)區(qū)(棧區(qū)),分配棧區(qū)時(shí)內(nèi)存不做初始化,因此auto局部變量若不做初始化,其初值不確定。⑥static靜態(tài)局部變量:存放在全局?jǐn)?shù)據(jù)區(qū)(靜態(tài)區(qū)),分配該區(qū)時(shí)內(nèi)存自動(dòng)初始化為0,因此static局部變量若不做初始化,其初值為0。21C++程序的內(nèi)存布局操作系統(tǒng)為一個(gè)C++程序運(yùn)行定義了四個(gè)內(nèi)存區(qū)域:①代碼區(qū)━━存放程序代碼。②全局?jǐn)?shù)據(jù)區(qū)(靜態(tài)區(qū))━━存放全局變量、static靜態(tài)局部變量。全局變量在程序開(kāi)始運(yùn)行時(shí)就在該區(qū)分配;static靜態(tài)局部變量在程序運(yùn)行中第一次進(jìn)入其作用域時(shí)在該區(qū)分配。二者都是直到程序運(yùn)行結(jié)束才被釋放。
③局部數(shù)據(jù)區(qū)(棧區(qū))━━存放auto局部變量。在程序運(yùn)行到其作用域時(shí)在棧區(qū)分配,但怎樣分配在編譯時(shí)就已經(jīng)確定。auto局部變量在離開(kāi)其作用域時(shí)即被釋放。④動(dòng)態(tài)數(shù)據(jù)區(qū)(自由存儲(chǔ)區(qū)、堆區(qū))
━━存放運(yùn)行時(shí)由new運(yùn)算符動(dòng)態(tài)創(chuàng)建的變量。動(dòng)態(tài)創(chuàng)建的變量在編譯時(shí)無(wú)法為它們預(yù)定存儲(chǔ)空間,系統(tǒng)根據(jù)運(yùn)行時(shí)的具體要求在該區(qū)進(jìn)行分配。在該區(qū)的變量必須用delete運(yùn)算符才能將其釋放。22標(biāo)識(shí)符的作用域作用域:指程序中標(biāo)識(shí)符(如變量名、函數(shù)名)的有效使用范圍,即作用范圍。目的:解決標(biāo)識(shí)符的同名問(wèn)題。當(dāng)標(biāo)識(shí)符具有不同的作用域時(shí),允許標(biāo)識(shí)符同名;當(dāng)標(biāo)識(shí)符的作用域完全相同時(shí),不允許標(biāo)識(shí)符同名。C++中作用域有五種:①塊作用域②文件作用域③函數(shù)原型作用域④函數(shù)作用域⑤類(lèi)作用域23標(biāo)識(shí)符的作用域━━塊作用域塊:指程序中用花括號(hào)“{}”括起來(lái)的一個(gè)程序段,稱(chēng)為一個(gè)塊。塊作用域:在塊內(nèi)聲明的變量只能在該塊內(nèi)被引用,開(kāi)始于變量的聲明處,結(jié)束于塊的結(jié)尾處。幾條原則:
①形參變量的作用域:在其所屬函數(shù)的函數(shù)體塊內(nèi)。②局部變量的作用域:在其所屬的塊內(nèi),該變量的聲明位置之后的那個(gè)區(qū)域內(nèi)。③循環(huán)語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)中表達(dá)式1所聲明變量的作用域:在for語(yǔ)句所屬的塊內(nèi),該變量的聲明位置之后的那個(gè)區(qū)域內(nèi)。④局部?jī)?yōu)先原則:具有塊作用域的標(biāo)識(shí)符在其作用域內(nèi),將屏蔽其作用塊包含本塊的同名標(biāo)識(shí)符。24【例】(塊作用域)#include<iostream.h>intfun(intn){cout<<“正在求:1+2+…+”<<n<<“\n”;
ints=0;for(inti=1;i<=n;i++)
{
chara=7;cout<<a;s+=i;
}returns;}voidmain(){inta=5,b=7;cout<<“第1次調(diào)用:”<<fun(a)<<endl;
{inta
=9,
b
=11;cout<<“第2次調(diào)用:”<<fun(a)<<endl;cout<<“第3次調(diào)用:”<<fun(b)<<endl;
}cout<<“第4次調(diào)用:”<<fun(b)<<endl;
}形參n作用域局部s作用域局部i作用域局部a作用域局部a、b作用域局部a、b作用域運(yùn)行:正在求:1+2+…+5第1次調(diào)用:15正在求:1+2+…+9第2次調(diào)用:45正在求:1+2+…+11第3次調(diào)用:66正在求:1+2+…+7第4次調(diào)用:2825【例】(塊作用域)#include<iostream.h>voidmain(){inta=10,b=20,c=30;cout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl;
{inta=40,b
=50;
c=a+
b;cout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl;}cout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl;}【例】(塊作用域)#include<iostream.h>voidmain(){for(
inta=1
;a<=5;a++)
{
inta=2;cout<<“a=”<<++a<<endl;
}cout<<“a=”<<a<<endl;}
運(yùn)行:a=10b=20c=30a=40b=50c=90a=10b=20c=90運(yùn)行:a=3a=3a=3a=3a=3a=626標(biāo)識(shí)符的作用域━━文件作用域文件作用域:在函數(shù)外聲明的變量可在該文件內(nèi)被引用,開(kāi)始于變量的聲明處,結(jié)束于文件的結(jié)尾處,即一旦在某個(gè)位置定義了全局變量,在其后的整個(gè)文件中均可以訪(fǎng)問(wèn)。幾條原則:
①全局變量作用域從定義處開(kāi)始到文件結(jié)尾處結(jié)束,遵循聲明在前、使用在后。②當(dāng)全局變量引用在前、聲明在后時(shí),需先對(duì)全局變量作外部聲明。格式:extern
類(lèi)型全局變量名;③當(dāng)全局變量與塊作用域內(nèi)的局部變量同名時(shí),局部變量?jī)?yōu)先。④在塊作用域內(nèi),若要引用同名的全局變量時(shí),可通過(guò)域運(yùn)算符“::”來(lái)引用。格式:
::
全局變量名
27#include<iostream.而一般的全局變量可以通過(guò)extern修飾后,作用于該程序的多個(gè)源文件。if(r*r<=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s));①調(diào)用函數(shù)進(jìn)行值傳遞時(shí),調(diào)用式中對(duì)應(yīng)的實(shí)參可以是常量、變量、表達(dá)式。cout<<maxf(x,y)<<‘\t’;charc;④動(dòng)態(tài)數(shù)據(jù)區(qū)(自由存儲(chǔ)區(qū)、堆區(qū))━━存放運(yùn)行時(shí)由new運(yùn)算符動(dòng)態(tài)創(chuàng)建的變量?!纠浚ㄇ笕缦鹿?,r和s值鍵盤(pán)輸入,SIN(x)用級(jí)數(shù)計(jì)算,計(jì)算精度為10-3。cout<<maxf(i+j,45+y)<<endl;a=5b=6a=5b=6cout<<“x=”<<x<<“\tx1=”<<x1<<“\tx2=”<<x2<<endl;}④局部?jī)?yōu)先原則:具有塊作用域的標(biāo)識(shí)符在其作用域內(nèi),將屏蔽其作用塊包含本塊的同名標(biāo)識(shí)符。⑦返回到主調(diào)函數(shù)繼續(xù)執(zhí)行。a=5b=6變量的存儲(chǔ)類(lèi)型和生存期cout<<“x=”<<x<<“\tx1=”<<x1<<“\tx2=”<<x2<<endl;}voidf3()swap(x,y);變量的存儲(chǔ)類(lèi)型和生存期若需引用,可間接實(shí)現(xiàn),即通過(guò)該static局部變量的地址進(jìn)行訪(fǎng)問(wèn)(后續(xù)章節(jié)介紹)。作用域:指程序中標(biāo)識(shí)符(如變量名、函數(shù)名)的有效使用范圍,即作用范圍。cout<<“x=”<<x<<“\tx1=”<<x1<<“\tx2=”<<x2<<endl;}②文件作用域while(n--)t*=x;變量的存儲(chǔ)類(lèi)型和生存期cout<<“調(diào)用后:x=”<<x<<“\ty=”<<y<<endl;④在塊作用域內(nèi),若要引用同名的全局變量時(shí),可通過(guò)域運(yùn)算符“::”來(lái)引用。①聲明局部變量時(shí),用static修飾屬靜態(tài)類(lèi)型變量,存放在全局?jǐn)?shù)據(jù)區(qū),即靜態(tài)區(qū)。6,float型→floatb=50.③引用傳遞時(shí)傳遞的是變量名,引用類(lèi)型的形參變量與其相關(guān)聯(lián)的實(shí)參變量使用的是同一個(gè)存儲(chǔ)空間,若引用類(lèi)型的形參變量的值發(fā)生變化,其相關(guān)聯(lián)的實(shí)參變量的值也就隨之變化,因此是雙向傳遞。#include<iostream.調(diào)用后:x=10y=5【例】(文件作用域)#include<iostream.h>inta
=5,
b
;
//a、b定義在函數(shù)外,為全局變量externintc;//全局變量c引用在前、聲明在后時(shí),需先外部聲明voidmain(){inta=10,b=20; //a、b定義在函數(shù)內(nèi),為局部變量cout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl; a=18; ::b=::b+4;//引用全局變量b c=::a+a;//引用全局變量c和a,引用局部變量acout<<“a=”<<a<<“\tb=”<<b<<“\tc=”<<c<<endl;cout<<“a=”<<::a<<“\tb=”<<::b<<“\tc=”<<c<<endl;}intc=88;//c定義在函數(shù)外,為全局變量運(yùn)行:a=10b=20c=88a=18b=20c=23a=5b=4c=2328標(biāo)識(shí)符的作用域━━函數(shù)原型作用域、函數(shù)作用域函數(shù)原型作用域:①在函數(shù)原型聲明的參數(shù)表中聲明的標(biāo)識(shí)符,所具有的作用域稱(chēng)為函數(shù)原型作用域,即從其聲明處開(kāi)始,到函數(shù)原型聲明的結(jié)束處結(jié)束。②函數(shù)原型聲明中所聲明的標(biāo)識(shí)符,其作用域僅在函數(shù)原型聲明的語(yǔ)句內(nèi),因此與該函數(shù)的定義和調(diào)用均無(wú)關(guān),所以在函數(shù)原型聲明中可只作參數(shù)的類(lèi)型聲明,而省略參數(shù)名?!纠亢瘮?shù)原型聲明:voidswap(
inta
,
intb);//a、b作用域僅在該句內(nèi)函數(shù)原型聲明:voidswap(
int,
int);函數(shù)作用域:①函數(shù)作用域是指在函數(shù)內(nèi)定義的標(biāo)識(shí)符在其定義的函數(shù)內(nèi)均有效,即不論在函數(shù)內(nèi)的任何地方定義,在整個(gè)函數(shù)內(nèi)均可以引用。②C++中只有語(yǔ)句標(biāo)號(hào)具有函數(shù)作用域。29變量的存儲(chǔ)類(lèi)型和生存期存儲(chǔ)類(lèi)型:變量的存儲(chǔ)類(lèi)型反映了變量占用內(nèi)存空間的期限,它規(guī)定了變量的生存期,即何時(shí)為變量分配內(nèi)存空間、何時(shí)撤消變量收回為其分配的內(nèi)存空間。在聲明變量時(shí),可對(duì)其存儲(chǔ)類(lèi)型進(jìn)行定義,格式:《存儲(chǔ)類(lèi)型》類(lèi)型
變量名1《
=初值1
》《,變量名2《
=初值2
》,
…》;
◆其中存儲(chǔ)類(lèi)型有四種:①自動(dòng)類(lèi)型━━auto②靜態(tài)類(lèi)型━━static③寄存器類(lèi)型━━register④外部類(lèi)型━━extern
◆當(dāng)存儲(chǔ)類(lèi)型省略時(shí),對(duì)于局部變量則表示auto。30變量的存儲(chǔ)類(lèi)型和生存期auto自動(dòng)類(lèi)型變量:①聲明局部變量時(shí),用auto修飾屬自動(dòng)類(lèi)型變量,存放在局部數(shù)據(jù)區(qū),即棧區(qū)。②auto局部變量在程序運(yùn)行到其作用域時(shí)在棧區(qū)分配,在離開(kāi)其作用域時(shí)即被釋放,因此生存期僅在其作用域內(nèi)。③聲明局部變量時(shí)若省略存儲(chǔ)類(lèi)型,C++編譯器默認(rèn)為auto。④自動(dòng)類(lèi)型變量未初始化時(shí),其初值不確定。⑤全局變量無(wú)自動(dòng)類(lèi)型。31變量的存儲(chǔ)類(lèi)型和生存期static靜態(tài)類(lèi)型變量:①聲明局部變量時(shí),用static修飾屬靜態(tài)類(lèi)型變量,存放在全局?jǐn)?shù)據(jù)區(qū),即靜態(tài)區(qū)。②static局部變量的生存期:在程序運(yùn)行中第一次進(jìn)入其作用域時(shí)在靜態(tài)區(qū)分配,離開(kāi)其作用域時(shí)并不釋放,只是不能引用,若程序運(yùn)行中再次進(jìn)入該static局部變量的作用域,由于該變量已經(jīng)存在,所以不再分配空間,可直接引用。static局部變量直到程序運(yùn)行結(jié)束才被釋放。③static局部變量的作用:是保存函數(shù)的運(yùn)行結(jié)果,以便再次調(diào)用該函數(shù)時(shí),能繼續(xù)使用上次調(diào)用的計(jì)算結(jié)果。注意,不在其作用域時(shí),不能直接引用;若需引用,可間接實(shí)現(xiàn),即通過(guò)該static局部變量的地址進(jìn)行訪(fǎng)問(wèn)(后續(xù)章節(jié)介紹)。32變量的存儲(chǔ)類(lèi)型和生存期④全局變量聲明時(shí)無(wú)論前面加或不加static,都具有靜態(tài)生存期,因?yàn)槿肿兞慷即娣旁谌謹(jǐn)?shù)據(jù)區(qū),即靜態(tài)區(qū)。⑤但用static修飾的全局變量,稱(chēng)為靜態(tài)全局變量。靜態(tài)全局變量與一般的全局變量在形式上類(lèi)似,但含義有所不同,靜態(tài)全局變量只能在其定義的源文件中有效(該文件中可以有若干個(gè)函數(shù)),而在該程序的其他源文件中則是無(wú)效的;而一般的全局變量可以通過(guò)extern修飾后,作用于該程序的多個(gè)源文件。⑥靜態(tài)類(lèi)型變量未初始化時(shí),其初值為0。33【例】#include<iostream.h>inta
=1,
b
=2
;
//a、b為全局變量,在靜態(tài)區(qū)intfun(){
staticinta=3;//a為靜態(tài)局部變量,在靜態(tài)區(qū)
intb=4;//b為auto局部變量,在棧區(qū)a+=b;
returna;}voidmain(){inta=5,b=6; //a、b為auto局部變量,在棧區(qū)cout<<“a=”<<a<<“\tb=”<<b<<endl;
for(inti=1;i<=3;i++)
{
cout<<“第”<<i<<“次調(diào)用:”<<fun()<<endl;cout<<“a=”<<a<<“\tb=”<<b<<endl;}cout<<“a=”<<::a<<“\tb=”<<::b<<endl;}運(yùn)行:a=5b=6第1次調(diào)用:7a=5b=6第2次調(diào)用:11a=5b=6第3次調(diào)用:15a=5b=6a=1b=234【例】(與上例比較)#include<iostream.h>inta
=1,
b
=2
;
//a、b為全局變量,在靜態(tài)區(qū)intfun(){inta=3;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國(guó)陶瓷注射成型行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)阿魏酸(CAS 533-87-9)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)防輻射服裝行業(yè)市場(chǎng)深度分析及發(fā)展前景與投資機(jī)會(huì)研究報(bào)告
- 2025-2030中國(guó)長(zhǎng)租公寓行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)金屬元件行業(yè)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)車(chē)載冷暖箱行業(yè)市場(chǎng)前景分析及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)證券經(jīng)營(yíng)機(jī)構(gòu)行業(yè)市場(chǎng)深度調(diào)研及競(jìng)爭(zhēng)格局與投資前景研究報(bào)告
- 商場(chǎng)客服中心客服個(gè)人年終總結(jié)
- 學(xué)生會(huì)個(gè)人總結(jié)
- 2025-2030中國(guó)蛋白質(zhì)A層析樹(shù)脂行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 躲不開(kāi)的食品添加劑講解課件
- 個(gè)體診所常見(jiàn)違法行為課件
- 地下車(chē)庫(kù)設(shè)計(jì)專(zhuān)題 停車(chē)位與柱網(wǎng)分析-76p
- stagetec產(chǎn)品介紹及-廣電版
- 新農(nóng)村農(nóng)房建設(shè)課件
- 非急救醫(yī)療轉(zhuǎn)運(yùn)管理規(guī)范(醫(yī)院院前急救體系補(bǔ)充)
- 四年級(jí)下冊(cè)信息技術(shù)課件-7.文化瑰寶探秘|大連理工版 (共15張PPT)
- 依戀的發(fā)展PPT演示課件(PPT 76頁(yè))
- 維修電工高級(jí)技師論文(6篇推薦范文)
- 六年級(jí)下冊(cè)數(shù)學(xué)課件--總復(fù)習(xí)《圖形的運(yùn)動(dòng)》北師大版.--共20張PPT
- 6SE70系列變頻器講解及Drive-Monitor調(diào)試(工程師培訓(xùn))課件
評(píng)論
0/150
提交評(píng)論