




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、掌握C+言語在構造化程序設計(非面向對象)方面對C言語擴展的性能,為編寫面向對象的C+程序打下根底。2.1 C+的特點的特點2.2 C+言語的文件擴展名言語的文件擴展名2.3 注釋符注釋符2.4 名字空間名字空間2.5 C+言語的輸入輸出言語的輸入輸出2.6 變量的定義變量的定義2.7 強迫類型轉換強迫類型轉換2.8 動態(tài)內存的分配與釋放動態(tài)內存的分配與釋放2.9 作用域運算符作用域運算符:2.10 援用援用2.11 const修飾符修飾符2.12 字符串字符串2.13 C+言語中函數(shù)的新特性言語中函數(shù)的新特性習題習題2.1 C+的發(fā)明人的發(fā)明人 Bjarne Stroustrup(本賈尼斯特
2、勞斯特盧普)博士,C+言語之父,1950年出生于丹麥,1979年在英國劍橋大學獲得計算機科學博士學位,AT&T、貝爾實驗室和ACM成員。1979年,B. S開場開發(fā)一種言語,當時稱為“C with Class,1983年演化為C+。2019年,ANSI/ISO C+規(guī)范建立,同年,B. S推出了其經典著作The C+ Programming Language的第三版。 Stroustrup博士是C+言語的設計者和第一位實現(xiàn)者,該言語業(yè)已成為世界上最通用的支持面向對象技術的程序設計言語。2.1 C+開發(fā)工具的歷史開發(fā)工具的歷史90年代初的年代初的Turbo C+2.1 C+開發(fā)工具的歷史
3、開發(fā)工具的歷史90年代中期的年代中期的Borland C+ for dos 2.1 C+開發(fā)工具的歷史開發(fā)工具的歷史90年代中期的年代中期的Borland C+ Builder for Win 2.1 C+開發(fā)工具的歷史開發(fā)工具的歷史21世紀的世紀的visual C+ 6.0 2.1 C+開發(fā)工具的歷史開發(fā)工具的歷史visual studio 2019 2.1 C+的特點的特點 C+言語既保管了言語既保管了C言語的有效性、靈敏性、言語的有效性、靈敏性、便于移植等全部精華和特點,又添加了面向對象便于移植等全部精華和特點,又添加了面向對象編程的支持,具有強大的編程功能,可方便地構編程的支持,具有強
4、大的編程功能,可方便地構造出模擬現(xiàn)實問題的實體和操作;編寫出的程序造出模擬現(xiàn)實問題的實體和操作;編寫出的程序具有構造明晰、易于擴展等優(yōu)良特性,適宜于各具有構造明晰、易于擴展等優(yōu)良特性,適宜于各種運用軟件、系統(tǒng)軟件的程序設計。用種運用軟件、系統(tǒng)軟件的程序設計。用C+編寫編寫的程序可讀性好,生成的代碼質量高,運轉效率的程序可讀性好,生成的代碼質量高,運轉效率僅比匯編言語慢僅比匯編言語慢10%20%。 為了使編譯器可以區(qū)別是為了使編譯器可以區(qū)別是C C言語還是言語還是C+C+言語,言語,C+C+言語體系規(guī)定用言語體系規(guī)定用“.cpp“.cpp( (意即意即C Plus-Plus)C Plus-Plu
5、s)作為作為C+C+言語源文件的擴展名以區(qū)別于言語源文件的擴展名以區(qū)別于C C言語用的言語用的“.C“.C文件擴展名。雖然僅差兩個字母,但編譯文件擴展名。雖然僅差兩個字母,但編譯時的處置卻相差甚遠。時的處置卻相差甚遠。 “cpp “cpp的文件擴展名與的文件擴展名與操作系統(tǒng)無關。與操作系統(tǒng)無關。與C+C+言語源文件相關的頭文件擴言語源文件相關的頭文件擴展名普通仍用展名普通仍用“.h“.h,但有些操作系統(tǒng)也有規(guī)定,但有些操作系統(tǒng)也有規(guī)定運用運用“.hpp“.hpp充任頭文件擴展名的。充任頭文件擴展名的。 1. 1. 段注釋:段注釋: / /* * */ / 2. 2. 單行注釋:單行注釋:/ /
6、 當只做單行注釋時便當只做單行注釋時便可用可用“/“/符號表示從此符號起至行尾均符號表示從此符號起至行尾均為行注釋內容。為行注釋內容。 3. 3. 程序編譯時將忽略一切的注釋內容。程序編譯時將忽略一切的注釋內容。 名字空間域是隨規(guī)范名字空間域是隨規(guī)范C+C+而引入的。它相當而引入的。它相當于一個更加靈敏的文件域全局域,可以用于一個更加靈敏的文件域全局域,可以用花括號把文件的一部分括起來,并以關鍵字花括號把文件的一部分括起來,并以關鍵字namespacenamespace開頭給它起一個名字:開頭給它起一個名字:namespace ns1namespace ns1 float a,b,c; flo
7、at a,b,c; fun1() fun1() 花括號括起來的部分稱聲明塊。聲明塊中可以包括:花括號括起來的部分稱聲明塊。聲明塊中可以包括:類、變量帶有初始化、函數(shù)帶有定義等。在域外類、變量帶有初始化、函數(shù)帶有定義等。在域外運用域內的成員時,需加上名字空間名作為前綴,后面加運用域內的成員時,需加上名字空間名作為前綴,后面加上域操作符上域操作符“:“: 。這里添加了名字空間稱號的成員名。這里添加了名字空間稱號的成員名被稱為限定修飾名。如:被稱為限定修飾名。如:ns1:ans1:a,ns1:fun1()ns1:fun1()等等。等等。 最外層的名字空間域稱為全局名字空間域最外層的名字空間域稱為全局
8、名字空間域global global namespace scopenamespace scope,即文件域。,即文件域。名字空間域可分層嵌套,同樣有分層屏蔽作用。例如:名字空間域可分層嵌套,同樣有分層屏蔽作用。例如:namespace n1namespace n1 namespace n2 namespace n2 / / 名字空間嵌套名字空間嵌套 class matrix class matrix / / 名字空間類成員名字空間類成員matrixmatrix 訪問訪問matrixmatrix,可寫:,可寫:n1:n2:matrix n1:n2:matrix 。運用運用usingusing聲
9、明可只寫一次限定修飾名。聲明可只寫一次限定修飾名。usingusing聲明以關鍵聲明以關鍵字字usingusing開頭,后面是被限定修飾的開頭,后面是被限定修飾的qualifiedqualified名字空名字空間成員名,例如:間成員名,例如:using n1:n2:matrix;using n1:n2:matrix;/ / 名字空間類成員名字空間類成員matrixmatrix的的usingusing聲明聲明以后在程序中運用以后在程序中運用matrixmatrix時,就可以直接運用成員名,而時,就可以直接運用成員名,而不用運用限定修飾名。不用運用限定修飾名。運用運用usingusing指示符可以
10、一次性地使名字空間中一切成員都指示符可以一次性地使名字空間中一切成員都可以直接被運用,比可以直接被運用,比usingusing聲明方便。聲明方便。usingusing指示符以關鍵指示符以關鍵字字usingusing開頭,后面是關鍵字開頭,后面是關鍵字namespacenamespace,然后是名字空間,然后是名字空間名。名。 規(guī)范規(guī)范C+C+庫中的一切組件都是在一個被稱為庫中的一切組件都是在一個被稱為stdstd的名字空間中聲明和定義的。在采用規(guī)范的名字空間中聲明和定義的。在采用規(guī)范C+C+的平臺上運用規(guī)范的平臺上運用規(guī)范C+C+庫中的組件,只需寫庫中的組件,只需寫一個一個usingusing
11、指示符:指示符: using namespace std; using namespace std; 就可以直接運用規(guī)范就可以直接運用規(guī)范C+C+庫中的一切成員。庫中的一切成員。 留意:假設運用了名空間留意:假設運用了名空間stdstd,那么在運用,那么在運用#include#include編譯預處置命令包含頭文件時,必需編譯預處置命令包含頭文件時,必需去掉頭文件的擴展名去掉頭文件的擴展名.h.h,否那么會出錯。,否那么會出錯。C+言語另外定義了一套流對象與運算符來替代言語另外定義了一套流對象與運算符來替代C言語中對規(guī)范輸入輸出函數(shù)言語中對規(guī)范輸入輸出函數(shù)scanf和和printf的援用。的援
12、用。C+言語的保管字為:言語的保管字為:cout“輸出內容輸出內容“輸入內容輸入內容;/cin為規(guī)范輸入流對象為規(guī)范輸入流對象(默許從鍵盤輸入默許從鍵盤輸入)#include 輸入重定向輸入重定向【例【例2.1】C+的輸入輸出舉例。的輸入輸出舉例。#include / 運用名空間運用名空間std,那么必需去掉,那么必需去掉.h擴展擴展名名using namespace std; void main() char name10; int age; coutname; coutage; coutname is nameendl; coutage is ageendl;補充補充(寫出程序執(zhí)行結果,假
13、定輸入寫出程序執(zhí)行結果,假定輸入1和和2)#include / 運用名空間運用名空間std,那么必需去掉,那么必需去掉.h擴展擴展名名using namespace std; void main() char ch1,ch2;int n1,n2;cinch1ch2;n1=ch1-0;n2=n1*10+(ch2-0);coutn2;補充補充(寫出程序執(zhí)行結果寫出程序執(zhí)行結果)#include / 運用名空間運用名空間std,那么必需去掉,那么必需去掉.h擴展擴展名名#includeusing namespace std; void main() int n,count=0;for(n=1;n=1
14、00;+n)coutsetfill(*)setw(10)n;count+;if(count%5=0) coutendl;程序執(zhí)行結果程序執(zhí)行結果 在在C C言語中,部分變量闡明必需置于可執(zhí)行代碼段之前,言語中,部分變量闡明必需置于可執(zhí)行代碼段之前,不允許部分變量聲明和可執(zhí)行代碼混合在一同。但不允許部分變量聲明和可執(zhí)行代碼混合在一同。但C+C+在變量的定義上作了兩種較大的改動,一是允許變量的在變量的定義上作了兩種較大的改動,一是允許變量的定義語句可以出如今程序的任何位置,使得部分變量的定義語句可以出如今程序的任何位置,使得部分變量的定義點與運用點不至于離得太遠,加強程序的可讀性,定義點與運用點不
15、至于離得太遠,加強程序的可讀性,而且也不用在編寫某一程序塊的開場時就思索要用到哪而且也不用在編寫某一程序塊的開場時就思索要用到哪些變量;二是允許直接運用構造體名定義變量,這種擴些變量;二是允許直接運用構造體名定義變量,這種擴展為程序員在編程中提供了不少方便。類似地在展為程序員在編程中提供了不少方便。類似地在C+C+言言語中結合名、枚舉名也可在定義后獨立地作為類型名運語中結合名、枚舉名也可在定義后獨立地作為類型名運用。用。格式:格式:(數(shù)據(jù)類型數(shù)據(jù)類型) (表達式表達式)數(shù)據(jù)類型數(shù)據(jù)類型 (表達式表達式)(1) (1) 經過強迫類型轉換,得到一個所需類型的中間值,經過強迫類型轉換,得到一個所需類
16、型的中間值,該中間值被援用后即自動釋放。原來表達式的值類型并該中間值被援用后即自動釋放。原來表達式的值類型并未改動。如以下代碼段:未改動。如以下代碼段:int b;float f;f=float(b);int b;float f;f=float(b);/ / 此時變量此時變量b b依然為依然為intint類型。類型。(2) (2) 強迫類型轉換符優(yōu)先級較高,只對緊隨其后的表達強迫類型轉換符優(yōu)先級較高,只對緊隨其后的表達式 起 作 用 , 而 對 其 他 部 分 不 起 作 用 。 如 表 達 式式 起 作 用 , 而 對 其 他 部 分 不 起 作 用 。 如 表 達 式float(i)flo
17、at(i)* *f f的含義是先將變量的含義是先將變量i i強迫類型轉換為強迫類型轉換為floatfloat類類型,然后與變量型,然后與變量f f運算。運算。(3) (3) 強迫類型轉換該當用在不做轉換將影響表達式結果強迫類型轉換該當用在不做轉換將影響表達式結果的正確性或精度,或不能完成相應運算的場所。而對于的正確性或精度,或不能完成相應運算的場所。而對于系統(tǒng)可以自動轉換類型的場所,那么沒有必要運用。系統(tǒng)可以自動轉換類型的場所,那么沒有必要運用。棧內存與堆內存棧內存與堆內存棧空間是編譯時分配的固定大小的內存。用于存放函棧空間是編譯時分配的固定大小的內存。用于存放函數(shù)調用者的地址、前往值、保管的
18、機器形狀用于前數(shù)調用者的地址、前往值、保管的機器形狀用于前往、函數(shù)參數(shù)、部分變量和暫時變量等往、函數(shù)參數(shù)、部分變量和暫時變量等堆內存是程序運轉時分配的大小可變的內存,也稱為堆內存是程序運轉時分配的大小可變的內存,也稱為動態(tài)內存動態(tài)內存C+C+提供了兩種方法進展內存動態(tài)分配和釋放提供了兩種方法進展內存動態(tài)分配和釋放malloc()malloc()和和free()(free()(從從C C規(guī)范庫中承繼包含規(guī)范庫中承繼包含malloc.h)malloc.h)newnew和和deletedelete1.new運算符運算符 指針變量指針變量 = new 數(shù)據(jù)類型數(shù)據(jù)類型; new從堆內存中為程序分配可以
19、保管某種類型從堆內存中為程序分配可以保管某種類型數(shù)據(jù)的一塊內存空間,并前往指向該內存的首數(shù)據(jù)的一塊內存空間,并前往指向該內存的首地址,該地址存放于指針變量中。地址,該地址存放于指針變量中。 堆內存可以按照要求進展分配,程序對內存堆內存可以按照要求進展分配,程序對內存的需求量隨時會發(fā)生變化,有時程序在運轉中的需求量隨時會發(fā)生變化,有時程序在運轉中能夠會不再需求由能夠會不再需求由new分配的內存空間,而且分配的內存空間,而且程序還未運轉終了,這時就需求把先前占用的程序還未運轉終了,這時就需求把先前占用的內存空間釋放給堆內存,以后重新分配,供程內存空間釋放給堆內存,以后重新分配,供程序的其它部分運用
20、。序的其它部分運用。2.delete運算符運算符運算符運算符delete用于釋放用于釋放new分配的內存空間,它的分配的內存空間,它的運用方式為:運用方式為:delete 指針變量;指針變量;其中的指針變量保管著其中的指針變量保管著new動態(tài)分配的內存的首地動態(tài)分配的內存的首地址。址。3. 留意:留意:(1) 用用new獲取的內存空間,必需用獲取的內存空間,必需用delete進展釋放;進展釋放;(2) 對一個指針只能調用一次對一個指針只能調用一次delete;(3) 用用delete運算符作用的對象必需是用運算符作用的對象必需是用new分配的分配的內存空間的首地址。內存空間的首地址。#incl
21、ude using namespace std;void main()int *p;p=new int; / 分配內存空間分配內存空間*p=5;cout*p;delete p; / 釋放內存空間釋放內存空間【例【例2.3】new與與delete運用舉例。運用舉例。(分析運轉結果分析運轉結果)在用在用new分配內存的同時進展初始分配內存的同時進展初始化。運用方式為:化。運用方式為:指針變量指針變量 = new 數(shù)據(jù)類型數(shù)據(jù)類型(初始值初始值);例如上例中的:例如上例中的:p=new int;*p=5;也可寫成:也可寫成:p=new int(5); 指針變量指針變量 = new = new 數(shù)據(jù)類
22、型數(shù)據(jù)類型 數(shù)組大小數(shù)組大小 ;此時指針變量指向第一個數(shù)組元素的地址。運此時指針變量指向第一個數(shù)組元素的地址。運用用newnew分配數(shù)組時,不能提供初始值。運用分配數(shù)組時,不能提供初始值。運用newnew建立的數(shù)組變量也由建立的數(shù)組變量也由deletedelete釋放。其方式為:釋放。其方式為:delete delete 指針變量;或指針變量;或delete delete 指針變量;指針變量;同樣,也可以用同樣,也可以用newnew來為多維數(shù)組分配空間,但來為多維數(shù)組分配空間,但是除第一維可以為變量外,其它維數(shù)都必需是是除第一維可以為變量外,其它維數(shù)都必需是常量。常量。4用用new建立數(shù)組類型
23、的變量建立數(shù)組類型的變量 留意在運用留意在運用delete時,不用思索數(shù)組的維數(shù)。時,不用思索數(shù)組的維數(shù)。有時,并不能保證一定可以從堆內存中獲得所需空間,有時,并不能保證一定可以從堆內存中獲得所需空間,當不能勝利地分配到所需求的內存時,當不能勝利地分配到所需求的內存時,new前往前往0,即空,即空指針。因此我們可以經過判別指針。因此我們可以經過判別new的前往值能否為的前往值能否為0,來,來得知系統(tǒng)中能否有足夠的空閑內存來供程序運用。例如:得知系統(tǒng)中能否有足夠的空閑內存來供程序運用。例如:int *p= new int100;if(p=0)cout cant allocate more mem
24、ory,terminating. endl;exit(1);其中其中exit函數(shù)的作用是終止程序運轉。函數(shù)的作用是終止程序運轉。#include using 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); / 分配內存空間分配內存空間 for( int i=0;in;i+) pi= i *2; coutNow output the array : end
25、l; for( i=0;in;i+) coutpi ; coutendl; delete p; / 釋放內存空間釋放內存空間【例【例2.4】從堆內存中獲取一個整型數(shù)組,賦值后并打印出來。】從堆內存中獲取一個整型數(shù)組,賦值后并打印出來。 通常情況下,假設全局變量與部分變量同通常情況下,假設全局變量與部分變量同名,那么部分變量在其作用域內具有較高的優(yōu)名,那么部分變量在其作用域內具有較高的優(yōu)先權。先權。C C言語規(guī)定只能在變量的作用域內運用該言語規(guī)定只能在變量的作用域內運用該變量,不能運用其他作用域中的變量,可采用變量,不能運用其他作用域中的變量,可采用C+C+中提供的作用域運算符中提供的作用域運算
26、符:,它能指定所需求,它能指定所需求的作用域。的作用域。 留意:不能用留意:不能用:訪問函數(shù)中的部分變量。訪問函數(shù)中的部分變量。在在C+C+言語中作用域運算符言語中作用域運算符:還用來限定類的成還用來限定類的成員,員, #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; /計數(shù)器初值賦計數(shù)器初值賦0 cou
27、tinput 10 numbers:endl; for(i=0;ixi; for(i=0;i0) j+; coutj=j;從鍵盤上輸入從鍵盤上輸入1010個整數(shù),統(tǒng)計其中的正整數(shù)的個數(shù)個整數(shù),統(tǒng)計其中的正整數(shù)的個數(shù) 程序運轉結果:程序運轉結果:(從鍵盤輸入:從鍵盤輸入:-2 3 4 -5 -3 9 -23 0 -1 21)輸出:輸出:j=4 用冒泡排序法對用冒泡排序法對10個數(shù)按從小到大的順序輸出個數(shù)按從小到大的順序輸出思想:冒泡法的根本思想是對數(shù)組元素做假設干次思想:冒泡法的根本思想是對數(shù)組元素做假設干次的的遍歷調整,每次遍歷都是對相鄰的兩個數(shù)兩兩比較遍歷調整,每次遍歷都是對相鄰的兩個數(shù)兩兩
28、比較并調整,將小的調到前頭,大的調到后面。并調整,將小的調到前頭,大的調到后面。4739147391437914379143719第一趟循環(huán)4次43719347193471934179第二趟循環(huán)3次341793417931479第三趟循環(huán)2次3147913479第四趟循環(huán)1次5 5個數(shù)個數(shù)#include void main()int a11; int i,n,t; /i表示數(shù)組下標,表示數(shù)組下標,n表示遍歷次數(shù),表示遍歷次數(shù),t用來交換數(shù)據(jù)用來交換數(shù)據(jù) coutinput 10 numbers:endl; for(i=1;iai; coutendl; for(n=1;n=9;n+) for(
29、i=1;iai+1) t=ai;ai=ai+1;ai+1=t; coutthe sorted numbers:endl; for(i=1;i11;i+) coutai ; coutendl;程序運轉結果:程序運轉結果: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.
30、put(stri); 從鍵盤上輸入一個字符串,然后將其逆序輸出從鍵盤上輸入一個字符串,然后將其逆序輸出運轉的結果是:運轉的結果是:從鍵盤輸入:從鍵盤輸入:abcdefg gfedcbal運用字符串常量來對字符數(shù)組初始化。例如lchar str10=student;l或者直接將花括號省略,寫成如下的方式lchar str10=student;l留意: l字符串常量所占的空間一定不能超越字符數(shù)組的長度。假設字符串常量占用的空間小于數(shù)組的長度,那么后面的元素自動的賦值為0 l用cout輸出。格式為:lcout字符串或字符數(shù)組名;l用cout流對象的put。格式為:lcout.put(字符或字符變量)
31、;l這種方法,每次只能輸出一個字符;要輸出整個字符串,應采用循環(huán)的方法 #include void main()char s20=This is a string.;int i=0;while(si!=0)cout.put(si);i+;l用cout流對象的write方法。格式為:lcout.write(字符串或字符數(shù)組名,個數(shù)n);l其作用是輸出字符數(shù)串中的前n個字符。 #include void main()char s20=This is a string.;cout.write(s,4);分析該程序的輸出結果l利用cin直接輸入。格式為:lcin字符數(shù)組名;l用這種方法輸入字符串時,c
32、in只能接納空格之前的部分。也就是說,當字符串中有空格時,用這種方法無法接納全部的字符串。l利用cin流對象的getline方法。格式為:lcin.getline(字符數(shù)組名,輸入字符串的最大長度n);l參數(shù)“字符數(shù)組名是存放字符串的數(shù)組稱號l參數(shù)“輸入字符串的最大長度n包括了字符串終了標志0在內 l字符串的銜接函數(shù)strcatl調用的普通方式:strcat(char ,const char );#include #include void main() char st120=qing,st2=huadaxue; strcat(st1,st2); cout字符串2,前往值0; l字符串1字符串
33、2,前往值0 l字符串、字符串2可以是字符數(shù)組也可以是字符串常量。 l字符串的比較不能運用以下的方式: l if(s1=s2) coutyes;l 只能運用該函數(shù)來進展比較。所以應該寫成:l 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)strcpy(str3,str1); strcat(str3,str2); else strcpy(str
34、3,str2); strcat(str3,str1); coutstr3; 程序運轉結果:從鍵盤輸入:China 那么輸出:BeijingChinal定義的普通方式為l類型闡明符 數(shù)組名常量表達式1常量表達式2 l例:int a53;l 表示a為整型二維數(shù)組,其中第一維有5個下標04,第二維有3個下標02,數(shù)組的元素個數(shù)為15,可以用于存放5行3列的整型數(shù)據(jù)表格。lC+言語中,二維數(shù)組在內存中默許情況下采用行優(yōu)先存儲(對float a23畫存儲表示圖) l二維數(shù)組的初始化 l分行對二維數(shù)組賦初值。如l int a23=1,2,3,4,5,6; l對一切數(shù)據(jù)一同賦值,放在一個花括號中。如:l i
35、nt a23=1,2,3,4,5,6;l部分元素賦值 ,如:l int a23=1,2,4; l數(shù)組的元素全部賦值時,可以省略數(shù)組的第一維長度 #include void main() int i,j,a23=3,0,1,10,-4,9; for(i=0;i=1;i+) for(j=0;j=2;j+) coutendlaij=aij;程序運轉結果:程序運轉結果:a00=3a01=0a02=1a10=10a11=-4a12=9編寫程序,將一個二維數(shù)組中行和列元素互換,存到另編寫程序,將一個二維數(shù)組中行和列元素互換,存到另一個二維數(shù)組中。設數(shù)組:一個二維數(shù)組中。設數(shù)組:思想:需求定義兩個數(shù)組思想:
36、需求定義兩個數(shù)組行列交換本質上是將數(shù)組元素的行列下標相互交換行列交換本質上是將數(shù)組元素的行列下標相互交換二維數(shù)組,必需求逐個的進展交換,所以要用到了雙重二維數(shù)組,必需求逐個的進展交換,所以要用到了雙重循環(huán)語句循環(huán)語句 a= b=159268862951#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ù)組元素相互交換 coutend
37、l; coutArray b:endl; /輸出交換后的數(shù)據(jù)元素輸出交換后的數(shù)據(jù)元素 for(i=0;i3;i+) for(j=0;j2;j+) coutbij ; coutendl; 程序運轉結果:Array a:1 5 92 6 8Array b:1 25 69 8#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:sum
38、endl;一條對角線元素的下標特點是:行列下標相等。另一一條對角線元素的下標特點是:行列下標相等。另一條對角線下標特點是:行列下標之和等于條對角線下標特點是:行列下標之和等于9。在每一行的每一列中找出這樣的元素然后把它加到變在每一行的每一列中找出這樣的元素然后把它加到變量量sum中去。中去。程序運轉結果:程序運轉結果:input 3*3 Matrix:1 3 52 4 6 7 8 9the sum is: 30從鍵盤輸入一個字符串判別能否為從鍵盤輸入一個字符串判別能否為“回文回文比如:比如:ABCBAABCBA#include #include void main()char str60;in
39、t i,j;cin.get(str,60);i=0;j=strlen(str)-1;while(stri=) i+; /尋覓前面第一個不是空格的字符尋覓前面第一個不是空格的字符 while(strj=) j-; /尋覓后面第一個不是空格的字符尋覓后面第一個不是空格的字符 while(ij & stri=strj)/前后對應逐個的比較前后對應逐個的比較 i+;j-;if(ij) coutNoendl;elsecoutYesendl;程序運轉結果:從鍵盤輸入:程序運轉結果:從鍵盤輸入:studeduts輸出的結果:輸出的結果:Yesj從字符串的最后一個從字符串的最后一個元素開場,所以初值元
40、素開場,所以初值為為strlen(str)-1 開場比較時,將字符開場比較時,將字符串前后的空格過濾掉串前后的空格過濾掉 援用是援用是C+言語的一個特殊的數(shù)據(jù)類型描畫,用于言語的一個特殊的數(shù)據(jù)類型描畫,用于在程序的不同部分運用兩個以上的變量名指向同一地在程序的不同部分運用兩個以上的變量名指向同一地址,使得對其中任一個變量的操作實踐上都是對同一址,使得對其中任一個變量的操作實踐上都是對同一地址單元進展的。在這種兩個以上變量名的關系上,地址單元進展的。在這種兩個以上變量名的關系上,被聲明為援用類型的變量名那么是實踐變量名的別名。被聲明為援用類型的變量名那么是實踐變量名的別名。援用運算符為援用運算符
41、為&,聲明援用的普通方式為:,聲明援用的普通方式為:數(shù)據(jù)類型數(shù)據(jù)類型 &援用變量名援用變量名 = 變量名;變量名;或或 數(shù)據(jù)類型數(shù)據(jù)類型& 援用變量名援用變量名 = 變量名;變量名;或或 數(shù)據(jù)類型數(shù)據(jù)類型 & 援用變量名援用變量名 = 變量名;變量名; 對援用進展操作,實踐上就是對被援用的變量進展對援用進展操作,實踐上就是對被援用的變量進展操作。援用不是值,不占存儲空間,聲明援用時,目操作。援用不是值,不占存儲空間,聲明援用時,目的的存儲形狀不會改動。援用一旦被初始化,就不能的的存儲形狀不會改動。援用一旦被初始化,就不能再重新賦值。再重新賦值。 【例【例2.5】
42、援用舉例。】援用舉例。(圖示變量及其援用并分析運轉結果圖示變量及其援用并分析運轉結果)#include void main() int num=50;int &ref=num;ref+=10;coutnum=numendl;cout ref=refendl; num+=40;cout num=numendl;coutref=refendl;闡明:闡明:(1) 在一行上聲明多個援用型變量在一行上聲明多個援用型變量(函數(shù)函數(shù))名時,要在每名時,要在每個變量個變量(函數(shù)函數(shù))名前都冠以名前都冠以“&符號。符號。(2) 援用不是變量,所以援用本身不能被修正,在程序援用不是變量,所以援用
43、本身不能被修正,在程序中對援用的存取都是對它所援用的變量的存取。中對援用的存取都是對它所援用的變量的存取。(3) 一個變量被聲明為援用時必需進展初始化,除非這一個變量被聲明為援用時必需進展初始化,除非這個援用是用作函數(shù)的參數(shù)或前往值,為援用提供的初始個援用是用作函數(shù)的參數(shù)或前往值,為援用提供的初始值應為變量值應為變量(包括對象包括對象)。援用一旦被初始化。援用一旦被初始化,就不能再重就不能再重新賦值。如新賦值。如ref=&j;但但ref=j是允許的。是允許的。(4) 由于援用不是變量,所以,不能闡明援用的援用,由于援用不是變量,所以,不能闡明援用的援用,也不能闡明數(shù)組元素的類型為援用數(shù)
44、組,或指向援用的也不能闡明數(shù)組元素的類型為援用數(shù)組,或指向援用的指針。例如:指針。例如:int &a5; / 錯誤錯誤int &*p;/ 錯誤錯誤由于指針也是變量,因此可以闡明對指針變量的援用。由于指針也是變量,因此可以闡明對指針變量的援用。例如:例如:int *a; int *&p=a; int b; p=&b; / a指向變量指向變量b(5) 援用與指針不同。指針的內容或值是某一變量的內援用與指針不同。指針的內容或值是某一變量的內存單元地址,而援用那么與初始化它的變量具有一樣的存單元地址,而援用那么與初始化它的變量具有一樣的內存單元地址。指針是個變量,可以把
45、它再賦值成其它內存單元地址。指針是個變量,可以把它再賦值成其它的地址,然而,建立援用時必需進展初始化并且決不會的地址,然而,建立援用時必需進展初始化并且決不會再指向其它不同的變量。再指向其它不同的變量。地址地址(6) 要留意區(qū)分援用運算符和地址運算符的區(qū)別。例要留意區(qū)分援用運算符和地址運算符的區(qū)別。例如:如:int num=50;int &ref=num;int *p=&ref; /&在賦值號右邊為地址運算符在賦值號右邊為地址運算符(7) 可以用一個援用初始化另一個援用。例如:可以用一個援用初始化另一個援用。例如:int num=50;int &ref1=num
46、;int &ref2=ref1;ref2=100;/ num被修正為被修正為100其中其中ref2也是對也是對num的援用。的援用。(8)可以把函數(shù)的參數(shù)闡明成援用以建立函數(shù)參數(shù)的援用傳送方式可以把函數(shù)的參數(shù)闡明成援用以建立函數(shù)參數(shù)的援用傳送方式益處:益處:C+的援用傳送方式的實參和形參指向同一內存地址,的援用傳送方式的實參和形參指向同一內存地址,減少值傳送引起的數(shù)據(jù)堆棧復制減少值傳送引起的數(shù)據(jù)堆棧復制防止地址傳送引起的地址溢出錯誤防止地址傳送引起的地址溢出錯誤C+提供援用的主要用途就是建立函數(shù)參數(shù)的援用傳送方式提供援用的主要用途就是建立函數(shù)參數(shù)的援用傳送方式C言語的函數(shù)參數(shù)傳送只能采
47、用值傳送和地址傳送言語的函數(shù)參數(shù)傳送只能采用值傳送和地址傳送三種傳送方式比較的例子三種傳送方式比較的例子交換兩個數(shù)交換兩個數(shù)用普通變量作為參數(shù)交換兩個數(shù)用普通變量作為參數(shù)交換兩個數(shù)采用傳值方式采用傳值方式#include #include void swap(int x,int y)void swap(int x,int y) int t; int t; t = x; t = x; x = y; x = y; y = t; y = t; void main()void main() int a = 1,b = 2; int a = 1,b = 2; cout cout交換前交換前,a=a,a=
48、a,b=bendl;b=bendl; swap(a,b); swap(a,b); cout cout交換后交換后,a=a,a=a,b=bendl;b=bendl; 運轉結果:運轉結果:交換前交換前,a=1,b=2交換后交換后,a=1,b=2交換功能未實現(xiàn)。交換功能未實現(xiàn)。闡明采用傳值方式時,實參不受影響闡明采用傳值方式時,實參不受影響 用指針變量作為參數(shù)交換兩個數(shù)用指針變量作為參數(shù)交換兩個數(shù)采用傳址方式采用傳址方式#include #include void swap(int void swap(int * * x,int x,int * * y) y) int t; int t; t = t
49、 = * *x;x; * *x = x = * *y;y; * *y = t;y = t; void main()void main() int a = 1,b = 2; int a = 1,b = 2; cout cout交換前交換前,a=a,a=a,b=bendl;b=bendl; swap(&a,&b); swap(&a,&b); cout cout交換后交換后,a=a,a=a,b=bendl;b=bendl; 運轉結果:運轉結果:交換前交換前,a=1,b=2交換后交換后,a=2,b=1采用傳地址方式傳送參數(shù)。采用傳地址方式傳送參數(shù)。在函數(shù)中改動了形參,就
50、是改動了實參,由于他們是在函數(shù)中改動了形參,就是改動了實參,由于他們是指向同一地址的指針變量。指向同一地址的指針變量。因此交換功能實現(xiàn)因此交換功能實現(xiàn)用援用作為參數(shù)交換兩個數(shù)用援用作為參數(shù)交換兩個數(shù)采用傳援用方式采用傳援用方式#include #include void swap(int & x,int & y)void swap(int & x,int & y) int t; int t; t = x; t = x; x = y; x = y; y = t; y = t; void main()void main() int a = 1,b = 2; int
51、a = 1,b = 2; cout cout交換前交換前,a=a,a=a,b=bendl;b=bendl; swap(a,b); swap(a,b); cout cout交換后交換后,a=a,a=a,b=bendl;b=bendl; 運轉結果:運轉結果:交換前交換前,a=1,b=2交換后交換后,a=2,b=1采用傳援用方式傳送參數(shù)。采用傳援用方式傳送參數(shù)。函數(shù)中的形參是主調函數(shù)中實參的援用。函數(shù)中的形參是主調函數(shù)中實參的援用。在函數(shù)中改動了形參,就是改動了實參,由于他們指在函數(shù)中改動了形參,就是改動了實參,由于他們指向同一地址。向同一地址。因此交換功能實現(xiàn)因此交換功能實現(xiàn)地址傳送和援用傳送的比
52、較。地址傳送和援用傳送的比較。援用作為參數(shù),主調函數(shù)可直接運用變量名援用作為參數(shù),主調函數(shù)可直接運用變量名地址作為參數(shù),主調函數(shù)要將變量地址傳送過去地址作為參數(shù),主調函數(shù)要將變量地址傳送過去援用作為參數(shù),函數(shù)可對形參變量直接操作援用作為參數(shù),函數(shù)可對形參變量直接操作地址作為參數(shù),函數(shù)需經過指針對地址間接操作地址作為參數(shù),函數(shù)需經過指針對地址間接操作(9) 有空指針,無空援用有空指針,無空援用(10) 援用不能用數(shù)據(jù)類型來初始化。如:援用不能用數(shù)據(jù)類型來初始化。如: int&ref=int; / error(11) 函數(shù)調用可以作為左值函數(shù)調用可以作為左值(函數(shù)前往值為援用類型函數(shù)前往值
53、為援用類型) 援用表達式是一個左值表達式,因此它可以出如今形、實參數(shù)援用表達式是一個左值表達式,因此它可以出如今形、實參數(shù)的任何一方。假設一個函數(shù)前往了援用,那么該函數(shù)的調用也可以的任何一方。假設一個函數(shù)前往了援用,那么該函數(shù)的調用也可以被賦值。普通說,當前往值不是本函數(shù)內定義的部分變量時就可以被賦值。普通說,當前往值不是本函數(shù)內定義的部分變量時就可以前往一個援用。在通常情況下,援用前往值只用在需對函數(shù)的調用前往一個援用。在通常情況下,援用前往值只用在需對函數(shù)的調用重新賦值的場所,也就是對函數(shù)的前往值重新賦值的時候。防止將重新賦值的場所,也就是對函數(shù)的前往值重新賦值的時候。防止將部分作用域中變
54、量的地址前往,就使函數(shù)調用表達式作為左值來運部分作用域中變量的地址前往,就使函數(shù)調用表達式作為左值來運用。用。函數(shù)前往值為援用類型表示該函數(shù)前往值是一個變量的別名,故可函數(shù)前往值為援用類型表示該函數(shù)前往值是一個變量的別名,故可將函數(shù)調用作為一個變量運用而進展賦值將函數(shù)調用作為一個變量運用而進展賦值【例【例2.82.8】統(tǒng)計學生中】統(tǒng)計學生中A A類學生與類學生與B B類學生各為多少個。類學生各為多少個。A A類學生的規(guī)類學生的規(guī)范是平均分在范是平均分在8080分以上,其他都是分以上,其他都是B B類學生。類學生。【補充例子】【補充例子】#include int & min(int &a
55、mp; i,int & j) if(i=j) return i; else return j;void main() int a = 3, b= 4; couta=a b=bendl; min(a,b)=5; couta=a b=bendl; min(a,b) = 0; couta=a b=bendl;【補充例子】【補充例子】#include int & min(int & i,int & j)/此函數(shù)的前往值是對參數(shù)此函數(shù)的前往值是對參數(shù)i和和j中小的那個變量的援用中小的那個變量的援用 if(i=j) return i; else return j;void
56、main() int a = 3, b= 4; couta=a b=bendl; min(a,b)=5; /由于函數(shù)的前往值為援用類型,所以可以為函數(shù)調用賦值由于函數(shù)的前往值為援用類型,所以可以為函數(shù)調用賦值 /為函數(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ù)內定義前往援用的函數(shù)時,留意不要前往對該函數(shù)內部分變量的援用。部分變量的援用。為什么為什么?由于部分變量的生存
57、期局限于函數(shù)內部,函數(shù)前往時部分變量由于部分變量的生存期局限于函數(shù)內部,函數(shù)前往時部分變量消逝,導致函數(shù)前往一個無效的援用。消逝,導致函數(shù)前往一個無效的援用。故函數(shù)前往的援用是對某一個函數(shù)參數(shù)的援用且這個參數(shù)本身故函數(shù)前往的援用是對某一個函數(shù)參數(shù)的援用且這個參數(shù)本身也是援用類型也是援用類型【例【例2.9】前往的部分作用域內的變量,函數(shù)作為左值。】前往的部分作用域內的變量,函數(shù)作為左值。#define PI 3.1415926const float PI=3.1415926; 這個常量是有類型的,它有地址,可以用這個常量是有類型的,它有地址,可以用指針指向這個值,但不能修正它。指針指向這個值,但
58、不能修正它。C+建議用建議用const取代取代#define定義常量。定義常量。 (1) 運用運用const修飾符定義常量時,必需初始化;修飾符定義常量時,必需初始化;(2) 常量一旦被定義,在程序中任何地方都不能常量一旦被定義,在程序中任何地方都不能 再更改。再更改。(3) 假設用假設用const定義的是一個整型常量,定義的是一個整型常量,int可以可以省略。省略。(4) 與與#define定義的常量有所不同,定義的常量有所不同,const定義的定義的常量可以有本人的數(shù)據(jù)類型,這樣常量可以有本人的數(shù)據(jù)類型,這樣C+編譯編譯程序可以進展更加嚴厲的類型檢查,具有良程序可以進展更加嚴厲的類型檢查,
59、具有良好的編譯時的檢測性。好的編譯時的檢測性。 (5) 函數(shù)參數(shù)也可以用函數(shù)參數(shù)也可以用const闡明,用于保證明參在闡明,用于保證明參在該函數(shù)內部不被改動,大多數(shù)該函數(shù)內部不被改動,大多數(shù)C+編譯器能對具有編譯器能對具有const參數(shù)的函數(shù)進展更好的代碼優(yōu)化。例如,經過參數(shù)的函數(shù)進展更好的代碼優(yōu)化。例如,經過函數(shù)函數(shù)max求出整型數(shù)組求出整型數(shù)組a100中的最大值,函數(shù)原型中的最大值,函數(shù)原型應該是:應該是: int max(const int *pa); 這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在函數(shù)中對數(shù)組元素的操作只許讀,不許寫。函數(shù)中對數(shù)
60、組元素的操作只許讀,不許寫。 除了計算外,文本處置也是編程過程中除了計算外,文本處置也是編程過程中一個非常重要的方面。在一個非常重要的方面。在C言語中運用字符數(shù)言語中運用字符數(shù)組和字符指針實現(xiàn)字符串,但是在組和字符指針實現(xiàn)字符串,但是在C+中提供中提供了一種既方便又好用的了一種既方便又好用的string類型。下面經過一類型。下面經過一個簡單的例子闡明個簡單的例子闡明string類型的運用。類型的運用。【例【例2.10】字符串類】字符串類string的運用。的運用。【例【例2.10 】#include #include /運用字符串運用字符串string類型的程序應包含頭文件類型的程序應包含頭文件using namespace std;void main()string s,t;cout請輸入一個字符串請輸入一個字符串:s; / 由鍵盤輸入一行文本,并把它賦給由鍵盤輸入一行文本,并把它賦給sring類型的變量類型的變量s,留意:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學六年級下冊第五章廣角-鴿巢問題解答題訓練
- 上海中華職業(yè)技術學院《體育美學》2023-2024學年第一學期期末試卷
- 江西省贛州市章貢區(qū)2025屆小升初總復習數(shù)學精練含解析
- 宿州職業(yè)技術學院《職業(yè)教育信息化概論》2023-2024學年第二學期期末試卷
- 呼和浩特民族學院《羽毛球專項理論與實踐》2023-2024學年第二學期期末試卷
- 重慶電訊職業(yè)學院《釀酒機械與設備》2023-2024學年第一學期期末試卷
- 余江縣第一中學2025年高三下學期模擬卷(五)物理試題含解析
- 北京語言大學《團體心理咨詢》2023-2024學年第一學期期末試卷
- 西南財經大學天府學院《寫意花鳥實驗教學》2023-2024學年第二學期期末試卷
- 河北省石家莊市2025年高三十月月考物理試題試卷含解析
- 五氟乙氧基環(huán)三磷腈的合成方法研究華中師范大學
- 2023年10月自考財務管理學00067試題及答案
- 《戰(zhàn)略性新興產業(yè)分類(2023年)》
- LY/T 2974-2018旱冬瓜培育技術規(guī)程
- GB/T 3745.1-1983卡套式三通管接頭
- 儀器儀表維保方案
- 區(qū)域經理工作手冊課件
- 慢性肺源性心臟病(教學)課件
- 小學三年級詩詞大會初賽比賽題目課件
- 大豆油精煉加工工藝
- 部編版初中語文九年級下冊第一單元-復習課件
評論
0/150
提交評論