第2章VisualC案例基礎(chǔ):C語言基礎(chǔ)_第1頁
第2章VisualC案例基礎(chǔ):C語言基礎(chǔ)_第2頁
第2章VisualC案例基礎(chǔ):C語言基礎(chǔ)_第3頁
第2章VisualC案例基礎(chǔ):C語言基礎(chǔ)_第4頁
第2章VisualC案例基礎(chǔ):C語言基礎(chǔ)_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第2章VisualC#案例基礎(chǔ):C#語言基礎(chǔ)2.1一個(gè)簡(jiǎn)單例子(控制臺(tái)方式):計(jì)算圓面積2.2數(shù)據(jù)類型2.3常量和變量2.4運(yùn)算符和表達(dá)式2.5流程控制2.6數(shù)組、結(jié)構(gòu)和枚舉知識(shí)點(diǎn)鏈接L2.1VS2008開發(fā)環(huán)境介紹自從微軟2000年提出NET戰(zhàn)略后,.NETFramework版本不斷升級(jí),2008年隨著微軟的.NETFramework3.5版本的發(fā)布,同時(shí)也意味著.NET技術(shù)越來越成熟,作為.NET開發(fā)的首選語言C#語言也越來越受人們的青睞,C#的優(yōu)點(diǎn)也同時(shí)被人們所認(rèn)同。與此同時(shí)微軟也發(fā)布了VisualStudio2008開發(fā)環(huán)境(以下簡(jiǎn)稱VS2008)。2.1一個(gè)簡(jiǎn)單例子(控制臺(tái)方式):計(jì)算圓面積【例EX2_1】設(shè)計(jì)計(jì)算圓面積的控制臺(tái)應(yīng)用程序。實(shí)現(xiàn)步驟:1.新建控制臺(tái)項(xiàng)目運(yùn)行VS2008,執(zhí)行【文件】→【新建】→【項(xiàng)目】菜單命令,彈出“新建項(xiàng)目”對(duì)話框,選擇VisualC#的Windows項(xiàng)目類型,選擇控制臺(tái)應(yīng)用程序模板,項(xiàng)目命名為“EX2_1”,如圖2.1所示。圖2.1新建控制臺(tái)應(yīng)用程序項(xiàng)目圖2.1新建控制臺(tái)應(yīng)用程序項(xiàng)目2.1一個(gè)簡(jiǎn)單例子(控制臺(tái)方式):計(jì)算圓面積2.添加代碼單擊“確定”按鈕后,系統(tǒng)新建了一個(gè)命名為“EX2_1”的控制臺(tái)項(xiàng)目,并打開Program.cs文件。添加代碼,代碼如下所示。usingSystem;引用的命名空間usingSystem.Collections.Generic;

usingSystem.Linq;usingSystem.Text;namespaceEX2_1 //定義的命名空間{classProgram //定義類Program{staticvoidMain(string[]args) //程序的入口點(diǎn){Console.WriteLine("請(qǐng)輸入圓的半徑"); //輸出“請(qǐng)輸入圓的半徑”提示字樣stringr=Console.ReadLine(); //讀入所輸入的字符doubleIntR=Convert.ToDouble(r); //將字符類型轉(zhuǎn)換為數(shù)值類型constdoublePI=3.1415926; //定義圓周率Console.WriteLine(PI*IntR*IntR); //計(jì)算圓面積并輸出}}}引用的命名空間2.1一個(gè)簡(jiǎn)單例子(控制臺(tái)方式):計(jì)算圓面積3.運(yùn)行程序,計(jì)算圓的面積按【Ctrl+F5】快捷鍵運(yùn)行程序,輸入半徑值“36”,結(jié)果如圖2.2所示。圖2.2盤計(jì)算圓的面積2.1一個(gè)簡(jiǎn)單例子(控制臺(tái)方式):計(jì)算圓面積說明:(1)命名空間是提供了一種組織相關(guān)類和其他類型的方式,當(dāng)引用了命名空間時(shí),即可直接調(diào)用其中的類。例如,System是一個(gè)命名空間,Console是該命名空間中的類。在后面章節(jié)中將詳細(xì)介紹。(2)Console類屬于System命名空間,表示控制臺(tái)應(yīng)用程序的標(biāo)準(zhǔn)輸入、輸出流和錯(cuò)誤流。提供用于從控制臺(tái)讀取單個(gè)字符或整行的方法,還提供若干寫入方法,可將值類型的實(shí)例、字符數(shù)組以及對(duì)象集自動(dòng)轉(zhuǎn)換為格式化或未格式化的字符串,然后將該字符串(可選擇是否尾隨一個(gè)行終止字符串)寫入控制臺(tái)。(3)static關(guān)鍵字是對(duì)方法的修飾,其含義在后續(xù)章節(jié)中將詳細(xì)介紹。(4)在代碼中“//”為代碼注釋符號(hào),也可以使用“/*所要注釋內(nèi)容*/”加以注釋。如:namespaceEX2_1 /*定義的命名空間*/2.1一個(gè)簡(jiǎn)單例子(控制臺(tái)方式):計(jì)算圓面積(5)調(diào)試運(yùn)行程序有兩種方式,分別如下:①

執(zhí)行【調(diào)試】→【開始執(zhí)行(不調(diào)試)】菜單命令,或者直接按【Ctrl+F5】快捷鍵運(yùn)行程序。這種方式只執(zhí)行程序并不調(diào)試程序。②

執(zhí)行【調(diào)試】→【啟動(dòng)調(diào)試】菜單命令,或者直接按【F5】快捷鍵調(diào)試程序。這種方式需要設(shè)置斷點(diǎn),當(dāng)程序執(zhí)行到斷點(diǎn)時(shí)按【F10】快捷鍵逐步調(diào)試程序,也可以單擊工具欄中的“

”按鈕啟動(dòng)調(diào)試。2.1一個(gè)簡(jiǎn)單例子(控制臺(tái)方式):計(jì)算圓面積在【例EX2_1】中設(shè)置斷點(diǎn)逐步調(diào)試程序。調(diào)試步驟如下:①

單擊語句“Console.WriteLine("請(qǐng)輸入圓的半徑");”的左端設(shè)置斷點(diǎn),如圖2.3所示。②

按【F5】快捷鍵調(diào)試程序,程序執(zhí)行到斷點(diǎn)處停止執(zhí)行,如圖2.4所示。③

按【F10】快捷鍵逐步調(diào)試程序,當(dāng)彈出控制臺(tái)窗口提示輸入圓的半徑時(shí)輸入半徑“5”,按回車鍵繼續(xù)運(yùn)行程序,同時(shí)在“自動(dòng)窗口”中顯示各個(gè)變量的值,最終將計(jì)算的結(jié)果顯示在控制臺(tái)窗口中。

圖2.3設(shè)置斷點(diǎn)

圖2.4程序運(yùn)行到斷點(diǎn)處2.2數(shù)據(jù)類型C#包括兩種變量類型:值類型和引用類型,數(shù)據(jù)類型的分類如圖2.5所示。本節(jié)簡(jiǎn)單介紹這兩種數(shù)據(jù)類型以及裝箱與拆箱的基本概念。圖2.5數(shù)據(jù)類型的分類2.2.1值類型所謂值類型就是一個(gè)包含實(shí)際數(shù)據(jù)的量。當(dāng)定義一個(gè)值類型的變量時(shí),C#會(huì)根據(jù)它所聲明的類型,以堆棧方式分配一塊大小相適應(yīng)的存儲(chǔ)區(qū)域給這個(gè)變量,隨后對(duì)這個(gè)變量的讀、寫操作就直接在這塊內(nèi)存區(qū)域進(jìn)行。例如:intiNum=10; //分配一個(gè)32位內(nèi)存區(qū)域給變量iNum,并將10放入該內(nèi)存區(qū)域iNum=iNum+10; //從變量iNum中取出值,加上10,再將計(jì)算結(jié)果賦給iNum如圖2.6所示為這個(gè)值類型的操作示意圖。圖2.6值類型操作示意圖2.2.1值類型簡(jiǎn)單類型是系統(tǒng)預(yù)置的,一共有13個(gè)數(shù)值類型,如表2.1所示。2.2.2引用類型引用類型的變量不存儲(chǔ)它們所代表的實(shí)際數(shù)據(jù),而是存儲(chǔ)實(shí)際數(shù)據(jù)的引用。引用類型分兩步創(chuàng)建:首先在堆棧上創(chuàng)建一個(gè)引用變量,然后在堆上創(chuàng)建對(duì)象本身,再把這個(gè)內(nèi)存的句柄(也是內(nèi)存的首地址)賦給引用變量。例如:stringS1,S2;S1="ABCD";S2=S1;其中,S1、S2是指向字符串的引用變量,S1的值是字符串''ABCD''存放在內(nèi)存的地址,這就是對(duì)字符串的引用,兩個(gè)引用型變量之間的賦值,使得S2、S1都是對(duì)''ABCD''的引用,如圖2.7所示。圖2.7引用類型賦值示意2.2.2引用類型引用類型包括class(類)、interface(接口)、數(shù)組、delegate(委托)、object和string。其中object和string是兩個(gè)比較特殊的類型。C#的統(tǒng)一類型系統(tǒng)中,所有類型(預(yù)定義類型、用戶定義類型、引用類型和值類型)都是直接或間接從object繼承的??梢詫⑷魏晤愋偷闹蒂x給object類型的變量。例如:inta=10;objectabj=a; //將int類型a賦給了object類型abjstring類型表示Unicode字符的字符串。string是.NETFramework中System.String的別名。盡管string是引用類型,但定義相等運(yùn)算符是為了比較string對(duì)象(而不是引用)的值。這使得對(duì)字符串相等性的測(cè)試更為直觀。例如:stringmyString1="中國"; //把字符串“中國”賦給字符型變量myString1stringmyString2="中國"; //把字符串“中國”賦給字符型變量myString2Console.WriteLine(myString1==myString2); //相等,顯示True2.2.2引用類型字符串可以使用兩種形式表達(dá),即直接使用雙引導(dǎo)括起來或者在雙引號(hào)前加上@。通常情況下,會(huì)直接使用雙引號(hào)來表示字符串,例如:stringmyString="sample"。

//正確但是,當(dāng)字符串中包含某些特殊轉(zhuǎn)義符時(shí),@將非常有用。請(qǐng)看下面出現(xiàn)錯(cuò)誤的例子:stringmyString="C:\Windows"; //錯(cuò)誤因?yàn)?\"被認(rèn)為是轉(zhuǎn)義符的開始,而"\W"卻不是系統(tǒng)內(nèi)置的轉(zhuǎn)義符,因此編譯出錯(cuò)。下面是正確的兩個(gè)例子:stringmyString="C:\\Windows"; //正確,“\\”轉(zhuǎn)義為“\”stringmyString=@"C:\Windows"; //正確對(duì)于使用“@”開始的字符串標(biāo)識(shí),編譯器將忽略其中的轉(zhuǎn)義符,而將其直接作為字符處理。2.2.3裝箱和拆箱裝箱是值類型轉(zhuǎn)換為object類型,或者轉(zhuǎn)換為由值類型所實(shí)現(xiàn)的任何接口類型。把一個(gè)值類型的值裝箱,也就是創(chuàng)建一個(gè)對(duì)象并把這個(gè)值賦給這個(gè)對(duì)象。以下是一個(gè)裝箱的代碼,圖2.8給出了裝箱操作示意圖。inti=123; //把“123”賦給int型變量iobjecto=i; //裝箱操作拆箱操作正好相反,是從object類型轉(zhuǎn)換為值類型,或者是將一個(gè)接口類型轉(zhuǎn)換為一個(gè)實(shí)現(xiàn)該接口的值類型。圖2.8裝箱操作2.2.3裝箱和拆箱拆箱的過程分為2個(gè)步驟:一是檢查對(duì)象實(shí)例是否是給定的值類型的裝箱值,二是將值從對(duì)象實(shí)例中復(fù)制出來。下面列出一個(gè)簡(jiǎn)單的拆箱操作代碼,圖2.9給出了拆箱操作示意圖。inti=123; //把“123”賦給int型變量iobjecto=i; //裝箱操作intj=(int)o; //拆箱操作圖2.9拆箱操作2.2.3裝箱和拆箱【例EX2_2】string引用類型的特殊性。實(shí)現(xiàn)步驟:1.新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_2”。2.添加代碼代碼如下所示。3.運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,結(jié)果如圖2.10所示。圖2.10例EX2_2運(yùn)行結(jié)果2.3常量和變量2.3.1常量常量,顧名思義就是在程序運(yùn)行期間其值不會(huì)改變的量。常量及其使用非常直觀,以能讀懂的固定格式表示固定的數(shù)值,每一種值類型都有自己的常量表示形式。例如:168U //這是一個(gè)uint類型常量32L //這是一個(gè)long類型常量常量通??梢苑譃橐韵聨追N。2.3.1常量1.整型常量對(duì)于一個(gè)整數(shù)值,默認(rèn)的類型就是能保存它的最小整數(shù)類型,其類型可以分為int、uint、long或ulong。如果默認(rèn)類型不是想要的類型,可以在常量后面加后綴(U或L)來明確指定其類型。在常量后面加L或l(不區(qū)分大小寫)表示長(zhǎng)整型。例如:32 //這是一個(gè)int類型32L //這是一個(gè)long類型在常量后面加U或u(不區(qū)分大小寫)表示無符號(hào)整數(shù)。例如:128U //這是一個(gè)uint類型128UL //這是一個(gè)ulong類型整型常量既可以采用十進(jìn)制也可以采用十六進(jìn)制,不加特別說明默認(rèn)為十進(jìn)制,在數(shù)值前面加0x(或0X)則表示十六進(jìn)制數(shù),十六進(jìn)制基數(shù)用0~9、A~F(或a~f)表示,例如:0x20 //十六進(jìn)制數(shù)20,相當(dāng)于十進(jìn)制數(shù)320x1F //十六進(jìn)制數(shù)1F,相當(dāng)于十進(jìn)制數(shù)312.3.1常量2.浮點(diǎn)常量一般帶小數(shù)點(diǎn)的數(shù)或用科學(xué)計(jì)數(shù)法表示的數(shù)都被認(rèn)為是浮點(diǎn)數(shù),它的數(shù)據(jù)類型默認(rèn)為double類型,但也可以加后綴符表明三種不同的浮點(diǎn)格式數(shù)。(1)在數(shù)字后面加F(f)表示float類型。(2)在數(shù)字后面加D(d)表示double類型。(3)在數(shù)字后面加M(m)表示decimal類型。例如:3.14,3.14e2,0.168E2//都是double類型常量,3.14e2相當(dāng)于3.14×1020.168E2相當(dāng)于0.618×1023.14F,0.168f //都是float類型常量3.14D,0.168d //都是double類型常量3.14M,0.168m //都是decimal類型常量2.3.1常量3.字符常量字符常量,簡(jiǎn)單地說,就是用單引號(hào)括起來的單個(gè)字符,如'A',它占16位,以無符號(hào)整型數(shù)的形式存儲(chǔ)這個(gè)字符所對(duì)應(yīng)的Unicode代碼。這對(duì)于大多數(shù)圖形字符是可行的,但對(duì)一些非圖形的控制字符(如回車符)則行不通,所以字符常量的表達(dá)有若干種形式。(1)單引號(hào)括起的一個(gè)字符,如'A'。(2)十六進(jìn)制的換碼系列,以“\x”或“\X”開始,后面跟4位十六進(jìn)制數(shù),如'\X0041'。(3)Unicode碼表示形式,以“\U”或“\u”開始,后面跟4位十六進(jìn)制數(shù),如'\U0041'。(4)顯式轉(zhuǎn)換整數(shù)字符代碼,如(char)65。(5)字符轉(zhuǎn)義系列,如表2.2所示。2.3.1常量4.字符串常量字符串常量是用雙引號(hào)括起的零個(gè)或多個(gè)字符序列。C#支持兩種形式的字符串常量,一種是常規(guī)字符串,另一種是逐字字符串。(1)常規(guī)字符串。雙引號(hào)括起的一串字符,可以包括轉(zhuǎn)義字符。例如:"Hello,World\n" //表示字符串Hello,World加換行符"C:\\windows\\Microsoft" //表示字符串

C:\windows\Microsoft(2)逐字字符串。在常規(guī)的字符串前面加一個(gè)@,就形成了逐字字符串,它的意思是字符串中的每個(gè)字符均表示本意,不使用轉(zhuǎn)義字符。如果在字符串中需用到雙引號(hào),則可連寫兩個(gè)雙引號(hào)來表示一個(gè)雙引號(hào)。例如:@"C:\windows\Microsoft" //與

"C:\\windows\\Microsoft"含義相同@"Hesaid""Hello""tome" //與"Hesaid\"Hello\"tome"含義相同2.3.1常量5.布爾常量它只有兩個(gè)值:true和false。6.符號(hào)常量在聲明語句中,可以聲明一個(gè)標(biāo)識(shí)符常量,但必須在定義標(biāo)識(shí)符時(shí)就進(jìn)行初始化,并且定義之后就不能再改變?cè)摮A康闹怠>唧w的格式為:const類型

標(biāo)識(shí)符=初值例如:constdoublePI=3.14159 //標(biāo)識(shí)符PI就是3.141592.3.2變量C#中的變量必須先聲明后使用。聲明變量包括變量的名稱、數(shù)據(jù)類型,必要時(shí)指定變量的初始值。聲明變量的形式:類型

標(biāo)識(shí)符;或

類型

標(biāo)識(shí)符[=初值][,…];標(biāo)識(shí)符必須以字母或者_(dá)(下畫線)開頭,后面跟字母、數(shù)字和下畫線的組合。例如:name、_Int、Name、x_1 //都是合法的標(biāo)識(shí)符但C#是大小寫敏感的語言,name、Name分別代表不同的標(biāo)識(shí)符,在定義和使用時(shí)要特別注意。另外變量名不能與C#中的關(guān)鍵字相同,除非標(biāo)識(shí)符是以@作為前綴的。例如:intx; //合法floaty1=0.0,y2=1.0,y3; //合法,變量說明的同時(shí)可以設(shè)置初始數(shù)值stringchar //不合法,因?yàn)閏har是關(guān)鍵字string@char //合法2.3.2變量【例EX2_3】string引用類型的特殊性。實(shí)現(xiàn)步驟:1.新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_3”。2.添加代碼代碼如下所示。3.運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,結(jié)果如圖2.11所示。圖2.11例EX2_3運(yùn)行的結(jié)果2.4運(yùn)算符和表達(dá)式表達(dá)式是由操作數(shù)和運(yùn)算符構(gòu)成的。操作數(shù)可以是常量、變量、屬性等;運(yùn)算符指示對(duì)操作數(shù)進(jìn)行什么樣的運(yùn)算。因此,也可以說表達(dá)式就是利用運(yùn)算符來執(zhí)行某些計(jì)算并且產(chǎn)生計(jì)算結(jié)果的語句。例如:inta=3,b=5,c;c=a+b; //賦值表達(dá)式語句,結(jié)果是c等于8C#提供大量的運(yùn)算符,按需要操作數(shù)的數(shù)目來分,有一元運(yùn)算符(如++)、二元運(yùn)算符(如+,*)、三元運(yùn)算符(如?:)。按運(yùn)算功能來分,基本的運(yùn)算符可以分為以下幾類:(1)算術(shù)運(yùn)算符。(2)關(guān)系運(yùn)算符。(3)邏輯運(yùn)算符。(4)賦值運(yùn)算符。(5)條件運(yùn)算符。(6)位運(yùn)算符。(7)其他(分量運(yùn)算符'.',下標(biāo)運(yùn)算符

'[]'等)。2.4.1算術(shù)運(yùn)算符算術(shù)運(yùn)算符作用的操作數(shù)類型可以是整型也可以是浮點(diǎn)型,運(yùn)算符如表2.3所示。其中:(1)“+*/”運(yùn)算與一般代數(shù)意義及其他語言相同,但需要注意:當(dāng)“/”作用的兩個(gè)操作數(shù)都是整型數(shù)據(jù)類型時(shí),其計(jì)算結(jié)果也是整型。例如:4/2 //結(jié)果等于25/2 //結(jié)果等于25/2.0 //結(jié)果等于2.5(2)“%”取模運(yùn)算,即獲得整數(shù)除法運(yùn)算的余數(shù),所以也稱取余。例如:11%3 //結(jié)果等于212%3 //結(jié)果等于011.0%3 //結(jié)果等于2,這與C/C++不同,它也可作用于浮點(diǎn)類型的操作數(shù)2.4.1算術(shù)運(yùn)算符(3)“++”和“”遞增和遞減運(yùn)算符是一元運(yùn)算符,它作用的操作數(shù)必須是變量,不能是常量或表達(dá)式。它既可出現(xiàn)在操作數(shù)之前(前綴運(yùn)算),也可出現(xiàn)在操作數(shù)之后(后綴運(yùn)算),前綴和后綴有共同之處,也有很大區(qū)別。例如:++x //先將x加一個(gè)單位,然后再將計(jì)算結(jié)果作為表達(dá)式的值x++ //先將x的值作為表達(dá)式的值,然后再將x加一個(gè)單位不管是前綴還是后綴,它們操作的結(jié)果對(duì)操作數(shù)而言,都是一樣的,操作數(shù)都加了一個(gè)單位,但它們出現(xiàn)在表達(dá)式運(yùn)算中是有區(qū)別的。例如:intx,y;x=5;y=++x; //x和y的值都等于6x=5;y=x++; //x的值是6,y的值是52.4.2關(guān)系運(yùn)算符關(guān)系運(yùn)算符用來比較兩個(gè)操作數(shù)的值,運(yùn)算結(jié)果為布爾類型的值(true或false),如表2.4所示。2.4.2關(guān)系運(yùn)算符如果操作數(shù)是string類型的,則在下列兩種情況下被視為兩個(gè)string值相等。(1)兩個(gè)值均為null。(2)兩個(gè)值都是對(duì)字符串實(shí)例的非空引用,這兩個(gè)字符串不僅長(zhǎng)度相同,并且每一個(gè)對(duì)應(yīng)的字符位置上的字符也相同。例如:

intx=1,y=1;objectb1,b2,b3;strings1="ABCD",s2="1234",s3="ABCD";b1=x;b2=b1;b3=y;x==y; //結(jié)果為trueb1==b2; //結(jié)果為trueb1!=b3; //結(jié)果為trues1==s2; //結(jié)果為falses1==s3; //結(jié)果為true關(guān)系比較運(yùn)算“>、>=、<、<=”是以順序作為比較的標(biāo)準(zhǔn),所以它要求操作數(shù)的數(shù)據(jù)類型只能是數(shù)值類型,即整型數(shù)、浮點(diǎn)數(shù)、字符及枚舉等類型。2.4.3邏輯運(yùn)算符邏輯運(yùn)算符是用來對(duì)兩個(gè)布爾類型的操作數(shù)進(jìn)行邏輯運(yùn)算的,運(yùn)算的結(jié)果也是布爾類型,如表2.5所示。假設(shè)p、q是兩個(gè)布爾類型的操作數(shù),表2.6給出了邏輯運(yùn)算的真值表。2.4.3邏輯運(yùn)算符運(yùn)算符“&&”和“||”的操作結(jié)果與“&”和“|”一樣,但它們的短路特征使代碼的效率更高。所謂短路就是在邏輯運(yùn)算的過程中,如果計(jì)算第一個(gè)操作數(shù)時(shí),就能得知運(yùn)算結(jié)果就不會(huì)再計(jì)算第二個(gè)操作數(shù),例如:intx,y;boolz;x=1;y=0;z=(x>1)&(++y>0); //z的值為false,y的值為1z=(x>1)&&(++y>0); //z的值為false,y的值為02.4.4賦值運(yùn)算符1.簡(jiǎn)單賦值運(yùn)算符語法形式:var=exp賦值運(yùn)算符左邊的稱為左值,右邊的稱為右值。右值是一個(gè)與左值類型兼容的表達(dá)式(exp),它可以是常量、變量或一般表達(dá)式。左值必須是一個(gè)已定義的變量或?qū)ο螅╲ar),因?yàn)橘x值運(yùn)算就是將表達(dá)式的值存放到左值,因此左值必須是內(nèi)存中已分配的實(shí)際物理空間。例如:inta=1;intb=++a; //a的值加1賦給了b如果左值和右值的類型不一致,在兼容的情況下,則需要進(jìn)行自動(dòng)轉(zhuǎn)換(隱式轉(zhuǎn)換)或強(qiáng)制類型轉(zhuǎn)換(顯式類型轉(zhuǎn)換)。一般原則是,從占用內(nèi)存較少的短數(shù)據(jù)類型向占用內(nèi)存較多的長(zhǎng)數(shù)據(jù)類型賦值時(shí),可以不做顯式的類型轉(zhuǎn)換,C#會(huì)進(jìn)行自動(dòng)類型轉(zhuǎn)換,反之當(dāng)從較長(zhǎng)的數(shù)據(jù)類型向占用較少內(nèi)存的短數(shù)據(jù)類型賦值時(shí),則必須做強(qiáng)制類型轉(zhuǎn)換。例如:inta=2000;doubleb=a; //隱式轉(zhuǎn)換,b等于2000bytec=(byte)a; //顯式轉(zhuǎn)換,c等于2082.4.4賦值運(yùn)算符2.復(fù)合賦值運(yùn)算符在進(jìn)行如x=x+3運(yùn)算時(shí),C#提供一種簡(jiǎn)化方式x+=3,這就是復(fù)合賦值運(yùn)算。語法形式:varop=exp//op表示某一運(yùn)算符等價(jià)于var=varopexp除了關(guān)系運(yùn)算符,一般二元運(yùn)算符都可以和賦值運(yùn)算符在一起構(gòu)成復(fù)合賦值運(yùn)算,如表2.7所示。2.4.5條件運(yùn)算符語法形式:exp1?exp2:exp3其中,表達(dá)式exp1的運(yùn)算結(jié)果必須是一個(gè)布爾類型值,表達(dá)式exp2和exp3可以是任意數(shù)據(jù)類型,但它們返回的數(shù)據(jù)類型必須一致。首先計(jì)算exp1的值,如果其值為true,則計(jì)算exp2值,這個(gè)值就是整個(gè)表達(dá)式的結(jié)果;否則,取exp3的值作為整個(gè)表達(dá)式的結(jié)果。例如:z=x>y?x:y; //z的值就是x,y中較大的一個(gè)值

z=x>=0?x:x; //z的值就是x的絕對(duì)值條件運(yùn)算符“?:”是C#中唯一的一個(gè)三元運(yùn)算符。2.4.6運(yùn)算符的優(yōu)先級(jí)與結(jié)合性在表達(dá)式中,運(yùn)算符的優(yōu)先級(jí)和結(jié)合性控制著運(yùn)算的執(zhí)行順序,也可以用圓括號(hào)“()”顯式地標(biāo)明運(yùn)算順序,例如:(x+y)*2 //x加上y后再乘以2表2.8列出了C#運(yùn)算符的優(yōu)先級(jí)與結(jié)合性,其中表頂部的優(yōu)先級(jí)較高。2.4.6運(yùn)算符的優(yōu)先級(jí)與結(jié)合性【例EX2_4】一元前綴遞減和一元后綴遞減的區(qū)別。實(shí)現(xiàn)步驟:1.新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_4”。2.添加代碼代碼如下所示。3.運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,結(jié)果如圖2.12所示。圖2.12例EX2_4運(yùn)行的結(jié)果2.5流程控制2.5.1條件語句1.if語句if語句在使用時(shí)可以有幾種典型的形式,它們分別是:if框架、if_else框架、if_elseif框架及嵌套的if語句,下面逐一介紹。(1)if框架語法形式:if(條件表達(dá)式)語句;如果條件為真,則執(zhí)行語句。在語法上這里的語句是指單個(gè)語句,若想執(zhí)行一組語句,可將這一組語句用“{”和“}”括起來構(gòu)成一個(gè)塊語句,當(dāng)然在語法上塊語句就是一條語句,下面涉及的語句都是這個(gè)概念。例如:if(x<0)x=x; //取x的絕對(duì)值if(a+b>c&&b+c>a&&a+c>b) //判斷數(shù)據(jù)合法性{ p=(a+b+c)/2; s=Math.Sqrt(p*(pa)*(pb)*(pc)); //求三角形面積}2.5.1條件語句(2)if_else框架語法格式:if(條件表達(dá)式)

語句1;else

語句2;如果條件表達(dá)式為真,執(zhí)行語句1;否則,執(zhí)行語句2。例如:if(a+b>c&&b+c>a&&a+c>b) //判斷數(shù)據(jù)合法性{ p=(a+b+c)/2; s=Math.Sqrt(p*(pa)*(pb)*(pc)); //求三角形面積}else Console.WriteLine("三角形的三條邊數(shù)據(jù)有錯(cuò)!"); //輸出出錯(cuò)信息2.5.1條件語句(3)if_elseif框架語法形式:if(條件表達(dá)式1)

語句1;elseif(條件表達(dá)式2)

語句2;elseif(條件表達(dá)式3)

語句3; …[else

語句n

;]2.5.1條件語句該語句執(zhí)行時(shí),從上往下計(jì)算相應(yīng)的條件表達(dá)式,如果結(jié)果為真則執(zhí)行相應(yīng)語句,跳過if_elseif框架的剩余部分,直接執(zhí)行if_elseif框架的下一條語句;如果結(jié)果為假,則繼續(xù)往下計(jì)算相應(yīng)的條件表達(dá)式,直到所有的條件表達(dá)式都不成立,則執(zhí)行這個(gè)語句的最后部分else所對(duì)應(yīng)的語句,或者如果沒有else語句就什么也不做。例如:

if(studentGrade>=90) Console.WriteLine("成績(jī)優(yōu)秀");elseif(studentGrade>=80) Console.WriteLine("成績(jī)良好");elseif(studentGrade>=60) Console.WriteLine("成績(jī)及格"); else Console.WriteLine("成績(jī)不及格");2.5.1條件語句(4)嵌套的if語句在if語句框架中,無論條件表達(dá)式為真或?yàn)榧?,將要?zhí)行的語句都有可能又是一個(gè)if語句,這種if語句又包含if語句的結(jié)構(gòu)就稱為嵌套的if語句。為了避免二義性,C#規(guī)定else語句與和它處于同一模塊最近的if相匹配。例如:假設(shè)有一函數(shù)2.5.1條件語句下面是用嵌套的if語句縮寫的程序片斷。inty=0,x;if(x>=0) if(x>0) y=1; else y=1;這個(gè)else是與最近的if匹配,那么else的含義就是x=0的情況,所以這個(gè)程序邏輯上是錯(cuò)的。如果按這個(gè)結(jié)構(gòu)寫,應(yīng)修正為:inty=0,x;if(x>=0){ if(x>0) y=1;}else y=1;通過對(duì)嵌套的if語句加“{}”,把離else最近的if語句屏蔽了,這樣else就與if(x>=0)匹配,從而正確地完成了這個(gè)函數(shù)的功能。2.5.1條件語句2.switch語句switch語句是一個(gè)多分支結(jié)構(gòu)的語句,它所實(shí)現(xiàn)的功能與if_elseif結(jié)構(gòu)很相似,但在大多數(shù)情況下,switch語句表達(dá)方式更直觀、簡(jiǎn)單、有效。語法格式:switch(表達(dá)式){ case常量1:

語句序列1; //由零個(gè)或多個(gè)語句組成 Break; case常量2:

語句序列2; Break; … default://default是任選項(xiàng),可以不出現(xiàn)

語句序列n; Break;}2.5.1條件語句C#的switch語句需要注意以下幾點(diǎn):(1)switch語句的表達(dá)式必須是整數(shù)類型,如char、sbyte、byte、ushort、short、uint、int、ulong、long或string、枚舉類型,case常量必須是與表達(dá)式類型相兼容,case常量的值必須互異,不能有重復(fù)。(2)將與某個(gè)case相關(guān)聯(lián)的語句序列接在另一個(gè)case語句序列之后是錯(cuò)誤的,這稱為“不穿透”規(guī)則,所以需要跳轉(zhuǎn)語句結(jié)束這個(gè)語句序列,通常選用break語句作為跳轉(zhuǎn),也可以用goto轉(zhuǎn)向語句等?!安淮┩浮币?guī)則是C#對(duì)C、C++、Jave這類語言中的switch語句的一個(gè)修正,這樣做的好處是:一是允許編譯器對(duì)switch語句做優(yōu)化處理時(shí)可自由地調(diào)整case的順序;二是防止程序員不經(jīng)意地漏掉break語句而引起錯(cuò)誤。(3)雖然不能讓一個(gè)case的語句序列穿透到另一個(gè)case語句序列,但是可以有兩個(gè)或多個(gè)case前綴指向相同的語句序列。2.5.1條件語句【例EX2_5】利用“switch”語句把百分制學(xué)生成績(jī)換算成等級(jí)制成績(jī)。實(shí)現(xiàn)步驟:(1)新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_5”。(2)添加代碼代碼如下所示。(3)運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,輸入成績(jī)“86”并按回車鍵,結(jié)果如圖2.13所示。圖2.13例EX2_5運(yùn)行的結(jié)果2.5.2循環(huán)語句1.while語句語法形式:

while(條件表達(dá)式)

循環(huán)體語句;如果條件表達(dá)式為真(true),則執(zhí)行循環(huán)體語句。while語句執(zhí)行流程如圖2.14所示。圖2.14while語句執(zhí)行流程圖2.5.2循環(huán)語句例如,求0~100的整數(shù)和:intSum,i;Sum=0;i=1;while(i<=100){ Sum+=i; i++;}Console.WriteLine("Sumis"+Sum); //輸出結(jié)果是:Sumis50502.5.2循環(huán)語句2.do_while語句語法格式:do{

循環(huán)體語句;}while(條件表達(dá)式);

該循環(huán)首先執(zhí)行循環(huán)體語句,再判斷條件表達(dá)式。如果條件表達(dá)式為真(true),則繼續(xù)執(zhí)行循環(huán)體語句。do…while循環(huán)語句執(zhí)行流程如圖2.15所示。圖2.15do_while語句執(zhí)行流程圖2.5.2循環(huán)語句while語句與do_while語句很相似,它們的區(qū)別在于while語句的循環(huán)體有可能一次也不執(zhí)行,而do_while語句的循環(huán)體至少執(zhí)行一次。例如使用do_while方法求0~100的整數(shù)和:intSum=0,i=1; do { Sum+=i; i++; }while(i<=100);Console.WriteLine("Sumis"+Sum); //輸出結(jié)果是:Sumis50502.5.2循環(huán)語句3.for語句C#的for循環(huán)是循環(huán)語句中最具特色的,它功能較強(qiáng),靈活多變,使用廣泛。語法形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語句;for語句執(zhí)行流程如圖2.16所示。一般情況下,表達(dá)式1是設(shè)置循環(huán)控制變量的初值;表達(dá)式2是布爾類型的表達(dá)式,作為循環(huán)控制條件;表達(dá)式3是設(shè)置循環(huán)控制變量的增值(正負(fù)皆可)。圖2.16for語句執(zhí)行流程圖2.5.2循環(huán)語句3個(gè)表達(dá)式都是可選的,默認(rèn)某個(gè)表達(dá)式時(shí),其后的分號(hào)“;”不能省,如3個(gè)表達(dá)式都默認(rèn)的情況如下:for(;;){語句}for語句的執(zhí)行順序如下:(1)按書寫順序?qū)⒈磉_(dá)式1執(zhí)行一遍,為循環(huán)控制變量賦初值;(2)測(cè)試表達(dá)式2是否為真;(3)若沒有表達(dá)式2或表達(dá)式2為真,則執(zhí)行內(nèi)嵌語句一遍,按表達(dá)式3的規(guī)律改變循環(huán)控制變量的值,回到第二步執(zhí)行;(4)若表達(dá)式2不滿足,則for循環(huán)終止。2.5.2循環(huán)語句for循環(huán)的一些變化特點(diǎn):(1)for循環(huán)語句,表達(dá)式1和表達(dá)式3可引入逗號(hào)運(yùn)算符“,”,這樣可以對(duì)若干變量賦初值或增值。例如:intSum,i;for(Sum=0,i=1;i<=100;i++) Sum+=i;Console.WriteLine("Sumis"+Sum); //在頁面上輸出結(jié)果是:Sumis5050for(Sum=0,i=1;i<=100;Sum+=i,i++); //循環(huán)體是一個(gè)空語句Console.WriteLine("Sumis"+Sum); //在頁面上輸出結(jié)果是:Sumis50502.5.2循環(huán)語句(2)for循環(huán)的3個(gè)表達(dá)式可以任意默認(rèn),甚至全部默認(rèn),如果表達(dá)式2默認(rèn)就約定它的值是true。但不管哪個(gè)表達(dá)式默認(rèn),其相應(yīng)的分號(hào)“;”不能默認(rèn)。例如:intSum,i;for(Sum=0,i=1;i<=100;) //默認(rèn)表達(dá)式3 Sum+=i++;Console.WriteLine("Sumis"+Sum);//輸出結(jié)果是:Sumis5050for(Sum=0,i=1;;Sum+=i,i++) //默認(rèn)表達(dá)式2,約定值是true if(i>100)break; //但條件滿足時(shí),break語句跳出循環(huán)Console.WriteLine("Sumis"+Sum);Sum=0;i=1;for(;;) //3個(gè)表達(dá)式都默認(rèn){ Sum+=i++; if(i>100) //這種情況一般都會(huì)用if語句來設(shè)置跳出循環(huán) break;}Console.WriteLine("Sumis"+Sum); //輸出結(jié)果是:Sumis50502.5.2循環(huán)語句(3)可在for循環(huán)內(nèi)部聲明循環(huán)控制變量。如果循環(huán)控制變量?jī)H僅只在這個(gè)循環(huán)中用到,那么為了更有效地使用變量,也可在for循環(huán)的初始化部分(表達(dá)式1)聲明該變量,當(dāng)然這個(gè)變量的作用域在這個(gè)循環(huán)內(nèi)。例如:intSum=0;for(inti=1;i<=100;i++) //i只在這個(gè)for循環(huán)中有效 Sum+=i;Console.WriteLine("i="+i); //編譯出錯(cuò),i這時(shí)已經(jīng)無效Console.WriteLine("Sumis"+Sum); //在頁面上輸出結(jié)果是:Sumis50502.5.2循環(huán)語句【例EX2_6】利用for語句計(jì)算百元百雞問題。所謂百元百雞問題就是說公雞5元一只、母雞3元一只、小雞1元3只,問100元買100只雞,其中,公雞、母雞、小雞各多少只。設(shè)計(jì)思路:設(shè)公雞數(shù)、母雞數(shù)、小雞數(shù)分別為gj、mj、xj,則要滿足如下兩個(gè)條件:gj+mj+xj=1005*gj+3*mj+xj/3=100實(shí)現(xiàn)步驟:(1)新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_6”。(2)添加代碼代碼如下所示。2.5.2循環(huán)語句(3)運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,結(jié)果如圖2.17所示。說明:Console的Write與WriteLine方法可以顯示格式化數(shù)據(jù)。此例WriteLine方法中“{0}、{1}、{2}”是格式項(xiàng),其字符序列告訴這個(gè)方法使用哪個(gè)變?cè)?,如何格式化。例如此例中“{0}”使用gj變?cè)?“{1}”使用mj變?cè)?,“{2}”使用xj變?cè)?。圖2.17例EX2_6運(yùn)行的結(jié)果2.5.2循環(huán)語句4.foreach語句foreach語句是C#中新引入的,它表示收集一個(gè)集合中的各元素,并針對(duì)各元素執(zhí)行內(nèi)嵌語句。語法格式:foreach(類型

標(biāo)識(shí)符

in集合表達(dá)式

)語句;其中:(1)標(biāo)識(shí)符是指foreach循環(huán)的迭代變量,它只在foreach語句中有效,并且是一個(gè)只讀局部變量,也就是說在foreach語句中不能改寫這個(gè)迭代變量。它的類型應(yīng)與集合的基本類型相一致。(2)集合表達(dá)式是指被遍歷的集合,例如數(shù)組。在foreach語句執(zhí)行期間,迭代變量按集合元素的順序依次將其內(nèi)容寫入。例如:intm=0;stringmystring="laskdjflasdkjasdalfakeoflkdsa";foreach(charmycharinmystring){ if(mychar=='a') //判斷迭代變量mychar是否為a字符 m++;}Console.WriteLine("字符串中有{0}個(gè)a",m); //輸出“字符串中有6個(gè)a”2.5.3跳轉(zhuǎn)語句1.continue語句語法形式:continue;continue語句只能用于循環(huán)語句中,它的作用是結(jié)束本輪循環(huán),不再執(zhí)行余下的循環(huán)體語句,對(duì)while和do_while結(jié)構(gòu)的循環(huán),在continue執(zhí)行之后,就立刻測(cè)試循環(huán)條件,以決定循環(huán)是否繼續(xù)下去;對(duì)for結(jié)構(gòu)循環(huán),在continue執(zhí)行之后,先求表達(dá)式3(即循環(huán)增量部分),然后再測(cè)試循環(huán)條件。通常它會(huì)和一個(gè)條件語句結(jié)合起來使用,不會(huì)是獨(dú)立的一條語句,也不會(huì)是循環(huán)體的最后一條語句,否則沒有任何意義。例如:for(intn=1;n<=100;n++){ if(n%3!=0)continue; //如果n不能被3整除,則直接進(jìn)入下一輪循環(huán) Console.WriteLine(n+""); //只有能被3整除的數(shù),才會(huì)執(zhí)行到此,顯示出來}此段代碼是輸出1~100含有因子3的數(shù)。2.5.3跳轉(zhuǎn)語句2.break語句語法形式:break;break語句只能用于循環(huán)語句或switch語句中。如果在switch語句中執(zhí)行到break語句,則立刻從switch語句中跳出,轉(zhuǎn)到switch語句的下一條語句;如果在循環(huán)語句執(zhí)行到break語句,則會(huì)導(dǎo)致循環(huán)立刻結(jié)束,跳轉(zhuǎn)到循環(huán)語句的下一條語句。不管循環(huán)有多少層,break語句只能從包含它的最內(nèi)層循環(huán)跳出一層。例如:intm=0;stringmystring="laskdjflasdkjasdalfakeoflkdsa";foreach(charmycharinmystring){ m++; if(mychar=='a') //判斷迭代變量mychar是否為a字符break; //mychar為a字符則跳出循環(huán)}Console.WriteLine("字符串中第1個(gè)a在"+m+"位置");//輸出:字符串中第1個(gè)a在2位置此段代碼是查找出字符串中第1個(gè)a所在的位置。2.5.3跳轉(zhuǎn)語句3.return語句語法形式:return;或return表達(dá)式;return語句出現(xiàn)在一個(gè)方法內(nèi)。在方法中執(zhí)行到return語句時(shí),程序的執(zhí)行流程轉(zhuǎn)到調(diào)用這個(gè)方法處。如果方法沒有返回值(返回類型修飾為void),則使用“return”格式返回;如果方法有返回值,那么使用“return表達(dá)式”格式,其后面跟的表達(dá)式就是方法的返回值。例如:protectedvoidPage_Load(objectsender,EventArgse){ return; //返回 Console.WriteLine("程序執(zhí)行到此"); //并不顯示“程序執(zhí)行到此”字樣}2.5.3跳轉(zhuǎn)語句4.goto語句goto語句可以將程序的執(zhí)行流程從一個(gè)地方轉(zhuǎn)移到另一個(gè)地方,非常靈活,但正因?yàn)樗`活,所以容易造成程序結(jié)構(gòu)混亂的局面,應(yīng)該有節(jié)制地、合理地使用goto語句。語法形式:goto標(biāo)號(hào);標(biāo)號(hào):語句;其中,“標(biāo)號(hào)”就是定位在某一語句之前的一個(gè)標(biāo)識(shí)符,稱為標(biāo)號(hào)語句。例如:intm=0;stringmystring="laskdjflasdkjasdalfakeoflkdsa";foreach(charmycharinmystring){ m++; if(mychar=='a') //判斷迭代變量mychar是否為a字符gotoend; //mychar為a字符則跳出循環(huán)}end:Console.WriteLine("第1個(gè)a在第"+m+"位"); //輸出:第1個(gè)a在第2位2.5.3跳轉(zhuǎn)語句它給出goto語句轉(zhuǎn)向的目標(biāo),在頁面上輸出“第1個(gè)a在第2位”字樣,值得注意的是,goto語句不能使控制轉(zhuǎn)移到另一個(gè)語句塊內(nèi)部,更不能轉(zhuǎn)到另一個(gè)函數(shù)內(nèi)部。另外,goto語句如果用在switch語句中,有如下形式。語法形式:gotocase常量;gotodefault;它只能在本switch語句中從一種情況轉(zhuǎn)向另一種情況。例如。2.5.4異常處理程序中對(duì)異常的處理能使程序更加健壯?,F(xiàn)在的許多程序設(shè)計(jì)語言都增加了異常處理的能力,C#也不例外。異常產(chǎn)生的原因主要有2點(diǎn):(1)由throw語句立即無條件的引發(fā)異常,控制永遠(yuǎn)不會(huì)到達(dá)緊跟在throw語句后的語句。(2)在處理C#語句和表達(dá)式的過程中,會(huì)出現(xiàn)一些例外情況,使某些操作無法正常完成,此時(shí)就會(huì)引發(fā)一個(gè)異常。例如,整數(shù)除法運(yùn)算中,如果分母為零,就會(huì)引發(fā)一個(gè)DivideByZeroException異常。異常處理語法形式:try{

語句}catch(類型標(biāo)識(shí)符){

語句}finally{語句

}2.5.4異常處理如果執(zhí)行try塊出現(xiàn)異常則轉(zhuǎn)向相應(yīng)的catch塊,執(zhí)行完catch塊后再執(zhí)行finally塊。finally塊總是在離開try語句塊后執(zhí)行的,而且finally塊中程序是必須執(zhí)行的,finally塊主要是釋放資源。例如:inta=5,b=0;try{ a/=b; //不能除以零,所以導(dǎo)致異常}catch(DivideByZeroExceptionde){ Console.WriteLine(de.Message); //輸出“試圖除以零” return; //返回}finally{ Console.WriteLine("執(zhí)行到finally塊中");}//輸出“執(zhí)行到finally塊中”2.5.4異常處理【例EX2_7】利用checked語句關(guān)鍵字檢查算術(shù)運(yùn)算是否有溢出。實(shí)現(xiàn)步驟:1.新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_7”。2.添加代碼代碼如下所示。3.運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,結(jié)果如圖2.18所示。圖2.18例EX2_7運(yùn)行的結(jié)果2.6數(shù)組、結(jié)構(gòu)和枚舉2.6.1數(shù)組1.一維數(shù)組一維數(shù)組是以線性方式存儲(chǔ)固定數(shù)目的項(xiàng)的數(shù)組。(1)一維數(shù)組的聲明語法形式:type[]arrayName;其中:type是可以是C#中任意的數(shù)據(jù)類型。[]是表明后面的變量是一個(gè)數(shù)組類型,必須放在數(shù)組名之前。arrayName是數(shù)組名,遵循標(biāo)識(shí)符的命名規(guī)則。例如:

int[]a1; //a1是一個(gè)含有int類型數(shù)據(jù)的數(shù)組double[]f1; //f1是一個(gè)含有double類型數(shù)據(jù)的數(shù)組

string[]s1; //s1是一個(gè)含有string類型數(shù)據(jù)的數(shù)組2.6.1數(shù)組(2)創(chuàng)建數(shù)組對(duì)象用new運(yùn)算符創(chuàng)建數(shù)組實(shí)例,有兩種基本形式。聲明數(shù)組和創(chuàng)建數(shù)組分別進(jìn)行。語法形式:type[]arrayName; //數(shù)組聲明arrayName=newtype[size]; //創(chuàng)建數(shù)組實(shí)例size是表明數(shù)組元素的個(gè)數(shù)。聲明數(shù)組和創(chuàng)建數(shù)組實(shí)例也可以合在一起寫:type[]arrayName=newtype[size];例如:int[]a1;a1=newint[10]; //a1是一個(gè)有10個(gè)int類型元素的數(shù)組string[]s1=newstring[5]; //s1是含有5個(gè)string類型元素的數(shù)組2.6.1數(shù)組(3)一維數(shù)組的初始化語法形式1:type[]arrayName=newtype[size]{val1,val2,…,valn};數(shù)組聲明與初始化同時(shí)進(jìn)行時(shí),size就是數(shù)組元素的個(gè)數(shù),它必須是常量,而且應(yīng)該與大括號(hào)內(nèi)的數(shù)據(jù)個(gè)數(shù)一致。語法形式2:type[]arrayName=newtype[]{val1,val2,…,valn};默認(rèn)size,由編譯系統(tǒng)根據(jù)初始化表中的數(shù)據(jù)個(gè)數(shù),自動(dòng)計(jì)算數(shù)組的大小。語法形式3:type[]arrayName={val1,val2,…,valn};數(shù)組聲明與初始化同時(shí)進(jìn)行,還可以默認(rèn)new運(yùn)算符。語法形式4:type[]arrayName;arrayName=newtype[size]{val1,val2,…,valn};2.6.1數(shù)組把聲明與初始化分開在不同的語句中進(jìn)行時(shí),size同樣可以默認(rèn),也可以是一個(gè)變量。例如:int[]nums=newint[10]{0,1,2,3,4,5,6,7,8,9}; //使用語法形式1初始化int[]nums=newint[]{0,1,2,3,4,5,6,7,8,9}; //使用語法形式2初始化int[]nums={0,1,2,3,4,5,6,7,8,9}; //使用語法形式3初始化int[]nums;nums=newint[10]{0,1,2,3,4,5,6,7,8,9}; //使用語法形式4初始化2.6.1數(shù)組(4)一維數(shù)組的訪問數(shù)組具有初值時(shí),就可以像其他變量一樣被訪問,既可以取數(shù)組元素的值,又可以修改數(shù)組元素的值。在C#中是通過數(shù)組名和數(shù)組元素的下標(biāo)來引用數(shù)組元素的。語法形式:

數(shù)組名[下標(biāo)]下標(biāo)是數(shù)組元素的索引值,實(shí)際上就是要訪問的那個(gè)數(shù)組元素在內(nèi)存中的相對(duì)位移。注意:相對(duì)位移是從0開始的,所以下標(biāo)的值從0到數(shù)組元素的個(gè)數(shù)1為止。例如:intmax,min;int[]queue=newint[10]{89,78,65,52,90,92,73,85,91,95};//定義一個(gè)一維數(shù)組max=min=queue[0]; //queue[0]是數(shù)組第一個(gè)數(shù)for(inti=1;i<10;i++){ if(queue[i]>max)max=queue[i]; if(queue[i]<min)min=queue[i];}Console.WriteLine("最大數(shù)是:"+max+"<br>最小數(shù)是:"+min);//輸出數(shù)組中的最大值和最小值2.6.1數(shù)組2.多維數(shù)組多維數(shù)組就是指能用多個(gè)下標(biāo)訪問的數(shù)組,多維數(shù)組類似于同類型值的矩陣。(1)多維數(shù)組的聲明語法形式:type[,,,]arrayName;在聲明時(shí)方括號(hào)內(nèi)加逗號(hào),就表明是多維數(shù)組,有n個(gè)逗號(hào),就是n+1維數(shù)組。例如:

int[,]score; //score是一個(gè)int類型的二維數(shù)組float[,,]table; //table是一個(gè)float類型的三維數(shù)組2.6.1數(shù)組(2)創(chuàng)建數(shù)組對(duì)象聲明數(shù)組和創(chuàng)建數(shù)組分別進(jìn)行。語法形式:type[,,,]arrayName; //數(shù)組聲明arrayName=newtype[size1,size2,size3]; //創(chuàng)建數(shù)組實(shí)例size1,size2,size3分別表明多維數(shù)組每一維的元素個(gè)數(shù)。聲明數(shù)組和創(chuàng)建數(shù)組實(shí)例也可以合在一起寫。語法形式:type[,,,]arrayName=newtype[size1,size2,size3];例如:int[,]score;score=newint[3,4]; //score是一個(gè)3行4列的二維數(shù)組float[,,]table=newfloat[2,3,4] //table是一個(gè)三維數(shù)組,每一維的維數(shù)分別是2、3、42.6.1數(shù)組(3)多維數(shù)組的初始化多維數(shù)組初始化是將每維數(shù)組元素設(shè)置的初始值放在各自的大花括號(hào)內(nèi),下面以最常用的二維數(shù)組為例來討論。語法形式1:type[,]arrayName=newtype[size1,size2]{{val11,val12,…,val1n},{val21,val22,…,val2n},…,{valm1,valm2,…,valmn}};數(shù)組聲明與初始化同時(shí)進(jìn)行,數(shù)組元素的個(gè)數(shù)是size1*size2,數(shù)組的每一行分別用一個(gè)花括號(hào)括起來,每個(gè)花括號(hào)內(nèi)的數(shù)據(jù)就是這一行的每一列元素的值,初始化時(shí)的賦值順序按矩陣的“行”存儲(chǔ)原則。語法形式2:type[]arrayName=newtype[,]{{val11,val12,…,val1n},{val21,val22,…,val2n},…,{valm1,valm2,…,valmn}};默認(rèn)size,由編譯系統(tǒng)根據(jù)初始化表中花括號(hào){}的個(gè)數(shù)確定行數(shù),再根據(jù){}內(nèi)的數(shù)據(jù)確定列數(shù),從而得出數(shù)組的大小。2.6.1數(shù)組語法形式3:type[,]arrayName={{val11,val12,…,val1n},{val21,val22,…,val2n},…,{valm1,valm2,…,valmn}};數(shù)組聲明與初始化同時(shí)進(jìn)行,還可以默認(rèn)new運(yùn)算符。語法形式4:type[,]arrayName;arrayName=newtype[size1,size2]{{val11,val12,…,val1n},{val21,val22,…,val2n},…,{valm1,valm2,…,valmn}};把數(shù)組聲明與初始化分開在不同的語句中時(shí),size1、size2同樣可以默認(rèn),但也可以是變量。例如:int[,]a=newint[3,4]{{0,1,2,3},{4,5,6,7},{8,9,10,11}}; //使用語法形式1初始化int[,]a=newint[,]{{0,1,2,3},{4,5,6,7},{8,9,10,11}}; //使用語法形式2初始化int[,]a={{0,1,2,3},{4,5,6,7},{8,9,10,11}}; //使用語法形式3初始化int[]a;a=newint[3,4]{{0,1,2,3},{4,5,6,7},{8,9,10,11}}; //使用語法形式4初始化2.6.1數(shù)組【例EX2_8】求兩個(gè)矩陣的乘積。設(shè)計(jì)思路:兩個(gè)矩陣相乘,必須第一個(gè)矩陣的列和第二個(gè)矩陣的行相等。實(shí)現(xiàn)步驟:(1)新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_8”。(2)添加代碼代碼如下所示。(3)運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,結(jié)果如圖2.19所示。圖2.19例EX2_8運(yùn)行的結(jié)果2.6.2結(jié)構(gòu)結(jié)構(gòu)是值類型,通過結(jié)構(gòu)可以把相關(guān)的多種類型數(shù)據(jù)(變量)組成整體來處理,組成結(jié)構(gòu)類型的各個(gè)變量稱為結(jié)構(gòu)的數(shù)據(jù)成員(簡(jiǎn)稱成員,或者成員變量)。所有的基類型都是結(jié)構(gòu)類型,例如:int對(duì)應(yīng)S32結(jié)構(gòu),string對(duì)應(yīng)System.string結(jié)構(gòu),通過使用結(jié)構(gòu)可以創(chuàng)建更多的值類型。語法形式:[訪問修飾符]struct[結(jié)構(gòu)類型名]{ [訪問級(jí)別]<成員定義1> [訪問級(jí)別]<成員定義2>; [訪問級(jí)別]<成員定義3>; …}其中訪問修飾符包括public(公共的)、protected(保護(hù)的)、private(私有的)它們的訪問級(jí)別是由高到底的。2.6.2結(jié)構(gòu)【例EX2_9】創(chuàng)建一個(gè)學(xué)生結(jié)構(gòu),并且聲明一個(gè)學(xué)生類型對(duì)象stu,初始化,并輸出學(xué)生信息。實(shí)現(xiàn)步驟:1.新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_9”。2.添加代碼代碼如下所示。3.運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,結(jié)果如圖2.20所示。圖2.20例EX2_9運(yùn)行的結(jié)果2.6.3枚舉枚舉類型是C#中又一種輕量級(jí)的值類型,用枚舉來表達(dá)一組特定的值的集合行為,比如Windows窗體可選的狀態(tài),按鈕控件的風(fēng)格等。實(shí)際上是為一組在邏輯上密不可分的整數(shù)值提供便于記憶的符號(hào)。枚舉應(yīng)用于有多個(gè)選擇情況的場(chǎng)合,枚舉類型為一組符號(hào)常數(shù)提供了一個(gè)類型名稱。在枚舉中的每個(gè)成員實(shí)際上是一個(gè)符號(hào)常數(shù)。例如:enumColor{ Red, Green, Blue}2.6.3枚舉它聲明了一個(gè)枚舉類型Color,表示3種可能的情況:Red、Green和Blue。這里的3個(gè)值實(shí)際上是3個(gè)整數(shù)0、1、2,但與整數(shù)相比,使用枚舉類型使程序的可讀性更好,并且容易檢查出錯(cuò)誤。聲明枚舉類型,使用關(guān)鍵字enum。聲明的基本語法格式如下:enum枚舉名[:基本類型名]{

枚舉成員

[=常數(shù)表達(dá)式], …}2.6.3枚舉一個(gè)枚舉成員的數(shù)值,既可以使用等號(hào)“=”顯式地賦值,也可以不顯式地賦值,而使用隱式賦值。隱式賦值按以下規(guī)則來確定值。(1)對(duì)第一個(gè)枚舉成員,如果沒有顯式賦值,它的數(shù)值為0。(2)對(duì)其他枚舉成員,如果沒有顯式賦值,它的值等于前一枚舉成員的值加1。例如:enumColor{ Red, Green=10, Blue, Max=Blue}其中,Red的值為0,Green的值為10,Blue的值為11,Max的值為11。2.6.3枚舉【例EX2_10】聲明一個(gè)short基本類型的星期枚舉,并使用不同的方法調(diào)用。實(shí)現(xiàn)步驟:1.新建一個(gè)控制臺(tái)項(xiàng)目項(xiàng)目命名為“EX2_10”。2.添加代碼代碼如下所示。3.運(yùn)行程序按【Ctrl+F5】快捷鍵運(yùn)行程序,輸入數(shù)字“951234867”,按回車鍵,結(jié)果如圖2.21

溫馨提示

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

評(píng)論

0/150

提交評(píng)論