《教學(xué)研究第5章數(shù)組和指針1》由會員分享,可在線閱讀,更多相關(guān)《教學(xué)研究第5章數(shù)組和指針1(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,第,5,章 數(shù)組和指針,一維數(shù)組的聲明、實例化、初始化和訪問,多維數(shù)組的聲明、實例化、初始化和訪問,數(shù)組的根本操作和排序,System.Array類的使用,C#語言中不平安代碼的根本概念,C#語言中指針的使用,1956,1960,1978,1982,1990,1998,a0,a1,a2,a3,a4,a5,數(shù)組是一些具有,相同類型,的數(shù)據(jù)按一定順序組成的序列,初步
2、認(rèn)識數(shù)組,問題:,輸入,100,個學(xué)生的成績,,計算,100,個學(xué)生的平均分,以及,統(tǒng)計,超過平均分的人數(shù)。,分析:,1,循環(huán),,求出平均分,2,循環(huán),,求出超過平均分的人數(shù),一種算法,sum=0.0;int count2=0;,for(i=1;i=100;i+),輸入,x;,sum=sum+x;,avg=sum/N;,for(i=1;i avg)count2+;,輸出,avg,count2;,第一次循環(huán)計算平均值,第二次循環(huán)計算超出平均分人數(shù),你讓我輸入兩次成績?,更好的解決方法:先把所有數(shù)據(jù)暫存起來,定義,100,個變量?,定義變量,x1,x2,x100;,輸入,x1,x2,x100,su
3、m=sum+x1;,sum=sum+x2;,sum=sum+x100;,avg=sum/100;,count2=0;,if(x1avg)count2+;,if(x2avg)count2+;,.,if(x100avg)count2+;,輸出,count2,變量名看起來很有規(guī)律,,卻無法利用循環(huán)的好處,for(i=1;i=100;i+),sum=sum+xi;,X,需要使用“數(shù)組,5.1,數(shù)組,具有,相同類型,的數(shù)據(jù)按,一定順序,組成的序列,數(shù)組中的每一個數(shù)據(jù)都可以,通過數(shù)組名及下標(biāo)來存取,a0,a1,a2,a3,a4,a5,a6,a7,數(shù)組的所有元素按順序分配在連續(xù)的空間,注意,:,可用下標(biāo)范圍
4、,:,0,數(shù)組長度,-1,int a=new int8;,每一個數(shù)組元素可以當(dāng)作獨立的變量使用,數(shù)組用于存儲和表示既與取值有關(guān),,又與位置順序有關(guān)的數(shù)據(jù)。,數(shù)組的類型,在C#中,數(shù)組屬于引用類型。,1 數(shù)組元素在內(nèi)存中是連續(xù)存放的,這是數(shù)組元素用下標(biāo)表示其在數(shù)組中位置的根據(jù)。,2 C#中的數(shù)組類型可以對應(yīng)任何數(shù)據(jù)類型,即數(shù)組可以是根本數(shù)據(jù)類型,也可以是類類型,例如,可以聲明一個文本框TextBox類型的數(shù)組。,3 C#通過.NET框架中的System.Array類來支持?jǐn)?shù)組,因此,可以使用該類的屬性與方法操作數(shù)組。,5.1.1,一維數(shù)組,聲明、實例化和初始化一維數(shù)組的各種形式參見表5-1,一般
5、通過數(shù)組下標(biāo)來訪問數(shù)組中的數(shù)據(jù)元素。C#語言還可以通過foreach語句來枚舉數(shù)組的各個元素,【例5.1】一維數(shù)組的使用例如:隨機產(chǎn)生100個學(xué)生的成績,計算學(xué)生的平均成績,并統(tǒng)計高于平均成績的學(xué)生人數(shù),【例5.2】利用一維數(shù)組顯示Fibonacii數(shù)列:1、1、2、3、5、8、的前20項。要求每行顯示5項,聲明一維數(shù)組,例:,char CharArr;/,字符型一維數(shù)組,int intArr;/,整型一維數(shù)組,string StringArray;/,字符串一維數(shù)組,數(shù)據(jù)類型,數(shù)組名,;,表示數(shù)組每個元素的類型,現(xiàn)在還不能使用數(shù)組元素,必須經(jīng)過實例化才可以使用,動態(tài)實例化,-,使用,new,
6、運算符,int a;/,聲明,a=new int5;/,實例化,int IntArr=new int5;,int IntArr=new int53,6,9,2,18;,數(shù)組名,=new,數(shù)據(jù)類型,數(shù)組長度,可以將數(shù)組定義和實例化合寫在一起,例:定義并初始化一個,100,個元素的浮點數(shù)數(shù)組,score,float score;,score=,new,float100;,float score=,new,float100;,兩種方式都正確,數(shù)組長度可以是,無符號整型表達式,,即非負(fù)整數(shù),也可以是一個,常量表達式,,或者,變量表達式,。,int Size=5;,int A=new intSize;,
7、C#,允許聲明元素個數(shù)為,0,的數(shù)組,例如:,int A=new int0;,靜態(tài)初始化實例化,例子:,int IntArr=3,6,9,2,18;,string StringArr=English,Computer,Maths,Chinese;,數(shù)據(jù)類型,數(shù)組名,=,元素,1,元素,2,.,靜態(tài)初始化數(shù)組必須與數(shù)組定義結(jié)合在一條語句中,數(shù)組在實例化時,可以為元素指定初始化值。,如果為數(shù)組指定初始化值,可以省略對元素個數(shù)的說明:,int A=new int 1,2,3,4,5;,可以將聲明數(shù)組的語句,“int A=new int51,2,3,4,5;,簡化為:int A=1,2,3,4,5;,
8、為數(shù)組指定初始化的值可以是,變量表達式,,,例如:,int x=1,y=2;,int A=new int5x,y,x+y,y+y,y*y+1;,一旦要為數(shù)組指定初始化值,就必須為數(shù)組的所有元素指定初始化值,指定值的個數(shù)既不能多于數(shù)組的元素個數(shù),也不能少于數(shù)組的元素個數(shù),。,訪問一維數(shù)組,使用數(shù)組名與下標(biāo)索引可以唯一確定數(shù)組中的某個元素,從而實現(xiàn)對該元素的訪問。,數(shù)組名,下標(biāo),可以是任何整型表達式,例如:,int x=4,y=5;,int A=new int31,2,3;,/,使用數(shù)組第,1,個元素的值為其他變量賦值,x=A 0;,A 1=y;,/,為數(shù)組第,2,個元素賦值,在訪問數(shù)組元素時,要
9、注意不要使下標(biāo)越界,例如:,int A=new int5;,A5=15;,/,下標(biāo)越界,可以在實例化數(shù)組時為數(shù)組的所有元素初始化指定的值,但不能在賦值語句中使用一個賦值運算符為整個數(shù)組賦值,例如:,int A=new int31,2,3;,/,正確,A=4,5,6;,/,錯誤,試圖為整個數(shù)組賦值,int a=new int8;,a2=10;,int i=5;,Console.Write(ai-3);,for(i=0;i8;i+),ai=i*i;,這樣用當(dāng)然沒有問題,下標(biāo)可以是表達式,便于使用循環(huán)變量控制下標(biāo),這樣的,for,循環(huán)變量最適合做數(shù)組下標(biāo),for(i=0;i,N,;i+),例:數(shù)組聲
10、明與訪問,using System;,class ArrayTest,static void Main(string args),int numbers;,/,定義一個一維數(shù)組,numbers=new int6;,/,動態(tài)初始化數(shù)組,for(int i=0;i,numbers.Length,;i+),numbersi=i*i;,Console.WriteLine(numbers0=1,i,numbersi);,例:定義一個數(shù)組,使其元素值為對應(yīng)下標(biāo)值的平方,并輸出數(shù)組中的元素,使用,數(shù)組名,.Length,可以獲取數(shù)組的長度,練習(xí)題:,定義一個長度為,10,的,浮點,數(shù)數(shù)組,x,進行動態(tài)或者靜
11、態(tài)初始化,將每個元素賦值為下標(biāo)的開方,Math.Sqrt(),foreach循環(huán)語句,C#專門提供了一種用于遍歷數(shù)組的foreach循環(huán)語句。,foreach循環(huán)語句的格式為:,foreach(類型名稱 變量名稱 in 數(shù)組名稱)循環(huán)體,語句中的“變量名稱是一個循環(huán)變量,在循環(huán)中,該變量依次獲取數(shù)組中各元素的值。因此,對于依次獲取數(shù)組中各元素值的操作,使用這種循環(huán)語句就很方便。要注意,“變量名稱的類型必須與數(shù)組的類型一致。,例如,假定有一個整型數(shù)組A,那么用foreach語句獲取數(shù)組中和元素的值并輸出到label1控件的Text屬性中的代碼為:,foreach(int i in A),labe
12、l1.Text=label1.Text+i+;,foreach語句遍歷數(shù)組雖然很方便,但其功能受一定的限制,例如,如果想為數(shù)組各元素依次有規(guī)律賦值,foreach循環(huán)將無能為力。,5.1.2,多維數(shù)組,多維數(shù)組的聲明、實例化和初始化與一維數(shù)組的聲明、實例化和初始化相類似。聲明多維數(shù)組時,用逗號表示維數(shù),一個逗號表示兩維數(shù)組,兩個逗號表示三維數(shù)組,以此類推。,注意:在聲明數(shù)組聲明中即使沒有指定維數(shù)的實際大小,也必須使用逗號分隔各個維,例,1,例,5,C#,支持兩種類型的多維數(shù)組。第一種是矩形數(shù)組,也稱等長數(shù)組,【,例,5.3,】,二維數(shù)組的使用,聲明多維數(shù)組,在多維數(shù)組中,比較常用的是二維數(shù)組,
13、二維數(shù)組可以保存二行二列的同類型數(shù)據(jù),6,行,4,列的同類數(shù)據(jù),可以使用,64,的二維數(shù)組保存,int,data=,new,int6,4;,data0,0=98;,.,定義數(shù)組和分配空間,訪問數(shù)組元素,使用兩個下標(biāo)指定行和列,聲明二維數(shù)組與聲明一維數(shù)組格式類似,例如:,char,CharArr;,int,A;,數(shù)據(jù)類型,數(shù)組名,數(shù)組元素類型,聲明多維數(shù)組時,用逗號表示維數(shù),一個逗號表示二維數(shù)組,兩個逗號表示三維數(shù)組,依次類推,。,二維數(shù)組的初始化,數(shù)組名,=new,數(shù)據(jù)類型,長度,1,長度,2;,例:,int,IntArr=new int3,2;,int,A=new int2,21,2,3,4
14、;,注意:,上面定義的數(shù)組,IntArr,中包含,3X2=6,個元素,下標(biāo)分別為,0,0,0,1,1,0,1,1,2,0,2,1,訪問多維數(shù)組需要用多個下標(biāo)唯一確定數(shù)組中某個元素,例如:,/聲明一個4行4列的二維數(shù)組,int,Ar=new int4,4;,Ar1,2=15;/為第2行第3列的元素賦值,int a=Ar1,2;/用第2行第3列的元素為其他變量賦值,也可以行基準(zhǔn)給二維數(shù)組靜態(tài)賦值,但一般不用靜態(tài)賦值給超過二維的多維數(shù)組.要訪問二維數(shù)組中的所有元素可以使用雙重循環(huán)來實現(xiàn),通常外循環(huán)控制行,內(nèi)循環(huán)控制列。,例:通過二重循環(huán),將,1-12,賦值給一個二維數(shù)組,并顯示數(shù)組內(nèi)容,static
15、 void Main(string args),int t,i;,int,table=new int3,4;,for(t=0;t 3;t+)/給二維數(shù)組賦值,for(i=0;i 4;i+),tablet,i=(t*4)+i+1;/填數(shù),for(t=0;t 3;t+)/顯示二維數(shù)組的值,for(i=0;i 4;i+),Console.Write(tablet,i+“t);/橫向跳格,Console.WriteLine();,練習(xí):,定義一個,4,行,4,列的,double,型數(shù)組,將數(shù)組所有元素按圖設(shè)置:,輸出該數(shù)組在對角線上的元素值,多維數(shù)組介紹,C#,可以使用多維數(shù)組,3,維數(shù)組的下標(biāo)有三個
16、整數(shù),,4,維數(shù)組的下標(biāo)有,4,個整數(shù),依次類推,多維數(shù)組的使用和二維數(shù)組的使用方法類似,根據(jù)數(shù)組的維數(shù)確定方括號中的逗號的個數(shù),例:,定義一個三維數(shù)組:,string,StringArr=new string3,2,4;,數(shù)組總結(jié),數(shù)組array是一種數(shù)據(jù)結(jié)構(gòu),它包含相同類型的一組數(shù)據(jù),數(shù)組有一個“秩rank,它確定和每個數(shù)組元素element關(guān)聯(lián)的索引個數(shù),其值是數(shù)組類型的方括號之間逗號個數(shù)加上1。數(shù)組的秩又稱為數(shù)組的維度?!爸葹?1 的數(shù)組稱為一維數(shù)組single-dimensional array,“秩大于 1 的數(shù)組稱為多維數(shù)組multi-dimensional array。維度大小確定的多維數(shù)組通常稱為兩維數(shù)組、三維數(shù)組等,數(shù)組的每個維度都有一個關(guān)聯(lián)的長度length,它是一個大于或等于零的整數(shù)。創(chuàng)立數(shù)組實例時,將確定維度和各維度的長度,它們在該實例的整個生存期內(nèi)保持不變。換而言之,對于一個已存在的數(shù)組實例,既不能更改它的維度,也不可能調(diào)整它的維度大小,數(shù)組屬性,1數(shù)組使用類型聲明,通過數(shù)組下標(biāo)或稱索引來訪問數(shù)組中的數(shù)據(jù)元素。,2數(shù)組可以是一維數(shù)組、多維數(shù)組。,3數(shù)組元素可