版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第6章數組與集合本章導讀:本章的主要內容是一維數組、二維數組和ArrayList集合類的使用。然后通過項目“學生成績單”為導向,三個任務(打印學生成績單、打印多名學生的成績單、學生選課)為驅動,學習有關數組與集合的知識,包括一維數組、二維數組、ArrayList集合類等,本項目的使得學習者對構造類型數據有一定認識。第6章數組和集合
——任務一打印學生成績單
一、任務描述:編制一個C#控制臺應用程序:從鍵盤依次輸入學生的4門課成績,計算出學生的總分和平均分,并根據規則判斷該學生所得獎學金等級,項目運行效果如下圖所示:二、知識準備:1一維數組的聲明和使用2數組的常見屬性及方法二、知識準備:1、一維數組的聲明和使用(1)一維數組的聲明通過前面的學習大家已經知道,變量在使用前必須聲明,一維數組也是一種變量,所以在使用一維數組之前也先聲明。聲明一維數組的格式為:數組類型[]數組名;例如:float[]scores;//定義float型的一維數組用于存放1個學生的成績int[]nums;//定義int型的一維數組存放學生學號string[]names;//定義string型的一維數組用于存放所有學生的姓名二、知識準備:1、一維數組的聲明和使用(2)一維數組的初始化在C#中有下面三種方法對數組進行實始化:1)聲明數組的同時給出一組用“,”分隔開的元素列表,并用{}括起來。例如:張三成績一維數組定義為:float[]scores={85.5,90,72.5,83,0,0};該代碼定義了一個float類型的一維數組,數組名為scores,里面存放了6個實型數,依次為85.5,90,72.5,83,0,0,因為總分和平均分還未計算,所以暫時賦值為0。二、知識準備:數組的這種初始化方式必須與聲明數組同時進行,如上面的代碼不能分開,寫成下面兩句話就會報錯:float[]scoresscores={85.5,90,72.5,83,0,0};1、一維數組的聲明和使用(2)一維數組的初始化二、知識準備:2)使用new關鍵字顯示初始化數組,只確定數組的長度,即數組元素的個數,格式為:數組名=new數組類型[數組長度];例如:float[]scores=newfloat[6];或者float[]scores;scores=newfloat[6];1、一維數組的聲明和使用(2)一維數組的初始化二、知識準備:3)使用new關鍵字顯示初始化數組,不僅確定數組的長度,而且為所有的數組元素賦了初始值,如:float[]scores=newfloat[6]{85.5,90,72.5,83,0,0};或者
float[]scores;scores=newfloat[6]{85.5,90,72.5,83,0,0};注意:數組的這種初始化方式要求給出的數組長度值必須與[]內的初始值個數一致。1、一維數組的聲明和使用(2)一維數組的初始化二、知識準備:數組初始化后就可以通過下標訪問其中的所有元素了,其使用格式為:數組名[下標]“下標”:就是數組中元素的順序號,從0開始,到數組的長度減1為止(數組的長度就是數組中元素的個數)。通常使用for語句或foreach語句通過一維數組的下標訪問數組元素,下面的任務中通過for語句對數組元素進行輸入,通過foreach對數組元素進行輸出。1、一維數組的聲明和使用(3)一維數組的元素的引用,輸入及輸出二、知識準備:2、數組的常見屬性及方法C#自帶了數組的一些屬性和方法,在程序設計中,如果知道數組的這些屬性和方法,往往可以簡化程序的設計,提高開發效率。(1)數組的常見屬性Length屬性:表示數組所有維數中元素的總數,即數組的長度。float[]scores=newfloat[6];則scores.Length的值為6,表示數組scores的長度為6,可以存放6個元素。二、知識準備:(1)數組的常見屬性Rank屬性:表示數組的維數。例1:float[]scores=newfloat[6];則scores.Rank的值為1,表示數組scores的維數為1,scores是一維數組。例2:string[,]names=newstrng[3,5];則names.Rank的值為2,表示數組names的維數為2,names是二維數組2、數組的常見屬性及方法C#自帶了數組的一些屬性和方法,在程序設計中,如果知道數組的這些屬性和方法,往往可以簡化程序的設計,提高開發效率。二、知識準備:2、數組的常見屬性及方法(2)數組的常見方法1)Sort方法:對一維數組排序。它是Array類的靜態方法,使用格式為:Array.Sort(數組名);二、知識準備:例6.1將常見的中國百家姓升序排列后輸出:staticvoidMain(string[]args){string[]nameFirst={"li","zhou","zhang","wang","xia","liu"};Array.Sort(nameFirst);foreach(stringninnameFirst) { Console.WriteLine(n); }Console.ReadLine();}思考:去掉語句“Array.Sort(nameFirst);”后,數組中的元素順序如何,程序輸出什么樣的結果?二、知識準備:Array.Reverse(數組名);2、數組的常見屬性及方法(2)數組的常見方法2)Reverse方法:反轉一維數組,即第一個元素變為最后一個元素,最后一個元素變為第一個元素。它是Array類的靜態方法,使用格式為:二、知識準備:例6.2:staticvoidMain(string[]args){int[]num={10,20,30,40,50,60,70,80,90,100};Array.Reverse(num);foreach(intninnum) { Console.WriteLine(n); }Console.ReadLine();}思考:有了語句“Array.Reverse(num);”后,數組的元素存放順序是怎樣的?如果刪除該句,程序輸出什么樣的結果?二、知識準備:數組名.GetLowerBound(維度)
數組名.GetUpperBound(維度)2、數組的常見屬性及方法(2)數組的常見方法3)GetLowerBound與GetUpperBound方法:獲取數組指定維度的下限與上限,使用格式為:二、知識準備:例6.3:staticvoidMain(string[]args){int[]num={10,20,30,40,50,60,70,80,90,100};intlowerBound=num.GetLowerBound(0);intupperBound=num.GetUpperBound(0);Console.WriteLine("數組num的下界為:"+lowerBound+"\n上界為:"+upperBound);Console.ReadLine();}二、知識準備:
Array.IndexOf(數組名,元素值)2、數組的常見屬性及方法(2)數組的常見方法4)IndexOf方法:在數組中根據元素值獲取該元素的第一個索引號,如果數組中不存在該元素值,則返回-1。它是Array類的靜態方法,使用格式為:二、知識準備:例6.4:staticvoidMain(string[]args){int[]num={10,20,30,40,50,30,70,80,90,100};intindexNo=Array.IndexOf(num,30);Console.WriteLine("數組num中最后一個值為30的個元素的索引號為:"+indexNo);Console.ReadLine();}這段代碼中,一維數組num中有兩個值為30的元素,但程序運行后輸出第一個30的索引號,即2,而不是5。二、知識準備:2、數組的常見屬性及方法(2)數組的常見方法5)LastIndexOf方法:在數組中根據元素值獲取該元素的最后一個索引號,如果數組中不存在該元素值,則返回-1。它是Array類的靜態方法,使用格式為:
Array.LastIndexOf(數組名,元素值)特別提示:數組的這些屬性和方法對多維數組也同樣適用,所以后面將不再單獨講述二維數組的屬性和方法。二、知識準備:例6.5:staticvoidMain(string[]args){int[]num={10,20,30,40,50,30,70,80,30,100};intindexNo=Array.LastIndexOf(num,30);Console.WriteLine("數組num中最后一個值為30的個元素的索引號為:"+indexNo);Console.ReadLine();}這段代碼中,一維數組num中有三個值為30的元素,但程序運行后輸出最后一個30的索引號,即8,而不是2或5。三、任務分析:1、分析輸出學生成績需要以下變量,如下表所示:變量聲明說明表2、對學生的四門課成績利用for循環通過數組索引(索引號0~3)進行輸入,索引為4的數組元素用于存放總分,索引為5的數組元素用于存放平均分,步驟如下。序號變量名稱變量類型變量作用1scoresfloat一維數組,用于存放各門課成績、總分和平均分2iint循環變量,同時代表數組索引3scorefloatforeach循環變量輸入四門課成績計算總分和平均分輸出成績判斷并輸出獎學金等級四、任務實施:1、啟動VisualStudio2010,建立名為“stuscore”的控制臺應用程序。2、在Program.cs文件中輸入如下代碼:首先是變量的定義:float[]scores=newfloat[6];一維數組部分元素的初始化。因為scores[4]和scores[5]元素存放的是學生的總分和平均分,所以需要對其進行初始化,便于計算:scores[4]=scores[5]=0;四、任務實施:1)輸入四門課成績Console.WriteLine("請依次輸入學生的英語、C#、數學、數據結構成績:");for(inti=0;i<4;i++){scores[i]=Convert.ToSingle(Console.ReadLine());//強制轉換為float型}四、任務實施:2)計算總分和平均分計算總分的過程可以在輸入成績的時候同時進行,在①中循環體最后加入1句代碼:scores[4]+=scores[i];計算平均分必須在總分計算完成之后,所以在循環體外后面加入代碼:scores[5]=scores[4]/4;四、任務實施:3)利用foreach語句輸出成績foreach(floatscoreinscores){Console.Write(score+"\t");}也可以同樣利用for語句輸出數組元素for(i=0;i<scores.Length;i++){Console.Write(scores[i]+"\t");}四、任務實施:4)判斷并輸出等級if(scores[5]>=90){Console.WriteLine("一等獎學金");}elseif(scores[5]>=80&&scores[5]<=90){Console.WriteLine("二等獎學金");}elseif(scores[5]>=70&&scores[5]<=80){Console.WriteLine("三等獎學金");}else{Console.WriteLine("無獎學金");}3、運行程序。1、對使用Console.ReadLine()輸入的字符串要經過強制類型轉換才能賦值給數組元素:scores[i]=Convert.ToSingle(Console.ReadLine())2、通常通過for和foreach語句來對數組元素進行輸入和輸出,使用時要注意兩種方式的區別。3、數組的Length屬性表示取數組的長度。五、任務小結:第6章數組與集合
——任務二打印多名學生的成績單
一、任務描述:編制一個C#控制臺應用程序:從鍵盤依次輸入3名學生的姓名和學號,然后輸入學生的4門課成績,計算出每名學生的總分和平均分,并根據規則判斷該學生所得獎學金等級,最后輸出整個成績表。運行效果如下圖所示1二、知識準備:二維數組的聲明和使用二、知識準備:1、二維數組的聲明和使用(1)什么是二維數組C#中的數組除了一維數組外,還有二維數組、三維數組等多維數組,其中以二維數組最為常見。學生的成績部分就是一個二維數組結構,我們把它簡化為下表:英語C#數學數據結構總分平均分85.59072.583.5331.582.8757869.586.57731177.7589.5958790361.590.375二、知識準備:1、二維數組的聲明和使用(1)什么是二維數組它可以用一個二維數組來表示,有3行6列,一共18個元素。二維數組可以看成是一個特殊的一維數組,該一維數組的每個元素又是一個一維數組。如上面的成績表可以看成是長度為3的一維數組:第一個元素是1個一維數組(85.5,90,72.5,83.5,331.5,82.875)第二個元素是1個一維數組(78,69.9,86.5,77,311,77.75)第三個元素是1個一維數組(89.5,95,87,90,361.5,90,375)二、知識準備:1、二維數組的聲明和使用(2)二維數組的定義同一維數組一樣,在使用二維數組前必須定義,格式為:數組類型[,]數組名;其中“數組類型”為該數組中元素的數據類型。如果我們要定義一個二維數組來裝下上表中3個學生的成績,可以做如下定義:
flaot[,]scores;二、知識準備:如果我們要定義一個字符串類型的二維數組,可以做如下定義:
string[,]str;上式中定義了一個字符串類型的二維數組str。如果要定義三維數組,則格式為:數組類型[,,]數組名;例如:int[,,]x;1、二維數組的聲明和使用(2)二維數組的定義特別提醒二、知識準備:1、二維數組的聲明和使用(3)二維數組的初始化跟一維數組相同,二維數組在聲明之后必須為其分配內存空間,即必須對二維數組進行初始化。1)聲明二維數組的同時進行初始化。即將二維數組所有元素用一個“{}”括起來,該花括號里面是用逗號“,”隔開的多個“{}”。例如:上面的行列式的初始化float[,]scores={{85.5,90,72.5,83.5,331.5,82.875},{78,69.9,86.5,77,311,77.75},{89.5,95,87,90,361.5,90,375}};
二、知識準備:例如,下表是某學校課程授課信息:為存放這些數據,可以這樣聲明一個3行3列的sting型二維數組:課程名稱授課教師授課班級《C語言程序設計》劉小華13軟件1班《C++程序設計》張小友12軟件2班《C#程序設計》郭小城11軟件3班string[,]teach={
{"《C語言程序設計》","劉小華","13軟件1班"},
{"《C++程序設計》","張小友","12軟件2班"},
{"《C#程序設計》","郭小城","11軟件3班"}};1、二維數組的聲明和使用(3)二維數組的初始化二、知識準備:
數組的這種初始化方式必須與聲明數組同時進行,不能分開,下面的初始化方式是錯誤的:string[,]teach;teach={{"《C語言程序設計》","劉小華","13軟件1班"},{"《C++程序設計》","張小友","12軟件2班"},{"《C#程序設計》","郭小城","11軟件3班"}};1、二維數組的聲明和使用(3)二維數組的初始化錯誤的初始化方式二、知識準備:2)使用new關鍵字顯示初始化數組,只確定數組的長度,即數組元素的個數,格式為:數組名=new數組類型[第一維長度,第二維長度];例如:int[,]datas=newint[3,5];或者:int[,]datas;datas=newint[3,5];1、二維數組的聲明和使用(3)二維數組的初始化二、知識準備:1、二維數組的聲明和使用(3)二維數組的初始化3)使用new關鍵字顯示初始化數組,不僅確定數組的長度,而且為所有的數組元素賦了初始值,如:int[,]datas=newint[3,5]{{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};int[,]datas;
datas=newint[3,5]{{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}
};或者數組的這種初始化方式要求給出的數組長度值必須與{}內的初始值個數一致二、知識準備:1、二維數組的聲明和使用(4)二維數組的元素的引用,輸入及輸出二維數組初始化后就可以通過下標訪問其中的所有元素了,跟一維數組不同,一維數組的下標只有一個整數,而二維數組的下標為兩個整數,其使用格式為:數組名[行下標,列下標]“行下標”:就是二維數組中元素所在的行序號,從0開始,到數組的第一維的長度減1為止,即總行數減1為止。“列下標”:就是二維數組中元素所在的列序號,從0開始,到數組的第二維的長度減1為止,即總列數減1為止。三、任務分析:1、分析輸出多個學生成績單需要以下變量,如下表所示:序號變量名稱變量類型變量作用1scoresfloat二維數組,用于存放3個學生4門課成績、總分和平均分2namesstring一維數組,用于存放3個學生的姓名3no2string一維數組,用于存放3個學生的學號4iint循環變量,同時代表二維數組行索引5iint循環變量,同時代表二維數組列索引三、任務分析:2、利用雙重for循環通過二維數組索引(行索引號0~3,列索引好0~3)進行輸入,列索引為4的數組元素用于存放總分,列索引為5的數組元素用于存放平均分,步驟如下:分別輸入3個人的姓名、學號和四門課成績,同時計算3個人的總分和平均分分別輸出3個人的成績在輸出成績的同時,判斷并輸出獎學金等級四、任務實施:1.啟動VisualStudio2012,建立名為“newstuscore”的控制臺應用程序。2.在Program.cs文件中輸入如下代碼:首先是變量的定義:inti,j;string[]names=newstring[3];string[]nos=newstring[3];float[,]scores=newfloat[3,6];四、任務實施:二維數組中scores[i][4]和scores[i][5]元素存放的是學生的總分和平均分,所以需要對其進行初始化,便于計算:for(i=0;i<3;i++){scores[i,4]=scores[i,5]=0;}四、任務實施:(1)分別輸入3個人的姓名、學號和四門課成績,同時計算總分和平均分for(i=0;i<3;i++){
Console.WriteLine("請輸入第"+(i+1).ToString()+"名學生的姓名和學號:");names[i]=Console.ReadLine();nos[i]=Console.ReadLine();Console.WriteLine("第"+(i+1).ToString()+"名學生成績輸入:");Console.WriteLine("請依次輸入英語、C#、數學、數據結構的成績:");for(j=0;j<4;j++){scores[i,j]=Convert.ToSingle(Console.ReadLine());scores[i,4]+=scores[i,j];}scores[i,5]=scores[i,4]/4;}輸入成績并計算總分計算平均分四、任務實施:(2)利用雙重for語句輸出完整成績表Console.WriteLine("學生成績為:");Console.WriteLine("姓名\t學號\t英語\tC#\t數學\t數據結構總分\t平均分\t獎學金");
for(i=0;i<3;i++){Console.Write(names[i].ToString()+"\t");Console.Write(nos[i].ToString()+"\t");for(j=0;j<6;j++){Console.Write(scores[i,j].ToString()+"\t");}
if(scores[i,5]>=90){Console.WriteLine("一等獎學金");}四、任務實施:3.運行程序。elseif(scores[i,5]>=80&&scores[i,5]<=90){Console.WriteLine("二等獎學金");}elseif(scores[i,5]>=70&&scores[i,5]<=80){Console.WriteLine("三等獎學金");}else{Console.WriteLine("無獎學金");}Console.WriteLine();}五、任務小結:1、對二維數組元素的輸入和輸出,通常通過雙重for循環來實現。2、對單純二維數組元素的輸出也可以采用foreach語句,但在本任務中,因為要判斷獎學金等級并輸出,同時對輸出的格式不好控制,采取了雙重for語句。intcount=0;foreach(floatscoreinscores){Console.Write(score.ToString()+"\t");count++;if(count%6==0)Console.WriteLine();}二維數組的輸出第6章數組與集合
——任務三學生選課
一、任務描述:創建一個窗體應用程序,可以實現學生的選課,程序運行效果如下圖所示:一、任務描述:當單擊【初始化課程】按鈕時,文本框內顯示初始化課程,如下圖所示;一、任務描述:當單擊【全部清除】按鈕時,文本框內所有課程被清空;當單擊【添加課程】按鈕時,單擊對話框中的【確定】按鈕,文本框內新增加其后文本框中輸入的課程,如下圖所示;一、任務描述:當單擊【刪除課程】按鈕時,單擊對話框中的【確定】按鈕,文本框內刪除其后文本框中輸入的課程,如圖所示;刪除“音樂鑒賞”二、任務準備:1、ArrayList類AaaryList類位于System.Collections命名空間下,可以動態的添加和刪除元素。AaaryList類相當于高級的動態數組,是Aaary類的升級版本,可以將AaaryList類看做是擴充了功能的數組,但不等同于數組。與普通數組相比,AaaryList類具有下列功能:AaaryList的容量可以根據需要自動增加,而數組的容量是固定的。AaaryList提供添加、刪除和插入某一范圍元素的方法,而數組沒有。AaaryList提供將只讀和固定大小包裝返回到集合的方法,而數組沒有。AaaryList只能是一維形式,而數組可以為多維。二、任務準備:1、ArrayList類AaaryList的三種聲明方式(1)默認構造器。以默認16的大小來初始化數組,語法格式如下:ArrayListlist=newArrayList();//list是對象名(2)用指定大小初始化內部數組。語法格式如下:ArrayListlist=newArrayList(n);//list是對象名,n為空間大小注意:使用ArrayList類時必須要引用System.Collections命名空間。二、任務準備:1、ArrayList類(3)用一個ICollection對象來構造,并將該集合的元素添加到ArrayList中。語法格式如下:ArrayListlist=newArrayList(arryname);//list是對象名,arryname為數組名創建一個控制臺應用程序,聲明一個ArrayList對象和一個整型一維數組,將語句聲明的一維數組中的元素添加到ArrayList對象中。例:int[]array=newint[]{1,2,3,4,5,6,7,8,9,10};ArrayListlist=newArrayList(array);二、任務準備:2、ArrayList類的常用屬性ArrayList類的常用屬性及說明如下表所示,最常用的是前3種屬性:編號屬
性說明1CapacityArrayList可以存儲的元素個數2CountArrayList實際包含的元素個數3Item獲取或設置指定索引處的元素4IsFixdSize獲取一個值,表明ArrayList是否具有固定大小5IsReadOnly獲取一個值,表明ArrayList是否為只讀6IsSynchronized獲取一個值,表明是否同步對ArrayList的訪問7SyncRoot獲取可以用于同步ArrayList訪問的對象二、任務準備:3、ArrayList類的常用方法如果存在如下定義:int[]array=newint[]{1,2,3,4,5};ArrayListlist=newArrayList(array);(1)Add(Object):將參數Object添加到ArrayList的末尾處,該方法返回值為添加的Object的索引。list.Add(6);執行完上面代碼后,ArrayList元素為:1,2,3,4,5,6。二、任務準備:list.Insert(2,100);(2)Insert(index,value):在ArrayList中將value指定的Object插入到index指定的索引處。list.Remove(4);執行完上面代碼后,ArrayList元素為:1,2,100,3,4,5。(3)Remove(value):從ArrayList種移除value指定的對象的第一個匹配項。執行完上面代碼后,ArrayList元素為:1,2,3,5。3、ArrayList類的常用方法二、任務準備:list.RemoveAt(0);(4)RemoveAt(index):從ArrayList種移除index指定索引處的元素。list.RemoveRange(0,2);執行完上面代碼后,ArrayList元素為:2,3,4,5。(5)RemoveRange(index,count):從ArrayList種移除從index指定索引處開始的count個元素。執行完上面代碼后,ArrayList元素為:3,4,5。3、ArrayList類的常用方法二、任務準備:list.Clear();(6)Clear:從ArrayList種移除所有元素。執行完上面代碼后,ArrayList里沒有任何元素。ArrayList類的方法還有很多,這里只列處理常用的,有興趣的同學可以參閱其他資料。3、ArrayList類的常用方法三、任務分析:1、本任務需要以下變量,如下表所示:2、窗體上主要控件的屬性及功能如下表所示:序號對象名稱類對象作用1listArrayListArrayList對象對象屬性設置功能TextBox1Name:tb_allAcceptsReturn=TrueAcceptsTab=True
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2026學年高一上學期《2026元旦聯歡游戲》主題班會課件
- 小學主題班會課件:團結鑄就力量友愛匯聚真情
- 友善同行和諧校園小學六年級主題班會課件
- 2026年直播審核員平臺管理規范理論考試題及答案
- 開學第一課青少年健身教育運動讓青春更有力量
- 班會:珍愛生命?拒絕毒品-禁毒宣傳教育主題
- 2026年推土機操作工模擬試題及答案
- 2026年社區消殺作業人員安全防護知識試卷
- 2026年交通運輸局工作人員招聘題庫及答案
- 2026年國際貿易配送風險管理考試模擬試題及答案
- 福建福州市鼓樓城投招聘筆試題庫2026
- 26年三升四語文閱讀理解暑假每日一練(參考答案)
- 微眾銀行:AI金融創新
- 《行為安全觀察手冊》
- 對外投資合作國別(地區)指南-蒙古國(2025年版)
- 水和廢水監測課件
- 檢驗員工作責任制度
- JJG(煙草)08-2014紙張透氣度測定儀檢定規程
- 延長石油校招試題及答案
- 2025年東營河口區公益性崗位招聘招聘歷年高頻重點提升(共500題)附帶答案詳解
- 廣東省農作物植保員職業技能競賽考試題庫(含答案)
評論
0/150
提交評論