版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第2章VisualC#案例基礎(chǔ):C#語言基礎(chǔ)2.1一個簡單例子(控制臺方式):計算圓面積2.2數(shù)據(jù)類型2.3常量和變量2.4運算符和表達式2.5流程控制2.6數(shù)組、結(jié)構(gòu)和枚舉知識點鏈接L2.1VS2008開發(fā)環(huán)境介紹自從微軟2000年提出NET戰(zhàn)略后,.NETFramework版本不斷升級,2008年隨著微軟的.NETFramework3.5版本的發(fā)布,同時也意味著.NET技術(shù)越來越成熟,作為.NET開發(fā)的首選語言C#語言也越來越受人們的青睞,C#的優(yōu)點也同時被人們所認同。與此同時微軟也發(fā)布了VisualStudio2008開發(fā)環(huán)境(以下簡稱VS2008)。2.1一個簡單例子(控制臺方式):計算圓面積【例EX2_1】設(shè)計計算圓面積的控制臺應(yīng)用程序。實現(xiàn)步驟:1.新建控制臺項目運行VS2008,執(zhí)行【文件】→【新建】→【項目】菜單命令,彈出“新建項目”對話框,選擇VisualC#的Windows項目類型,選擇控制臺應(yīng)用程序模板,項目命名為“EX2_1”,如圖2.1所示。圖2.1新建控制臺應(yīng)用程序項目圖2.1新建控制臺應(yīng)用程序項目2.1一個簡單例子(控制臺方式):計算圓面積2.添加代碼單擊“確定”按鈕后,系統(tǒng)新建了一個命名為“EX2_1”的控制臺項目,并打開Program.cs文件。添加代碼,代碼如下所示。usingSystem;引用的命名空間usingSystem.Collections.Generic;
usingSystem.Linq;usingSystem.Text;namespaceEX2_1 //定義的命名空間{classProgram //定義類Program{staticvoidMain(string[]args) //程序的入口點{Console.WriteLine("請輸入圓的半徑"); //輸出“請輸入圓的半徑”提示字樣stringr=Console.ReadLine(); //讀入所輸入的字符doubleIntR=Convert.ToDouble(r); //將字符類型轉(zhuǎn)換為數(shù)值類型constdoublePI=3.1415926; //定義圓周率Console.WriteLine(PI*IntR*IntR); //計算圓面積并輸出}}}引用的命名空間2.1一個簡單例子(控制臺方式):計算圓面積3.運行程序,計算圓的面積按【Ctrl+F5】快捷鍵運行程序,輸入半徑值“36”,結(jié)果如圖2.2所示。圖2.2盤計算圓的面積2.1一個簡單例子(控制臺方式):計算圓面積說明:(1)命名空間是提供了一種組織相關(guān)類和其他類型的方式,當引用了命名空間時,即可直接調(diào)用其中的類。例如,System是一個命名空間,Console是該命名空間中的類。在后面章節(jié)中將詳細介紹。(2)Console類屬于System命名空間,表示控制臺應(yīng)用程序的標準輸入、輸出流和錯誤流。提供用于從控制臺讀取單個字符或整行的方法,還提供若干寫入方法,可將值類型的實例、字符數(shù)組以及對象集自動轉(zhuǎn)換為格式化或未格式化的字符串,然后將該字符串(可選擇是否尾隨一個行終止字符串)寫入控制臺。(3)static關(guān)鍵字是對方法的修飾,其含義在后續(xù)章節(jié)中將詳細介紹。(4)在代碼中“//”為代碼注釋符號,也可以使用“/*所要注釋內(nèi)容*/”加以注釋。如:namespaceEX2_1 /*定義的命名空間*/2.1一個簡單例子(控制臺方式):計算圓面積(5)調(diào)試運行程序有兩種方式,分別如下:①
執(zhí)行【調(diào)試】→【開始執(zhí)行(不調(diào)試)】菜單命令,或者直接按【Ctrl+F5】快捷鍵運行程序。這種方式只執(zhí)行程序并不調(diào)試程序。②
執(zhí)行【調(diào)試】→【啟動調(diào)試】菜單命令,或者直接按【F5】快捷鍵調(diào)試程序。這種方式需要設(shè)置斷點,當程序執(zhí)行到斷點時按【F10】快捷鍵逐步調(diào)試程序,也可以單擊工具欄中的“
”按鈕啟動調(diào)試。2.1一個簡單例子(控制臺方式):計算圓面積在【例EX2_1】中設(shè)置斷點逐步調(diào)試程序。調(diào)試步驟如下:①
單擊語句“Console.WriteLine("請輸入圓的半徑");”的左端設(shè)置斷點,如圖2.3所示。②
按【F5】快捷鍵調(diào)試程序,程序執(zhí)行到斷點處停止執(zhí)行,如圖2.4所示。③
按【F10】快捷鍵逐步調(diào)試程序,當彈出控制臺窗口提示輸入圓的半徑時輸入半徑“5”,按回車鍵繼續(xù)運行程序,同時在“自動窗口”中顯示各個變量的值,最終將計算的結(jié)果顯示在控制臺窗口中。
圖2.3設(shè)置斷點
圖2.4程序運行到斷點處2.2數(shù)據(jù)類型C#包括兩種變量類型:值類型和引用類型,數(shù)據(jù)類型的分類如圖2.5所示。本節(jié)簡單介紹這兩種數(shù)據(jù)類型以及裝箱與拆箱的基本概念。圖2.5數(shù)據(jù)類型的分類2.2.1值類型所謂值類型就是一個包含實際數(shù)據(jù)的量。當定義一個值類型的變量時,C#會根據(jù)它所聲明的類型,以堆棧方式分配一塊大小相適應(yīng)的存儲區(qū)域給這個變量,隨后對這個變量的讀、寫操作就直接在這塊內(nèi)存區(qū)域進行。例如:intiNum=10; //分配一個32位內(nèi)存區(qū)域給變量iNum,并將10放入該內(nèi)存區(qū)域iNum=iNum+10; //從變量iNum中取出值,加上10,再將計算結(jié)果賦給iNum如圖2.6所示為這個值類型的操作示意圖。圖2.6值類型操作示意圖2.2.1值類型簡單類型是系統(tǒng)預置的,一共有13個數(shù)值類型,如表2.1所示。2.2.2引用類型引用類型的變量不存儲它們所代表的實際數(shù)據(jù),而是存儲實際數(shù)據(jù)的引用。引用類型分兩步創(chuàng)建:首先在堆棧上創(chuàng)建一個引用變量,然后在堆上創(chuàng)建對象本身,再把這個內(nèi)存的句柄(也是內(nèi)存的首地址)賦給引用變量。例如:stringS1,S2;S1="ABCD";S2=S1;其中,S1、S2是指向字符串的引用變量,S1的值是字符串''ABCD''存放在內(nèi)存的地址,這就是對字符串的引用,兩個引用型變量之間的賦值,使得S2、S1都是對''ABCD''的引用,如圖2.7所示。圖2.7引用類型賦值示意2.2.2引用類型引用類型包括class(類)、interface(接口)、數(shù)組、delegate(委托)、object和string。其中object和string是兩個比較特殊的類型。C#的統(tǒng)一類型系統(tǒng)中,所有類型(預定義類型、用戶定義類型、引用類型和值類型)都是直接或間接從object繼承的??梢詫⑷魏晤愋偷闹蒂x給object類型的變量。例如:inta=10;objectabj=a; //將int類型a賦給了object類型abjstring類型表示Unicode字符的字符串。string是.NETFramework中System.String的別名。盡管string是引用類型,但定義相等運算符是為了比較string對象(而不是引用)的值。這使得對字符串相等性的測試更為直觀。例如:stringmyString1="中國"; //把字符串“中國”賦給字符型變量myString1stringmyString2="中國"; //把字符串“中國”賦給字符型變量myString2Console.WriteLine(myString1==myString2); //相等,顯示True2.2.2引用類型字符串可以使用兩種形式表達,即直接使用雙引導括起來或者在雙引號前加上@。通常情況下,會直接使用雙引號來表示字符串,例如:stringmyString="sample"。
//正確但是,當字符串中包含某些特殊轉(zhuǎn)義符時,@將非常有用。請看下面出現(xiàn)錯誤的例子:stringmyString="C:\Windows"; //錯誤因為"\"被認為是轉(zhuǎn)義符的開始,而"\W"卻不是系統(tǒng)內(nèi)置的轉(zhuǎn)義符,因此編譯出錯。下面是正確的兩個例子:stringmyString="C:\\Windows"; //正確,“\\”轉(zhuǎn)義為“\”stringmyString=@"C:\Windows"; //正確對于使用“@”開始的字符串標識,編譯器將忽略其中的轉(zhuǎn)義符,而將其直接作為字符處理。2.2.3裝箱和拆箱裝箱是值類型轉(zhuǎn)換為object類型,或者轉(zhuǎn)換為由值類型所實現(xiàn)的任何接口類型。把一個值類型的值裝箱,也就是創(chuàng)建一個對象并把這個值賦給這個對象。以下是一個裝箱的代碼,圖2.8給出了裝箱操作示意圖。inti=123; //把“123”賦給int型變量iobjecto=i; //裝箱操作拆箱操作正好相反,是從object類型轉(zhuǎn)換為值類型,或者是將一個接口類型轉(zhuǎn)換為一個實現(xiàn)該接口的值類型。圖2.8裝箱操作2.2.3裝箱和拆箱拆箱的過程分為2個步驟:一是檢查對象實例是否是給定的值類型的裝箱值,二是將值從對象實例中復制出來。下面列出一個簡單的拆箱操作代碼,圖2.9給出了拆箱操作示意圖。inti=123; //把“123”賦給int型變量iobjecto=i; //裝箱操作intj=(int)o; //拆箱操作圖2.9拆箱操作2.2.3裝箱和拆箱【例EX2_2】string引用類型的特殊性。實現(xiàn)步驟:1.新建一個控制臺項目項目命名為“EX2_2”。2.添加代碼代碼如下所示。3.運行程序按【Ctrl+F5】快捷鍵運行程序,結(jié)果如圖2.10所示。圖2.10例EX2_2運行結(jié)果2.3常量和變量2.3.1常量常量,顧名思義就是在程序運行期間其值不會改變的量。常量及其使用非常直觀,以能讀懂的固定格式表示固定的數(shù)值,每一種值類型都有自己的常量表示形式。例如:168U //這是一個uint類型常量32L //這是一個long類型常量常量通??梢苑譃橐韵聨追N。2.3.1常量1.整型常量對于一個整數(shù)值,默認的類型就是能保存它的最小整數(shù)類型,其類型可以分為int、uint、long或ulong。如果默認類型不是想要的類型,可以在常量后面加后綴(U或L)來明確指定其類型。在常量后面加L或l(不區(qū)分大小寫)表示長整型。例如:32 //這是一個int類型32L //這是一個long類型在常量后面加U或u(不區(qū)分大小寫)表示無符號整數(shù)。例如:128U //這是一個uint類型128UL //這是一個ulong類型整型常量既可以采用十進制也可以采用十六進制,不加特別說明默認為十進制,在數(shù)值前面加0x(或0X)則表示十六進制數(shù),十六進制基數(shù)用0~9、A~F(或a~f)表示,例如:0x20 //十六進制數(shù)20,相當于十進制數(shù)320x1F //十六進制數(shù)1F,相當于十進制數(shù)312.3.1常量2.浮點常量一般帶小數(shù)點的數(shù)或用科學計數(shù)法表示的數(shù)都被認為是浮點數(shù),它的數(shù)據(jù)類型默認為double類型,但也可以加后綴符表明三種不同的浮點格式數(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相當于3.14×1020.168E2相當于0.618×1023.14F,0.168f //都是float類型常量3.14D,0.168d //都是double類型常量3.14M,0.168m //都是decimal類型常量2.3.1常量3.字符常量字符常量,簡單地說,就是用單引號括起來的單個字符,如'A',它占16位,以無符號整型數(shù)的形式存儲這個字符所對應(yīng)的Unicode代碼。這對于大多數(shù)圖形字符是可行的,但對一些非圖形的控制字符(如回車符)則行不通,所以字符常量的表達有若干種形式。(1)單引號括起的一個字符,如'A'。(2)十六進制的換碼系列,以“\x”或“\X”開始,后面跟4位十六進制數(shù),如'\X0041'。(3)Unicode碼表示形式,以“\U”或“\u”開始,后面跟4位十六進制數(shù),如'\U0041'。(4)顯式轉(zhuǎn)換整數(shù)字符代碼,如(char)65。(5)字符轉(zhuǎn)義系列,如表2.2所示。2.3.1常量4.字符串常量字符串常量是用雙引號括起的零個或多個字符序列。C#支持兩種形式的字符串常量,一種是常規(guī)字符串,另一種是逐字字符串。(1)常規(guī)字符串。雙引號括起的一串字符,可以包括轉(zhuǎn)義字符。例如:"Hello,World\n" //表示字符串Hello,World加換行符"C:\\windows\\Microsoft" //表示字符串
C:\windows\Microsoft(2)逐字字符串。在常規(guī)的字符串前面加一個@,就形成了逐字字符串,它的意思是字符串中的每個字符均表示本意,不使用轉(zhuǎn)義字符。如果在字符串中需用到雙引號,則可連寫兩個雙引號來表示一個雙引號。例如:@"C:\windows\Microsoft" //與
"C:\\windows\\Microsoft"含義相同@"Hesaid""Hello""tome" //與"Hesaid\"Hello\"tome"含義相同2.3.1常量5.布爾常量它只有兩個值:true和false。6.符號常量在聲明語句中,可以聲明一個標識符常量,但必須在定義標識符時就進行初始化,并且定義之后就不能再改變該常量的值。具體的格式為:const類型
標識符=初值例如:constdoublePI=3.14159 //標識符PI就是3.141592.3.2變量C#中的變量必須先聲明后使用。聲明變量包括變量的名稱、數(shù)據(jù)類型,必要時指定變量的初始值。聲明變量的形式:類型
標識符;或
類型
標識符[=初值][,…];標識符必須以字母或者_(下畫線)開頭,后面跟字母、數(shù)字和下畫線的組合。例如:name、_Int、Name、x_1 //都是合法的標識符但C#是大小寫敏感的語言,name、Name分別代表不同的標識符,在定義和使用時要特別注意。另外變量名不能與C#中的關(guān)鍵字相同,除非標識符是以@作為前綴的。例如:intx; //合法floaty1=0.0,y2=1.0,y3; //合法,變量說明的同時可以設(shè)置初始數(shù)值stringchar //不合法,因為char是關(guān)鍵字string@char //合法2.3.2變量【例EX2_3】string引用類型的特殊性。實現(xiàn)步驟:1.新建一個控制臺項目項目命名為“EX2_3”。2.添加代碼代碼如下所示。3.運行程序按【Ctrl+F5】快捷鍵運行程序,結(jié)果如圖2.11所示。圖2.11例EX2_3運行的結(jié)果2.4運算符和表達式表達式是由操作數(shù)和運算符構(gòu)成的。操作數(shù)可以是常量、變量、屬性等;運算符指示對操作數(shù)進行什么樣的運算。因此,也可以說表達式就是利用運算符來執(zhí)行某些計算并且產(chǎn)生計算結(jié)果的語句。例如:inta=3,b=5,c;c=a+b; //賦值表達式語句,結(jié)果是c等于8C#提供大量的運算符,按需要操作數(shù)的數(shù)目來分,有一元運算符(如++)、二元運算符(如+,*)、三元運算符(如?:)。按運算功能來分,基本的運算符可以分為以下幾類:(1)算術(shù)運算符。(2)關(guān)系運算符。(3)邏輯運算符。(4)賦值運算符。(5)條件運算符。(6)位運算符。(7)其他(分量運算符'.',下標運算符
'[]'等)。2.4.1算術(shù)運算符算術(shù)運算符作用的操作數(shù)類型可以是整型也可以是浮點型,運算符如表2.3所示。其中:(1)“+*/”運算與一般代數(shù)意義及其他語言相同,但需要注意:當“/”作用的兩個操作數(shù)都是整型數(shù)據(jù)類型時,其計算結(jié)果也是整型。例如:4/2 //結(jié)果等于25/2 //結(jié)果等于25/2.0 //結(jié)果等于2.5(2)“%”取模運算,即獲得整數(shù)除法運算的余數(shù),所以也稱取余。例如:11%3 //結(jié)果等于212%3 //結(jié)果等于011.0%3 //結(jié)果等于2,這與C/C++不同,它也可作用于浮點類型的操作數(shù)2.4.1算術(shù)運算符(3)“++”和“”遞增和遞減運算符是一元運算符,它作用的操作數(shù)必須是變量,不能是常量或表達式。它既可出現(xiàn)在操作數(shù)之前(前綴運算),也可出現(xiàn)在操作數(shù)之后(后綴運算),前綴和后綴有共同之處,也有很大區(qū)別。例如:++x //先將x加一個單位,然后再將計算結(jié)果作為表達式的值x++ //先將x的值作為表達式的值,然后再將x加一個單位不管是前綴還是后綴,它們操作的結(jié)果對操作數(shù)而言,都是一樣的,操作數(shù)都加了一個單位,但它們出現(xiàn)在表達式運算中是有區(qū)別的。例如:intx,y;x=5;y=++x; //x和y的值都等于6x=5;y=x++; //x的值是6,y的值是52.4.2關(guān)系運算符關(guān)系運算符用來比較兩個操作數(shù)的值,運算結(jié)果為布爾類型的值(true或false),如表2.4所示。2.4.2關(guān)系運算符如果操作數(shù)是string類型的,則在下列兩種情況下被視為兩個string值相等。(1)兩個值均為null。(2)兩個值都是對字符串實例的非空引用,這兩個字符串不僅長度相同,并且每一個對應(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)系比較運算“>、>=、<、<=”是以順序作為比較的標準,所以它要求操作數(shù)的數(shù)據(jù)類型只能是數(shù)值類型,即整型數(shù)、浮點數(shù)、字符及枚舉等類型。2.4.3邏輯運算符邏輯運算符是用來對兩個布爾類型的操作數(shù)進行邏輯運算的,運算的結(jié)果也是布爾類型,如表2.5所示。假設(shè)p、q是兩個布爾類型的操作數(shù),表2.6給出了邏輯運算的真值表。2.4.3邏輯運算符運算符“&&”和“||”的操作結(jié)果與“&”和“|”一樣,但它們的短路特征使代碼的效率更高。所謂短路就是在邏輯運算的過程中,如果計算第一個操作數(shù)時,就能得知運算結(jié)果就不會再計算第二個操作數(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賦值運算符1.簡單賦值運算符語法形式:var=exp賦值運算符左邊的稱為左值,右邊的稱為右值。右值是一個與左值類型兼容的表達式(exp),它可以是常量、變量或一般表達式。左值必須是一個已定義的變量或?qū)ο螅╲ar),因為賦值運算就是將表達式的值存放到左值,因此左值必須是內(nèi)存中已分配的實際物理空間。例如:inta=1;intb=++a; //a的值加1賦給了b如果左值和右值的類型不一致,在兼容的情況下,則需要進行自動轉(zhuǎn)換(隱式轉(zhuǎn)換)或強制類型轉(zhuǎn)換(顯式類型轉(zhuǎn)換)。一般原則是,從占用內(nèi)存較少的短數(shù)據(jù)類型向占用內(nèi)存較多的長數(shù)據(jù)類型賦值時,可以不做顯式的類型轉(zhuǎn)換,C#會進行自動類型轉(zhuǎn)換,反之當從較長的數(shù)據(jù)類型向占用較少內(nèi)存的短數(shù)據(jù)類型賦值時,則必須做強制類型轉(zhuǎn)換。例如:inta=2000;doubleb=a; //隱式轉(zhuǎn)換,b等于2000bytec=(byte)a; //顯式轉(zhuǎn)換,c等于2082.4.4賦值運算符2.復合賦值運算符在進行如x=x+3運算時,C#提供一種簡化方式x+=3,這就是復合賦值運算。語法形式:varop=exp//op表示某一運算符等價于var=varopexp除了關(guān)系運算符,一般二元運算符都可以和賦值運算符在一起構(gòu)成復合賦值運算,如表2.7所示。2.4.5條件運算符語法形式:exp1?exp2:exp3其中,表達式exp1的運算結(jié)果必須是一個布爾類型值,表達式exp2和exp3可以是任意數(shù)據(jù)類型,但它們返回的數(shù)據(jù)類型必須一致。首先計算exp1的值,如果其值為true,則計算exp2值,這個值就是整個表達式的結(jié)果;否則,取exp3的值作為整個表達式的結(jié)果。例如:z=x>y?x:y; //z的值就是x,y中較大的一個值
z=x>=0?x:x; //z的值就是x的絕對值條件運算符“?:”是C#中唯一的一個三元運算符。2.4.6運算符的優(yōu)先級與結(jié)合性在表達式中,運算符的優(yōu)先級和結(jié)合性控制著運算的執(zhí)行順序,也可以用圓括號“()”顯式地標明運算順序,例如:(x+y)*2 //x加上y后再乘以2表2.8列出了C#運算符的優(yōu)先級與結(jié)合性,其中表頂部的優(yōu)先級較高。2.4.6運算符的優(yōu)先級與結(jié)合性【例EX2_4】一元前綴遞減和一元后綴遞減的區(qū)別。實現(xiàn)步驟:1.新建一個控制臺項目項目命名為“EX2_4”。2.添加代碼代碼如下所示。3.運行程序按【Ctrl+F5】快捷鍵運行程序,結(jié)果如圖2.12所示。圖2.12例EX2_4運行的結(jié)果2.5流程控制2.5.1條件語句1.if語句if語句在使用時可以有幾種典型的形式,它們分別是:if框架、if_else框架、if_elseif框架及嵌套的if語句,下面逐一介紹。(1)if框架語法形式:if(條件表達式)語句;如果條件為真,則執(zhí)行語句。在語法上這里的語句是指單個語句,若想執(zhí)行一組語句,可將這一組語句用“{”和“}”括起來構(gòu)成一個塊語句,當然在語法上塊語句就是一條語句,下面涉及的語句都是這個概念。例如:if(x<0)x=x; //取x的絕對值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(條件表達式)
語句1;else
語句2;如果條件表達式為真,執(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ù)有錯!"); //輸出出錯信息2.5.1條件語句(3)if_elseif框架語法形式:if(條件表達式1)
語句1;elseif(條件表達式2)
語句2;elseif(條件表達式3)
語句3; …[else
語句n
;]2.5.1條件語句該語句執(zhí)行時,從上往下計算相應(yīng)的條件表達式,如果結(jié)果為真則執(zhí)行相應(yīng)語句,跳過if_elseif框架的剩余部分,直接執(zhí)行if_elseif框架的下一條語句;如果結(jié)果為假,則繼續(xù)往下計算相應(yīng)的條件表達式,直到所有的條件表達式都不成立,則執(zhí)行這個語句的最后部分else所對應(yīng)的語句,或者如果沒有else語句就什么也不做。例如:
if(studentGrade>=90) Console.WriteLine("成績優(yōu)秀");elseif(studentGrade>=80) Console.WriteLine("成績良好");elseif(studentGrade>=60) Console.WriteLine("成績及格"); else Console.WriteLine("成績不及格");2.5.1條件語句(4)嵌套的if語句在if語句框架中,無論條件表達式為真或為假,將要執(zhí)行的語句都有可能又是一個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;這個else是與最近的if匹配,那么else的含義就是x=0的情況,所以這個程序邏輯上是錯的。如果按這個結(jié)構(gòu)寫,應(yīng)修正為:inty=0,x;if(x>=0){ if(x>0) y=1;}else y=1;通過對嵌套的if語句加“{}”,把離else最近的if語句屏蔽了,這樣else就與if(x>=0)匹配,從而正確地完成了這個函數(shù)的功能。2.5.1條件語句2.switch語句switch語句是一個多分支結(jié)構(gòu)的語句,它所實現(xiàn)的功能與if_elseif結(jié)構(gòu)很相似,但在大多數(shù)情況下,switch語句表達方式更直觀、簡單、有效。語法格式:switch(表達式){ case常量1:
語句序列1; //由零個或多個語句組成 Break; case常量2:
語句序列2; Break; … default://default是任選項,可以不出現(xiàn)
語句序列n; Break;}2.5.1條件語句C#的switch語句需要注意以下幾點:(1)switch語句的表達式必須是整數(shù)類型,如char、sbyte、byte、ushort、short、uint、int、ulong、long或string、枚舉類型,case常量必須是與表達式類型相兼容,case常量的值必須互異,不能有重復。(2)將與某個case相關(guān)聯(lián)的語句序列接在另一個case語句序列之后是錯誤的,這稱為“不穿透”規(guī)則,所以需要跳轉(zhuǎn)語句結(jié)束這個語句序列,通常選用break語句作為跳轉(zhuǎn),也可以用goto轉(zhuǎn)向語句等?!安淮┩浮币?guī)則是C#對C、C++、Jave這類語言中的switch語句的一個修正,這樣做的好處是:一是允許編譯器對switch語句做優(yōu)化處理時可自由地調(diào)整case的順序;二是防止程序員不經(jīng)意地漏掉break語句而引起錯誤。(3)雖然不能讓一個case的語句序列穿透到另一個case語句序列,但是可以有兩個或多個case前綴指向相同的語句序列。2.5.1條件語句【例EX2_5】利用“switch”語句把百分制學生成績換算成等級制成績。實現(xiàn)步驟:(1)新建一個控制臺項目項目命名為“EX2_5”。(2)添加代碼代碼如下所示。(3)運行程序按【Ctrl+F5】快捷鍵運行程序,輸入成績“86”并按回車鍵,結(jié)果如圖2.13所示。圖2.13例EX2_5運行的結(jié)果2.5.2循環(huán)語句1.while語句語法形式:
while(條件表達式)
循環(huán)體語句;如果條件表達式為真(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(條件表達式);
該循環(huán)首先執(zhí)行循環(huán)體語句,再判斷條件表達式。如果條件表達式為真(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)語句中最具特色的,它功能較強,靈活多變,使用廣泛。語法形式:for(表達式1;表達式2;表達式3)
循環(huán)體語句;for語句執(zhí)行流程如圖2.16所示。一般情況下,表達式1是設(shè)置循環(huán)控制變量的初值;表達式2是布爾類型的表達式,作為循環(huán)控制條件;表達式3是設(shè)置循環(huán)控制變量的增值(正負皆可)。圖2.16for語句執(zhí)行流程圖2.5.2循環(huán)語句3個表達式都是可選的,默認某個表達式時,其后的分號“;”不能省,如3個表達式都默認的情況如下:for(;;){語句}for語句的執(zhí)行順序如下:(1)按書寫順序?qū)⒈磉_式1執(zhí)行一遍,為循環(huán)控制變量賦初值;(2)測試表達式2是否為真;(3)若沒有表達式2或表達式2為真,則執(zhí)行內(nèi)嵌語句一遍,按表達式3的規(guī)律改變循環(huán)控制變量的值,回到第二步執(zhí)行;(4)若表達式2不滿足,則for循環(huán)終止。2.5.2循環(huán)語句for循環(huán)的一些變化特點:(1)for循環(huán)語句,表達式1和表達式3可引入逗號運算符“,”,這樣可以對若干變量賦初值或增值。例如: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)體是一個空語句Console.WriteLine("Sumis"+Sum); //在頁面上輸出結(jié)果是:Sumis50502.5.2循環(huán)語句(2)for循環(huán)的3個表達式可以任意默認,甚至全部默認,如果表達式2默認就約定它的值是true。但不管哪個表達式默認,其相應(yīng)的分號“;”不能默認。例如:intSum,i;for(Sum=0,i=1;i<=100;) //默認表達式3 Sum+=i++;Console.WriteLine("Sumis"+Sum);//輸出結(jié)果是:Sumis5050for(Sum=0,i=1;;Sum+=i,i++) //默認表達式2,約定值是true if(i>100)break; //但條件滿足時,break語句跳出循環(huán)Console.WriteLine("Sumis"+Sum);Sum=0;i=1;for(;;) //3個表達式都默認{ Sum+=i++; if(i>100) //這種情況一般都會用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)控制變量僅僅只在這個循環(huán)中用到,那么為了更有效地使用變量,也可在for循環(huán)的初始化部分(表達式1)聲明該變量,當然這個變量的作用域在這個循環(huán)內(nèi)。例如:intSum=0;for(inti=1;i<=100;i++) //i只在這個for循環(huán)中有效 Sum+=i;Console.WriteLine("i="+i); //編譯出錯,i這時已經(jīng)無效Console.WriteLine("Sumis"+Sum); //在頁面上輸出結(jié)果是:Sumis50502.5.2循環(huán)語句【例EX2_6】利用for語句計算百元百雞問題。所謂百元百雞問題就是說公雞5元一只、母雞3元一只、小雞1元3只,問100元買100只雞,其中,公雞、母雞、小雞各多少只。設(shè)計思路:設(shè)公雞數(shù)、母雞數(shù)、小雞數(shù)分別為gj、mj、xj,則要滿足如下兩個條件:gj+mj+xj=1005*gj+3*mj+xj/3=100實現(xiàn)步驟:(1)新建一個控制臺項目項目命名為“EX2_6”。(2)添加代碼代碼如下所示。2.5.2循環(huán)語句(3)運行程序按【Ctrl+F5】快捷鍵運行程序,結(jié)果如圖2.17所示。說明:Console的Write與WriteLine方法可以顯示格式化數(shù)據(jù)。此例WriteLine方法中“{0}、{1}、{2}”是格式項,其字符序列告訴這個方法使用哪個變元,如何格式化。例如此例中“{0}”使用gj變元,“{1}”使用mj變元,“{2}”使用xj變元。圖2.17例EX2_6運行的結(jié)果2.5.2循環(huán)語句4.foreach語句foreach語句是C#中新引入的,它表示收集一個集合中的各元素,并針對各元素執(zhí)行內(nèi)嵌語句。語法格式:foreach(類型
標識符
in集合表達式
)語句;其中:(1)標識符是指foreach循環(huán)的迭代變量,它只在foreach語句中有效,并且是一個只讀局部變量,也就是說在foreach語句中不能改寫這個迭代變量。它的類型應(yīng)與集合的基本類型相一致。(2)集合表達式是指被遍歷的集合,例如數(shù)組。在foreach語句執(zhí)行期間,迭代變量按集合元素的順序依次將其內(nèi)容寫入。例如:intm=0;stringmystring="laskdjflasdkjasdalfakeoflkdsa";foreach(charmycharinmystring){ if(mychar=='a') //判斷迭代變量mychar是否為a字符 m++;}Console.WriteLine("字符串中有{0}個a",m); //輸出“字符串中有6個a”2.5.3跳轉(zhuǎn)語句1.continue語句語法形式:continue;continue語句只能用于循環(huán)語句中,它的作用是結(jié)束本輪循環(huán),不再執(zhí)行余下的循環(huán)體語句,對while和do_while結(jié)構(gòu)的循環(huán),在continue執(zhí)行之后,就立刻測試循環(huán)條件,以決定循環(huán)是否繼續(xù)下去;對for結(jié)構(gòu)循環(huán),在continue執(zhí)行之后,先求表達式3(即循環(huán)增量部分),然后再測試循環(huán)條件。通常它會和一個條件語句結(jié)合起來使用,不會是獨立的一條語句,也不會是循環(huán)體的最后一條語句,否則沒有任何意義。例如:for(intn=1;n<=100;n++){ if(n%3!=0)continue; //如果n不能被3整除,則直接進入下一輪循環(huán) Console.WriteLine(n+""); //只有能被3整除的數(shù),才會執(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á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個a在"+m+"位置");//輸出:字符串中第1個a在2位置此段代碼是查找出字符串中第1個a所在的位置。2.5.3跳轉(zhuǎn)語句3.return語句語法形式:return;或return表達式;return語句出現(xiàn)在一個方法內(nèi)。在方法中執(zhí)行到return語句時,程序的執(zhí)行流程轉(zhuǎn)到調(diào)用這個方法處。如果方法沒有返回值(返回類型修飾為void),則使用“return”格式返回;如果方法有返回值,那么使用“return表達式”格式,其后面跟的表達式就是方法的返回值。例如:protectedvoidPage_Load(objectsender,EventArgse){ return; //返回 Console.WriteLine("程序執(zhí)行到此"); //并不顯示“程序執(zhí)行到此”字樣}2.5.3跳轉(zhuǎn)語句4.goto語句goto語句可以將程序的執(zhí)行流程從一個地方轉(zhuǎn)移到另一個地方,非常靈活,但正因為它太靈活,所以容易造成程序結(jié)構(gòu)混亂的局面,應(yīng)該有節(jié)制地、合理地使用goto語句。語法形式:goto標號;標號:語句;其中,“標號”就是定位在某一語句之前的一個標識符,稱為標號語句。例如:intm=0;stringmystring="laskdjflasdkjasdalfakeoflkdsa";foreach(charmycharinmystring){ m++; if(mychar=='a') //判斷迭代變量mychar是否為a字符gotoend; //mychar為a字符則跳出循環(huán)}end:Console.WriteLine("第1個a在第"+m+"位"); //輸出:第1個a在第2位2.5.3跳轉(zhuǎn)語句它給出goto語句轉(zhuǎn)向的目標,在頁面上輸出“第1個a在第2位”字樣,值得注意的是,goto語句不能使控制轉(zhuǎn)移到另一個語句塊內(nèi)部,更不能轉(zhuǎn)到另一個函數(shù)內(nèi)部。另外,goto語句如果用在switch語句中,有如下形式。語法形式:gotocase常量;gotodefault;它只能在本switch語句中從一種情況轉(zhuǎn)向另一種情況。例如。2.5.4異常處理程序中對異常的處理能使程序更加健壯?,F(xiàn)在的許多程序設(shè)計語言都增加了異常處理的能力,C#也不例外。異常產(chǎn)生的原因主要有2點:(1)由throw語句立即無條件的引發(fā)異常,控制永遠不會到達緊跟在throw語句后的語句。(2)在處理C#語句和表達式的過程中,會出現(xiàn)一些例外情況,使某些操作無法正常完成,此時就會引發(fā)一個異常。例如,整數(shù)除法運算中,如果分母為零,就會引發(fā)一個DivideByZeroException異常。異常處理語法形式:try{
語句}catch(類型標識符){
語句}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; //不能除以零,所以導致異常}catch(DivideByZeroExceptionde){ Console.WriteLine(de.Message); //輸出“試圖除以零” return; //返回}finally{ Console.WriteLine("執(zhí)行到finally塊中");}//輸出“執(zhí)行到finally塊中”2.5.4異常處理【例EX2_7】利用checked語句關(guān)鍵字檢查算術(shù)運算是否有溢出。實現(xiàn)步驟:1.新建一個控制臺項目項目命名為“EX2_7”。2.添加代碼代碼如下所示。3.運行程序按【Ctrl+F5】快捷鍵運行程序,結(jié)果如圖2.18所示。圖2.18例EX2_7運行的結(jié)果2.6數(shù)組、結(jié)構(gòu)和枚舉2.6.1數(shù)組1.一維數(shù)組一維數(shù)組是以線性方式存儲固定數(shù)目的項的數(shù)組。(1)一維數(shù)組的聲明語法形式:type[]arrayName;其中:type是可以是C#中任意的數(shù)據(jù)類型。[]是表明后面的變量是一個數(shù)組類型,必須放在數(shù)組名之前。arrayName是數(shù)組名,遵循標識符的命名規(guī)則。例如:
int[]a1; //a1是一個含有int類型數(shù)據(jù)的數(shù)組double[]f1; //f1是一個含有double類型數(shù)據(jù)的數(shù)組
string[]s1; //s1是一個含有string類型數(shù)據(jù)的數(shù)組2.6.1數(shù)組(2)創(chuàng)建數(shù)組對象用new運算符創(chuàng)建數(shù)組實例,有兩種基本形式。聲明數(shù)組和創(chuàng)建數(shù)組分別進行。語法形式:type[]arrayName; //數(shù)組聲明arrayName=newtype[size]; //創(chuàng)建數(shù)組實例size是表明數(shù)組元素的個數(shù)。聲明數(shù)組和創(chuàng)建數(shù)組實例也可以合在一起寫:type[]arrayName=newtype[size];例如:int[]a1;a1=newint[10]; //a1是一個有10個int類型元素的數(shù)組string[]s1=newstring[5]; //s1是含有5個string類型元素的數(shù)組2.6.1數(shù)組(3)一維數(shù)組的初始化語法形式1:type[]arrayName=newtype[size]{val1,val2,…,valn};數(shù)組聲明與初始化同時進行時,size就是數(shù)組元素的個數(shù),它必須是常量,而且應(yīng)該與大括號內(nèi)的數(shù)據(jù)個數(shù)一致。語法形式2:type[]arrayName=newtype[]{val1,val2,…,valn};默認size,由編譯系統(tǒng)根據(jù)初始化表中的數(shù)據(jù)個數(shù),自動計算數(shù)組的大小。語法形式3:type[]arrayName={val1,val2,…,valn};數(shù)組聲明與初始化同時進行,還可以默認new運算符。語法形式4:type[]arrayName;arrayName=newtype[size]{val1,val2,…,valn};2.6.1數(shù)組把聲明與初始化分開在不同的語句中進行時,size同樣可以默認,也可以是一個變量。例如: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ù)組元素的值。在C#中是通過數(shù)組名和數(shù)組元素的下標來引用數(shù)組元素的。語法形式:
數(shù)組名[下標]下標是數(shù)組元素的索引值,實際上就是要訪問的那個數(shù)組元素在內(nèi)存中的相對位移。注意:相對位移是從0開始的,所以下標的值從0到數(shù)組元素的個數(shù)1為止。例如:intmax,min;int[]queue=newint[10]{89,78,65,52,90,92,73,85,91,95};//定義一個一維數(shù)組max=min=queue[0]; //queue[0]是數(shù)組第一個數(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ù)組就是指能用多個下標訪問的數(shù)組,多維數(shù)組類似于同類型值的矩陣。(1)多維數(shù)組的聲明語法形式:type[,,,]arrayName;在聲明時方括號內(nèi)加逗號,就表明是多維數(shù)組,有n個逗號,就是n+1維數(shù)組。例如:
int[,]score; //score是一個int類型的二維數(shù)組float[,,]table; //table是一個float類型的三維數(shù)組2.6.1數(shù)組(2)創(chuàng)建數(shù)組對象聲明數(shù)組和創(chuàng)建數(shù)組分別進行。語法形式:type[,,,]arrayName; //數(shù)組聲明arrayName=newtype[size1,size2,size3]; //創(chuàng)建數(shù)組實例size1,size2,size3分別表明多維數(shù)組每一維的元素個數(shù)。聲明數(shù)組和創(chuàng)建數(shù)組實例也可以合在一起寫。語法形式:type[,,,]arrayName=newtype[size1,size2,size3];例如:int[,]score;score=newint[3,4]; //score是一個3行4列的二維數(shù)組float[,,]table=newfloat[2,3,4] //table是一個三維數(shù)組,每一維的維數(shù)分別是2、3、42.6.1數(shù)組(3)多維數(shù)組的初始化多維數(shù)組初始化是將每維數(shù)組元素設(shè)置的初始值放在各自的大花括號內(nèi),下面以最常用的二維數(shù)組為例來討論。語法形式1:type[,]arrayName=newtype[size1,size2]{{val11,val12,…,val1n},{val21,val22,…,val2n},…,{valm1,valm2,…,valmn}};數(shù)組聲明與初始化同時進行,數(shù)組元素的個數(shù)是size1*size2,數(shù)組的每一行分別用一個花括號括起來,每個花括號內(nèi)的數(shù)據(jù)就是這一行的每一列元素的值,初始化時的賦值順序按矩陣的“行”存儲原則。語法形式2:type[]arrayName=newtype[,]{{val11,val12,…,val1n},{val21,val22,…,val2n},…,{valm1,valm2,…,valmn}};默認size,由編譯系統(tǒng)根據(jù)初始化表中花括號{}的個數(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ù)組聲明與初始化同時進行,還可以默認new運算符。語法形式4:type[,]arrayName;arrayName=newtype[size1,size2]{{val11,val12,…,val1n},{val21,val22,…,val2n},…,{valm1,valm2,…,valmn}};把數(shù)組聲明與初始化分開在不同的語句中時,size1、size2同樣可以默認,但也可以是變量。例如: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】求兩個矩陣的乘積。設(shè)計思路:兩個矩陣相乘,必須第一個矩陣的列和第二個矩陣的行相等。實現(xiàn)步驟:(1)新建一個控制臺項目項目命名為“EX2_8”。(2)添加代碼代碼如下所示。(3)運行程序按【Ctrl+F5】快捷鍵運行程序,結(jié)果如圖2.19所示。圖2.19例EX2_8運行的結(jié)果2.6.2結(jié)構(gòu)結(jié)構(gòu)是值類型,通過結(jié)構(gòu)可以把相關(guān)的多種類型數(shù)據(jù)(變量)組成整體來處理,組成結(jié)構(gòu)類型的各個變量稱為結(jié)構(gòu)的數(shù)據(jù)成員(簡稱成員,或者成員變量)。所有的基類型都是結(jié)構(gòu)類型,例如:int對應(yīng)S32結(jié)構(gòu),string對應(yīng)System.string結(jié)構(gòu),通過使用結(jié)構(gòu)可以創(chuàng)建更多的值類型。語法形式:[訪問修飾符]struct[結(jié)構(gòu)類型名]{ [訪問級別]<成員定義1> [訪問級別]<成員定義2>; [訪問級別]<成員定義3>; …}其中訪問修飾符包括public(公共的)、protected(保護的)、private(私有的)它們的訪問級別是由高到底的。2.6.2結(jié)構(gòu)【例EX2_9】創(chuàng)建一個學生結(jié)構(gòu),并且聲明一個學生類型對象stu,初始化,并輸出學生信息。實現(xiàn)步驟:1.新建一個控制臺項目項目命名為“EX2_9”。2.添加代碼代碼如下所示。3.運行程序按【Ctrl+F5】快捷鍵運行程序,結(jié)果如圖2.20所示。圖2.20例EX2_9運行的結(jié)果2.6.3枚舉枚舉類型是C#中又一種輕量級的值類型,用枚舉來表達一組特定的值的集合行為,比如Windows窗體可選的狀態(tài),按鈕控件的風格等。實際上是為一組在邏輯上密不可分的整數(shù)值提供便于記憶的符號。枚舉應(yīng)用于有多個選擇情況的場合,枚舉類型為一組符號常數(shù)提供了一個類型名稱。在枚舉中的每個成員實際上是一個符號常數(shù)。例如:enumColor{ Red, Green, Blue}2.6.3枚舉它聲明了一個枚舉類型Color,表示3種可能的情況:Red、Green和Blue。這里的3個值實際上是3個整數(shù)0、1、2,但與整數(shù)相比,使用枚舉類型使程序的可讀性更好,并且容易檢查出錯誤。聲明枚舉類型,使用關(guān)鍵字enum。聲明的基本語法格式如下:enum枚舉名[:基本類型名]{
枚舉成員
[=常數(shù)表達式], …}2.6.3枚舉一個枚舉成員的數(shù)值,既可以使用等號“=”顯式地賦值,也可以不顯式地賦值,而使用隱式賦值。隱式賦值按以下規(guī)則來確定值。(1)對第一個枚舉成員,如果沒有顯式賦值,它的數(shù)值為0。(2)對其他枚舉成員,如果沒有顯式賦值,它的值等于前一枚舉成員的值加1。例如:enumColor{ Red, Green=10, Blue, Max=Blue}其中,Red的值為0,Green的值為10,Blue的值為11,Max的值為11。2.6.3枚舉【例EX2_10】聲明一個short基本類型的星期枚舉,并使用不同的方法調(diào)用。實現(xiàn)步驟:1.新建一個控制臺項目項目命名為“EX2_10”。2.添加代碼代碼如下所示。3.運行程序按【Ctrl+F5】快捷鍵運行程序,輸入數(shù)字“951234867”,按回車鍵,結(jié)果如圖2.21
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度養(yǎng)老機構(gòu)蟲鼠害防治與老人健康保障合同4篇
- 2025年度智能機器人研發(fā)項目代理采購合同4篇
- 2025年度餐飲加盟店選址與評估咨詢合同3篇
- 二零二五年度通訊工程破樁勞務(wù)分包合同3篇
- 二零二五年度高新技術(shù)成果轉(zhuǎn)化合同模板3篇
- 2025年度智能打包機研發(fā)與生產(chǎn)合同3篇
- 2025版智慧醫(yī)療項目投資股東協(xié)議3篇
- 科技產(chǎn)品開發(fā)中的創(chuàng)新思維應(yīng)用
- 2025年度金融科技公司Oracle金融科技平臺定制合同3篇
- 2025年度智能停車解決方案車位銷售與服務(wù)協(xié)議4篇
- 醫(yī)院三基考核試題(康復理療科)
- 2024-2030年中國招標代理行業(yè)深度分析及發(fā)展前景與發(fā)展戰(zhàn)略研究報告
- 醫(yī)師定期考核 (公共衛(wèi)生)試題庫500題(含答案)
- 基因突變和基因重組(第1課時)高一下學期生物人教版(2019)必修2
- 內(nèi)科學(醫(yī)學高級):風濕性疾病試題及答案(強化練習)
- 音樂劇好看智慧樹知到期末考試答案2024年
- 辦公設(shè)備(電腦、一體機、投影機等)采購 投標方案(技術(shù)方案)
- 案卷評查培訓課件模板
- 2024年江蘇省樣卷五年級數(shù)學上冊期末試卷及答案
- 人教版初中英語七八九全部單詞(打印版)
- 波浪理論要點圖解完美版
評論
0/150
提交評論