C++大學基礎教程第五章_第1頁
C++大學基礎教程第五章_第2頁
C++大學基礎教程第五章_第3頁
C++大學基礎教程第五章_第4頁
C++大學基礎教程第五章_第5頁
已閱讀5頁,還剩103頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2022-5-10北京郵電大學電信工程學院計算機技術中心1C+大學基礎教程大學基礎教程第第5 5章章 數(shù)組數(shù)組北京郵電大學電信工程學院北京郵電大學電信工程學院 計算機技術中心計算機技術中心2022-5-10北京郵電大學電信工程學院計算機技術中心-2-數(shù)組是具有一定數(shù)組是具有一定順序關系順序關系的若干的若干相相同類型變量的集合同類型變量的集合,組成數(shù)組的變,組成數(shù)組的變量稱為該數(shù)組的量稱為該數(shù)組的元素元素。數(shù)組屬于構造類型。數(shù)組屬于構造類型。數(shù)組是實際編程中經(jīng)常使用的一種數(shù)組是實際編程中經(jīng)常使用的一種數(shù)據(jù)結構。數(shù)據(jù)結構。5.1 5.1 數(shù)組基本概念數(shù)組基本概念5.2 5.2 數(shù)組元素的下標數(shù)組元

2、素的下標5.3 5.3 數(shù)組初始化數(shù)組初始化5.4 5.4 數(shù)組的大小和越界數(shù)組數(shù)組的大小和越界數(shù)組5.5 5.5 字符數(shù)組字符數(shù)組 5.6 5.6 向函數(shù)傳遞數(shù)組向函數(shù)傳遞數(shù)組5.7 5.7 多維數(shù)組多維數(shù)組第第5 5章章 數(shù)組數(shù)組2022-5-10北京郵電大學電信工程學院計算機技術中心4 5.1 5.1 數(shù)組基本概念數(shù)組基本概念 2022-5-10北京郵電大學電信工程學院計算機技術中心-5-5.1數(shù)組基本概念數(shù)組是具有一定順序關系的若干相同類型數(shù)組是具有一定順序關系的若干相同類型元素的集合。元素的集合。組成數(shù)組的變量稱為該數(shù)組的元素。組成數(shù)組的變量稱為該數(shù)組的元素。數(shù)組元素都有相同的變量名

3、(數(shù)組名),數(shù)組元素都有相同的變量名(數(shù)組名),但是有不同的下標。但是有不同的下標。例例:04:04級級110110班班3030名同學名同學“C+C+程序設計程序設計”課程的成績課程的成績 int Cscore30;int Cscore30; 實驗,測得一組電阻實驗,測得一組電阻R R隨溫度隨溫度T T變化的值變化的值 float Ri10;float Ri10; short Tc10; short Tc10;2022-5-10北京郵電大學電信工程學院計算機技術中心-6-一維數(shù)組一維數(shù)組定義格式定義格式 類型說明符類型說明符 數(shù)組名數(shù)組名 常量表達式常量表達式 ;例例: : 統(tǒng)計統(tǒng)計10001

4、000位位1010歲兒童的體重,定義數(shù)組歲兒童的體重,定義數(shù)組 float weight1000;float weight1000;數(shù)組名數(shù)組名的命名規(guī)則和變量名相同。的命名規(guī)則和變量名相同。常量表達式常量表達式表示數(shù)組元素的個數(shù),即表示數(shù)組元素的個數(shù),即數(shù)組長度數(shù)組長度。2022-5-10北京郵電大學電信工程學院計算機技術中心-7-例例定義一個字符數(shù)組:定義一個字符數(shù)組:nchar a5char a5;存儲該數(shù)組需存儲該數(shù)組需5 5個字節(jié)。每個元素的類型是個字節(jié)。每個元素的類型是字符型。數(shù)組下標從字符型。數(shù)組下標從0 0開始,分別是開始,分別是a0a0,a1a1,a2a2,a3a3,a4a4

5、。注意:數(shù)組元素的下標從注意:數(shù)組元素的下標從0 0開始。并且,開始。并且,aa5 5 不屬于該數(shù)組的空間范圍。不屬于該數(shù)組的空間范圍。2022-5-10北京郵電大學電信工程學院計算機技術中心-8-數(shù)組在內存中的存放數(shù)組在內存中的存放 數(shù)組元素都是存放在一段數(shù)組元素都是存放在一段連續(xù)連續(xù)的內存單元中的。的內存單元中的。例例 char name=”Ray Krebbs”char name=”Ray Krebbs”的內存情況的內存情況 2022-5-10北京郵電大學電信工程學院計算機技術中心-9-5.1.2數(shù)組的定義數(shù)組名數(shù)組名標識符的選取和簡單變量相同,數(shù)組必標識符的選取和簡單變量相同,數(shù)組必須

6、須先定義先定義,后引用后引用。定義數(shù)組的一般格式是:定義數(shù)組的一般格式是:類型類型 數(shù)組名數(shù)組名 常量表達式常量表達式1.1.常量表達式常量表達式nn; 例例: : int ages30int ages30; char gray512512;char gray512512;注意注意: :數(shù)組數(shù)組agesages和和graygray的各元素此時的內容是隨機的,的各元素此時的內容是隨機的,編程中不能認為全是編程中不能認為全是0 0。2022-5-10北京郵電大學電信工程學院計算機技術中心-10-定義數(shù)組應考慮的幾個方面定義數(shù)組應考慮的幾個方面 確定數(shù)組元素的類型確定數(shù)組元素的類型整型、浮點型等簡單

7、類型,整型、浮點型等簡單類型,結構體、類等用戶自定義類型。結構體、類等用戶自定義類型。 確定數(shù)組的名稱確定數(shù)組的名稱由由“標識符標識符”指定,指定,數(shù)組名是一個地址常量數(shù)組名是一個地址常量,代表,代表著數(shù)組元素在內存中的著數(shù)組元素在內存中的起始地址起始地址。 確定數(shù)組的結構確定數(shù)組的結構包括數(shù)組的維數(shù)(有幾個常量表達式),維的大小包括數(shù)組的維數(shù)(有幾個常量表達式),維的大小等,也就是常量表達式的具體形式。常量表達式等,也就是常量表達式的具體形式。常量表達式的值必須是正整數(shù)。的值必須是正整數(shù)。2022-5-10北京郵電大學電信工程學院計算機技術中心-11-例例5.1 5.1 定義一個含定義一個含

8、1010整數(shù),以整數(shù),以ARRAYARRAY命名的數(shù)命名的數(shù)組,用組,用100100至至109109對數(shù)組元素賦值,并對其求和。對數(shù)組元素賦值,并對其求和。分析:需要在一個循環(huán)中使用數(shù)組。這是使用數(shù)組分析:需要在一個循環(huán)中使用數(shù)組。這是使用數(shù)組最經(jīng)常的方式。最經(jīng)常的方式。void main()void main() int ARRAY 10; int ARRAY 10; int sum=0; int sum=0; for (int i=0;i10;i+) for (int i=0;i10;i+) ARRAYi=100+i; ARRAYi=100+i; sum+= ARRAYi; sum+= A

9、RRAYi; 2022-5-10北京郵電大學電信工程學院計算機技術中心-12-錯誤的數(shù)組定義語句錯誤的數(shù)組定義語句void VoidArray10;void VoidArray10;/void/void不可以做數(shù)組類型不可以做數(shù)組類型int a=9; int a=9; float floatArraya; float floatArraya; /下標表達式不可以是變量下標表達式不可以是變量char charArray1.5+1.5;char charArray1.5+1.5;/3.0/3.0不是整數(shù)不是整數(shù)2022-5-10北京郵電大學電信工程學院計算機技術中心-13-數(shù)組的作用域和單個變量相

10、數(shù)組的作用域和單個變量相同。同。2022-5-10北京郵電大學電信工程學院計算機技術中心-14-#includeusing namespace std;short g64;void fun() double d32; /void main() int a128; /作用域問作用域問題題2022-5-10北京郵電大學電信工程學院計算機技術中心15 5.2 5.2 數(shù)組元素的下標數(shù)組元素的下標 2022-5-10北京郵電大學電信工程學院計算機技術中心-16-數(shù)組的元素是由下標來區(qū)分的。使用數(shù)組時,一般數(shù)組的元素是由下標來區(qū)分的。使用數(shù)組時,一般是對數(shù)組的各個元素操作。是對數(shù)組的各個元素操作。對于一

11、個已經(jīng)聲明過的數(shù)組,其元素的使用形式為:對于一個已經(jīng)聲明過的數(shù)組,其元素的使用形式為: 數(shù)組名數(shù)組名 下標表達式下標表達式 例如例如5.2數(shù)組元素的下標void main() int array10; array0=1; array1=1; for(int k=2;k10;k+) arrayk=arrayk-1+arrayk-2; /k=10 ?注意注意: :訪問數(shù)組元訪問數(shù)組元素不能越界,素不能越界,c+c+編譯器不檢查訪編譯器不檢查訪問數(shù)組元素越界問數(shù)組元素越界錯誤。錯誤。2022-5-10北京郵電大學電信工程學院計算機技術中心-17-注意注意在使用數(shù)組元素時需要在使用數(shù)組元素時需要注意:

12、注意:n數(shù)組元素的下標表達式其結果必須為正整數(shù)。數(shù)組元素的下標表達式其結果必須為正整數(shù)。n數(shù)組元素的下標值不得超過聲明時所定義的數(shù)組元素的下標值不得超過聲明時所定義的上下界。上下界。2022-5-10北京郵電大學電信工程學院計算機技術中心-18-數(shù)組的下標數(shù)組的下標數(shù)組元素的下標是數(shù)組元素到數(shù)組開始地址的偏移數(shù)組元素的下標是數(shù)組元素到數(shù)組開始地址的偏移量。量。第第1 1個元素的偏移量是個元素的偏移量是0 0個數(shù)組元素大小,第個數(shù)組元素大小,第2 2個元個元素的偏移量是素的偏移量是1 1個數(shù)組元素大小,依次類推。個數(shù)組元素大小,依次類推。因此,數(shù)組元素是一系列大小相同的連續(xù)項,每項因此,數(shù)組元素

13、是一系列大小相同的連續(xù)項,每項到公共基點(數(shù)組起始地址)的偏移量是固定的。到公共基點(數(shù)組起始地址)的偏移量是固定的。#include using namespace std;void main()int A10,B10;int i;for(i=0;i10;i+) Ai=i*2-1;B10-i-1=Ai;for(i=0;i10;i+) coutAi =Ai; cout Bi = Biendl;- A0 x0012ff580 -11 12 33 54 75 96 117 138 159 172022-5-10北京郵電大學電信工程學院計算機技術中心19 5.3 5.3 數(shù)組初始化數(shù)組初始化2022

14、-5-10北京郵電大學電信工程學院計算機技術中心-20-給數(shù)組元素賦值的方法給數(shù)組元素賦值的方法在使用數(shù)組元素之前,必須先對它們賦值。在使用數(shù)組元素之前,必須先對它們賦值。有以下兩種賦值方法:有以下兩種賦值方法:n在定義數(shù)組時初始化在定義數(shù)組時初始化n在程序中對數(shù)組賦值在程序中對數(shù)組賦值 2022-5-10北京郵電大學電信工程學院計算機技術中心-21-數(shù)組的初始化數(shù)組的初始化數(shù)組初始化時,用以初始化數(shù)組元素的值數(shù)組初始化時,用以初始化數(shù)組元素的值放在一個大括號放在一個大括號中。中。例如:例如:int a3= 1, 1, l int a3= 1, 1, l ;數(shù)組的初始化就是在定義數(shù)組時給部分或

15、全數(shù)組的初始化就是在定義數(shù)組時給部分或全部元素賦初值。部元素賦初值。 例:例: int a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4,5,6,7,8,9;在對全部數(shù)組元素賦初值時,可以不指定在對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度。數(shù)組長度。 例:例:int a =1,2,3,4,5;int a =1,2,3,4,5;2022-5-10北京郵電大學電信工程學院計算機技術中心-22-數(shù)組的初始化數(shù)組的初始化對于簡單數(shù)據(jù)類型的數(shù)組,就是給數(shù)組元對于簡單數(shù)據(jù)類型的數(shù)組,就是給數(shù)組元素賦值;素賦值;對于對象數(shù)組,每個元素都是某個類的一對于對象數(shù)組,每個元素都是

16、某個類的一個對象,初始化就是調用該對象的構造函個對象,初始化就是調用該對象的構造函數(shù)。我們會在后面單獨詳細介紹。數(shù)。我們會在后面單獨詳細介紹。2022-5-10北京郵電大學電信工程學院計算機技術中心-23-注意注意初始化值的個數(shù)可少于數(shù)組元素個數(shù)。沒有被初始初始化值的個數(shù)可少于數(shù)組元素個數(shù)。沒有被初始化的元素將賦值為化的元素將賦值為0 0。 例例 int a1024=0;int a1024=0;/可以將數(shù)組元素初始化為可以將數(shù)組元素初始化為0 0初始化數(shù)組的值的個數(shù)不能多于數(shù)組元素個數(shù),也初始化數(shù)組的值的個數(shù)不能多于數(shù)組元素個數(shù),也不能使用逗號來省略對部分元素的初始化,這種做不能使用逗號來省略

17、對部分元素的初始化,這種做法在法在C C中是允許的,但在中是允許的,但在C+C+中不允許。中不允許。 2022-5-10北京郵電大學電信工程學院計算機技術中心-24-錯誤例子錯誤例子例如下面的代碼對數(shù)組進行初始化是錯誤的:例如下面的代碼對數(shù)組進行初始化是錯誤的:int array15=0,1,2,3,4,5; int array15=0,1,2,3,4,5; /error/error初始化值個數(shù)多于數(shù)組元素個數(shù)初始化值個數(shù)多于數(shù)組元素個數(shù)int array25int array25, , 1, 2, 3 , , 1, 2, 3 ;/error/error不能加入不能加入“,”,”來跳過不賦值的

18、元素。來跳過不賦值的元素。int array25=0,2,3,4; int array25=0,2,3,4; /error/error不能加入不能加入“,”,”來跳過不賦值的元素。來跳過不賦值的元素。int array35= ; int array35= ; /error/error語法格式錯誤語法格式錯誤2022-5-10北京郵電大學電信工程學院計算機技術中心-25-全局數(shù)組初始化全局數(shù)組初始化C+C+自動將全局數(shù)組變量中的所有元素初始自動將全局數(shù)組變量中的所有元素初始化為化為0 0或或NULLNULL。n如果未賦初值,那么一個全局的字符數(shù)組中的如果未賦初值,那么一個全局的字符數(shù)組中的所有元

19、素將為所有元素將為NULL(NULL(空空) ),一個全局的數(shù)字數(shù)組,一個全局的數(shù)字數(shù)組中的所有元素將為中的所有元素將為0 0。程序中應盡量限制全局數(shù)組變量的使用。如程序中應盡量限制全局數(shù)組變量的使用。如果要用,也最好在程序中用語句將其顯式初果要用,也最好在程序中用語句將其顯式初始化為始化為0 0,以明確表示編程者的意圖。,以明確表示編程者的意圖。例例5.25.2初始化全局和局部數(shù)組初始化全局和局部數(shù)組#include using namespace std;int array15=1,2,3;static int array25=1;void main() int arr15=2; stat

20、ic int arr25=1,2; int n; cout global:“endl; for(n=0; n5; n+) cout array1n; coutendl;例例5.25.2初始化全局和局部數(shù)組初始化全局和局部數(shù)組coutglobal static:”endl;for(n=0; n5; n+) cout array2n;coutendl;cout local:”endl;for(n=0; n5; n+) cout arr1n;coutendl;cout local static:“endl;for(n=0; n5; n+) cout arr2n;cout endl;運行結果為:運行結

21、果為:global: global: 1 2 3 0 0 1 2 3 0 0global static: global static: 1 0 0 0 0 1 0 0 0 0local: local: 2 0 0 0 0 2 0 0 0 0local static: local static: 1 2 0 0 0 1 2 0 0 02022-5-10北京郵電大學電信工程學院計算機技術中心-28-5.3.2 5.3.2 數(shù)組元素的賦值數(shù)組元素的賦值 大多數(shù)情況下,在定義數(shù)組時并不知道它的內容,大多數(shù)情況下,在定義數(shù)組時并不知道它的內容,需要在程序中,由用戶輸入或讀磁盤文件數(shù)據(jù)對需要在程序中,由用

22、戶輸入或讀磁盤文件數(shù)據(jù)對數(shù)組元素賦值。這時,數(shù)組元素賦值。這時,forfor循環(huán)語句是一個強有力循環(huán)語句是一個強有力的工具。的工具。例例: : int k,a10,b20; for(k=0;kak; for(k=0;k10;k+) bk=2*k;2022-5-10北京郵電大學電信工程學院計算機技術中心-29-例例:測得銅導線在溫度測得銅導線在溫度Ti時的電阻時的電阻Ri如下如下,求電阻求電阻R和和溫度溫度T的關系。的關系。i i1 12 23 34 45 56 67 7Ti(Ti(o oC)C) 19.119.125.025.030.130.136.036.040.040.045.145.15

23、0.050.0Ri(Ri( ) ) 76.376.30 077.877.80 079.279.25 580.880.80 082.382.35 583.983.90 085.185.10 00RTR=k*T+b2022-5-10北京郵電大學電信工程學院計算機技術中心-30-分析分析: : 采樣最小二乘法擬合多項式采樣最小二乘法擬合多項式R R= =k k* *T+bT+b 求使求使 最小的最小的k k、b b。 令令712|71SiiiRbkT0kS0bS712712717171)(77kiiiiiiiiiiiTTRTRT7b7171iiiiTkR2022-5-10北京郵電大學電信工程學院計算

24、機技術中心-31-#includeusing namespace std;void main() int i,n(7);float sumT(0),sumR(0),sumTR(0),sumT2(0);float Ti7,Ri7;float k,b;coutinput Tii Ri:endl; for(i=0;iTiiRii; 2022-5-10北京郵電大學電信工程學院計算機技術中心-32- for(i=0;in;i+) sumT+=Tii;sumR+=Rii;sumTR+=Tii*Rii;sumT2+=Tii*Tii; k=(n*sumTR-sumT*sumR)/(n*sumT2-sumT*s

25、umT);b=(sumR-k*sumT)/n; coutk=k,b=bendl;2022-5-10北京郵電大學電信工程學院計算機技術中心-33-注意注意在數(shù)組使用中,數(shù)組名不能出現(xiàn)在賦值語句中等號在數(shù)組使用中,數(shù)組名不能出現(xiàn)在賦值語句中等號的左邊。不能直接把一個數(shù)組賦給另一個數(shù)組。的左邊。不能直接把一個數(shù)組賦給另一個數(shù)組。假假設要將數(shù)組設要將數(shù)組totaltotal的值拷貝到數(shù)組的值拷貝到數(shù)組savesave中,中, save =total; save =total; /error/error 應使用一個循環(huán)語句將應使用一個循環(huán)語句將totaltotal中的元素的值逐個賦中的元素的值逐個賦給數(shù)

26、組給數(shù)組savesave中的每個元素。中的每個元素。 for (int i=0;iSIZE;i+) for (int i=0;iSIZE;i+) /ok/oksavei =total i;savei =total i;2022-5-10北京郵電大學電信工程學院計算機技術中心-34-5.3.3 5.3.3 數(shù)組省略初始化方法數(shù)組省略初始化方法初始化數(shù)組的全部元素時可以省略方括號中的初始化數(shù)組的全部元素時可以省略方括號中的數(shù)組大小。數(shù)組大小。例例: :int array=0,1,2,3,4int array=0,1,2,3,4;2022-5-10北京郵電大學電信工程學院計算機技術中心-35-數(shù)組的

27、大小數(shù)組的大小編譯時必須知道數(shù)組的大小。通常,聲明數(shù)組時編譯時必須知道數(shù)組的大小。通常,聲明數(shù)組時方括號內的數(shù)字決定了數(shù)組的大小。方括號內的數(shù)字決定了數(shù)組的大小。初始化數(shù)組的全部元素省略方括號中的數(shù)組大小初始化數(shù)組的全部元素省略方括號中的數(shù)組大小時,編譯器統(tǒng)計花括號之間的元素個數(shù),以求出時,編譯器統(tǒng)計花括號之間的元素個數(shù),以求出數(shù)組的大小。數(shù)組的大小。例如,下面的代碼產生相同的結果:例如,下面的代碼產生相同的結果:int array15=0,1,2,3,4int array15=0,1,2,3,4;int array2=0,1,2,3,4int array2=0,1,2,3,4;2022-5-

28、10北京郵電大學電信工程學院計算機技術中心-36-大括號的使用大括號的使用 通過使用大括號,可初始化任何一種類型的數(shù)組。通過使用大括號,可初始化任何一種類型的數(shù)組。例如,要記錄前三年的銷售總額,則可以如下定義并例如,要記錄前三年的銷售總額,則可以如下定義并初始化一個數(shù)組:初始化一個數(shù)組:ndouble sales= 4323.43double sales= 4323.43,122355.32122355.32,343324.96343324.96注意:上面這種使用大括號來初始化數(shù)組的方法只注意:上面這種使用大括號來初始化數(shù)組的方法只能在定義數(shù)組時使用。在數(shù)組定義之后,就不能用能在定義數(shù)組時使用

29、。在數(shù)組定義之后,就不能用這種方法了,而只能逐個元素地賦值。這種方法了,而只能逐個元素地賦值。2022-5-10北京郵電大學電信工程學院計算機技術中心-37-元素賦元素賦0 0 如果在數(shù)組定義時,只對其中部分元素賦了初如果在數(shù)組定義時,只對其中部分元素賦了初值,值,C+C+會自動將其余的元素賦會自動將其余的元素賦0 0。如果希望將一個大數(shù)組中的所有元素同時初始化如果希望將一個大數(shù)組中的所有元素同時初始化為為0 0,則可以在定義這個數(shù)組時,只將數(shù)組的第,則可以在定義這個數(shù)組時,只將數(shù)組的第一個元素賦初值一個元素賦初值0 0。這樣,系統(tǒng)會自動把其余的元素都賦為這樣,系統(tǒng)會自動把其余的元素都賦為0

30、0。例例: : int a100=0;int a100=0;2022-5-10北京郵電大學電信工程學院計算機技術中心-38-例例5.55.5假設你希望得到剛學完的六門課的平均分。假設你希望得到剛學完的六門課的平均分。下面的程序將存放校名的數(shù)組和存放六門下面的程序將存放校名的數(shù)組和存放六門課分數(shù)的數(shù)組在定義時初始化。程序中計課分數(shù)的數(shù)組在定義時初始化。程序中計算六門課的平均分。在計算平均值之前,算六門課的平均分。在計算平均值之前,先將六門課的分數(shù)打印出來。先將六門課的分數(shù)打印出來。 #include using namespace std;void PrintScores(float score

31、s6) coutHere are your scores:“endl; /顯示成績顯示成績 for (int i=0;i6;i+)coutscoresiendl;void main() char name= BUPT; float scores6= 88.7,99.4,76.0,97.0,100.0,86.7; float average= 0.0; PrintScores(scores);/調用函數(shù)來顯示成績調用函數(shù)來顯示成績 for (int i=0;i6;i+)/計算總成績計算總成績 average+=scoresi; average/=6; /計算平均成績計算平均成績 coutAt n

32、ame,your average score is averageendl;2022-5-10北京郵電大學電信工程學院計算機技術中心-41-例例循環(huán)從鍵盤讀入若干組選擇題答案,計算循環(huán)從鍵盤讀入若干組選擇題答案,計算并輸出每組答案的正確率,直到輸入并輸出每組答案的正確率,直到輸入ctrl+zctrl+z為止。為止。每組連續(xù)輸入每組連續(xù)輸入5 5個答案,每個答案可以是個答案,每個答案可以是 a.da.d。#include using namespace std;void main(void)char key = a,c,b,a,d;char c;int ques = 0, numques = 5

33、, numcorrect = 0;cout Enter the numques question tests: endl; while (cin.get(c) if(c != n) else ques+; if (c != n) if (c = keyques) numcorrect+; cout ; else cout *;else coutScorefloat(numcorrect)/numques*100 %; ques = 0; / reset variables numcorrect = 0; cout endl; continue; 2022-5-10北京郵電大學電信工程學院計算機

34、技術中心44 5.4 5.4 數(shù)組的大小和越界數(shù)組數(shù)組的大小和越界數(shù)組 2022-5-10北京郵電大學電信工程學院計算機技術中心-45-5.45.4數(shù)組的大小和數(shù)組越界數(shù)組的大小和數(shù)組越界定義數(shù)組時,編譯器必須知道數(shù)組的大小。定義數(shù)組時,編譯器必須知道數(shù)組的大小。如果數(shù)組定義時省略了大小,只是由初始化的值如果數(shù)組定義時省略了大小,只是由初始化的值來決定其大小。在程序中怎么知道數(shù)組的大小呢?來決定其大小。在程序中怎么知道數(shù)組的大小呢?sizeofsizeof操作解決了該問題。操作解決了該問題。2022-5-10北京郵電大學電信工程學院計算機技術中心-46-sizeofsizeofsizeof()

35、sizeof()能夠返回傳遞給它的數(shù)據(jù)類型所占用內存能夠返回傳遞給它的數(shù)據(jù)類型所占用內存的字節(jié)數(shù)。的字節(jié)數(shù)。如果將一個數(shù)組變量傳給如果將一個數(shù)組變量傳給sizeof()sizeof(),則它將返回系,則它將返回系統(tǒng)為此數(shù)組在內存中預留的字節(jié)數(shù)。統(tǒng)為此數(shù)組在內存中預留的字節(jié)數(shù)。因此,數(shù)組的大小可用用以下公式來計算:因此,數(shù)組的大小可用用以下公式來計算:數(shù)組大小數(shù)組大小 = sizeof(= sizeof(數(shù)組名數(shù)組名) / sizeof() / sizeof(數(shù)組類型數(shù)組類型) )2022-5-10北京郵電大學電信工程學院計算機技術中心-47-例例5.7 5.7 用用sizeofsizeof確定

36、數(shù)組的大小確定數(shù)組的大小#include using namespace std;void main() int a=1,2,4,8,16; int size= sizeof(a)/sizeof(int); for(int i=0; isize; i+) cout ai ; cout endl;運行結果為:運行結果為:1 2 4 8 162022-5-10北京郵電大學電信工程學院計算機技術中心-48-數(shù)組和字符串數(shù)組和字符串對于字符串的初始化,要注意數(shù)組實際對于字符串的初始化,要注意數(shù)組實際分配的空間大小是字符串中字符個數(shù)加分配的空間大小是字符串中字符個數(shù)加上末尾的上末尾的00結束符。結束符。

37、2022-5-10北京郵電大學電信工程學院計算機技術中心-49-數(shù)組和字符串數(shù)組和字符串例例5.8 5.8 比較字符串數(shù)組大小和字符串長度比較字符串數(shù)組大小和字符串長度的差別。的差別。解:用解:用sizeofsizeof計算數(shù)組大小,用計算數(shù)組大小,用strlenstrlen函函數(shù)計算字符串長度。數(shù)計算字符串長度。2022-5-10北京郵電大學電信工程學院計算機技術中心-50-#include using namespace std;void main() char ch=“how are you”; cout“數(shù)組大小是數(shù)組大小是:”sizeof(ch)endl; cout“字符串長度是字符

38、串長度是:”strlen(ch)endl; 結果結果:數(shù)組大小是數(shù)組大小是:12字符串長度是字符串長度是:112022-5-10北京郵電大學電信工程學院計算機技術中心51 5.5 5.5 字符數(shù)組字符數(shù)組 2022-5-10北京郵電大學電信工程學院計算機技術中心-52-5.55.5字符數(shù)組字符數(shù)組數(shù)組的類型為數(shù)組的類型為 char , char , 每個元素存放一個每個元素存放一個字符字符; ;字符串可以用字符型數(shù)組存放。字符串可以用字符型數(shù)組存放。字符串常量是用一對雙引號括起來的字符字符串常量是用一對雙引號括起來的字符序列,每個字符占一個字節(jié),并在末尾添序列,每個字符占一個字節(jié),并在末尾添加

39、加00作為結尾標記。作為結尾標記。2022-5-10北京郵電大學電信工程學院計算機技術中心-53-5.5.15.5.1字符數(shù)組定義字符數(shù)組定義例例: : char ch80;char ch80;C+C+的基本數(shù)據(jù)類型變量中,卻沒有字符串變的基本數(shù)據(jù)類型變量中,卻沒有字符串變量,而是使用字符型數(shù)組來存放字符串。量,而是使用字符型數(shù)組來存放字符串。如果我們對數(shù)組進行初始化賦值時,在末尾如果我們對數(shù)組進行初始化賦值時,在末尾放置一個放置一個00,便構成了,便構成了C+C+字符串。字符串。字符數(shù)組的聲明和引用方法與其他類型的數(shù)字符數(shù)組的聲明和引用方法與其他類型的數(shù)組相同。組相同。 2022-5-10北

40、京郵電大學電信工程學院計算機技術中心-54-例例5.9 5.9 字符數(shù)組的初始化和使用。字符數(shù)組的初始化和使用。#include #includevoid main() char str18=112,114,111,103,114,97,109,0 ; char str28=P,r,o,g,r,a,m,0 ; char str38=program; char str4=program; for (int i=0;i8;i+) coutstr1i; coutstrlen(str1)endl;/驗證驗證str1結尾的結尾的0是結束符空是結束符空 coutstr2endl; coutstr3endl

41、; coutstr4endl;結果結果:program 7Programprogramprogram2022-5-10北京郵電大學電信工程學院計算機技術中心-55-注意注意字符串整體輸入字符串整體輸入/ /輸出時,要注意:輸出時,要注意:n輸出字符不包括輸出字符不包括00。n輸出字符串時,輸出項是字符數(shù)組名,輸出字符串時,輸出項是字符數(shù)組名,輸出時遇到輸出時遇到00結束。結束。n輸入多個字符串時,以空格分隔;輸輸入多個字符串時,以空格分隔;輸入單個字符串時其中不能有空格。入單個字符串時其中不能有空格。2022-5-10北京郵電大學電信工程學院計算機技術中心-56-5.5.25.5.2初始化字符

42、數(shù)組初始化字符數(shù)組對字符數(shù)組進行初始化賦值時,初值的形式可對字符數(shù)組進行初始化賦值時,初值的形式可以是以逗號分隔的以是以逗號分隔的ASCIIASCII碼碼或或字符常量字符常量,也可,也可以是以是字符串常量(這時末尾的字符串常量(這時末尾的00是隱含是隱含的)的),初始化字符數(shù)組有兩種方法,初始化字符數(shù)組有兩種方法,一種是:一種是:nchar array10=“hello”char array10=“hello”;另一種是:另一種是:nchar char array10= h, e, l, array10= h, e, l, l, o, 0l, o, 0;2022-5-10北京郵電大學電信工程學

43、院計算機技術中心-57-比較比較第一種方法用途較廣,初始化時,系統(tǒng)自動在數(shù)第一種方法用途較廣,初始化時,系統(tǒng)自動在數(shù)組沒有填值的位置用組沒有填值的位置用00補上。另外,這種方補上。另外,這種方法中的花括號可以省略,即能表示成:法中的花括號可以省略,即能表示成:nchar array10=“hello”char array10=“hello”;第二種方法一次一個元素地初始化數(shù)組,如同初第二種方法一次一個元素地初始化數(shù)組,如同初始化整型數(shù)組。這種方法通常用于輸入不容易在始化整型數(shù)組。這種方法通常用于輸入不容易在鍵盤上生成的那些不可見字符。鍵盤上生成的那些不可見字符。例如,下面的代碼中初始化值為若干

44、制表符:例如,下面的代碼中初始化值為若干制表符:nchar array10= t, t, char array10= t, t, t, t, 0t, t, 0;2022-5-10北京郵電大學電信工程學院計算機技術中心-58-注意注意這里不要忘記為最后的這里不要忘記為最后的00分配空間。如果要分配空間。如果要初始化一個字符串初始化一個字符串“hello”hello”,那為它定義的數(shù),那為它定義的數(shù)組至少有組至少有6 6個數(shù)組元素。個數(shù)組元素。例如,下面的代碼給數(shù)組初始化,但會引起不可例如,下面的代碼給數(shù)組初始化,但會引起不可預料的錯誤:預料的錯誤:nchar array5=“hello”char

45、 array5=“hello”;該代碼不會引起編譯錯誤,但由于改寫了數(shù)組空該代碼不會引起編譯錯誤,但由于改寫了數(shù)組空間以外的內存單元,所以是危險的。間以外的內存單元,所以是危險的。2022-5-10北京郵電大學電信工程學院計算機技術中心-59-5.5.3 for5.5.3 for循環(huán)用于字符數(shù)組循環(huán)用于字符數(shù)組字符數(shù)組,也稱為字符串,實際上是字符數(shù)組,也稱為字符串,實際上是1 1字字節(jié)的整數(shù)數(shù)組。節(jié)的整數(shù)數(shù)組。處理字符數(shù)組的方法與處理其他數(shù)組相處理字符數(shù)組的方法與處理其他數(shù)組相同,但若考慮到了字符串末尾的同,但若考慮到了字符串末尾的00結束符,是很有益的。結束符,是很有益的。2022-5-10

46、北京郵電大學電信工程學院計算機技術中心-60-例例5.105.10字符串的輸入和輸出字符串的輸入和輸出輸入一個字符串,輸出這個字符串及字符數(shù)輸入一個字符串,輸出這個字符串及字符數(shù)目。目。2022-5-10北京郵電大學電信工程學院計算機技術中心-61-#include #include using namespace std;using namespace std;void main()void main() int a=0; int a=0; char ch30; char ch30; cinch; cinch; for(int i=0; for(int i=0; chi!=0;chi!=0;

47、 i+) i+) cout chi; cout chi; a+; a+; cout endl; cout endl; cout cout輸入的字符數(shù)是:輸入的字符數(shù)是:aendl;aendl; 結果結果:asddfsasadfasddfsasadf輸入的字符數(shù)是:輸入的字符數(shù)是:112022-5-10北京郵電大學電信工程學院計算機技術中心62 5.6 5.6 向函數(shù)傳遞數(shù)組向函數(shù)傳遞數(shù)組 2022-5-10北京郵電大學電信工程學院計算機技術中心-63-5.6 5.6 向函數(shù)傳遞數(shù)組向函數(shù)傳遞數(shù)組可以用數(shù)組名做函數(shù)的參數(shù),將實際參數(shù)可以用數(shù)組名做函數(shù)的參數(shù),將實際參數(shù)( (數(shù)組名數(shù)組名) )的地

48、址傳給相應的形式參數(shù)的地址傳給相應的形式參數(shù)( (數(shù)組形式數(shù)組形式)-)-地址傳地址傳遞遞。一般用數(shù)組名做參數(shù)時,只傳遞了數(shù)組的起始地址,一般用數(shù)組名做參數(shù)時,只傳遞了數(shù)組的起始地址,還需要向被調函數(shù)傳遞數(shù)組的大小,才便于處理數(shù)還需要向被調函數(shù)傳遞數(shù)組的大小,才便于處理數(shù)組。組。數(shù)組元素也可以做函數(shù)參數(shù)的實際參數(shù),與變量作數(shù)組元素也可以做函數(shù)參數(shù)的實際參數(shù),與變量作用相同。用相同。2022-5-10北京郵電大學電信工程學院計算機技術中心-64-例例:測得銅導線在溫度測得銅導線在溫度Ti時的電阻時的電阻Ri如下如下,求電阻求電阻R和和溫度溫度T的關系。的關系。i i1 12 23 34 45 5

49、6 67 7Ti(Ti(o oC)C) 19.119.125.025.030.130.136.036.040.040.045.145.150.050.0Ri(Ri( ) ) 76.376.30 077.877.80 079.279.25 580.880.80 082.382.35 583.983.90 085.185.10 00RTR=k*T+b改寫成調用數(shù)組名為參數(shù)的改寫成調用數(shù)組名為參數(shù)的函數(shù)形式。函數(shù)形式。2022-5-10北京郵電大學電信工程學院計算機技術中心-65-分析分析: : 采樣最小二乘法擬合多項式采樣最小二乘法擬合多項式R R= =k k* *T+bT+b 求使求使 最小的最

50、小的k k、b b。 令令712|71SiiiRbkT0kS0bS712712717171)(77kiiiiiiiiiiiTTRTRT7b7171iiiiTkR2022-5-10北京郵電大學電信工程學院計算機技術中心-66-#includeusing namespace std;void LeastSqMethod(float Ti,float R,int n);void main() int i,n(7);float Ti7,Ri7;float k,b;coutinput Tii Ri:endl; for(i=0;iTiiRii; LeastSqMethod(Ti,Ri,n); 改寫成調用數(shù)

51、組名為參數(shù)的改寫成調用數(shù)組名為參數(shù)的函數(shù)形式。函數(shù)形式。數(shù)組名和數(shù)組大小數(shù)組名和數(shù)組大小-實際參數(shù)實際參數(shù)2022-5-10北京郵電大學電信工程學院計算機技術中心-67-void LeastSqMethod(float Ti,float Ri,int n) int i;float k,b; float sumT(0),sumR(0),sumTR(0),sumT2(0); for(i=0;in;i+) sumT+=Tii;sumR+=Rii;sumTR+=Tii*Rii;sumT2+=Tii*Tii; k=(n*sumTR-sumT*sumR)/(n*sumT2-sumT*sumT);b=(su

52、mR-k*sumT)/n; coutk=k,b=bendl;數(shù)組名和數(shù)組大小數(shù)組名和數(shù)組大小-形式參數(shù)形式參數(shù)2022-5-10北京郵電大學電信工程學院計算機技術中心-68-5.6.15.6.1傳遞給標準庫函數(shù)傳遞給標準庫函數(shù)C+C+中中memset()memset()的函數(shù),可以一字節(jié)一字節(jié)地的函數(shù),可以一字節(jié)一字節(jié)地把整個數(shù)組設置為一個指定的值。把整個數(shù)組設置為一個指定的值。memset()memset()函數(shù)在函數(shù)在 memory.hmemory.h頭文件中聲明。頭文件中聲明。其函數(shù)原型為:其函數(shù)原型為:void void * * memset(void memset(void * *,

53、int ,unsigned int);,int ,unsigned int);數(shù)組的起始地數(shù)組的起始地址址- -數(shù)組名數(shù)組名設置數(shù)組每設置數(shù)組每個字節(jié)的值個字節(jié)的值數(shù)組的長度數(shù)組的長度( (字節(jié)數(shù),字節(jié)數(shù),不是元素個數(shù)不是元素個數(shù)) )2022-5-10北京郵電大學電信工程學院計算機技術中心-69-例例5.11 5.11 傳遞數(shù)組名給傳遞數(shù)組名給memsetmemset函數(shù)函數(shù)下面的代碼用數(shù)組做參數(shù)傳遞給標準函數(shù)下面的代碼用數(shù)組做參數(shù)傳遞給標準函數(shù)memset()memset(),以讓其將數(shù)組設置成全,以讓其將數(shù)組設置成全0 0。2022-5-10北京郵電大學電信工程學院計算機技術中心-70-

54、#include void main() int array15;int array250;memset(array1,0 ,5*sizeof(int);memset(array2,0 ,50*sizeof(int); char buffer80;memset(buffer,0,80*sizeof(char);char test20;memset(test,B,20*sizeof(char);char ch20;memset(ch,97,20*sizeof(char); 實際驗證實際驗證:wmemset()用于用于char型數(shù)組,可將數(shù)組型數(shù)組,可將數(shù)組中的元素置成合理中的元素置成合理的的ch

55、ar型值型值;w但用于但用于int等數(shù)值型等數(shù)值型數(shù)組只能置成數(shù)組只能置成0.2022-5-10北京郵電大學電信工程學院計算機技術中心-71-例例5.12 5.12 數(shù)組名作為函數(shù)的形參數(shù)組名作為函數(shù)的形參下面的程序調用一個函數(shù)求數(shù)組元素之下面的程序調用一個函數(shù)求數(shù)組元素之和。和。 5.6.25.6.2傳遞給自定義函數(shù)傳遞給自定義函數(shù)2022-5-10北京郵電大學電信工程學院計算機技術中心-72-#include using namespace std;int sum(int array, int len);void main() static int ia5=2,3,6,8,10;int s

56、;s=sum(ia, 5);cout “數(shù)組元素的和等于數(shù)組元素的和等于: ” s endl;運行結果為;運行結果為;數(shù)組元素的和等于數(shù)組元素的和等于: 29int sum(int array, int len) int iSum=0;for(int i=0; ilen; i+)iSum+=arrayi;return iSum;sum()sum()函數(shù)以整數(shù)數(shù)函數(shù)以整數(shù)數(shù)組作為第一個參數(shù),組作為第一個參數(shù),以整數(shù)作為第二個以整數(shù)作為第二個參數(shù)。參數(shù)。2022-5-10北京郵電大學電信工程學院計算機技術中心-73-注意注意由于傳遞數(shù)組名實際上傳遞的是地址,所以函數(shù)原由于傳遞數(shù)組名實際上傳遞的是地

57、址,所以函數(shù)原型中,數(shù)組參數(shù)的書寫形式無須在方括號中寫明數(shù)型中,數(shù)組參數(shù)的書寫形式無須在方括號中寫明數(shù)組大小。組大小。如果寫明了數(shù)組大小,編譯器將忽略之。數(shù)組形參如果寫明了數(shù)組大小,編譯器將忽略之。數(shù)組形參的全方括號只是告訴函數(shù),該參數(shù)是個數(shù)組的起始的全方括號只是告訴函數(shù),該參數(shù)是個數(shù)組的起始地址。地址。int sum(int array, int len) int iSum=0;for(int i=0; ilen; i+)iSum+=arrayi;return iSum;int sum(int array5,int len) int iSum=0;for(int i=0; ilen; i+)

58、iSum+=arrayi;return iSum;LenLen要有要有2022-5-10北京郵電大學電信工程學院計算機技術中心74 5.7 5.7 多維數(shù)組多維數(shù)組 2022-5-10北京郵電大學電信工程學院計算機技術中心-75-5.7.15.7.1理解多維數(shù)組理解多維數(shù)組一維數(shù)組多用來表示線性元素的集合。一維數(shù)組多用來表示線性元素的集合。二維數(shù)組可用于表示具有二維相鄰關系二維數(shù)組可用于表示具有二維相鄰關系的集合。的集合。例如例如: :矩陣、平面圖形、平面圖像矩陣、平面圖形、平面圖像三維數(shù)組可用以表示元素間具有三維關三維數(shù)組可用以表示元素間具有三維關系的集合系的集合例如例如: :圖書、三維圖像

59、、三維圖形圖書、三維圖像、三維圖形2022-5-10北京郵電大學電信工程學院計算機技術中心-76-例子例子假定要記錄一個壘球隊中每個隊員的擊球數(shù)。隊中有假定要記錄一個壘球隊中每個隊員的擊球數(shù)。隊中有6 6個隊員,進行了個隊員,進行了3 3場比賽。表中所示為擊球記錄。場比賽。表中所示為擊球記錄。隊員姓名隊員姓名1 12 23 3張大明張大明2 22 22 2李方春李方春3 33 33 3林志松林志松2 22 22 2崔明東崔明東1 11 11 1劉屈武劉屈武0 00 00 0安度璧安度璧1 11 11 12022-5-10北京郵電大學電信工程學院計算機技術中心-77- 二維數(shù)組常用于表示二維數(shù)組

60、常用于表示: 矩陣矩陣 平面圖形、圖像平面圖形、圖像例例:int matrix34=2,4,4,5, 4,5,6,7, 3,6,7,8 ;2022-5-10北京郵電大學電信工程學院計算機技術中心-78-#includeusing namespace std;void main()int row,col;char figure9= , , , , *, , , , , , , , *, *, *, , , , , , *, *, *, *, *, , , , *, *, *, *, *, *, *, , *, *, *, *, *, *, *, *, *, , *, *, *, *, *, *,

溫馨提示

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

評論

0/150

提交評論