




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章數組與集合目錄一、數組概述案例展現:控制多個風扇和連續多次環境數據采集—數組使用二、一維數組三、二維數組四、可變數組五、集合案例實現:同時控制多個風扇和連續多次環境數據采集—數組使用案例描述【案例】基于C#開發平臺,創建一個WPF項目應用程序,實現對多個風扇的控制,具體功能如下:1、利用給定的ADAM4150的協議指令集,實現單擊界面上”1#風扇開關”按鈕,實現1#風扇開關;單擊界面上”2#風扇開關”按鈕,實現2#風扇開關;單擊界面上”全部風扇開關”按鈕,實現1#、2#風扇開關;2、單擊”四輸入采集”,間隔1S連續5次采集”光照、溫度、濕度”的物理量數據,分別顯示出這5次的物理量數據,并求其平均值。案例結果下圖是一個基于C#開發的”數字量開關和四輸入采集實驗”案例結果在上圖中,單擊界面上“1#風扇開關”按鈕,實現1#風扇開關,此時物聯網實訓平臺右工位上風扇一起進行開關;同理,單擊界面上“2#風扇開關”按鈕,實現2#風扇開關;單擊界面上“全部風扇開關”按鈕,實現1#、2#風扇開關;按鈕當用戶單擊【四輸入采集】按鈕,系統通過物聯網實訓平臺,間隔1S連續5次采集”光照、溫度、濕度”的物理量數據,然后分別顯示出這5次的物理量數據,并求其平均值。案例準備創建一個”Csharp_4”的WPF應用程序項目,用于實現本案例的功能。操作步驟(1)新建一個”Csharp_4”WPF應用程序項目;(2)為創建后的”Csharp_4”項目,添加隨書光盤提供的”dll庫”目下的設備操作類庫文件:“NewlandLibrary.dll”、“Comm.Bus.dll”、“Comm.Sys.dll”、“Comm.Utils.dll”、“Newland.DeviceProviderImpl.dll”、“Newland.DeviceProviderIntf.dll”、“WinFormControl.dll”;案例準備(3)將光照接入四輸入In1、溫度接入四輸入In2、濕度接入四輸入In3;風扇1的繼電器信號線接入Do0,風扇2的繼電器信號線接入Do1;四輸入模擬量接入串口服務器COM4口,波特率38400;ADAM4150數字采集器接入串口服務器COM2口,波特率9600。備注:注意風扇接入與以前的物聯網實訓系統連接有變動。在這個簡單的綜合案例中,會涉及ADAM4150的動態庫、數組、集合、用戶控件的實現和使用等C#知識。下面就先來掌握這些知識點后,再開始本案例的編程實現吧!目錄一、數組概述案例展現:控制多個風扇和連續多次環境數據采集—數組使用二、一維數組三、二維數組四、可變數組五、集合案例實現:同時控制多個風扇和連續多次環境數據采集—數組使用數組概述假如要實現一個環境參數管理程序,用來統計某個時段的溫度平均值。假設這個時段共存儲了不同點所采集的10個溫度值,用前面的知識,程序首先要聲明10個變量來記錄每個采集點的溫度值,若這樣做的化,我們的程序會顯得很麻煩,也很不容易閱讀。那有什么方法可以解決這類問題呢?在C#里,可以用一個數組常量來記錄10個采集點的溫度值,數組是一組具有相同類型的變量的集合,如一組整數、一組字符等。組成數組的這些變量稱為數組的元素。數組可分為一維數組和多維數組。目錄一、數組概述案例展現:控制多個風扇和連續多次環境數據采集—數組使用二、一維數組三、二維數組四、可變數組五、集合案例實現:同時控制多個風扇和連續多次環境數據采集—數組使用一維數組的定義與變量一樣,數組在使用前必須定義,定義一維數組的語法如下:數據類型[]數組名;“數據類型”和第二章講的數據類型一樣,常見的類型有整型、浮點型與字符型等。“數組名”是用來統一這組相同數據類型的元素的名稱,其命名規則和變量的相同。“[]“是數組的標志,有了它,才能區別定義的是數組還是變量。例如:int[]value;string[]parname;一維數組的初始化數組只定義還不能使用,需要初始化,因此一般情況下,采用定義數組的同時就開始初始化。數組的初始化分為動態初始化和靜態初始化兩種。1. 靜態初始化靜態初始化是直接在定義數組時就給數組賦初值。在C#屮,其語法如下:數據類型數組名[]={初值0,初值1,…,初值n}如:一維數組的初始化該語句定義了一個名為temps的數組,它具有5個元素,分別用于記錄5個溫度值。元素的初始值羅列在花括號屮以逗號分隔。當語句被執行時,系統就會在內存屮分配一段連續的空間,用來存儲這5個int型數據,如下圖所示。一維數組的初始化2.動態初始化如果只想聲明一個數組而不冋時進行初始化,則可用動態初始化語句,在定義的同時采用關鍵字new給出數組的個數。其語法如下:數據類型數組名[]=new數據類型[個數]例如:該語句聲明了一個名為humity的語句,并通過new運算符在內存中劃分了3個元素的空間,但它并沒有給出數組元素的值,這時.NET編輯器將會給數組中的每一個元素賦統一的默認值,如數字類型默認值為0。一維數組的使用數組定義完后該如何訪問數組里的元素?數組中每個數組元素都有一個編號,這個編號叫做下標,C#中的下標是從0開始的,最大的下標等于數組元素個數減一。C#中可以通過下標來區別這些元素。數組元素的個數有時也稱之為數組的長度。以一個的temps[5]的整形數組為例,temps[0]代表第1個元素,temps[1]代表第2個元素,temps[4]為數組中第5個元素(也就是最后一個元素)。對于長度為temps.Length的數組,最后一個元素的索引為temps.Length-1,所temps[temps.Length]時索引超出范圍,程序出現IndexOutOfRangeException異常。目錄一、數組概述案例展現:控制多個風扇和連續多次環境數據采集—數組使用二、一維數組三、二維數組四、可變數組五、集合案例實現:同時控制多個風扇和連續多次環境數據采集—數組使用二維數組下面的一個矩陣中,在計算機中如何確定其元素的位置呢。對了,只要說出它在第幾行第幾列就可以了。在上面的矩陣屮,第1行第1列元素為1,第2行第3列元素為6,要想確定一個元素的位置,必須知道它所在的行數和列數,也就是說必須知道它的兩個維。像這樣要需要知道兩個維才能確定位置的數據,可以用二維數組表示。二維數組的定義和一維數組一樣,可以通過靜態初始化、直接定義、定義時初始化來聲明二維數組。其聲明與分配內存的格式如下所示: 靜態初始化上面的矩陣的二維數組靜態初始化,定義語句如下:
逗號int[,]Matrix={{1,2,3},{4,5,6},{7,8,9});數據類型數組名第一行數據第二行數據第三行數據二維數組的定義該語句定義了一個3行3列的二維數組。二維數組的定義 定義后new運算符分配定義: new運算符動態初始化大小:二維數組的使用和一維數組類似,我們通過行與列的索引來引用數組元素,這九個元素分別記為:Matrix[0,0]Matrix[0,1]Matrix[0,2]Matrix[1,0]Matrix[1,1]Matrix[1,2]Matrix[2,0]Matrix[2,1]Matrix[2,2]C#中一維數組通過下標來標識各個元素,同樣,二維數組也是可以通過下標來區別各個元素,一維只需要一個下標,二維就需要兩個下標了,一個叫行下標,一個叫列下標,c#中是按行存儲二維數組的,即一行上的元素存完后,再存下一行。二維數組的使用其中行號、列號都是從0開始編號,最大值分別為行的數目減一、列的數目減一。因此數組Matrix中,它的第一個元素是Matrix[0,0],最后一個元素是Matrix[2,2]。當用for語句處理二維數組時,需要兩個嵌套的for語句,外層for語句遍歷所有行,當遍歷到某-行時,內層for語句遍歷該行的所有元素。下面分別介紹直接訪問、for語句、foreach語句三種方式實現數組元素的訪問。目錄一、數組概述案例展現:控制多個風扇和連續多次環境數據采集—數組使用二、一維數組三、二維數組四、可變數組五、集合案例實現:同時控制多個風扇和連續多次環境數據采集—數組使用可變數組在二維數組中,每一行的K度都是相同的,比如上面的矩陣中,每行都有3個元素。除此之外,我們還可以聲明每行長度不同的數組——可變數組。聲明可變數組的語法如下:可變數組聲明可變數組需要指定行數,但不需要指定列數。初始化這樣的數組不像初始化二維數組那樣簡單,需要逐行初始化。int[][]c=newint[2][];c[0]=newint[3];//初始化第一行,3個元素c[1]=newint[4];//初始化第二行,4個元素實際上就是把每一行看做一個一維數組,初始化后,第一?行的長度為3,第二行的長度為4,所有元素的默認值為0。也可以同時為所有元素賦值。c[0]=newint[3]{1,2,3};//初始化第一行c[1]=newint[4]{1,2,3,4};//初始化第二行可變數組初始化后可變數組的第一行為{1,2,3},第二行為{1,2,3,4}。輸出的時候也要逐行輸出:可變數組初始化后可變數組的第一行為{1,2,3},第二行為{1,2,3,4}。輸出的時候也要逐行輸出:這里把第一行c[0]和第二行c[l]看做兩個一維數組處理,可變數組的每一行都可以看做一個數組,因此可變數組也叫做以數組為元素的數組。上述的語句可用一個雙重循環語句代替。可變數組外層循環中定義一個名為line的一維數組,依次指向可變數組的各行;當line指向某一行時,在內層循環中用變量element依次指向該行的元素。可以看出,可變數組的語法要復雜得多,在大多數情況F使用矩形數組比較簡單,必要時才使用可變數組。目錄一、數組概述案例展現:控制多個風扇和連續多次環境數據采集—數組使用二、一維數組三、二維數組四、可變數組五、集合案例實現:同時控制多個風扇和連續多次環境數據采集—數組使用集合假設要將如下表所示的內容,序號、歌星、歌曲信息存儲到計算機里,該如何存儲呢?前面講過的數組只能存同一種類型數據,這里序號是數字,歌星、歌名是字符串,利用數組不好實現,那C#中有沒有提供其他什么方法來實現這種復雜的結構呢?C#中針對這種復雜的數據組合提供了一種存儲方法,那就是集合。集合集合(collection)提供了一種結構化組織任意對象的方式,.NET類庫提供了豐富的集合數據類型,這些集合對象都具有各自的專用場合。有序集合:僅僅實現ICollection接口的集合,在通常情況下,其數據項目的插入順序控制著從集合中取出對象的的順序。System.Collections.Stack和System.Collections.Queue類都是ICollection集合的典型例子。索引集合:實現Ilist的集合,其內容能經由從零開始的數字檢索取出,就象數組一樣。System.Collections.ArrayList對象是索引集合的一個例子。鍵式集合:實現IDictionary接口的集合,其中包含了能被某些類型的鍵值檢索的項目。IDictionary集合的內容通常按鍵值方式存儲,可以用枚舉的方式排序檢索。System.Collections.HashTable類實現了IDictionary接口。本節中我主要關注ArrayList類。ArrayList類介紹ArrayList是一種可變長度的數組,數組中的數據類型為Object,所以數組元素可以是任何類型的數據。ArrayList位于System.Collections命名空間中,所以我們在使用時,需要導入此命名空間。ArrayList常用方法:publicvirtualintAdd(objectvalue)將對象添加到ArrayList的結尾處。例如:ArrayList類介紹上面代碼添加元素之后,內容為:abcdepublicvirtualvoidInsert(intindex,objectvalue)將元素插入ArrayList的指定索引處:ArrayList類介紹上面代碼添加元素之后,內容為:aaabcdepublicvirtualvoidRemove(objectobj)從ArrayList中移除特定對象的第一個匹配項。publicvirtualvoidRemoveAt(intindex)移除ArrayList的指定索引處的元素,index從0開始。ArrayList類介紹通過Add來添加元素,Remove來刪除元素,就可以動態改變數組的長度,執行aList.RemoveAt(3)之前,總共只剩下abcd四個元素,下標從0-3;因此執行aList.RemoveAt(3)時,刪除的是第2個d。上例最后元素為abc。ArrayList類應用【例4.3】在本章“Csharp_4”解決方案中,添加一個“CSharp_4_ArrayList”WPF應用程序項目,來實現要將上面的序號、歌星、歌曲信息存儲到ArrayList。操作步驟
(1)在本章的“Csharp_4”解決方案中,添加一個“CSharp_4_ArrayList”WPF應用程序項目。(2)并參照下圖設計好界面布局文件“MainWindow.xaml”。ArrayList類應用(3)為按鈕添加單擊事件代碼。ArrayList類應用(4)運行程序,其執行結果如下圖所示。ArrayList類應用【例4.4】在本章“Csharp_4”解決方案中,添加一個“CSharp_4_溫濕度采集”WPF應用程序項目。實現對于給定隨機的5組“光照、溫度、濕度“的物理量數據,采用ArrayList實現顯示出這5次的物理量數據及其平均值。操作步驟
(1)在本章的“Csharp_4”解決方案中,添加一個“CSharp_4_溫濕度采集”WPF應用程序項目。(2)并參照下圖設計好界面布局文件“MainWindow.xaml”。ArrayList類應用(3)添加對該“System.Windows.Forms”程序集的引用,并未為開始采集事件添加代碼。目錄一、數組概述案例展現:控制多個風扇和連續多次環境數據采集—數組使用二、一維數組三、二維數組四、可變數組五、集合案例實現:同時控制多個風扇和連續多次環境數據采集—數組使用界面布局文件學習完本章的知識體系之后,讀者就可以完整的實現案例展現給出的案例功能了。接著Csharp_4的案例準備內容,接下來就是設計MainWindow.xaml”界面布局文件,參照前面示例4.1、例4.2界面布局,經過整合設計好”MainWindow.xaml”界面布局文件。界面效果圖如下圖:代碼開發實現在這個綜合案例中,其只需將例4.3、4.4的代碼進行進行綜合,并稍加調試,再此不再列出,請讀者參閱本書配套的源代碼案例演示本案例的實現要基于本書配套的實訓平臺,所以在測試之前,請讀者務必仔細閱讀時序設備配套的用戶使用手冊。操作步驟
(1)參照實訓平臺使用手冊連接好四輸入模塊的線路、風扇接入右工位繼電器上,并正確供電;(2)運行該程序,單擊【風扇開關】按鈕,仔細觀察界面中的風扇轉動情況和物聯網實訓平臺上風扇轉動情況;單擊【四輸入采集】按鈕,仔細觀察界面右邊采集到的數據信息。(3)用手握住溫度傳感器,再次單擊【四輸入采集】按鈕,仔細觀察界面中的溫度值是否發生了變化。本章小結本章先從一個基于物聯網實訓平臺實現同時控制多個風扇和連續多次環境數據采集案例入手,創建了”Csharp_4、Csharp_4_數組應用、Csharp_4_風扇控制、Csharp_4_ArrayList、Csharp_4_溫濕度采集”五個WPF項目。“Csharp_4”用于實現本章開篇針對設備的案例;“Csharp_4_數組應用”用來演示一維數組、二維數組的定義、初始化、引用,以及foreach用法;“Csharp_4_風扇控制”用一維數組實現對實訓平臺上風扇開關的控制“Csharp_4_ArrayList”用來演示ArrayList的定義、數據元素的添加,以及foreach用法;“Csharp_4_溫濕度采集”用二維數組來存儲從實訓平臺上采集到的多次數據,并利用雙重for循環取出歷史數據學習這一章應把注意力放熟練掌握C#一維數組、ArrayList、foreach等知識點上;并理解ADAM4150工作原理,為后續章節的知識提升打好基礎。習題一、理解題1.以下數組聲明語句中,正確的是()A.inta[3];B.int[3]a={1,2,3};C.int[][]a=newint[][];D.int[]a={1,2,3};2.數組int[]
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學生物試題及答案
- 中醫適宜技術試題及答案
- 浙江省9+1高中聯盟長興中學2025年高二數學第二學期期末質量跟蹤監視模擬試題含解析
- 長春市第十一中學2025年物理高二第二學期期末聯考試題含解析
- 浙江省紹興市紹興一中2025年數學高二第二學期期末質量跟蹤監視模擬試題含解析
- 云南省瀘水五中2025屆物理高二第二學期期末檢測模擬試題含解析
- 鹽城市時楊中學高二下學期期中考試數學試題
- 鹽城市射陽二中高一上學期教學質量調研(三)英語試題
- 新能源產業廠房出售與技術研發合同
- 車輛租賃公司市場拓展及戰略聯盟合同
- 教研組工作匯報課件
- 臨終關懷服務技術創新與應用探索
- 渤海大學《材料合成與制備技術》2023-2024學年第一學期期末試卷
- 重度哮喘診斷與處理中國專家共識(2024)解讀
- 魯科版選修3《物質結構與性質》全一冊學案有答案
- 六年級科學下冊知識點梳理
- 人力資源(人事)及行政管理制度體系資料文件
- 十年(2015-2024)高考真題數學分項匯編(全國)專題03 平面向量(學生卷)
- 管線探挖方案
- 期末質量測試卷(試題)-2023-2024學年牛津上海版(三起)英語五年級下冊
- 中藥連翹課件
評論
0/150
提交評論