《C#面向?qū)ο蟪绦蛟O計》第4章:數(shù)組與方法.ppt

上傳人:sh****n 文檔編號:13561487 上傳時間:2020-06-22 格式:PPT 頁數(shù):31 大?。?92.86KB
收藏 版權申訴 舉報 下載
《C#面向?qū)ο蟪绦蛟O計》第4章:數(shù)組與方法.ppt_第1頁
第1頁 / 共31頁
《C#面向?qū)ο蟪绦蛟O計》第4章:數(shù)組與方法.ppt_第2頁
第2頁 / 共31頁
《C#面向?qū)ο蟪绦蛟O計》第4章:數(shù)組與方法.ppt_第3頁
第3頁 / 共31頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《C#面向?qū)ο蟪绦蛟O計》第4章:數(shù)組與方法.ppt》由會員分享,可在線閱讀,更多相關《《C#面向?qū)ο蟪绦蛟O計》第4章:數(shù)組與方法.ppt(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第4章 數(shù)組與方法,主要內(nèi)容與學習目標 4.1 數(shù)組 4.2 多維數(shù)組 4.3 值類型與引用類型 4.4 方法,主要內(nèi)容與學習目標,主要內(nèi)容: (1)聲明數(shù)組、創(chuàng)建對象數(shù)組、數(shù)組元素的引用。 (2)數(shù)組的Length屬性。 (3)數(shù)組初始化。 (4)可變長度的數(shù)組的聲明。 (5)foreach語句。 (6)數(shù)組對象的賦值運算。 (7)多維數(shù)組的聲明和創(chuàng)建、多維數(shù)組初始化。 (8)二維數(shù)組應用舉例。 (9)值類型與引用類型。 (10)方法。 (11)傳值方式、以傳值方式傳遞值類型參數(shù)、以傳值方式傳遞引用類型參數(shù)。 (12)傳引用方式、以傳引用方式傳遞值類型參數(shù)、以傳引用方式傳遞引用類型參數(shù)。 (

2、13)值傳遞方式與引用傳遞方式比較。 學習目標: (1)使用方法,以模塊方式構造程序。 (2)理解在方法之間傳遞信息的機制。 (3)理解如何聲明數(shù)組、初始化數(shù)組,以及引用數(shù)組的單獨元素。 (4)聲明和操縱多下標數(shù)組。,4.1 數(shù)組,數(shù)組是同一類型的一組變量,數(shù)組允許你通過同一名稱引用這一系列的變量,并使用一個稱為“索引”或“下標”的數(shù)字來進行區(qū)分。數(shù)組中包含的變量(又稱數(shù)組的元素)具有相同的類型,該類型稱為數(shù)組的元素類型。 如果程序中要存儲一個月中每一天的日常開銷,可以創(chuàng)建一個含有 30 個元素的數(shù)組,而不必聲明30個變量。數(shù)組中的每個元素都存有一個值,可通過指定元素的索引進行訪問。 例如,如

3、果要用數(shù)組number表示5個整數(shù)的集合(26, 86, 98, 12, 68),可以這樣創(chuàng)建數(shù)組number: int[] number = new int[5]; 任務4.1:計算月平均降雨量 問題描述:編寫程序,從輸入對話框中輸入12個月中每個月的實際降雨量,計算月平均降雨量及月實際降雨量與月平均降雨量的偏差。并將結果輸出。 4.1.1 數(shù)組初始化 4.1.2 可變長度的數(shù)組的聲明,4.1.1 數(shù)組初始化,C#通過將初始值括在大括號({})內(nèi),為在聲明時初始化數(shù)組提供了簡單而直接了當?shù)姆椒?。特別要注意的是,如果聲明時未初始化數(shù)組,則數(shù)組成員自動初始化為該數(shù)組類型的默認初始值。 任務4.2

4、:顯示月名稱 問題描述:修改計算月平均降雨量的程序,使命令窗口中的輸入提示是“一月”而不是“1月”,如圖4.3所示。,圖4.3 從命令窗口中輸入值,4.1.2 可變長度的數(shù)組的聲明,在前面的例子中,我們利用常數(shù)指定數(shù)組的大小,例如下面的語句中的常數(shù)12: double[] difference = new double[12]; 利用常數(shù)聲明數(shù)組大小不總占用有效的存儲空間。例如,假設我們聲明大小為100的整數(shù)數(shù)組: int[] numbers = new int[100]; 我們把利用常數(shù)聲明數(shù)組稱為“定長數(shù)組聲明”。利用定長數(shù)組聲明可能產(chǎn)生兩個問題:第1個問題是程序最多處理100個數(shù),如果我

5、們需要處理的數(shù)多于100(例如,需要處理101個數(shù)),則必須修改程序后重新編譯,第2個問題是可能產(chǎn)生未充分利用空間的問題,上面的聲明語句分配100個空間而忽略這些空間是否被使用。假設程序平均處理20個數(shù),那么該程序的平均空間利用率只有20%。C#并不限于定長數(shù)組聲明,還可以在每次運行程序時聲明不同長度的數(shù)組。下面的代碼提示用戶輸入數(shù)組的長度,然后創(chuàng)建指定長度的數(shù)組: int size; Console.WriteLine("請輸入要創(chuàng)建的數(shù)組的元素的個數(shù):"); size = Int32.Parse(Console.ReadLine()); numbers = new int[size]; 任

6、務4.3:創(chuàng)建數(shù)組 問題描述:①在創(chuàng)建數(shù)組時,元素個數(shù)是否能為變量。②數(shù)組的Length屬性。 編寫一控制臺應用程序,先輸入要創(chuàng)建的數(shù)組的元素的個數(shù),然后輸入每個元素的值,最后將數(shù)組輸出(如圖4.4所示)。,圖4.4 創(chuàng)建數(shù)組,4.2 多維數(shù)組,4.2.1 多維數(shù)組的聲明和創(chuàng)建 4.2.2 多維數(shù)組初始化 4.2.3 二維數(shù)組應用舉例,4.2.1 多維數(shù)組的聲明和創(chuàng)建,除一維數(shù)組之外,C#還支持多維數(shù)組。一維數(shù)組由排列在一行中的所有元素組成,它只有一個索引。從概念上講,二維數(shù)組就像一個具有行和列的表格一樣。考慮以下考試成績的表格(表4.1),它有5行2列,5行代表5個學生,2列代表2次考試,第

7、1列代表第1次考試的成績,第2列代表第2次考試的成績。 我們可以用一個二維數(shù)組表示這個表。先聲明并創(chuàng)建一個二維數(shù)組Score: int[,] Score = new int[5, 2]; 其中5表示行數(shù),2表示列數(shù)。二維數(shù)組有兩個索引(索引號從0開始),其中一個表示行,一個表示列,如我們要將第1行第2列的元素賦值為88,表示為: Score[0, 1] = 88; Score [0, 1]表示學生1的考試2成績,Score[0, 0]表示學生1的考試1成績。,表4.1 學生考試成績表,4.2.2 多維數(shù)組初始化,可以在聲明數(shù)組時將其初始化,如下所示: int[,] myArray = new

8、int[,] {{1,2}, {3,4}, {5,6}, {7,8}}; 如果在聲明數(shù)組時提供了初始值設定項,可省略 new 語句: int[,] myArray = {{1,2}, {3,4}, {5,6}, {7,8}}; 如果要聲明一個數(shù)組變量但不將其初始化,必須使用 new 運算符將數(shù)組分配給此變量,例如: int[,] myArray; myArray = new int[,] {{1,2}, {3,4}, {5,6}, {7,8}}; // 正確 myArray = {{1,2}, {3,4}, {5,6}, {7,8}}; // 錯誤 可以給數(shù)組元素賦值,例如: myArray[

9、2, 1] = 25; 也可以讀取數(shù)組元素的值,例如: int aNumber = myArray1[0, 1];,4.2.3 二維數(shù)組應用舉例,任務4.4:二維數(shù)組 主要知識點:①二維數(shù)組的聲明、創(chuàng)建、初始化。②輸出二維數(shù)組每個元素的值。③將初始化的數(shù)組作為參數(shù)傳遞給方法。④獲得數(shù)組每維的長度。 問題描述:創(chuàng)建一簡單程序,演示二維數(shù)組的聲明、創(chuàng)建、初始化,并將創(chuàng)建的數(shù)組對象以調(diào)用輸出數(shù)組的方法輸出。 任務4.5:學生考試成績統(tǒng)計 主要知識點: 二維數(shù)組的應用。 問題描述:假定5個學生參加了兩門課的考試,試統(tǒng)計出全部學生的最高分和全部學生的最低分及每個學生的平均成績,并輸出(如圖4.6所示)。

10、,圖4.6 成績統(tǒng)計,4.3 值類型與引用類型,前面講的基本數(shù)據(jù)類型都是值類型,到目前為止學過的數(shù)組、String、類是引用類型。如果某個數(shù)據(jù)類型在自己的內(nèi)存分配中包含數(shù)據(jù),則該數(shù)據(jù)類型是“值類型”?!耙妙愋汀焙兄赶虬瑪?shù)據(jù)的其他內(nèi)存位置的地址。也就是說,值類型變量的值是該變量包含的實際數(shù)據(jù),該實際數(shù)據(jù)存儲在值類型變量的存儲位置中。引用類型變量的值為一地址,該變量包含的數(shù)據(jù)存儲在該地址指向的內(nèi)存位置中。 下面我們介紹把一個變量的值賦給另外一個變量時發(fā)生的情況,考慮下列使用整數(shù)的賦值語句: int num1, num2; num1 = 14; num2 = num1; num1 += 5;

11、其中,變量聲明語句int num1, num2;分配了存儲了一個類型為int的值的存儲位置,同時命名這個位置為num1;分配了存儲了一個類型為int的值的另一個存儲位置,同時命名這個位置為num2(如圖4.7所示)。 為了在存儲位置為num1的存儲位置存儲一個整數(shù)值,即把一個整數(shù)值賦給變量num1,我們寫出的語句為: num1 = 14; 圖4.8說明了此賦值語句執(zhí)行之后內(nèi)存的狀態(tài)。 為了在存儲位置為num2的地方存儲一個與存儲位置為num1的地方所存儲的值同樣的整數(shù)值,即把num1變量的值賦給變量num2,我們寫出的語句為: num2 = num1; 圖4.9說明此賦值語句執(zhí)行之后內(nèi)存的狀態(tài)

12、。 執(zhí)行語句“num1+=5;”后內(nèi)存的狀態(tài)如圖4.10所示。,圖4.7 聲明整型變量的結果,圖4.8 整型變量賦值的結果一,圖4.9 整型變量賦值的結果二,圖4.10 整型變量賦值的結果三,4.4 方法,方法是用來實現(xiàn)可以由對象或類執(zhí)行的計算或操作。 在前面幾章中,我們已經(jīng)嘗試過如何在自己定義的類中定義自己的Main方法,也定義過事件處理方法,用它們指定我們在程序中發(fā)生的操作,在我們的方法中調(diào)用.NET框架類庫(FCL)中的一些類的方法以執(zhí)行特定的任務,如MessageBox類的Show方法、Int32類的Parse方法、Math類的Pow方法等。 應用程序中的每行代碼都必須在某個方法的內(nèi)部

13、,如Main、Calculate或button1_Click。 可以把在一個程序中多次用到的某個任務定義為方法,如常用的計算、文本和控件的操作。方法對執(zhí)行重復或共享的任務很有用,可以在代碼中的許多不同位置調(diào)用方法,因此可以將方法作為應用程序的生成塊。 用方法構造代碼有以下優(yōu)點: 方法允許將程序分為不連續(xù)的邏輯單元。調(diào)試單獨的單元與調(diào)試不包含方法的整個程序相比要容易得多。 可以在其他程序中使用為某個程序開發(fā)的方法,而通常只需進行少量修改,甚至不需要修改。 4.4.1 傳值方式 4.4.2 以傳值方式傳遞值類型參數(shù) 4.4.3 以傳值方式傳遞引用類型參數(shù) 4.4.4 傳引用方式 4.4.5 以傳引

14、用方式傳遞值類型參數(shù) 4.4.6 以傳引用方式傳遞引用類型參數(shù),4.4.1 傳值方式,如果聲明方法的參數(shù)時,參數(shù)前沒有ref或out修飾符,則調(diào)用方法時,以傳值方式向方法傳遞參數(shù)。在C#中默認為通過值傳遞參數(shù)。 所謂“傳值”,就是在方法調(diào)用時,將實參的值傳遞給形參。如果實參的類型為值類型,則實參的值為該參數(shù)包含的數(shù)據(jù)。如果實參的類型為引用類型,則實參的值為地址。 如參數(shù)是以傳值方式傳遞,形參將創(chuàng)建新的存儲位置,在該存儲位置存儲形參接收的值。也就是說,被調(diào)用的方法將接收實參的一個副本。傳值時,如果對被調(diào)用的方法的值的副本進行修改(也就是形參的值進行修改),不會影響實參變量的值。也就是說,傳值時,

15、允許在方法體內(nèi)將新值賦給形參。這樣的賦值只影響由形參表示的局部存儲位置的值——它們不影響在方法調(diào)用中給出的實參的值,這是因為參數(shù)以傳值方式傳遞時,形參和實參的存儲位置不同。以傳值方式時,形參的初始化是通過復制對應實參的值來完成的。 在這里我們再給出一個概念:值參數(shù)。值參數(shù)以傳值方式進行傳遞。注意,不要將值參數(shù)和值類型參數(shù)弄混淆。值參數(shù)既可是值類型參數(shù)也可以是引用類型參數(shù)。 值參數(shù)在調(diào)用方法時出現(xiàn),并由調(diào)用中給定的參數(shù)值初始化。值參數(shù)也是局部變量,它和局部變量一樣,當所在方法返回時消失。,4.4.2 以傳值方式傳遞值類型參數(shù),值類型參數(shù)的值為該參數(shù)包含的實際數(shù)據(jù),以傳值方式傳遞值類型參數(shù)時,當形

16、參接收到實參的值后,形參變量和實參變量就不再有任何關系。 任務4.6:移動矩形 問題描述:創(chuàng)建一個Rectangle類來描述矩形,矩形有兩個基本屬性即位置和大小。并定義一個方法,將矩形的位置調(diào)整指定的量。,4.4.3 以傳值方式傳遞引用類型參數(shù),引用類型參數(shù)的值是地址,該地址表示的存儲位置存儲的是該引用類型變量引用的對象。以傳值方式傳遞引用類型參數(shù)時,形參分配獨立的存儲位置,該存儲位置與實參的存儲位置不同。形參接收到的值為一地址并將其存儲在形參表示的存儲位置中,形參所引用的對象存儲在形參的值表示的存儲位置中。 因此,以傳值方式傳遞引用類型參數(shù)時,將創(chuàng)建實參值(地址)的副本,而不是實參引用對象的

17、副本。 數(shù)組是引用類型,數(shù)組變量的值是一地址,該地址表示的存儲位置存儲的是該數(shù)組變量所引用的數(shù)組對象。 要向方法傳遞一個數(shù)組參數(shù),需要在省略括號的前提下指定數(shù)組名。如任務4.1中調(diào)用printArray方法采用如下方式: printArray(app.rainfall); 任務4.7:以傳值方式傳遞數(shù)組 主要知識點: 通過傳值方式傳遞引用類型變量。 下面的例子使用任務4.1中的代碼,修改printArray方法。該例子演示:向printArray方法傳遞引用類型的參數(shù)app.rainfall。由于該參數(shù)是對app.rainfall數(shù)組對象的引用,所以printArray方法有可能更改數(shù)組元素的

18、值。但是,將形式參數(shù)aArray重新分配到不同的內(nèi)存位置時,該操作僅在方法內(nèi)有效,并不影響原始變量app.rainfall。 解決方案: (1)打開任務4.1的項目,然后打開其代碼文件。將MonthActualApp類的printArray方法修改如下(修改處見帶底紋部分): (2)按Ctrl+F5鍵運行該應用程序,仍然按圖4.1所示輸入數(shù)據(jù),可得到如圖4.19所示的輸出。 (3)再次將printArray方法修改如下(修改處見帶底紋部分): (4)按Ctrl+F5鍵運行該應用程序,仍然按圖4.1所示輸入數(shù)據(jù),可得到如圖4.20所示的輸出。,圖4.19 程序運行結果,圖4.20 程序運行結果,

19、4.4.4 傳引用方式,以傳值方式傳遞引用類型的參數(shù)時,有可能更改引用所指向的數(shù)據(jù),如數(shù)組元素的值。但是無法更改引用本身的值;也就是說,在方法內(nèi)不能使用new運算符對原始數(shù)組進行重新分配內(nèi)存。若要這樣做,那該怎么辦呢?如果希望通過傳遞一個值類型參數(shù),在方法內(nèi)對該參數(shù)的修改能夠返回給原始參數(shù),那又該怎么辦呢?為實現(xiàn)這樣的編程,C#提供了關鍵字ref和out。 ref和out關鍵字指出一個值類型變量或引用類型變量應該以傳引用方式傳遞。如果使用關鍵字ref和out通過引用傳遞變量,則方法能夠修改變量本身。具體說來,如果參數(shù)為對象變量,則在方法內(nèi)可以給它分配新的對象。這種重新分配也會影響到調(diào)用程序中的

20、對象變量。如果參數(shù)為值類型變量,在方法中對參數(shù)所做的任何更改都將反映在該變量中,因此參數(shù)使用ref和out關鍵字后被調(diào)用的方法能夠修改原始變量。 若要使用 ref 參數(shù),必須將參數(shù)作為 ref 參數(shù)顯式地傳遞到方法。ref 參數(shù)的值被傳遞到 ref 參數(shù)。傳遞到 ref 參數(shù)的參數(shù)必須最先初始化。 out指定一個輸出參數(shù),被調(diào)用的方法會向其賦值。通常,當方法收到一個未初始化的值時,會發(fā)生編譯錯誤,如在參數(shù)前添out關鍵字,可要求被調(diào)用的方法對其進行初始化,并防止發(fā)生未初始化變量的錯誤。若要使用out參數(shù),必須將參數(shù)作為out參數(shù)顯式傳遞到方法。out參數(shù)的值不會傳遞到out參數(shù)。不必初始化作為

21、out參數(shù)傳遞的變量。然而,必須在方法返回之前為out參數(shù)賦值。out參數(shù)通常用于產(chǎn)生多個返回值的方法中。,4.4.5 以傳引用方式傳遞值類型參數(shù),1. ref參數(shù) 任務4.8:調(diào)用方法獲得多個值(使用ref參數(shù)) 主要知識點:通過傳引用方式傳遞值類型變量。 問題描述:在矩形Rectangle類中,聲明方法getXYWH,用戶調(diào)用該方法時,可一次獲得表示矩形位置的x、y坐標和矩形的寬度(Width)、高度(Height)。 解決方案: (1) 創(chuàng)建一個空項目Testref,向該項目添加如下代碼文件 (2) 添加System.Windows.Forms.dll引用后。按Ctrl+F5鍵執(zhí)行該應用

22、程序,可得到如圖4.24所示的輸出。 2. out參數(shù) 任務4.9:調(diào)用方法獲得多個值(使用out參數(shù)) 主要知識點:使用out參數(shù)。 問題描述:使用out參數(shù)修改上一個示例,使其完成同樣的任務。 解決方案: 使用out參數(shù)調(diào)用方法時,不必對out參數(shù)初始化,由被調(diào)用的方法為其賦值。 編譯并運行程序,可得到如圖4.25所示的輸出。 3. ref參數(shù)與out參數(shù)的比較 任務4.10:改變矩形位置 主要知識點: ref參數(shù)與out參數(shù)的區(qū)別。 問題描述:聲明一矩形類,在矩形類中聲明一方法ChangePos,該方法將矩形的位置坐標x、y改變?yōu)閰?shù)指定的量,并將修改后的矩形的位置坐標x、y返回。 解決

23、方案:由于要求方法返回兩個值,因此必須使用傳引用方式傳遞參數(shù),因為方法要使用傳遞參數(shù)的值,所以必須采用ref參數(shù)。 (1)創(chuàng)建一個空項目Testref1,在該項目中添加如下類: (2)編譯并運行程序,可得到如圖4.26所示的輸出。,圖4.24 程序運行結果,圖4.25 程序運行結果,圖4.26 程序運行結果,4.4.6 以傳引用方式傳遞引用類型參數(shù),以傳值方式傳遞引用類型的參數(shù)時,有可能更改引用所指向的數(shù)據(jù),如數(shù)組元素的值。但是無法更改引用本身的值;也就是說,在方法內(nèi)不能使用new運算符對原始數(shù)組進行重新分配內(nèi)存。可使用C#提供的ref或out關鍵字解決這一問題。我們再次強調(diào),ref或out關

24、鍵字告訴編譯器,形參將不創(chuàng)建新的存儲位置,形參指向與正被傳遞的參數(shù)(實參)相同的存儲位置。這樣如果被調(diào)用方法修改了形參的值并且返回,調(diào)用代碼的變量(實參)的值就被修改了。 注意:修改了引用類型變量的值,該變量就引用一個新的對象,也就是給該變量創(chuàng)建了一個新的對象。 下面的示例演示了采用傳引用方式傳遞引用類型參數(shù)的使用。 任務4.11:調(diào)用方法為實參創(chuàng)建新的對象 主要知識點:通過傳引用方式傳遞引用類型變量。 問題描述:修改任務4.1中的代碼和printArray方法,演示通過引用傳遞方式向printArray方法傳遞引用類型的參數(shù)app.rainfall。由于采用引用傳遞方式傳遞參數(shù),實參和形參存儲位置相同,因此在方法中對形參重新創(chuàng)建對象(形參的值被修改)后,實參也被重新分配對象,也就是在被調(diào)用方法中為實參創(chuàng)建了一個新對象。 解決方案: (1) 打開任務4.1的項目及其代碼文件。將MonthActualApp類的printArray方法修改 (2) 修改Main方法中調(diào)用printArray方法的參數(shù)類型 (3) 按Ctrl+F5鍵來運行程序,還是按圖4.1所示輸入數(shù)據(jù),可得到如圖4.27所示的輸出。,圖4.27 以傳引用方式傳遞引用類型參數(shù),

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!