第5、7、8章函數(shù)與結(jié)構(gòu)體_第1頁(yè)
第5、7、8章函數(shù)與結(jié)構(gòu)體_第2頁(yè)
第5、7、8章函數(shù)與結(jié)構(gòu)體_第3頁(yè)
第5、7、8章函數(shù)與結(jié)構(gòu)體_第4頁(yè)
第5、7、8章函數(shù)與結(jié)構(gòu)體_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C++語(yǔ)言程序設(shè)計(jì)函數(shù)結(jié)構(gòu)體函數(shù)

函數(shù)的定義

函數(shù)的調(diào)用

全局變量和局部變量

變量的存儲(chǔ)類(lèi)型參數(shù)的傳遞方式

數(shù)組作函數(shù)參數(shù)函數(shù)遞歸函數(shù)的默認(rèn)參數(shù)值函數(shù)的定義

格式:函數(shù)類(lèi)型名函數(shù)名(形參說(shuō)明表){

語(yǔ)句序列

}

說(shuō)明:1°函數(shù)由函數(shù)首部和函數(shù)體構(gòu)成

2°函數(shù)名的命名規(guī)則同變量名

函數(shù)首部函數(shù)體P913°函數(shù)類(lèi)型名規(guī)定了函數(shù)返回值的類(lèi)型。

使用return返回函數(shù)值執(zhí)行到第一個(gè)return時(shí)函數(shù)結(jié)束無(wú)返回值時(shí),函數(shù)類(lèi)型名用void函數(shù)的定義

說(shuō)明:4°函數(shù)的參數(shù)會(huì)參與函數(shù)的執(zhí)行

形參說(shuō)明表中的多個(gè)參數(shù)之間

用逗號(hào)隔開(kāi)每個(gè)參數(shù)都要有類(lèi)型說(shuō)明無(wú)參數(shù)時(shí),()內(nèi)可用void函數(shù)的定義

說(shuō)明:函數(shù)的調(diào)用

格式:函數(shù)名(實(shí)參列表)如:m=2*max(x,y);

pick();//調(diào)用無(wú)參函數(shù)//調(diào)用有參函數(shù)

說(shuō)明:函數(shù)的調(diào)用1°形參:出現(xiàn)在函數(shù)定義中

實(shí)參:出現(xiàn)在函數(shù)調(diào)用中兩者的類(lèi)型、個(gè)數(shù)必須一致并一一對(duì)應(yīng)。2°調(diào)用函數(shù)前先聲明函數(shù)原型

(functionprototype)。聲明格式:函數(shù)首部;e.g.

設(shè)計(jì)函數(shù)判斷某個(gè)整數(shù)是否為質(zhì)數(shù),并求100以?xún)?nèi)的所有質(zhì)數(shù)。

#include<iostream>

usingnamespacestd;

voidmain()

{

boolIsPrime(intn);

intx;

for(x=2;x<100;x++)

if(IsPrime(x))//函數(shù)的調(diào)用cout<<x<<‘\t’;

}//函數(shù)原型聲明boolIsPrime(intn)//函數(shù)的定義

{

inti;

for(i=2;i<n;i++)

if(n%i==0)return0;

return1;

}10函數(shù)調(diào)用的執(zhí)行過(guò)程main()調(diào)fun()結(jié)束fun()返回①②④⑥⑦保存:返回地址當(dāng)前現(xiàn)場(chǎng)③恢復(fù):主調(diào)程序現(xiàn)場(chǎng)返回地址⑤參數(shù)的傳遞方式

數(shù)組作函數(shù)參數(shù)函數(shù)間的參數(shù)傳遞

方式:實(shí)參的值傳給形參。1.值傳遞

特點(diǎn):不會(huì)影響實(shí)參的值,

實(shí)現(xiàn)數(shù)據(jù)的單向傳遞。(5)(3)voidmain()

{

intmax(inta,intb);

intx=5,y=3,z;

z=max(x,y);

cout<<“Thebiggeroneis:”<<z;

}intmax(inta,intb)

{

if(a>=b)returna;

returnb;

}如:交換兩個(gè)整數(shù)的值。

voidmain()

{inta=3,b=7;

swap(a,b);

cout<<“交換后:a=”<<a<<“,b=”<<b<<endl;

}

voidswap(intx,inty)

{

intt;

t=x;

x=y;

y=t;

}/*無(wú)法交換實(shí)參a和b的值*/(3)(7)2.引用傳遞

引用是一個(gè)變量的別名。類(lèi)型名&引用名=已定義的同類(lèi)型變量名intx=10,&y=x;//創(chuàng)建int型的引用y,

//并初始化為變量x的別名cout<<y;//輸出10

y=100;

cout<<x;//輸出100函數(shù)間的參數(shù)傳遞2.引用傳遞三、函數(shù)調(diào)用時(shí)的參數(shù)傳遞方式

創(chuàng)建引用時(shí),須對(duì)其進(jìn)行初始化,使其指向一個(gè)已存在的對(duì)象。引用一旦被初始化后,就不能改為指向其它對(duì)象。

引用可作函數(shù)形參。如:交換兩個(gè)整數(shù)的值。

voidmain()

{inta=3,b=7;

swap(a,b);

cout<<“交換后:a=”<<a<<“,b=”<<b<<endl;

}

voidswap(int&x,int&y)

{

intt;

t=x;

x=y;

y=t;

}P96數(shù)組作函數(shù)參數(shù)

形參:一維數(shù)組無(wú)需指定大小,二維數(shù)組無(wú)需指定第二維大小,但需指定第一維大小

實(shí)參:使用數(shù)組名即可,無(wú)需帶[]如:voidsort(chars[]){……}voidmain()

{

charc[100];……sort(c);……}數(shù)組名函數(shù)參數(shù)是數(shù)組

函數(shù)調(diào)用時(shí),形參數(shù)組得到的是實(shí)參數(shù)組的地址,它們表示的是同一個(gè)對(duì)象。數(shù)組作函數(shù)參數(shù)

數(shù)組名是數(shù)組的地址。

函數(shù)執(zhí)行時(shí)對(duì)形參數(shù)組的任何操作即是對(duì)實(shí)參數(shù)組操作。e.g.編寫(xiě)函數(shù)統(tǒng)計(jì)某字符串中字母、數(shù)字及其他字符的個(gè)數(shù)。在主函數(shù)中輸入字符串和輸出統(tǒng)計(jì)結(jié)果。

#include<iostream>usingnamespacestd;voidmain(){voidcount(chars[],intd[]);chars[100];intd[3]={0,0,0}; cout<<“請(qǐng)輸入s:"; gets(s); count(s,d); cout<<"s中有"<<d[0]<<"個(gè)字母、"<<d[1]<<"個(gè)數(shù)字和"<<d[2]<<"個(gè)其他字符。"<<endl;}voidcount(chars[],intd[]){inti;for(i=0;s[i]!=0;i++){ if(s[i]>=65&&s[i]<=90||s[i]>=97&&s[i]<=122) d[0]++; elseif(s[i]>=48&&s[i]<=57) d[1]++; elsed[2]++;}}

聲明函數(shù)原型時(shí),可為一個(gè)或多個(gè)形參指定缺省參數(shù)值。調(diào)用函數(shù)時(shí)如給出實(shí)參,則采用實(shí)參值,否則采用對(duì)應(yīng)的缺省參數(shù)值。函數(shù)的缺省參數(shù)值voidmain(){cout<<add(10,20);//10+20cout<<add(10);//10+6cout<<add();//5+6}intadd(intx,inty)

{returnx+y;}如:intadd(intx=5,inty=6);P102

函數(shù)原型中,所有取默認(rèn)值的形參都必須出現(xiàn)在不取默認(rèn)值的形參的右邊。函數(shù)的缺省參數(shù)值如:intf(intx,inty=5,intz=6);//正確

intf(intx=1,inty=5,intz=6);//正確

intf(intx=1,inty=5,intz);//錯(cuò)誤

intf(intx=1,inty,intz=6);//錯(cuò)誤

函數(shù)調(diào)用時(shí),若省略某個(gè)實(shí)參,則其后的實(shí)參都應(yīng)省略。如:f(,10,20);//錯(cuò)誤函數(shù)的調(diào)用

函數(shù)的嵌套調(diào)用

在調(diào)用一個(gè)函數(shù)的過(guò)程中又調(diào)用另一個(gè)函數(shù)。函數(shù)的遞歸調(diào)用不做要求25e.g.輸入兩個(gè)整數(shù),求平方和。#include<iostream>usingnamespacestd;intmain(){inta,b;intfun1(intx,inty);cin>>a>>b;cout<<"a、b的平方和:"

<<fun1(a,b)<<endl; return0;}26intfun1(intx,inty){intfun2(intm);return(fun2(x)+fun2(y));}intfun2(intm){return(m*m);}運(yùn)行結(jié)果:34a、b的平方和:2526

P144函數(shù)重載

引例:求不同類(lèi)型數(shù)據(jù)的絕對(duì)值#include<iostream>#include<cmath>usingnamespacestd;voidmain(){

intx1=-1;doublex2=2.5;longx3=3L;cout<<abs(x1)<<endl;//庫(kù)函數(shù)abs求整型數(shù)的絕對(duì)值

cout<<fabs(x2)<<endl;//庫(kù)函數(shù)fabs求實(shí)型數(shù)的絕對(duì)值

cout<<labs(x3)<<endl;//庫(kù)函數(shù)labs求長(zhǎng)整型數(shù)的絕對(duì)值

}如果兩個(gè)函數(shù)的函數(shù)名相同,參數(shù)個(gè)數(shù)不同或參數(shù)的數(shù)據(jù)類(lèi)型不完全相同,則稱(chēng)它們互為重載函數(shù)。函數(shù)重載voidf(intx,charh,floatd)voidf()形參個(gè)數(shù)不同voidf(intx)voidf(intx,charh,floatd)voidf(inta,charb,doublec)形參類(lèi)型不完全相同函數(shù)重載

重載函數(shù)的參數(shù)必須不同:個(gè)數(shù)不同或類(lèi)型不同。編譯器根據(jù)實(shí)參和形參在類(lèi)型及個(gè)數(shù)上的最佳匹配來(lái)選擇調(diào)用重載函數(shù)中的哪一個(gè)。

參數(shù)名的不同或函數(shù)返回值的不同均不能構(gòu)成重載條件e.g.設(shè)計(jì)數(shù)據(jù)交換重載函數(shù)。

#include<iostream>usingnamespacestd;voidswap(int&a,int&b);//交換兩個(gè)整數(shù)voidswap(char&a,char&b);//交換兩個(gè)字符voidswap(double&a,double&b);//交換兩個(gè)實(shí)型數(shù)voidswap(chara[],charb[]);//交換兩個(gè)字符串voidmain(){inti1=1,i2=2;charc1='A',c2='B';doubled1=1.123,d2=2.123;chars1[]="abc",s2[]="def";swap(i1,i2);swap(c1,c2);swap(d1,d2);swap(s1,s2);cout<<i1<<","<<i2<<endl;cout<<c1<<","<<c2<<endl;cout<<d1<<","<<d2<<endl;cout<<s1<<","<<s2<<endl;}voidswap(int&a,int&b){intt;t=a;a=b;b=t;}voidswap(char&a,char&b){……}voidswap(double&a,double&b){……}voidswap(chara[],charb[]){chart[100];strcpy(t,a);strcpy(a,b);strcpy(b,t);}局部變量與全局變量

P99351。局部變量定義在函數(shù)內(nèi)或塊內(nèi)的變量稱(chēng)為局部變量。局部變量在程序運(yùn)行到它所在的塊時(shí)建立,

該塊執(zhí)行完畢局部變量占有的空間即被釋放。2。全局變量全局變量說(shuō)明于所有函數(shù)之外,可以為本源程

序文件中的所有函數(shù)共同使用。全局變量可以在各個(gè)函數(shù)之間建立數(shù)據(jù)傳輸通

道,但濫用會(huì)破壞程序的模塊化結(jié)構(gòu)。36#include<iostream>usingnamespacestd;intx; //聲明全局變量intfunc1(intx)//函數(shù)func1()有一個(gè)名為x的參數(shù){ return(x+5)*(x+5);}intfunc2(inty){ intx=y+5; //函數(shù)func2()中聲明了一個(gè)名為x的局部變量

returnx*x;}37intmain(){ x=0;//在主函數(shù)中為全局變量x賦值

cout<<"Theresultinfunc1:"<<func1(5)<<endl; cout<<"Theresultinfunc2:"<<func2(2)<<endl; cout<<"x="<<x<<endl; return0;}結(jié)構(gòu)體

P163

特殊的類(lèi)39結(jié)構(gòu)體一、概述結(jié)構(gòu)體是C++語(yǔ)言中的一種構(gòu)造數(shù)據(jù)類(lèi)型,各種結(jié)構(gòu)體的類(lèi)型是由用戶(hù)根據(jù)需要自己來(lái)定義的.結(jié)構(gòu)體與數(shù)組不同。數(shù)組是一批同類(lèi)型數(shù)據(jù)組成的集合;而結(jié)構(gòu)體多用來(lái)表示一些不同類(lèi)型的數(shù)據(jù)組成的一個(gè)有機(jī)整體。40二、結(jié)構(gòu)體類(lèi)型的定義1、語(yǔ)法:

struct

結(jié)構(gòu)體類(lèi)型名{成員定義表};其中,成員定義表中需要聲明該結(jié)構(gòu)體中每個(gè)成員的類(lèi)型,其形式為:

類(lèi)型名成員名結(jié)構(gòu)體類(lèi)型名和成員名都是用戶(hù)自定義的標(biāo)識(shí)符。412、舉例:

structstudent{charnum[11],name[21];charsex;intage;};

3、注意:

定義的結(jié)構(gòu)體類(lèi)型中的成員也可以是某種結(jié)構(gòu)體類(lèi)型的變量。但此時(shí)該成員所屬的結(jié)構(gòu)體類(lèi)型一定要定義在之前。42例如,以下定義結(jié)構(gòu)體類(lèi)型rect來(lái)表示直角坐標(biāo)系下的任意一個(gè)矩形。它有四個(gè)成員,分別是矩形的四個(gè)頂點(diǎn);其中每個(gè)頂點(diǎn)又都是point這種結(jié)構(gòu)體類(lèi)型的變量。point類(lèi)型包含兩個(gè)成員,分別表示點(diǎn)的橫坐標(biāo)和縱坐標(biāo):structrect

/*后定義*/{structpointpt1;structpointpt2;structpointpt3;structpointpt4;};

structpoint/*先定義*/{floatx;floaty;};

43三、結(jié)構(gòu)體變量的聲明若定義了某種結(jié)構(gòu)體類(lèi)型,則只是定義了這樣一種數(shù)據(jù)類(lèi)型的模板;若要表示屬于這種類(lèi)型的具體的個(gè)體數(shù)據(jù),就還需要聲明這種結(jié)構(gòu)體類(lèi)型的變量后,才能使用它。441、先定義某結(jié)構(gòu)體類(lèi)型再聲明其變量格式:

struct結(jié)構(gòu)體類(lèi)型名{成員定義表};

struct結(jié)構(gòu)體類(lèi)型名結(jié)構(gòu)體變量名表聲明結(jié)構(gòu)體變量的三種等價(jià)的方法:聲明了某結(jié)構(gòu)體類(lèi)型的變量后,系統(tǒng)會(huì)為之分配相應(yīng)的內(nèi)存單元(若只是定義了一種結(jié)構(gòu)體類(lèi)型,系統(tǒng)不會(huì)為之分配內(nèi)存單元)。例如:structstudent/*先*/{charnum[11],name[21];charsex;intage;};

structstudentstu1,stu2;

/*后*/462、在定義結(jié)構(gòu)體類(lèi)型的同時(shí)聲明其變量格式:struct結(jié)構(gòu)體類(lèi)型名{

成員定義表}結(jié)構(gòu)體變量名表;例如:

structstudent{charnum[11],name[21];charsex;intage;}stu1,stu2

;473、直接定義結(jié)構(gòu)體類(lèi)型的變量例如:

struct{charnum[11],name[21];charsex;intage;}stu1,stu2

;它與方法2的區(qū)別:定義中未指定結(jié)構(gòu)體類(lèi)型名。以后就無(wú)法利用結(jié)構(gòu)體類(lèi)型名來(lái)聲明這種類(lèi)型的變量。48四、結(jié)構(gòu)體變量的引用1、引用結(jié)構(gòu)體變量中成員的格式:結(jié)構(gòu)體變量名.成員名其中的“.”稱(chēng)為成員運(yùn)算符,其優(yōu)先級(jí)在所有運(yùn)算符中屬于最高級(jí)別.例如,引用前面已聲明的變量stu1中的num成員的形式為:

stu1.num聲明了一個(gè)結(jié)構(gòu)體變量后就可以使用它,但一般不整體地引用這個(gè)結(jié)構(gòu)體變量,而是對(duì)其中的各個(gè)成員分別地進(jìn)行引用.492、注意:(1)結(jié)構(gòu)體變量的成員與同類(lèi)型的變量一樣,可以對(duì)它進(jìn)行各種運(yùn)算、操作。例如:

stu1.sex=

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論