第2章C++程序設(shè)計(jì)基礎(chǔ)-2_第1頁(yè)
第2章C++程序設(shè)計(jì)基礎(chǔ)-2_第2頁(yè)
第2章C++程序設(shè)計(jì)基礎(chǔ)-2_第3頁(yè)
第2章C++程序設(shè)計(jì)基礎(chǔ)-2_第4頁(yè)
第2章C++程序設(shè)計(jì)基礎(chǔ)-2_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第2章C++程序設(shè)計(jì)基礎(chǔ)2.1

C++語(yǔ)言簡(jiǎn)介2.2

C++源程序的結(jié)構(gòu)2.3

基本數(shù)據(jù)與表達(dá)式(*)2.4

C++中的輸入/輸出2.5程序的控制結(jié)構(gòu)(*)2.6函數(shù)2.7數(shù)組與字符串2.8指針與引用2.9

const修飾符2.10動(dòng)態(tài)內(nèi)存分配

2.6函數(shù)2.6.1

函數(shù)1、函數(shù)的分類

系統(tǒng)函數(shù)(庫(kù)函數(shù))、自定義函數(shù)2、函數(shù)的定義類型說(shuō)明符函數(shù)名(形式參數(shù)表)//函數(shù)首部{

函數(shù)體;

}3、函數(shù)的調(diào)用函數(shù)名(實(shí)際參數(shù)表);//無(wú)參函數(shù)省略實(shí)際參數(shù)表4、函數(shù)原型返回值類型

函數(shù)名(形參類型[形參名],…..);//li2_8.cpp#include<iostream>usingnamespacestd;longFac(intn);

//Fac函數(shù)原型聲明語(yǔ)句intmain(){inti,n;longfac;cout<<“Pleaseinputanumber(<=12):”;cin>>n;fac=Fac(n);if(fac==-1) cout<<“error:n<1\n”;else cout<<n<<"!="<<fac<<endl;}longFac(intn)

//計(jì)算n!{inti=1;longf;if(n<1)

return-1;for(f=1;i<=n;i++)

f=f*i;returnf;}【例2-7、例2-8

】求解問(wèn)題:計(jì)算n!的問(wèn)題2.6.2

函數(shù)的其它特性C++支持內(nèi)聯(lián)函數(shù)、重載函數(shù)及帶默認(rèn)參數(shù)的函數(shù),還可以定義函數(shù)模板,詳見(jiàn)模板一章。1、內(nèi)聯(lián)函數(shù)(內(nèi)置)C++新增加的一個(gè)特性,以提高程序執(zhí)行的速度。在函數(shù)定義前加上關(guān)鍵字inlineinline函數(shù)的執(zhí)行方式:在編譯過(guò)程中,直接將該函數(shù)的程序碼插入調(diào)用該inline函數(shù)的程序中。例如:inlinedoubleadd(doublex,doubley){return(x+y);}intmain(){

cout<<“2+2is:”<<add(2.0,2.0)<<endl;cout<<“2.2+3.134is:”<<add(2.2,3.134)<<endl;cout<<“13.13+3.234is:”<<add(13.13,3.234)<<endl;return0;}cout<<“2+2is:”<<2.0+2.0<<endl;cout<<“2.2+3.134is:”<<2.2+3.134<<endl;cout<<“13.13+3.234is:”<<13.13+3.234<<endl;內(nèi)聯(lián)函數(shù)作用

減少頻繁調(diào)用小子程序的運(yùn)行的時(shí)間開(kāi)銷內(nèi)聯(lián)函數(shù)機(jī)制

編譯器在編譯時(shí),將內(nèi)聯(lián)函數(shù)的調(diào)用以相應(yīng)代碼代替內(nèi)聯(lián)函數(shù)聲明

inline

函數(shù)原型注:內(nèi)聯(lián)函數(shù)僅在函數(shù)原型作一次聲明。適用于只有1~5行的小函數(shù)不能含有復(fù)雜結(jié)構(gòu)控制語(yǔ)句,不能遞歸調(diào)用【例2-9】求解問(wèn)題:定義求絕對(duì)值的內(nèi)聯(lián)函數(shù)//li2_9.cpp#include<iostream>usingnamespacestd;inlineintAbs(intx)

//函數(shù)定義前加關(guān)鍵字inline{returnx>0?x:-x;}intmain(){intn;

cout<<"Enteranumber:";

cin>>n;cout<<”|n|=”<<Abs(n)<<endl;return0;}

正確聲明:inlineint

Abs(intx);intmain(){……

cout<<”|n|=”<<Abs(n)<<endl;

…...}int

Abs(intx){…...}inlineint

Abs(intx){…...}intmain(){……

cout<<”|n|=”<<Abs(n)<<endl;

…...}錯(cuò)誤聲明:重復(fù)說(shuō)明,語(yǔ)法錯(cuò)誤intmain(){……

cout<<”|n|=”<<Abs(n)<<endl;

…...}inlineint

Abs(intx){…...}

inlineint

Abs(intx);intmain(){……

cout<<”|n|=”<<Abs(n)<<endl;

…...}inlineint

Abs(intx){…...}

int

Abs(intx);作普通函數(shù)處理2.帶默認(rèn)參數(shù)值的函數(shù)C++函數(shù)可默認(rèn)參數(shù)初值,即缺省參數(shù)。

voidf(intk=1) {…}調(diào)用:

f(10); f();當(dāng)需要多次調(diào)用一函數(shù),并發(fā)現(xiàn)要多次給函數(shù)傳遞某個(gè)同樣的參數(shù)時(shí),多要考慮用缺省參數(shù)。注意:設(shè)定缺省參數(shù)的位置(1)參數(shù)默認(rèn)值的設(shè)定不可以同時(shí)出現(xiàn)在函數(shù)原型與函數(shù)定義中。一般在函數(shù)原型中設(shè)定,若無(wú)函數(shù)原型,才在定義中說(shuō)明。(2)如果一個(gè)函數(shù)中只有某些變?cè)侨笔∽冊(cè)?,則必須要將那些缺省變?cè)旁谧兞勘碇械淖钣疫?。例如?/p>

voidf(inti,intj=10,intk); //error voidf(inti,intk,intj=10);3.函數(shù)重載C中,函數(shù)名是唯一的,不允許出現(xiàn)同名的函數(shù)。例如:求某個(gè)數(shù)的絕對(duì)值。C中:intabs(int); 調(diào)用:abs(i); floatfabs(float);

fabs(f); doubledabs(double);

dabs(d);C++中:intabs(int); 調(diào)用:abs(i);

floatabs(float);

abs(f);

doubleabs(double); abs(d);C++支持多個(gè)函數(shù)同名,編譯器通過(guò)參數(shù)區(qū)分調(diào)用哪個(gè)重載函數(shù)。說(shuō)明:(1)C++的重載機(jī)制是一名多用,是C++多態(tài)性的體現(xiàn)(2)重載函數(shù)應(yīng)在參數(shù)個(gè)數(shù)或參數(shù)類型上有所不同,否則編譯程序?qū)o(wú)法確定調(diào)用哪一個(gè)重載版本。即使返回類型不同,也不能區(qū)分

例2-11參數(shù)類型不同的函數(shù)重載例2-12參數(shù)個(gè)數(shù)不同的函數(shù)重載

(3)一般而言,重載函數(shù)應(yīng)執(zhí)行相同或相近的功能。

(4)重載函數(shù)不能與帶默認(rèn)值的函數(shù)一起使用。

voidDrawcircle(intr=0,intx=0,inty=0);voidDrawcircle(intr);

調(diào)用:Drawcircle(20);//error

2.7數(shù)組與字符串2.7.1數(shù)組數(shù)組是具有相同類型的若干數(shù)據(jù)的有序集合,是一種構(gòu)造類型。一個(gè)數(shù)組可以分解為多個(gè)數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。/#include<iostream>//li2_13.cppusingnamespacestd;constintSIZE=10;

intmain(){intarray[SIZE],s;inti;cout<<"Pleaseinput10numbers:\n";for(i=0;i<SIZE;i++)//輸入數(shù)組的元素cin>>array[i];cout<<"inputs:";//輸入要查找的數(shù)據(jù)cin>>s;for(i=0;i<SIZE;i++)//順序查找if(array[i]==s) break;if(i==SIZE)//輸出查找的結(jié)果cout<<"NOFOUND!";elsecout<<s<<"indexis"<<i<<endl;return0;}【例2-13】求解問(wèn)題:在給定的一組數(shù)據(jù)中查找一個(gè)指定的數(shù)據(jù),若找到則給出其序號(hào),以在一組整型數(shù)據(jù)中進(jìn)行查找為例,以整型數(shù)組存儲(chǔ)數(shù)據(jù),應(yīng)用順序查找方法實(shí)現(xiàn)程序如下。2.7.2數(shù)組與字符串C++沒(méi)有字符串類型,以字符數(shù)組作字符串:

'\0'為字符串結(jié)束標(biāo)志

'\0'是ASCII碼為0的不可顯示字符,即“空操作符”對(duì)字符數(shù)組以字符串常量進(jìn)行初始化時(shí),自動(dòng)添加'\0'

用串常量初始化

charstr2[10]={"Student"}; charstr3[]={"Student"}; charstr4[]="Student";字符串添加'\0'1.用字符數(shù)組存放字符串Student\0字符數(shù)組不同的初始化方式:逐個(gè)字符對(duì)數(shù)組元素賦初始值:

char*string="Student";操作:

建立匿名空間; strcpy(string,"Student");stringStudent\02.用字符指針管理串name[0]name[1]name[2]name[3]name[4]char*name[5]={"LiHua","HeXiaoMing","ZhangLi","SunFei","ChenBiao"}LiHua\0HeXiaoMing\0ZhangLi\0SunFei\0ChenBiao\02.用字符指針管理串注意:iostream對(duì)字符串的擴(kuò)充功能:

字符串常量、字符數(shù)組名、字符指針都表示字符串輸出字符指針就是輸出整個(gè)字符串(全部字符)輸出字符指針的間接引用是輸出單個(gè)字符基本操作中,串名是地址:字符串名的直接比較是地址比較字符串名賦值是賦地址值使用string類需包含頭文件string:#include<string>

//聲明字符串類和字符串操作函數(shù)聲明標(biāo)準(zhǔn)命名空間usingnamespacestd;

//string定義在標(biāo)準(zhǔn)命名空間3.用string類操作字符串*1)、定義string對(duì)象

string字符串對(duì)象;

string對(duì)象理解為存儲(chǔ)字符串的變量。例:stringstr1;stringstr2=“china”;2)、string對(duì)象的輸入、輸出例:stringcountry;cin>>country;cout<<country;*3)、string對(duì)象的運(yùn)算注意:字符數(shù)組不能整體賦值例:Charstr[10];str=“Usa”;(×)

字符串賦值運(yùn)算:“=”例:stringstr1,str2;

str1=“China”;str2=str1;*字符串連接運(yùn)算:“+”例:stringstring1=″China″;stringstring2=″Korea″;string1=string1+string2;

//連接后string1為″ChinaKorea″字符串關(guān)系運(yùn)算:>>=<<===!=例:stringstr1=”Usa”,str2=”France”;

if(str1!=str2)cout<<“no”;if(str1<str2)cout<<“yes”;*Why?i=1+1//整型數(shù)據(jù)d=1.2+3.4//實(shí)型數(shù)據(jù)s=”ab”+”cd”//字符串同一運(yùn)算符能對(duì)不同數(shù)據(jù)類型操作。

運(yùn)算符重載實(shí)現(xiàn)的多態(tài)性*例:stringname[5];

//定義一個(gè)字符串?dāng)?shù)組,它包含5個(gè)字符串元素。stringname[5]={”China”,”France”,”Austria”,”Australia”,”Japan”};4)string數(shù)組name[0]chinaname[1]Francename[2]AustriaName[3]Australianame[4]Japan*說(shuō)明:(1)一個(gè)字符串?dāng)?shù)組包含若干個(gè)字符串變量。(2)每個(gè)字符串元素的長(zhǎng)度是可以變化的,同一個(gè)元素重新賦值,其長(zhǎng)度也可發(fā)生變化。(3)字符串?dāng)?shù)組與字符數(shù)組不同。(4)每一個(gè)字符串元素中只包含字符串本身的字符而不包括′\0′。編譯系統(tǒng)為每一個(gè)字符串變量分配4個(gè)字節(jié),用于存放字符串的地址,而不是直接存放字符串本身。*分析程序的實(shí)現(xiàn):輸入處理輸出輸入N個(gè)字符串賦給name[0]…name[N-1]

forj=1toN-1

fori=0toN-j-1

name[i]>name[i+1]

真假name[i]與name[i+1]交換輸出排序后的字符串name[0]…name[N-1]例2-15:國(guó)家名字排序問(wèn)題#include<iostream>usingnamespacestd;#include<string>constintN=10;intmain(){

stringname[N];inti,j;//任意輸入10個(gè)國(guó)家名字

for(i=0;i<N;i++)

cin>>name[i];

//冒泡排序

for(j=1;j<=N-1;j++)for(i=0;i<=N-j-1;i++)if(name[i]>name[i+1]) {stringstr;str=name[i];name[i]=name[i+1];name[i+1]=str;}

//輸出排序后的名字順序

for(i=0;i<N;i++)cout<<name[i];return0;}*2.8指針與引用2.8.1指針C/C++中的指針本質(zhì)上就是一個(gè)存放變量地址的變量。與一般變量不同,指針實(shí)現(xiàn)了按地址訪問(wèn)內(nèi)存數(shù)據(jù)的方法,具體應(yīng)用于數(shù)組、函數(shù)參數(shù)和動(dòng)態(tài)內(nèi)存的管理中。指針定義的一般形式:

類型名*指針變量名;

//*代表指針類型例:int*p;指針變量在使用前需要賦值:

p=&a;

//a為整型變量,運(yùn)算符&取a的地址通過(guò)p間接訪問(wèn)a中數(shù)據(jù):

*p=10;等價(jià)于

a=10;//運(yùn)算符*實(shí)現(xiàn)了間接訪問(wèn)2.8.2引用1.引用的基本概念引用就是為一個(gè)已定義的變量或?qū)ο罅砥鹨粋€(gè)名字,引用作為一個(gè)變量的別名,定義形式如下:

數(shù)據(jù)類型

&引用名=已定義的變量名;例如:

inta=5;

int&k=a;

//k是a的引用注意:1)&此時(shí)是一種引用類型標(biāo)識(shí)符,int

&是int變量的引用。2)引用必須在定義時(shí)初始化。

5k

a【例2-16】引用和變量的關(guān)系。//li2_16.cpp#include<iostream>#include<iomanip>usingnamespacestd;intmain(){inta=10;

int&b=a;//聲明b是a的引用

a=a*a;

//a的值變化了,b的值也應(yīng)一起變化

cout<<a<<setw(6)<<b<<endl;

b=b/5;

//b的值變化了,a的值也應(yīng)一起變化

cout<<b<<setw(6)<<a<<endl;

return0;}

結(jié)果為:10010020202.引用作為函數(shù)參數(shù)引用可以作為函數(shù)參數(shù)進(jìn)行傳遞,稱為引用傳遞。C++函數(shù)的參數(shù)類型可以是C++允許的任意類型,分為:值傳遞:系統(tǒng)將實(shí)參值作為初始值,對(duì)形參初始化。被調(diào)函數(shù)體內(nèi)對(duì)形參的操作與外部實(shí)參無(wú)關(guān)。指針傳遞:當(dāng)函數(shù)參數(shù)為指針類型時(shí),系統(tǒng)將實(shí)參對(duì)象的地址傳遞給形參指針。這時(shí),在被調(diào)函數(shù)內(nèi)可以通過(guò)形參指針間接訪問(wèn)實(shí)參。指針傳遞是對(duì)地址值的傳遞,實(shí)際也是一種值傳遞。

引用傳遞:函數(shù)參數(shù)為引用時(shí),系統(tǒng)將實(shí)參對(duì)象的名字傳遞給形參引用。這時(shí)形參名作為引用關(guān)聯(lián)于實(shí)參對(duì)象,在被調(diào)用函數(shù)內(nèi)對(duì)形參的操作,就是對(duì)實(shí)參的操作?!纠?-18】求解問(wèn)題:交換兩個(gè)變量的值。//li2_18cpp#include<iostream>usingnamespacestd;voidSwap(intx,inty)

//以整型變量作參數(shù):?jiǎn)蜗蛑祩鬟f

{inttemp=x;

x=y;

y=temp;}intmain(){inti=10,j=20;

Swap(i,j);

cout<<i<<“,”<<j<<‘\n’;

//形參改變不影響實(shí)參

,實(shí)參值不交換

return0;}【例2-18】求解問(wèn)題:交換兩個(gè)變量的值。//li2_18.cpp#include<iostream>usingnamespacestd;voidSwap(int*x,int*y)

//以指針變量作參數(shù):指向?qū)崊⒆兞縶inttemp=*x;

*x=*y;

*y=temp;}intmain(){inti=10,j=20;

Swap(&i,&j);

//傳遞實(shí)參變量地址值

cout<<i<<“,”<<j<<‘\n’;

//實(shí)參值發(fā)生交換

return0;}【例2-18】求解問(wèn)題:交換兩個(gè)變量的值。//li2_18.cpp#include<iostream>usingnamespacestd;voidSwap(int&x,int&y)

//以整型引用作參數(shù),形參對(duì)應(yīng)實(shí)參的別名{inttemp=x;

x=y;

y=temp;}intmain(){inti=10,j=20;

Swap(i,j);

cout<<i<<“,”<<j<<‘\n’;

//實(shí)參值發(fā)生交換

return0;}//常引用作形參#include<iostream>usingnamespacestd;//常引用作形參,不能修改實(shí)參intsum(constint&x,constint&y){returnx+y;}intmain()

溫馨提示

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

評(píng)論

0/150

提交評(píng)論