第2章C對C的擴(kuò)充_第1頁
第2章C對C的擴(kuò)充_第2頁
第2章C對C的擴(kuò)充_第3頁
第2章C對C的擴(kuò)充_第4頁
第2章C對C的擴(kuò)充_第5頁
已閱讀5頁,還剩104頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、掌握c+語言在結(jié)構(gòu)化程序結(jié)構(gòu)化程序設(shè)計(jì)(非面向?qū)ο?方面對c語言擴(kuò)充的性能,為編寫面向?qū)ο竺嫦驅(qū)ο蟮腸+程序打下基礎(chǔ)。2.1 c+的特點(diǎn)的特點(diǎn)2.2 c+語言的文件擴(kuò)展名語言的文件擴(kuò)展名2.3 注釋符注釋符2.4 名字空間名字空間2.5 c+語言的輸入輸出語言的輸入輸出2.6 變量的定義變量的定義2.7 強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換2.8 動態(tài)內(nèi)存的分配與釋放動態(tài)內(nèi)存的分配與釋放2.9 作用域運(yùn)算符作用域運(yùn)算符:2.10 引用引用2.11 const修飾符修飾符2.12 字符串字符串2.13 c+語言中函數(shù)的新特性語言中函數(shù)的新特性習(xí)題習(xí)題2.1 c+的發(fā)明人的發(fā)明人 bjarne stroust

2、rup(本賈尼斯特勞斯特盧普)博士,c+語言之父,1950年出生于丹麥,1979年在英國劍橋大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位計(jì)算機(jī)科學(xué)博士學(xué)位,at&t、貝爾實(shí)驗(yàn)室和acm成員。1979年,b. s開始開發(fā)一種語言,當(dāng)時稱為“c with class”,1983年演化為c+。1998年,ansi/iso c+標(biāo)準(zhǔn)建立,同年,b. s推出了其經(jīng)典著作the c+ programming language的第三版。 stroustrup博士是c+語言的設(shè)計(jì)者和第一位實(shí)現(xiàn)者,該語言業(yè)已成為世界上最通用的支持面向?qū)ο蠹夹g(shù)面向?qū)ο蠹夹g(shù)的程序設(shè)計(jì)語言。2.1 c+開發(fā)工具的歷史開發(fā)工具的歷史90年代初的年代初的

3、turbo c+2.1 c+開發(fā)工具的歷史開發(fā)工具的歷史90年代中期的年代中期的borland c+ for dos 2.1 c+開發(fā)工具的歷史開發(fā)工具的歷史90年代中期的年代中期的borland c+ builder for win 2.1 c+開發(fā)工具的歷史開發(fā)工具的歷史21世紀(jì)的世紀(jì)的visual c+ 6.0 2.1 c+開發(fā)工具的歷史開發(fā)工具的歷史visual studio 2010 2.1 c+的特點(diǎn)的特點(diǎn) c+語言既保留了語言既保留了c語言的有效性、靈活性、語言的有效性、靈活性、便于移植等全部精華和特點(diǎn),又添加了便于移植等全部精華和特點(diǎn),又添加了,具有強(qiáng)大的編程功能,可方便地構(gòu),

4、具有強(qiáng)大的編程功能,可方便地構(gòu)造出模擬現(xiàn)實(shí)問題的實(shí)體和操作;編寫出的程序造出模擬現(xiàn)實(shí)問題的實(shí)體和操作;編寫出的程序具有結(jié)構(gòu)清晰、易于擴(kuò)充等優(yōu)良特性,適合于各具有結(jié)構(gòu)清晰、易于擴(kuò)充等優(yōu)良特性,適合于各種應(yīng)用軟件、系統(tǒng)軟件的程序設(shè)計(jì)。用種應(yīng)用軟件、系統(tǒng)軟件的程序設(shè)計(jì)。用c+編寫編寫的程序可讀性好,生成的代碼質(zhì)量高,運(yùn)行效率的程序可讀性好,生成的代碼質(zhì)量高,運(yùn)行效率僅比匯編語言慢僅比匯編語言慢10%20%。 為了使編譯器能夠區(qū)別是為了使編譯器能夠區(qū)別是c c語言還是語言還是c+c+語言,語言,c+語言體系規(guī)定用語言體系規(guī)定用“”(意即意即作作為為c+語言源文件的擴(kuò)展名以區(qū)別于語言源文件的擴(kuò)展名以區(qū)別

5、于c語言用的語言用的“.c”文件擴(kuò)展名。雖然僅差兩個字母,但編譯時文件擴(kuò)展名。雖然僅差兩個字母,但編譯時的處理卻相差甚遠(yuǎn)。的處理卻相差甚遠(yuǎn)。 “cpp”的文件擴(kuò)展名與操的文件擴(kuò)展名與操作系統(tǒng)無關(guān)。與作系統(tǒng)無關(guān)。與c+語言源文件相關(guān)的頭文件擴(kuò)語言源文件相關(guān)的頭文件擴(kuò)展名一般仍用展名一般仍用“”,但有些操作系統(tǒng)也有規(guī)定使,但有些操作系統(tǒng)也有規(guī)定使用用“.hpp”充當(dāng)頭文件擴(kuò)展名的。充當(dāng)頭文件擴(kuò)展名的。 1. 1. 段注釋:段注釋: /*/ 2. 2. 單行注釋:單行注釋:/ 當(dāng)只做單行注釋時便當(dāng)只做單行注釋時便可用可用“/”符號表示從此符號起至符號表示從此符號起至行尾行尾均均為行注釋內(nèi)容。為行注釋

6、內(nèi)容。 3. 3. 程序編譯時將忽略所有的注釋內(nèi)容。程序編譯時將忽略所有的注釋內(nèi)容。 名字空間域是隨標(biāo)準(zhǔn)名字空間域是隨標(biāo)準(zhǔn)c+而引入的。它相當(dāng)而引入的。它相當(dāng)于一個更加靈活的文件域(于一個更加靈活的文件域(全局域全局域),可以用),可以用花括號把文件的一部分括起來,并以關(guān)鍵字花括號把文件的一部分括起來,并以關(guān)鍵字namespacenamespace開頭給它起一個名字:開頭給它起一個名字:namespace ns1 float a,b,c; fun1() 花括號括起來的部分稱聲明塊。聲明塊中可以包括:花括號括起來的部分稱聲明塊。聲明塊中可以包括:類、變量(帶有初始化)、函數(shù)(帶有定義)等。在域外

7、類、變量(帶有初始化)、函數(shù)(帶有定義)等。在域外使用域內(nèi)的成員時,需加上名字空間名作為前綴,后面加使用域內(nèi)的成員時,需加上名字空間名作為前綴,后面加上域操作符上域操作符“:” 。這里添加了名字空間名稱的成員名被。這里添加了名字空間名稱的成員名被稱為限定修飾名。如稱為限定修飾名。如:ns1:a,ns1:fun1()等等。等等。 最外層的名字空間域稱為全局名字空間域(最外層的名字空間域稱為全局名字空間域(global global namespace scopenamespace scope),即文件域。),即文件域。名字空間域可分層嵌套,同樣有分層屏蔽作用。例如:名字空間域可分層嵌套,同樣有分

8、層屏蔽作用。例如:namespace n1 namespace n2 / 名字空間嵌套名字空間嵌套 class matrix / 名字空間類成員名字空間類成員matrix 訪問訪問matrix,可寫:,可寫:n1:n2:matrix 。使用使用using聲明聲明可只寫一次限定修飾名??芍粚懸淮蜗薅ㄐ揎椕sing聲明以關(guān)鍵聲明以關(guān)鍵字字using開頭,后面是被限定修飾的開頭,后面是被限定修飾的(qualified)名字空間名字空間成員名,例如:成員名,例如:using n1:n2:matrix;/ / 名字空間類成員名字空間類成員matrixmatrix的的usingusing聲明聲明以后在

9、程序中使用以后在程序中使用matrix時,就可以直接使用成員名,而時,就可以直接使用成員名,而不必使用限定修飾名。不必使用限定修飾名。使用使用using指示符指示符可以一次性地使名字空間中所有成員都可以一次性地使名字空間中所有成員都可以直接被使用,比可以直接被使用,比usingusing聲明方便。聲明方便。usingusing指示符以指示符以關(guān)鍵關(guān)鍵字字using開頭,后面是關(guān)鍵字開頭,后面是關(guān)鍵字namespace,然后是,然后是名字空間名字空間名名。 標(biāo)準(zhǔn)標(biāo)準(zhǔn)c+庫庫中的所有組件都是在一個被稱為中的所有組件都是在一個被稱為std的名字空間中聲明和定義的。在采用標(biāo)準(zhǔn)的名字空間中聲明和定義的。

10、在采用標(biāo)準(zhǔn)c+的平臺上使用標(biāo)準(zhǔn)的平臺上使用標(biāo)準(zhǔn)c+c+庫中的組件,只要寫庫中的組件,只要寫一個一個using指示符指示符: 就可以直接使用就可以直接使用中的所有成員。中的所有成員。 注意:注意:如果使用了名空間如果使用了名空間std,則在使用,則在使用#include編譯預(yù)處理命令包含頭文件時,必須編譯預(yù)處理命令包含頭文件時,必須去掉頭文件的擴(kuò)展名去掉頭文件的擴(kuò)展名.h,否則會出錯。,否則會出錯。c+語言另外定義了一套語言另外定義了一套流對象流對象與運(yùn)算符來替代與運(yùn)算符來替代c語言中對標(biāo)準(zhǔn)輸入輸出函數(shù)語言中對標(biāo)準(zhǔn)輸入輸出函數(shù)scanf和和printf的引用。的引用。c+語言的保留字為:語言的保

11、留字為:cout“輸出內(nèi)容輸出內(nèi)容”“輸入內(nèi)容輸入內(nèi)容”;/cin為標(biāo)準(zhǔn)輸入流對象為標(biāo)準(zhǔn)輸入流對象( (默認(rèn)從默認(rèn)從鍵盤鍵盤輸入輸入) )#include 輸入重定向輸入重定向【例例2.1】c+的輸入輸出舉例。的輸入輸出舉例。#include / 使用名空間使用名空間std,則必須去掉,則必須去掉.h擴(kuò)展名擴(kuò)展名using namespace std; void main() char name10; int age; coutname; coutage; coutname is nameendl; coutage is ageendl;補(bǔ)充補(bǔ)充(寫出程序執(zhí)行結(jié)果,假定輸入寫出程序執(zhí)行結(jié)果,假

12、定輸入1和和2)#include / 使用名空間使用名空間std,則必須去掉,則必須去掉.h擴(kuò)展名擴(kuò)展名using namespace std; void main() char ch1,ch2;int n1,n2;cinch1ch2;n1=ch1-0;n2=n1*10+(ch2-0);coutn2;補(bǔ)充補(bǔ)充(寫出程序執(zhí)行結(jié)果寫出程序執(zhí)行結(jié)果)#include / 使用名空間使用名空間std,則必須去掉,則必須去掉.h擴(kuò)展名擴(kuò)展名#includeusing namespace std; void main() int n,count=0;for(n=1;n=100;+n)coutsetfill

13、(*)setw(10)n;count+;if(count%5=0) coutendl;程序執(zhí)行結(jié)果程序執(zhí)行結(jié)果 在在c c語言中,局部變量說明必須置于可執(zhí)行代碼段之前,語言中,局部變量說明必須置于可執(zhí)行代碼段之前,不允許局部變量聲明和可執(zhí)行代碼混合在一起。但不允許局部變量聲明和可執(zhí)行代碼混合在一起。但c+c+在變量的定義上作了在變量的定義上作了兩種較大的改變兩種較大的改變,一是允許變量的,一是允許變量的定義語句可以出現(xiàn)在程序的任何位置定義語句可以出現(xiàn)在程序的任何位置,使得局部變量的使得局部變量的定義點(diǎn)定義點(diǎn)與與使用點(diǎn)使用點(diǎn)不至于離得太遠(yuǎn),增強(qiáng)程序的可讀性,不至于離得太遠(yuǎn),增強(qiáng)程序的可讀性,而且

14、也不必在編寫某一程序塊的開始時就考慮要用到哪而且也不必在編寫某一程序塊的開始時就考慮要用到哪些變量些變量;二是;二是允許直接使用允許直接使用結(jié)構(gòu)體名結(jié)構(gòu)體名定義變量定義變量,這種擴(kuò),這種擴(kuò)展為程序員在編程中提供了不少方便。類似地在展為程序員在編程中提供了不少方便。類似地在c+c+語語言中聯(lián)合名、枚舉名也可在定義后獨(dú)立地作為類型名使言中聯(lián)合名、枚舉名也可在定義后獨(dú)立地作為類型名使用。用。#includeusing namespace std;void main() struct studentint no;float math; ;int n;cinn; wang.no=n;cinwang.ma

15、th;coutwang.no wang.mathendl;格式:格式:(數(shù)據(jù)類型數(shù)據(jù)類型) (表達(dá)式表達(dá)式)數(shù)據(jù)類型數(shù)據(jù)類型 (表達(dá)式表達(dá)式)(1) (1) 通過強(qiáng)制類型轉(zhuǎn)換,得到一個所需類型的中間值,通過強(qiáng)制類型轉(zhuǎn)換,得到一個所需類型的中間值,該中間值被引用后即自動釋放。原來表達(dá)式的值類型并該中間值被引用后即自動釋放。原來表達(dá)式的值類型并未改變。如下列代碼段:未改變。如下列代碼段:int b;float f;f=float(b);/ / 此時變量此時變量b b仍然為仍然為int類型。類型。(2) (2) 強(qiáng)制類型轉(zhuǎn)換符優(yōu)先級較高,只對緊隨其后的表達(dá)強(qiáng)制類型轉(zhuǎn)換符優(yōu)先級較高,只對緊隨其后的表達(dá)

16、式起作用,而對其他部分不起作用。如表達(dá)式式起作用,而對其他部分不起作用。如表達(dá)式float(i)*f的含義是先將變量的含義是先將變量i i強(qiáng)制類型轉(zhuǎn)換為強(qiáng)制類型轉(zhuǎn)換為float類型,然后與類型,然后與變量變量f f運(yùn)算。運(yùn)算。(3) (3) 強(qiáng)制類型轉(zhuǎn)換應(yīng)當(dāng)用在不做轉(zhuǎn)換將影響表達(dá)式結(jié)果強(qiáng)制類型轉(zhuǎn)換應(yīng)當(dāng)用在不做轉(zhuǎn)換將影響表達(dá)式結(jié)果的正確性或精度,或不能完成相應(yīng)運(yùn)算的場合。而對于的正確性或精度,或不能完成相應(yīng)運(yùn)算的場合。而對于系統(tǒng)可以自動轉(zhuǎn)換類型的場合,則沒有必要使用。系統(tǒng)可以自動轉(zhuǎn)換類型的場合,則沒有必要使用。棧內(nèi)存與堆內(nèi)存棧內(nèi)存與堆內(nèi)存l??臻g棧空間是編譯編譯時分配的固定大小固定大小的內(nèi)存。用

17、于存放函數(shù)調(diào)用者的地址、返回值、保存的機(jī)器狀態(tài)(用于返回)、函數(shù)參數(shù)、局部變量和臨時變量等l堆內(nèi)存堆內(nèi)存是程序是程序運(yùn)行運(yùn)行時分配的時分配的大小可變大小可變的內(nèi)存,也稱的內(nèi)存,也稱為為動態(tài)內(nèi)存動態(tài)內(nèi)存c+提供了兩種方法進(jìn)行內(nèi)存提供了兩種方法進(jìn)行內(nèi)存動態(tài)分配動態(tài)分配和和釋放釋放lmalloc()和和free()( (從從c標(biāo)準(zhǔn)庫中繼承包含標(biāo)準(zhǔn)庫中繼承包含malloc.h) )lnew和和delete1.new運(yùn)算符運(yùn)算符 指針變量指針變量 = = new 數(shù)據(jù)類型數(shù)據(jù)類型; ; new從堆內(nèi)存中為程序從堆內(nèi)存中為程序分配分配可以保存某種可以保存某種類型數(shù)據(jù)類型數(shù)據(jù)的一塊的一塊內(nèi)存空間內(nèi)存空間,并

18、返回指向該內(nèi)存的,并返回指向該內(nèi)存的首地址首地址,該地,該地址存放于址存放于指針變量指針變量中。中。 堆內(nèi)存可以按照要求進(jìn)行分配,程序?qū)?nèi)存的需求堆內(nèi)存可以按照要求進(jìn)行分配,程序?qū)?nèi)存的需求量隨時會發(fā)生量隨時會發(fā)生變化變化,有時程序在運(yùn)行中可能會不再需,有時程序在運(yùn)行中可能會不再需要由要由new分配的內(nèi)存空間,而且程序還未運(yùn)行結(jié)束,分配的內(nèi)存空間,而且程序還未運(yùn)行結(jié)束,這時就需要把先前占用的內(nèi)存空間這時就需要把先前占用的內(nèi)存空間釋放釋放給給堆內(nèi)存堆內(nèi)存,以,以后重新分配,供程序的其它部分使用。后重新分配,供程序的其它部分使用。2.delete運(yùn)算符運(yùn)算符運(yùn)算符運(yùn)算符delete用于釋放用于釋放

19、new分配的內(nèi)存空間,它的使用形分配的內(nèi)存空間,它的使用形式為:式為:delete 指針變量;指針變量;其中的指針變量保存著其中的指針變量保存著new動態(tài)分配的內(nèi)存的首地址。動態(tài)分配的內(nèi)存的首地址。3. 注意:注意:(1) 用用new獲取的內(nèi)存空間,必須用獲取的內(nèi)存空間,必須用delete進(jìn)行釋放;進(jìn)行釋放;(2) 對一個指針只能調(diào)用一次對一個指針只能調(diào)用一次delete;(3) 用用delete運(yùn)算符作用的對象必須是用運(yùn)算符作用的對象必須是用new分配的內(nèi)存空分配的內(nèi)存空間的間的首地址首地址。#include using namespace std;void main()int *p;p=n

20、ew int; / 分配內(nèi)存空間分配內(nèi)存空間*p=5;cout*p;delete p; / 釋放內(nèi)存空間釋放內(nèi)存空間【例例2.3】new與與delete應(yīng)用舉例應(yīng)用舉例。( (分析運(yùn)行結(jié)果分析運(yùn)行結(jié)果) )在用在用new分配內(nèi)存的同時進(jìn)行初始分配內(nèi)存的同時進(jìn)行初始化。使用形式為:化。使用形式為:指針變量指針變量 = new 數(shù)據(jù)類型數(shù)據(jù)類型(初始值初始值);例如上例中的:例如上例中的:p=new int;*p=5;也可寫成:也可寫成:p=new int(5); 指針變量指針變量 = = new 數(shù)據(jù)類型數(shù)據(jù)類型數(shù)組大小數(shù)組大??;此時指針變量指向第一個數(shù)組元素的地址。使此時指針變量指向第一個數(shù)組

21、元素的地址。使用用new分配數(shù)組時,不能提供初始值。使用分配數(shù)組時,不能提供初始值。使用new建立的數(shù)組變量也由建立的數(shù)組變量也由delete釋放。其形式為:釋放。其形式為:delete 指針變量;或指針變量;或delete 指針變量;指針變量;同樣,也可以用同樣,也可以用new來為多維數(shù)組分配空間,來為多維數(shù)組分配空間,但是除第一維可以為變量外,其它維數(shù)都必須但是除第一維可以為變量外,其它維數(shù)都必須是是常量常量。4用用new建立數(shù)組類型的變量建立數(shù)組類型的變量 注意在使用注意在使用delete時,不用考慮數(shù)組的維數(shù)。時,不用考慮數(shù)組的維數(shù)。有時,并不能保證一定可以從堆內(nèi)存中獲得所需空間,有時

22、,并不能保證一定可以從堆內(nèi)存中獲得所需空間,當(dāng)不能成功地分配到所需要的內(nèi)存時,當(dāng)不能成功地分配到所需要的內(nèi)存時,new返回返回0,即,即空空指針指針。因此我們可以通過判斷。因此我們可以通過判斷new的返回值是否為的返回值是否為0,來,來得知系統(tǒng)中是否有足夠的空閑內(nèi)存來供程序使用。例如:得知系統(tǒng)中是否有足夠的空閑內(nèi)存來供程序使用。例如:int *p= new int100;if(p=0)cout cant allocate more memory,terminating. endl;exit(1);其中其中exit函數(shù)的作用是終止程序運(yùn)行。函數(shù)的作用是終止程序運(yùn)行。#include using

23、namespace std;void main() int n; / 定義數(shù)組元素的個數(shù)定義數(shù)組元素的個數(shù) int *p; coutn; if(p=new intn)=0) cout cant allocate more memory,terminating. endl; exit(1); / 分配內(nèi)存空間分配內(nèi)存空間 for( int i=0;in;i+) pi= i *2; coutnow output the array : endl; for( i=0;in;i+) coutpi ; coutendl; delete p; / 釋放內(nèi)存空間釋放內(nèi)存空間【例例2.4】從堆內(nèi)存中獲取一個整

24、型數(shù)組,賦值后并打印出來。從堆內(nèi)存中獲取一個整型數(shù)組,賦值后并打印出來。 通常情況下,如果全局變量與局部變量同通常情況下,如果全局變量與局部變量同名,那么局部變量在其作用域內(nèi)具有較高的優(yōu)名,那么局部變量在其作用域內(nèi)具有較高的優(yōu)先權(quán)。先權(quán)。c語言規(guī)定只能在變量的作用域內(nèi)使用該語言規(guī)定只能在變量的作用域內(nèi)使用該變量,不能使用其他作用域中的變量,可采用變量,不能使用其他作用域中的變量,可采用c+中提供的作用域運(yùn)算符中提供的作用域運(yùn)算符:,它能指定所需要,它能指定所需要的作用域。的作用域。 注意:注意:不能用不能用:訪問訪問函數(shù)函數(shù)中的中的局部變量局部變量。在。在c+語言中作用域運(yùn)算符語言中作用域運(yùn)算

25、符:還用來限定還用來限定類類的的成員成員, #include using namespace std;float a=2.4; / 全局變量全局變量void main() int a=8; / 局部變量局部變量coutaendl;cout:aendl; / :a表示全局作用域中的變量表示全局作用域中的變量a #include void main() int x10,i,j; j=0; /計(jì)數(shù)器初值賦計(jì)數(shù)器初值賦0 coutinput 10 numbers:endl; for(i=0;ixi; for(i=0;i0) j+; coutj=j;從鍵盤上輸入從鍵盤上輸入1010個整數(shù),統(tǒng)計(jì)其中的正整

26、數(shù)的個數(shù)個整數(shù),統(tǒng)計(jì)其中的正整數(shù)的個數(shù) 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:(從鍵盤輸入:從鍵盤輸入:-2 3 4 -5 -3 9 -23 0 -1 21)輸出:輸出:j=4 用冒泡排序法對用冒泡排序法對10個數(shù)按從小到大的順序輸出個數(shù)按從小到大的順序輸出思想:冒泡法的基本思想是對數(shù)組元素做若干次的思想:冒泡法的基本思想是對數(shù)組元素做若干次的遍歷調(diào)整遍歷調(diào)整,每次遍歷都是對,每次遍歷都是對相鄰的兩個數(shù)兩兩比較相鄰的兩個數(shù)兩兩比較并調(diào)整,將小的調(diào)到前頭,大的調(diào)到后面并調(diào)整,將小的調(diào)到前頭,大的調(diào)到后面。4739147391437914379143719第一趟循環(huán)4次4371934719347193417

27、9第二趟循環(huán)3次341793417931479第三趟循環(huán)2次3147913479第四趟循環(huán)1次5 5個數(shù)#include void main()int a11; int i,n,t; /i表示數(shù)組下標(biāo),表示數(shù)組下標(biāo),n表示遍歷次數(shù),表示遍歷次數(shù),t用來交換數(shù)據(jù)用來交換數(shù)據(jù) coutinput 10 numbers:endl; for(i=1;iai; coutendl; for(n=1;n=9;n+) for(i=1;iai+1) t=ai;ai=ai+1;ai+1=t; coutthe sorted numbers:endl; for(i=1;i11;i+) coutai ; coutend

28、l;程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:input 10 numbers:1 32 13 0 23 9 45 8 19 -7 the sorted numbers:-7 0 1 8 9 13 19 23 32 45#include #include void main() char str20; int i,j; cin.get(str,20); j=strlen(str);for(i=j-1;i=0;i-)cout.put(stri); 從鍵盤上輸入一個字符串,然后將其逆序輸出從鍵盤上輸入一個字符串,然后將其逆序輸出運(yùn)行的結(jié)果是:運(yùn)行的結(jié)果是:(從鍵盤輸入:(從鍵盤輸入:abcdefg) gfedc

29、bal使用字符串常量來對字符數(shù)組初始化。例如char str10=student;l或者直接將花括號省略,寫成如下的形式char str10=student;l注意: 字符串常量所占的空間一定字符串常量所占的空間一定不能超過字符數(shù)組不能超過字符數(shù)組的長度的長度。如果字符串常量占用的空間小于數(shù)組。如果字符串常量占用的空間小于數(shù)組的長度,則后面的元素自動的賦值為的長度,則后面的元素自動的賦值為0 的輸出的輸出 l用cout輸出。格式為:cout字符串或字符數(shù)組名;l用cout流對象的put。格式為:cout.put(字符或字符變量字符或字符變量);l這種方法,每次只能輸出一個字符;要輸出整個字符串

30、,應(yīng)采用循環(huán)的方法 #include void main()char s20=this is a string.;int i=0;while(si!=0)cout.put(si);i+;的輸出的輸出 l用cout流對象的write方法。格式為:cout.write(字符串或字符數(shù)組名,個數(shù)字符串或字符數(shù)組名,個數(shù)n);l其作用是輸出字符數(shù)串中的前其作用是輸出字符數(shù)串中的前n個字符。個字符。 #include void main()char s20=this is a string.;cout.write(s,4);分析該程序的輸出結(jié)果的輸入的輸入 l利用cin直接輸入。格式為:cin字符數(shù)組名

31、字符數(shù)組名;用這種方法輸入字符串時,cin只能接收空格之前空格之前的部分。也就是說,當(dāng)字符串中有空格空格時,用這種方法無法接收全部的字符串。l利用cin流對象的getline方法。格式為:cin.getline(字符數(shù)組名,輸入字符串的最大長度字符數(shù)組名,輸入字符串的最大長度n);參數(shù)“字符數(shù)組名”是存放字符串的數(shù)組名稱參數(shù)“輸入字符串的最大長度n”包括了字符串結(jié)束標(biāo)記0在內(nèi) 字符串處理函數(shù)字符串處理函數(shù) l字符串的連接函數(shù)(strcat)調(diào)用的一般形式:strcat(char ,const char );#include #include void main() char st120=qin

32、g,st2=huadaxue; strcat(st1,st2); cout字符串2,返回值0; 字符串1字符串2,返回值0 l字符串、字符串2可以是字符數(shù)組也可以是字符串常量。 l字符串的比較不能使用以下的形式: if(s1=s2) coutyes; 只能使用該函數(shù)來進(jìn)行比較。所以應(yīng)該寫成: if(strcmp(s1,s2)=0) coutyes;#include #include void main()char str120,str220,str350; cin.getline(str1,20); cin.getline(str2,20); if (strcmp(str1,str2)0)st

33、rcpy(str3,str1); strcat(str3,str2); else strcpy(str3,str2); strcat(str3,str1); coutstr3; 程序運(yùn)行結(jié)果:(從鍵盤輸入:china beijing)則輸出:beijingchina二維數(shù)組二維數(shù)組l定義的一般形式為類型說明符類型說明符 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式11常量表達(dá)式常量表達(dá)式22 例:int a53; 表示表示a為整型二維數(shù)組,其中第一維有為整型二維數(shù)組,其中第一維有5個下個下標(biāo)(標(biāo)(04),第二維有),第二維有3個下標(biāo)(個下標(biāo)(02),數(shù)組),數(shù)組的元素個數(shù)為的元素個數(shù)為15,可以用于存放

34、,可以用于存放5行行3列列的整的整型數(shù)據(jù)表格。型數(shù)據(jù)表格。二維數(shù)組的存儲二維數(shù)組的存儲 lc+語言中,二維數(shù)組在內(nèi)存中默認(rèn)情況下采用行優(yōu)先存儲(對float a23畫存儲示意圖) l二維數(shù)組的初始化 分行對二維數(shù)組賦初值。如 int a23=1,2,3,4,5,6; 對所有數(shù)據(jù)一起賦值,放在一個花括號中。如: int a23=1,2,3,4,5,6;部分元素賦值 ,如: int a23=1,2,4; 數(shù)組的元素全部賦值時,可以省略數(shù)組的第一維長度 二維數(shù)組元素輸入輸出例子二維數(shù)組元素輸入輸出例子#include void main() int i,j,a23=3,0,1,10,-4,9; fo

35、r(i=0;i=1;i+) for(j=0;j=2;j+) coutendlaij=aij;程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:a00=3a01=0a02=1a10=10a11=-4a12=9編寫程序,將一個二維數(shù)組中行和列元素互換,存到另編寫程序,將一個二維數(shù)組中行和列元素互換,存到另一個二維數(shù)組中。設(shè)數(shù)組:一個二維數(shù)組中。設(shè)數(shù)組:思想:需要定義兩個數(shù)組思想:需要定義兩個數(shù)組行列交換實(shí)質(zhì)上是將數(shù)組元素的行列交換實(shí)質(zhì)上是將數(shù)組元素的行列下標(biāo)相互交換行列下標(biāo)相互交換二維數(shù)組,必須要逐個的進(jìn)行交換,所以要用到了二維數(shù)組,必須要逐個的進(jìn)行交換,所以要用到了雙重雙重循環(huán)循環(huán)語句語句 a= b=15926886

36、2951#include void main() int a23=1,5,9,2,6,8; int b32,i,j; coutarray a: endl; /輸出原來數(shù)組的數(shù)據(jù)輸出原來數(shù)組的數(shù)據(jù) for(i=0;i2;i+) for(j=0;j3;j+) coutaij ; bji=aij; /將兩個數(shù)組元素相互交換將兩個數(shù)組元素相互交換 coutendl; coutarray b:endl; /輸出交換后的數(shù)據(jù)元素輸出交換后的數(shù)據(jù)元素 for(i=0;i3;i+) for(j=0;j2;j+) coutbij ; coutendl; 程序運(yùn)行結(jié)果:array a:1 5 92 6 8arra

37、y b:1 25 69 8綜合程序設(shè)計(jì)舉例綜合程序設(shè)計(jì)舉例 #include void main() int i,j; float a1010,sum=0,x; coutinput n*n matrix:endl; for(i=0;i10;i+) for(j=0;jx;aij=x; for(i=0;i10;i+) sum=sum+aii+ai9-i; coutthe sum is:sumendl;綜合程序設(shè)計(jì)舉例結(jié)果綜合程序設(shè)計(jì)舉例結(jié)果 一條對角線元素的下標(biāo)特點(diǎn)是:一條對角線元素的下標(biāo)特點(diǎn)是:行列下標(biāo)相等行列下標(biāo)相等。另一。另一條對角線下標(biāo)特點(diǎn)是:條對角線下標(biāo)特點(diǎn)是:行列下標(biāo)之和等于行列下標(biāo)之

38、和等于9。在每一行的每一列中找出這樣的元素然后把它加到變在每一行的每一列中找出這樣的元素然后把它加到變量量sum中去。中去。程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:input 3*3 matrix:1 3 52 4 6 7 8 9the sum is: 30思考題思考題 從鍵盤輸入一個字符串判斷是否為從鍵盤輸入一個字符串判斷是否為“回文回文”比如:比如:abcba#include #include void main()char str60;int i,j;cin.get(str,60);i=0;j=strlen(str)-1;while(stri=) i+; /尋找前面第一個不是空格的字符尋找前面第一個

39、不是空格的字符 while(strj=) j-; /尋找后面第一個不是空格的字符尋找后面第一個不是空格的字符 while(ij & stri=strj)/前后對應(yīng)逐個的比較前后對應(yīng)逐個的比較 i+;j-;if(ij) coutnoendl;elsecoutyesendl;程序運(yùn)行結(jié)果:從鍵盤輸入:程序運(yùn)行結(jié)果:從鍵盤輸入:studeduts輸出的結(jié)果:輸出的結(jié)果:yesj從字符串的最后一個從字符串的最后一個元素開始,所以初值元素開始,所以初值為為strlen(str)-1 開始比較時,將字符開始比較時,將字符串前后的空格過濾掉串前后的空格過濾掉 引用是引用是c+語言的一個特殊的數(shù)據(jù)類型描述,用

40、于語言的一個特殊的數(shù)據(jù)類型描述,用于在程序的不同部分使用在程序的不同部分使用兩個以上的變量名兩個以上的變量名指向指向同一地同一地址址,使得對其中任一個變量的操作實(shí)際上都是對同一,使得對其中任一個變量的操作實(shí)際上都是對同一地址單元進(jìn)行的。在這種兩個以上變量名的關(guān)系上,地址單元進(jìn)行的。在這種兩個以上變量名的關(guān)系上,被聲明為被聲明為引用類型引用類型的變量名則是實(shí)際變量名的的變量名則是實(shí)際變量名的別名別名。引用運(yùn)算符為引用運(yùn)算符為&,聲明引用的一般形式為:,聲明引用的一般形式為:數(shù)據(jù)類型數(shù)據(jù)類型 &引用變量名引用變量名 = 變量名;變量名;或或 數(shù)據(jù)類型數(shù)據(jù)類型& 引用變量名引用變量名 = 變量名;變

41、量名;或或 數(shù)據(jù)類型數(shù)據(jù)類型 & 引用變量名引用變量名 = 變量名;變量名; 對引用進(jìn)行操作,實(shí)際上就是對被引用的變量進(jìn)行對引用進(jìn)行操作,實(shí)際上就是對被引用的變量進(jìn)行操作。引用不是值,操作。引用不是值,不占存儲空間不占存儲空間,聲明引用時,目,聲明引用時,目標(biāo)的存儲狀態(tài)不會改變。引用一旦被初始化,就標(biāo)的存儲狀態(tài)不會改變。引用一旦被初始化,就不能不能再重新賦值再重新賦值。 【例例2.5】引用舉例。引用舉例。(圖示變量及其引用并分析運(yùn)行結(jié)果圖示變量及其引用并分析運(yùn)行結(jié)果)#include void main() int num=50;int &ref=num;ref+=10;coutnum=num

42、endl;cout ref=refendl; num+=40;cout num=numendl;coutref=refendl;說明:說明:(1) 在一行上聲明多個引用型變量在一行上聲明多個引用型變量(函數(shù)函數(shù))名時,要在每名時,要在每個變量個變量(函數(shù)函數(shù))名前都冠以名前都冠以“&”符號。符號。(2) 引用引用不是變量不是變量,所以引用本身不能被修改,在程序,所以引用本身不能被修改,在程序中對引用的存取都是對它所引用的變量的存取。中對引用的存取都是對它所引用的變量的存取。(3) 一個變量被聲明為引用時必須進(jìn)行一個變量被聲明為引用時必須進(jìn)行初始化初始化,除非這,除非這個引用是用作個引用是用作函

43、數(shù)的參數(shù)函數(shù)的參數(shù)或或返回值返回值,為引用提供的初始,為引用提供的初始值應(yīng)為值應(yīng)為變量變量(包括對象包括對象)。引用一旦被初始化引用一旦被初始化,就不能再重就不能再重新賦值新賦值。如。如ref=&j;但但ref=j是允許的。是允許的。(4) 由于引用不是變量,所以,不能說明引用的引用,由于引用不是變量,所以,不能說明引用的引用,也不能說明數(shù)組元素的類型為引用數(shù)組,或指向引用的也不能說明數(shù)組元素的類型為引用數(shù)組,或指向引用的指針。例如:指針。例如:int &a5; / 錯誤錯誤int &*p;/ 錯誤錯誤由于指針也是變量,因此可以說明對由于指針也是變量,因此可以說明對指針變量指針變量的的引用引用

44、。例如:例如:int *a; int *&p=a; int b; p=&b; / a指向變量指向變量b(5) 引用與指針不同。指針的內(nèi)容或值是某一變量的引用與指針不同。指針的內(nèi)容或值是某一變量的內(nèi)內(nèi)存單元地址存單元地址,而,而引用引用則與初始化它的則與初始化它的變量變量具有具有相同相同的的內(nèi)內(nèi)存單元地址存單元地址。指針是個。指針是個變量變量,可以把它,可以把它再賦值再賦值成其它的成其它的地址,然而,建立引用時必須進(jìn)行初始化并且決地址,然而,建立引用時必須進(jìn)行初始化并且決不會再不會再指向其它不同的變量。指向其它不同的變量。地址地址(6) 要注意區(qū)分引用運(yùn)算符和地址運(yùn)算符的區(qū)別要注意區(qū)分引用運(yùn)算符

45、和地址運(yùn)算符的區(qū)別。例。例如:如:int num=50;int &ref=num;int *p=&ref; /&在賦值號在賦值號右邊右邊為為地址地址運(yùn)算符運(yùn)算符(7) 可以用一個引用可以用一個引用初始化初始化另一個引用另一個引用。例如:。例如:int num=50;int &ref1=num;int &ref2=ref1;ref2=100;/ num被修改為被修改為100其中其中ref2也是對也是對num的引用。的引用。(8)可以把可以把函數(shù)的參數(shù)說明成引用函數(shù)的參數(shù)說明成引用以建立函數(shù)參數(shù)的以建立函數(shù)參數(shù)的引用傳遞引用傳遞方式方式好處:好處:c+的引用傳遞方式的的引用傳遞方式的實(shí)參實(shí)參和和形

46、參形參指向指向同一內(nèi)存地址同一內(nèi)存地址,l減少值傳遞引起的減少值傳遞引起的數(shù)據(jù)堆棧復(fù)制數(shù)據(jù)堆棧復(fù)制l避免地址傳遞引起的避免地址傳遞引起的地址溢出錯誤地址溢出錯誤lc+提供提供引用引用的主要用途就是建立的主要用途就是建立函數(shù)參數(shù)函數(shù)參數(shù)的的引用傳遞方式引用傳遞方式c語言的函數(shù)參數(shù)傳遞只能采用語言的函數(shù)參數(shù)傳遞只能采用值傳遞值傳遞和和地址傳遞地址傳遞三種傳遞方式比較的例子三種傳遞方式比較的例子交換兩個數(shù)交換兩個數(shù)用一般變量作為參數(shù)交換兩個數(shù)用一般變量作為參數(shù)交換兩個數(shù)采用傳值方式采用傳值方式#include void swap(int x,int y) int t; t = x; x = y; y

47、 = t;void main() int a = 1,b = 2; cout交換前交換前,a=a,b=bendl; swap(a,b); cout交換后交換后,a=a,b=bendl;運(yùn)行結(jié)果:運(yùn)行結(jié)果:交換前交換前,a=1,b=2交換后交換后,a=1,b=2交換功能未實(shí)現(xiàn)。交換功能未實(shí)現(xiàn)。說明采用傳值方式時,實(shí)參不受影響說明采用傳值方式時,實(shí)參不受影響 用指針變量作為參數(shù)交換兩個數(shù)用指針變量作為參數(shù)交換兩個數(shù)采用傳址方式采用傳址方式#include void swap(int * x,int * y) int t; t = *x; *x = *y; *y = t;void main() in

48、t a = 1,b = 2; cout交換前交換前,a=a,b=bendl; swap(&a,&b); cout交換后交換后,a=a,b=bendl;運(yùn)行結(jié)果:運(yùn)行結(jié)果:交換前交換前,a=1,b=2交換后交換后,a=2,b=1采用傳地址方式傳遞參數(shù)。采用傳地址方式傳遞參數(shù)。在函數(shù)中改變了形參,就是改變了實(shí)參,因?yàn)樗麄兪窃诤瘮?shù)中改變了形參,就是改變了實(shí)參,因?yàn)樗麄兪侵赶蛑赶蛲坏刂吠坏刂返闹羔樧兞?。的指針變量。因此交換功能實(shí)現(xiàn)因此交換功能實(shí)現(xiàn)用引用作為參數(shù)交換兩個數(shù)用引用作為參數(shù)交換兩個數(shù)采用傳引用方式采用傳引用方式#include void swap(int & x,int & y) int

49、 t; t = x; x = y; y = t;void main() int a = 1,b = 2; cout交換前交換前,a=a,b=bendl; swap(a,b); cout交換后交換后,a=a,b=bendl;運(yùn)行結(jié)果:運(yùn)行結(jié)果:交換前交換前,a=1,b=2交換后交換后,a=2,b=1采用傳引用方式傳遞參數(shù)。采用傳引用方式傳遞參數(shù)。函數(shù)中的函數(shù)中的是主調(diào)函數(shù)中是主調(diào)函數(shù)中的引用。的引用。在函數(shù)中改變了在函數(shù)中改變了形參形參,就是改變了,就是改變了實(shí)參實(shí)參,因?yàn)樗麄冎?,因?yàn)樗麄冎赶蛳蛲坏刂吠坏刂贰R虼私粨Q功能實(shí)現(xiàn)因此交換功能實(shí)現(xiàn)地址傳遞和引用傳遞的比較。地址傳遞和引用傳遞的比較。

50、引用作為參數(shù),主調(diào)函數(shù)可引用作為參數(shù),主調(diào)函數(shù)可直接使用直接使用變量名變量名地址作為參數(shù),主調(diào)函數(shù)要將地址作為參數(shù),主調(diào)函數(shù)要將傳遞過去傳遞過去引用作為參數(shù),函數(shù)可對引用作為參數(shù),函數(shù)可對形參變量形參變量地址作為參數(shù),函數(shù)需通過地址作為參數(shù),函數(shù)需通過指針指針對對(9) 有空指針,無空引用有空指針,無空引用(10) 引用不能用數(shù)據(jù)類型來初始化引用不能用數(shù)據(jù)類型來初始化。如:。如: int&ref=int; / error(11) 函數(shù)調(diào)用可以作為左值函數(shù)調(diào)用可以作為左值(函數(shù)返回值函數(shù)返回值為為引用類型引用類型) 引用表達(dá)式是一個左值表達(dá)式,因此它可以出現(xiàn)在形、實(shí)參數(shù)引用表達(dá)式是一個左值表達(dá)式

51、,因此它可以出現(xiàn)在形、實(shí)參數(shù)的任何一方。若一個函數(shù)返回了的任何一方。若一個函數(shù)返回了引用引用,那么該,那么該函數(shù)的調(diào)用函數(shù)的調(diào)用也可以被也可以被賦值賦值。一般說,當(dāng)返回值。一般說,當(dāng)返回值不是不是本函數(shù)內(nèi)定義的本函數(shù)內(nèi)定義的局部變量局部變量時就可以返時就可以返回一個回一個引用引用。在通常情況下,。在通常情況下,引用返回值引用返回值只用在需對只用在需對函數(shù)的調(diào)用重函數(shù)的調(diào)用重新賦值新賦值的場合,也就是對的場合,也就是對函數(shù)的返回值重新賦值函數(shù)的返回值重新賦值的時候。避免將局的時候。避免將局部作用域中變量的地址返回,就使部作用域中變量的地址返回,就使函數(shù)調(diào)用表達(dá)式作為左值函數(shù)調(diào)用表達(dá)式作為左值來使

52、用。來使用。函數(shù)返回值函數(shù)返回值為為引用類型引用類型表示該函數(shù)返回值是一個表示該函數(shù)返回值是一個變量的別名變量的別名,故可,故可將將函數(shù)調(diào)用函數(shù)調(diào)用作為一個作為一個變量變量使用而進(jìn)行使用而進(jìn)行賦值賦值【例例2.82.8】統(tǒng)計(jì)學(xué)生中統(tǒng)計(jì)學(xué)生中a a類學(xué)生與類學(xué)生與b b類學(xué)生各為多少個。類學(xué)生各為多少個。a a類學(xué)生的標(biāo)類學(xué)生的標(biāo)準(zhǔn)是平均分在準(zhǔn)是平均分在8080分以上,其余都是分以上,其余都是b b類學(xué)生。類學(xué)生?!狙a(bǔ)充例子補(bǔ)充例子】#include int & min(int & i,int & j) if(i=j) return i; else return j;void main() in

53、t a = 3, b= 4; couta=a b=bendl; min(a,b)=5; couta=a b=bendl; min(a,b) = 0; couta=a b=bendl;【補(bǔ)充例子補(bǔ)充例子】#include int & min(int & i,int & j)/此函數(shù)的返回值是對參數(shù)此函數(shù)的返回值是對參數(shù)i和和j中小的那個變量的引用中小的那個變量的引用 if(i=j) return i; else return j;void main() int a = 3, b= 4; couta=a b=bendl; min(a,b)=5; /由于函數(shù)的返回值為引用類型,所以可以為由于函數(shù)的返

54、回值為引用類型,所以可以為函數(shù)調(diào)用函數(shù)調(diào)用賦值賦值 /為函數(shù)賦的值賦給兩個參數(shù)中的小者,所以為函數(shù)賦的值賦給兩個參數(shù)中的小者,所以a變?yōu)樽優(yōu)?,b仍為仍為4 couta=a b=bendl; min(a,b) = 0; /a不變,不變,b變?yōu)樽優(yōu)? couta=a b=bendl;(12)定義返回引用的函數(shù)時,注意不要返回對該函數(shù)內(nèi)定義返回引用的函數(shù)時,注意不要返回對該函數(shù)內(nèi)局部變量局部變量的的引用引用。為什么為什么?因?yàn)橐驗(yàn)榫植孔兞烤植孔兞康纳嫫诰窒抻诤瘮?shù)內(nèi)部,函數(shù)返回時的生存期局限于函數(shù)內(nèi)部,函數(shù)返回時局部變量局部變量消失,導(dǎo)致函數(shù)返回一個無效的引用。消失,導(dǎo)致函數(shù)返回一個無效的引用。故

55、故函數(shù)返回的引用函數(shù)返回的引用是對某一個是對某一個函數(shù)參數(shù)的引用函數(shù)參數(shù)的引用且這個參數(shù)本身且這個參數(shù)本身也是也是引用類型引用類型【例例2.9】返回的局部作用域內(nèi)的變量,函數(shù)作為左值。返回的局部作用域內(nèi)的變量,函數(shù)作為左值。#define pi 3.1415926const float pi=3.1415926; 這個常量是有這個常量是有類型類型的,它有地址,可以用的,它有地址,可以用指針指向這個值,但指針指向這個值,但不能修改不能修改它。它。c+建議用建議用const取代取代#define定義常量。定義常量。 (1) 使用使用const修飾符定義常量時,修飾符定義常量時,必須初始化必須初始化

56、;(2) 常量一旦被定義,在程序中任何地方都常量一旦被定義,在程序中任何地方都不能不能 再更改再更改。(3) 如果用如果用const定義的是一個定義的是一個整型常量整型常量,int可以可以省略。省略。(4) 與與#define定義的常量有所不同,定義的常量有所不同,const定義的定義的常量可以常量可以有自己的數(shù)據(jù)類型有自己的數(shù)據(jù)類型,這樣,這樣c+編譯編譯程序可以進(jìn)行更加嚴(yán)格的類型檢查,具有良程序可以進(jìn)行更加嚴(yán)格的類型檢查,具有良好的編譯時的檢測性。好的編譯時的檢測性。 (5) 函數(shù)參數(shù)也可以用函數(shù)參數(shù)也可以用const說明,用于保證實(shí)參在說明,用于保證實(shí)參在該該函數(shù)內(nèi)部不被改動函數(shù)內(nèi)部不被

57、改動,大多數(shù),大多數(shù)c+編譯器能對具有編譯器能對具有const參數(shù)的函數(shù)進(jìn)行更好的代碼優(yōu)化。例如,通過參數(shù)的函數(shù)進(jìn)行更好的代碼優(yōu)化。例如,通過函數(shù)函數(shù)max求出整型數(shù)組求出整型數(shù)組a100中的最大值,函數(shù)原型中的最大值,函數(shù)原型應(yīng)該是:應(yīng)該是: int max(const int *pa); 這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在函數(shù)中對數(shù)組元素的操作函數(shù)中對數(shù)組元素的操作只許讀只許讀,不許寫不許寫。 除了計(jì)算外,文本處理也是編程過程中除了計(jì)算外,文本處理也是編程過程中一個非常重要的方面。在一個非常重要的方面。在c語言中使用字符數(shù)語言中使用字符

58、數(shù)組和字符指針實(shí)現(xiàn)字符串,但是在組和字符指針實(shí)現(xiàn)字符串,但是在c+中提供中提供了一種既方便又好用的了一種既方便又好用的string類型。下面通過一類型。下面通過一個簡單的例子說明個簡單的例子說明string類型的使用。類型的使用?!纠?.10】字符串類字符串類string的使用。的使用?!纠?.10 】#include #include /使用字符串使用字符串string類型的程序應(yīng)包含頭文件類型的程序應(yīng)包含頭文件using namespace std;void main()string s,t;cout請輸入一個字符串請輸入一個字符串:s; / 由鍵盤輸入一行文本,并把它賦給由鍵盤輸入一

59、行文本,并把它賦給sring類型的變量類型的變量s,注意:,注意:/ 使用此方式輸入的字符串中不能包含空白字符,具體請參見使用此方式輸入的字符串中不能包含空白字符,具體請參見7.1.2小節(jié)小節(jié)t=i like programming!;cout字符串的輸出字符串的輸出:endlsendltendl;couts.append( ok!)endl; / append為為string類的成員函數(shù)類的成員函數(shù)2.13.1 函數(shù)原型(函數(shù)原型(function prototype)2.13.2 內(nèi)聯(lián)(內(nèi)聯(lián)(inline)函數(shù))函數(shù)2.13.3 帶缺省參數(shù)的函數(shù)帶缺省參數(shù)的函數(shù)2.13.4 2.13.5

60、vc+要求為每一個函數(shù)建立原型,用以說明要求為每一個函數(shù)建立原型,用以說明函數(shù)的名稱、函數(shù)的名稱、參數(shù)個數(shù)及類型和函數(shù)返回值的類型。參數(shù)個數(shù)及類型和函數(shù)返回值的類型。v其主要目的是讓其主要目的是讓c+編譯程序進(jìn)行類型檢查,即形參與編譯程序進(jìn)行類型檢查,即形參與實(shí)參的類型匹配檢查,以及返回值是否與原型相符,以實(shí)參的類型匹配檢查,以及返回值是否與原型相符,以維護(hù)程序的正確性。所以應(yīng)養(yǎng)成將維護(hù)程序的正確性。所以應(yīng)養(yǎng)成將聲明聲明與與定義定義分別編寫分別編寫的編程習(xí)慣。的編程習(xí)慣。v函數(shù)原型與函數(shù)的定義要在函數(shù)原型與函數(shù)的定義要在函數(shù)的返回類型,函數(shù)名和函數(shù)的返回類型,函數(shù)名和參數(shù)的類型及數(shù)量參數(shù)的類型

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論