C實用教程鄭阿奇主編電子教案第一第二章.ppt
《C實用教程鄭阿奇主編電子教案第一第二章.ppt》由會員分享,可在線閱讀,更多相關(guān)《C實用教程鄭阿奇主編電子教案第一第二章.ppt(97頁珍藏版)》請在裝配圖網(wǎng)上搜索。
,,C#實用教程,第5章Windows應(yīng)用程序,第4章面向?qū)ο缶幊踢M階,第3章面向?qū)ο缶幊袒A(chǔ),第2章C#編程基礎(chǔ),第1章C#快速入門,,,C#實用教程,第10章Web應(yīng)用程序,第9章C#多線程技術(shù),第8章數(shù)據(jù)庫應(yīng)用,第7章文件操作,第6章GDI+編程,1.1C#的優(yōu)勢,1.1C#的優(yōu)勢,,,,簡單性,1.沒有指針是C#的一個顯著特性,用戶使用一種可操控的(Managed)代碼進行工作時,直接的內(nèi)存存取,將是不允許的。2.在C#中不再需要記住那些源于不同處理器結(jié)構(gòu)的數(shù)據(jù)類型,,,,現(xiàn)代性,1.用戶可以使用一個新的decimal數(shù)據(jù)類型進行貨幣計算。2.C#通過代碼訪問安全機制來保證安全性,根據(jù)代碼的身份來源,可以分為不同的安全級別,不同級別的代碼在被調(diào)用時會受到不同的限制。,,,,面向?qū)ο?1.C#支持面向?qū)ο蟮乃嘘P(guān)鍵概念:封裝、繼承和多態(tài)性。2.C#的繼承機制只允許一個基類。如果需要多重繼承,用戶可以使用接口。,,,,類型安全性,1.C#實施了最嚴格的類型安全機制來保護它自身及其垃圾收集器。2.邊界檢查。3.算術(shù)運算溢出檢查。4.C#中傳遞的引用參數(shù)是類型安全的。,,,,版本處理技術(shù),C#盡其所能支持DLL版本處理功能,雖然C#自己并不能保證提供正確的版本處理結(jié)果,但它為程序員提供了這種版本處理的可能性。有了這個適當?shù)闹С?,開發(fā)者可以確保當他開發(fā)的類庫升級時,會與已有的客戶應(yīng)用保持二進制級別上的兼容性。,1.2第一個C#程序,第2章C#編程基礎(chǔ),C#的基本數(shù)據(jù)類型、變量、常量、表達式、程序流程控制語句及數(shù)組等概念是C#程序設(shè)計的基礎(chǔ),掌握這些基本知識是編寫正確程序的前提。,2.1基本類型,C#的基本數(shù)據(jù)類型、變量、常量、表達式、程序流程控制語句及數(shù)組等概念是C#程序設(shè)計的基礎(chǔ),掌握這些基本知識是編寫正確程序的前提。,第2章C#編程基礎(chǔ),C#的基本數(shù)據(jù)類型、變量、常量、表達式、程序流程控制語句及數(shù)組等概念是C#程序設(shè)計的基礎(chǔ),掌握這些基本知識是編寫正確程序的前提。,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.1值類型操作示意圖,表2.1C#簡單類型,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,C#中的值類型包括:簡單類型、枚舉類型和結(jié)構(gòu)類型。,續(xù)表,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,表中“C#關(guān)鍵字”是指在C#中聲明變量時可使用的類型說明符。,2.1.2引用類型,引用類型包括class(類)、interface(接口)、數(shù)組、delegate(委托)、object和string。其中object和string是兩個比較特殊的類型。object是C#中所有類型(包括所有的值類型和引用類型)的根類。string類型是一個從object類直接繼承的密封類型(不能再被繼承),其實例表示Unicode字符串。一個引用類型的變量不存儲它們所代表的實際數(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.2所示。,圖2.2引用類型賦值示意,引用類型的值是引用類型實例的引用,特殊值null適用于所有引用類型,它表明沒有任何引用的對象。當然也可能有若干引用類型的變量同時引用一個對象的實例,對任何一個引用變量作出修改都會導(dǎo)致該對象的值的修改。注意:堆棧是按先進后出(FILO)的原則存儲數(shù)據(jù)項的一種數(shù)據(jù)結(jié)構(gòu);堆(heap)則是用于動態(tài)內(nèi)存分配的一塊內(nèi)存區(qū)域,可以按任意順序和大小進行分配和釋放。C#中,值類型就分配在堆棧中,堆棧內(nèi)存區(qū)域內(nèi)保存著值類型的值,內(nèi)存區(qū)域可以通過變量名來存取。引用類型分配在堆中,對象分配在堆時,返回的是地址,這個地址被賦值給引用。,可以把值類型與引用類型的值賦給object類型變量,C#用“裝箱”和“拆箱”來實現(xiàn)值類型與引用類型之間的轉(zhuǎn)換。“裝箱”就是將值類型包裝成引用類型的處理過程。當一個值類型被要求轉(zhuǎn)換成一個object對象時,“裝箱”操作自動進行,它首先創(chuàng)建一個對象實例,然后把值類型的值復(fù)制到這個對象實例,最后由object對象引用這個對象實例。,2.1.3值類型與引用類型的關(guān)系,,例如:usingSystem;classDemo{publicstaticvoidMain(){intx=123;objectobj1=x;//裝箱操作x=x+100;//改變x的值,此時obj1的值并不會隨之改變Console.WriteLine("x={0}",x);//x=223Console.WriteLine("obj1={0}",obj1);//obj1=123}},該實例的“裝箱”操作說明如圖2.3所示。,“拆箱”操作與“裝箱”相反,它是將一個object類型轉(zhuǎn)換成值類型。首先檢查由object引用的對象實例值類型的包裝值,然后把實例中的值復(fù)制到值類型的變量中。注意:當一個“裝箱”操作把值類型轉(zhuǎn)換為一個引用類型時,不需要顯式地強制類型轉(zhuǎn)換;而拆箱操作把引用類型轉(zhuǎn)換到值類型時,由于它可以強制轉(zhuǎn)換到任何可以相容的值類型,所以必須顯式地強制類型轉(zhuǎn)換。,usingSystem;classDemo{publicstaticvoidMain(){intx=123,y;objectobj1=x;//裝箱操作x=x+100;//改變x的值,此時obj1的值并不會隨之改變y=(int)obj1;//拆箱操作,必須進行強制類型轉(zhuǎn)換Console.WriteLine("x={0}",x);//x=223Console.WriteLine("obj1={0}",obj1);//obj1=123}},2.2變量與常量,C#的基本數(shù)據(jù)類型、變量、常量、表達式、程序流程控制語句及數(shù)組等概念是C#程序設(shè)計的基礎(chǔ),掌握這些基本知識是編寫正確程序的前提。,2.2.1常量,,常量,顧名思義就是在程序運行期間其值不會改變的量,它通??梢苑譃樽置娉A亢头柍A?。常量及其使用非常直觀,以能讀懂的固定格式表示固定的數(shù)值,每一種值類型都有自己的常量表示形式。,對于一個整數(shù)值,默認的類型就是能保存它的最小整數(shù)類型,其類型可以分為int、uint、long或ulong。如果默認類型不是想要的類型,可以在常量后面加后綴(U或L)來明確指定其類型。在常量后面加L或l(不區(qū)分大小寫)表示長整型。例如:32//這是一個int類型32L//這是一個long類型在常量后面加U或u(不區(qū)分大小寫)表示無符號整數(shù)。例如:128U//這是一個uint類型128UL//這是一個ulong類型整型常量既可以采用十進制也可以采用十六進制,不加特別說明默認為十進制,在數(shù)值前面加0 x(或0X)則表示十六進制數(shù),十六進制基數(shù)用0~9、A~F(或a~f),例如:0 x20//十六進制數(shù)20,相當于十進制數(shù)320 x1F//十六進制數(shù)1F,相當于十進制數(shù)31,1.整數(shù)常量,一般帶小數(shù)點的數(shù)或用科學(xué)計數(shù)法表示的數(shù)都被認為是浮點數(shù),它的數(shù)據(jù)類型默認為double類型,但也可以加后綴符表明三種不同的浮點格式數(shù)。在數(shù)字后面加F(f)表示是float類型。在數(shù)字后面加D(d)表示是double類型。在數(shù)字后面加M(m)表示是decimal類型。例如:3.14,3.14e2,0.168E?2//這些都是double類型常量,其中3.14e2相當于,//0.618E?2相當于3.14F,0.168f//這些都是float類型常量3.14D,0.168d//這些都是double類型常量3.14M,0.168m//這些都是decimal類型常量,2.浮點常量,字符常量,簡單地說,就是用單引號括起來的單個字符,如A,它占16位,以無符號整型數(shù)的形式存儲這個字符所對應(yīng)的Unicode代碼。這對于大多數(shù)圖形字符是可行的,但對一些非圖形的控制字符(如回車符)則行不通,所以字符常量的表達有若干種形式。單引號括起的一個字符,如A。十六進制的換碼系列,以“\x”或“\X”開始,后面跟4位十六進制數(shù),如\X0041。Unicode碼表示形式,以“\U”或“\u”開始,后面跟4位十六進制數(shù),如\U0041。顯式轉(zhuǎn)換整數(shù)字符代碼,如(char)65。字符轉(zhuǎn)義系列,如表2.2所示。,3.字符常量,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,表2.2字符轉(zhuǎn)義符,字符串常量是用雙引號括起的零個或多個字符序列。C#支持兩種形式的字符串常量,一種是常規(guī)字符串,另一種是逐字字符串。(1)常規(guī)字符串。雙引號括起的一串字符,可以包括轉(zhuǎn)義字符。例如:"Hello,World\n""C:\\windows\\Microsoft"http://表示字符串C:\windows\Microsoft(2)逐字字符串。在常規(guī)的字符串前面加一個@,就形成了逐字字符串,它的意思是字符串中的每個字符均表示本意,不使用轉(zhuǎn)義字符。如果在字符串中需用到雙引號,則可連寫兩個雙引號來表示一個雙引號。例如:@"C:\windows\Microsoft"http://與"C:\\windows\\Microsoft"含義相同@"Hesaid""Hello""tome"http://與"Hesaid\"Hello\"tome"含義相同,4.字符串常量,5.布爾常量,它只有兩個值:true和false。,6.符號常量,,在聲明語句中,可以聲明一個標識符常量,但必須在定義標識符時就進行初始化,并且定義之后就不能再改變該常量的值。具體的格式為:const類型標識符=初值例如:constdoublePI=3.14159,變量是在程序運行過程中其值可以改變的量,它是一個已命名的存儲單元,通常用來記錄運算的中間結(jié)果或保存數(shù)據(jù)。在C#中,每個變量都具有一個類型,它確定哪些值可以存儲在該變量中。創(chuàng)建一個變量就是創(chuàng)建這個類型的實例,變量的特性由類型來決定。C#中的變量必須先聲明后使用。聲明變量包括變量的名稱、數(shù)據(jù)類型,必要時指定變量的初始值。聲明變量的形式:類型標識符表;或類型標識符[=初值][,…];,2.2.2變量,標識符必須以字母或者_(下劃線)開頭,后面跟字母、數(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//合法C#允許在任何模塊內(nèi)部聲明變量,模塊開始于“{”,結(jié)束于“}”。每次進入聲明變量所在的模塊時,則創(chuàng)建變量并分配存儲空間,離開這個模塊時,則銷毀這個變量并收回分配的存儲空間。實際上,變量只在這個模塊內(nèi)有效,所以稱為局部變量,這個模塊區(qū)域就是變量的作用域。,表達式是由操作數(shù)和運算符構(gòu)成的。操作數(shù)可以是常量、變量、屬性等;運算符指示對操作數(shù)進行什么樣的運算。因此,也可以說表達式就是利用運算符來執(zhí)行某些計算并且產(chǎn)生計算結(jié)果的語句。C#提供大量的運算符,按需要操作數(shù)的數(shù)目來分,有一元運算符(如++)、二元運算符(如+,*)、三元運算符(如?:)。按運算功能來分,基本的運算符可以分為以下幾類:(1)算術(shù)運算符(2)關(guān)系運算符(3)邏輯運算符(4)位運算符(5)賦值運算符(6)條件運算符(7)其他(分量運算符.,下標運算符[]等),2.3運算符與表達式,2.3.1算術(shù)運算符,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,算術(shù)運算符作用的操作數(shù)類型可以是整型也可以是浮點型,運算符如表2.3所示,其中:?“+?*/”運算與一般代數(shù)意義及其他語言相同,但需要注意:當“/”作用的兩個操作數(shù)都是整型數(shù)據(jù)類型時,其計算結(jié)果也是整型。例如:4/2//結(jié)果等于25/2//結(jié)果等于25/2.0//結(jié)果等于2.5?“%”取模運算,即獲得整數(shù)除法運算的余數(shù),所以也稱取余。例如:11%3//結(jié)果等于212%3//結(jié)果等于011.0%3//結(jié)果等于2,這與C/C++不同,它也可作用于浮點類型的,,操作數(shù)?“++”和“??”遞增和遞減運算符是一元運算符,它作用的操作數(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的值是5,操作數(shù)?“++”和“??”遞增和遞減運算符是一元運算符,它作用的操作數(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的值是5,2.3.2關(guān)系運算符,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,關(guān)系運算符用來比較兩個操作數(shù)的值,運算結(jié)果為布爾類型的值(true或false),如表2.4所示。,,在C#中,簡單類型和引用類型都可以通過==或!=來比較它們的數(shù)據(jù)內(nèi)容是否相等。對簡單類型,比較的是它們的數(shù)據(jù)值;而對引用類型來說,由于它的內(nèi)容是對象實例的引用,所以若相等,則說明這兩個引用指向同一個對象實例,如果要測試兩個引用對象所代表的內(nèi)容是否相等,則通常會使用對象本身所提供的方法,如Equals()。如果操作數(shù)是string類型的,則在下列兩種情況下被視為兩個string值相等。(1)兩個值均為null。(2)兩個值都是對字符串實例的非空引用,這兩個字符串不僅長度相同,并且每一個對應(yīng)的字符位置上的字符也相同。關(guān)系比較運算“>、>=、flase在C#中是沒有意義的。,在C#中,簡單類型和引用類型都可以通過==或!=來比較它們的數(shù)據(jù)內(nèi)容是否相等。對簡單類型,比較的是它們的數(shù)據(jù)值;而對引用類型來說,由于它的內(nèi)容是對象實例的引用,所以若相等,則說明這兩個引用指向同一個對象實例,如果要測試兩個引用對象所代表的內(nèi)容是否相等,則通常會使用對象本身所提供的方法,如Equals()。如果操作數(shù)是string類型的,則在下列兩種情況下被視為兩個string值相等。(1)兩個值均為null。(2)兩個值都是對字符串實例的非空引用,這兩個字符串不僅長度相同,并且每一個對應(yīng)的字符位置上的字符也相同。關(guān)系比較運算“>、>=、flase在C#中是沒有意義的。,2.3.3邏輯運算符,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,假設(shè)p、q是兩個布爾類型的操作數(shù),表2.6給出了邏輯運算的真值表。,邏輯運算符是用來對兩個布爾類型的操作數(shù)進行邏輯運算的,運算的結(jié)果也是布爾類型,如表2.5所示。,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,運算符“classEncode{publicstaticvoidMain(){charch1=O,ch2=K;intkey=0 x1f;Console.WriteLine("明文:"+ch1+ch2);ch1=(char)(ch1^key);ch2=(char)(ch2^key);Console.WriteLine("密文:"+ch1+ch2);ch1=(char)(ch1^key);ch2=(char)(ch2^key);Console.WriteLine("解碼:"+ch1+ch2);}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,移位運算符有兩個:一個左移(>)。語法形式:value>num_bits左操作數(shù)value是要被移位的值,右操作數(shù)num_bits是要移位的位數(shù)。(1)左移。將給定的value向左移動num_bits位,左邊移出的位丟掉,右邊空出的位填0。例如:0 x1A<>2。右移過程如圖2.8所示。,例如:0 x8AU>>2。右移過程如圖2.9所示。右移運算符的作用相當于將value的值整除以,賦值運算符有兩種形式,一種是簡單賦值運算符,另一種是復(fù)合賦值運算符。1.簡單賦值運算符語法形式:var=exp2.復(fù)合賦值運算符在進行如x=x+3運算時,C#提供一種簡化方式x+=3,這就是復(fù)合賦值運算。語法形式:varop=exp//op表示某一運算符等價的意義是:var=varopexp,2.3.5賦值運算符,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,除了關(guān)系運算符,一般二元運算符都可以和賦值運算符在一起構(gòu)成復(fù)合賦值運算,如表2.8所示。,語法形式: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.3.6條件運算符,當一個表達式含有多個運算符時,C#編譯器需要知道先做哪個運算,這就是所謂的運算符的優(yōu)先級,它控制各個運算符的運算順序。例如,表達式x+5*2是按x+(5*2)計算的,因為“*”運算符比“+”運算符優(yōu)先級高。當操作數(shù)出現(xiàn)在具有相同優(yōu)先級的運算符之間時,如表達式“10?6?2”按從左到右計算的結(jié)果是2,如果按從右到左計算,結(jié)果是6。當然“?”運算符是按從左到右的次序計算的,也就是左結(jié)合。再如表達式“x=y=2”,它在執(zhí)行時是按從右到左運算的,即先將數(shù)值2賦給變量y,再將y的值賦給x。所以“=”運算符是右結(jié)合的。在表達式中,運算符的優(yōu)先級和結(jié)合性控制著運算的執(zhí)行順序,也可以用圓括號“()”顯式地標明運算順序,如表達式“(x+y)*2”。,2.3.7運算符的優(yōu)先級與結(jié)合性,表2.9運算符的優(yōu)先級與結(jié)合性,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,在表達式中,操作數(shù)的數(shù)據(jù)類型可以不同,只要相互兼容即可。當表達式中混合了幾種不同的數(shù)據(jù)類型時,C#會基于運算的順序?qū)⑺鼈冏詣愚D(zhuǎn)換成同一類型。下面是C#的類型提升規(guī)則。(1)一個操作數(shù)是decimal類型,另一個操作數(shù)提升為decimal,但float或double類型不能自動提升為decimal。(2)一個操作數(shù)是double類型,另一個操作數(shù)提升為double。(3)一個操作數(shù)是float類型,另一個操作數(shù)提升為float。(4)一個操作數(shù)是ulong類型,另一個操作數(shù)提升為ulong,但帶符號數(shù),如sbyte、short、int或long不能自動提升。(5)一個操作數(shù)是long類型,另一個操作數(shù)提升為long。(6)一個操作數(shù)是uint類型,另一個操作數(shù)若是sbyte、short或int,那么這兩個操作數(shù)都提升為long。(7)一個操作數(shù)是uint類型,另一個操作數(shù)提升為uint。(8)除以上情況之外,兩個數(shù)值類型的操作數(shù)都提升為int類型。,2.3.8表達式中的類型轉(zhuǎn)換:,任何程序都可以且只能由三種基本流程結(jié)構(gòu)構(gòu)成,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。1.順序結(jié)構(gòu)是三種結(jié)構(gòu)中簡單的一種。即語句按照書寫的順序依次執(zhí)行;2.分支結(jié)構(gòu)又稱為選擇結(jié)構(gòu),它將根據(jù)計算所得的表達式的值來判斷應(yīng)選擇執(zhí)行哪一個流程分支;3.循環(huán)結(jié)構(gòu)則是在一定條件下反復(fù)執(zhí)行一段語句的流程結(jié)構(gòu)。,2.4.1結(jié)構(gòu)化程序設(shè)計的三種基本流程,圖2.10程序設(shè)計的三種控制流程,分支語句就是條件判斷語句,它能讓程序在執(zhí)行時根據(jù)特定條件是否成立而選擇執(zhí)行不同的語句塊。C#提供兩種分支語句結(jié)構(gòu),if語句和switch語句。,2.4.2分支語句,1.if語句1.if框架語法形式:if(條件表達式)語句;2.if_else框架語法格式:if(條件表達式)語句1;else語句2;,3.if_elseif框架語法形式:if(條件表達式1)語句1;elseif(條件表達式2)語句2;elseif(條件表達式3)語句3;……[else語句n;]4.嵌套的if語句,switch語句是一個多分支結(jié)構(gòu)的語句,它所實現(xiàn)的功能與if_elseif結(jié)構(gòu)相似,但在大多數(shù)情況下,switch語句表達方式更直觀、簡單、有效。,2.switch語句,語法形式:switch(表達式){case常量1:語句序列1;//由零個或多個語句組成break;case常量2:語句序列2;break;......[default://default是任選項,可以不出現(xiàn)語句序列n;break;]},使用注意(1)switch語句表達式必須是整數(shù)類型,case常量必須與表達式類型兼容,case常量的值必須互異,不能有重復(fù)。(2)“不穿透”規(guī)則(3)可以有兩個或多個case前綴指向相同的語句序列。,usingSystem;classStudentGrade{publicstaticvoidMain(){Console.Write("輸入學(xué)生百分制的成績:");intGrade=(int)Console.Read();switch(Grade/10){case9:case10:Console.WriteLine("你的成績?yōu)椋篈");break;case8:Console.WriteLine("你的成績?yōu)椋築");break;case7:Console.WriteLine("你的成績?yōu)椋篊");break;case6:Console.WriteLine("你的成績?yōu)椋篋");break;default:Console.WriteLine("你的成績?yōu)椋篍");break;}}},【例2.1】從鍵盤輸入學(xué)生的百分制成績,換算成等級制成績,循環(huán)語句是指在一定條件下,重復(fù)執(zhí)行一組語句,它是程序設(shè)計中的一個非常重要也是非?;镜姆椒?。C#提供了4種循環(huán)語句:while、do_while、for和foreach。foreach語句主要用于遍歷集合中的元素。,2.4.3循環(huán)語句,1.while語句語法形式:while(條件表達式)循環(huán)體語句;如果條件表達式為真(true),則執(zhí)行循環(huán)體語句。while語句執(zhí)行流程如圖2.11所示,圖2.11while語句執(zhí)行流程圖,usingSystem;classStudentGrade{publicstaticvoidMain(){Console.Write("輸入學(xué)生百分制的成績:");intGrade=(int)Console.Read();switch(Grade/10){case9:case10:Console.WriteLine("你的成績?yōu)椋篈");break;case8:Console.WriteLine("你的成績?yōu)椋築");break;case7:Console.WriteLine("你的成績?yōu)椋篊");break;case6:Console.WriteLine("你的成績?yōu)椋篋");break;default:Console.WriteLine("你的成績?yōu)椋篍");break;}}},2.do_while語句,語法形式:do循環(huán)體語句;while(條件表達式)該循環(huán)首先執(zhí)行循環(huán)體語句,再判斷條件表達式。如果條件表達式為真(true),則繼續(xù)執(zhí)行循環(huán)體語句。do_while循環(huán)語句執(zhí)行流程如圖2.12所示。,圖2.12do_while語句執(zhí)行流程圖,usingSystem;publicclassSum100{publicstaticvoidMain(){intSum,i;Sum=0;i=1;do{Sum+=i;i++;}while(i<=100)Console.WriteLine("Sumis"+Sum);}}while語句與do_while語句很相似,它們的區(qū)別在于while語句的循環(huán)體有可能一次也不執(zhí)行,而do_while語句的循環(huán)體至少執(zhí)行一次。,3.for語句,語法形式:for(表達式1;表達式2;表達式3)循環(huán)體語句;一般情況下,表達式1是設(shè)置循環(huán)控制變量的初值;表達式2是布爾類型的表達式,作為循環(huán)控制條件;表達式3是設(shè)置循環(huán)控制變量的增值(正負皆可)。for語句執(zhí)行流程如圖2.13所示。,圖2.13for語句執(zhí)行流程圖,usingSystem;publicclassSum100{publicstaticvoidMain(){intSum,i;Sum=0;for(i=1;i0;i??)//i也可以每次減1Sum+=i;Console.WriteLine("Sumis"+Sum);}},usingSystem;publicclassSum100{publicstaticvoidMain(){intSum,i;for(Sum=0,i=1;i<=100;i++)Sum+=i;Console.WriteLine("Sumis"+Sum);for(Sum=0,i=1;i100)//這種情況一般都會用if語句來設(shè)置跳出循環(huán)break;}Console.WriteLine("Sumis"+Sum);},usingSystem;publicclassSum100{publicstaticvoidMain(){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);}},(1)for循環(huán)語句,表達式1和表達式3可引入逗號運算符“,”,這樣可以對若干變量賦初值或增值。(2)for循環(huán)的三個表達式可以任意默認,甚至全部默認,如果表達式2默認就約定它的值是true。但不管哪個表達式默認,其相應(yīng)的分號“;”不能默認。(3)可在for循環(huán)內(nèi)部聲明循環(huán)控制變量。如果循環(huán)控制變量僅僅只在這個循環(huán)中用到,那么為了更有效地使用變量,也可在for循環(huán)的初始化部分(表達式1)聲明該變量,當然這個變量的作用域在這個循環(huán)內(nèi)。,for循環(huán)的一些變化特點:,跳轉(zhuǎn)語句用于改變程序的執(zhí)行流程,轉(zhuǎn)移到指定之處。C#中有4種跳轉(zhuǎn)語句:continue、break、return、goto語句。它們具有不同的含義,用于特定的上下文環(huán)境之中。,2.4.4跳轉(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í)行之后,先求循環(huán)增量部分,然后再測試循環(huán)條件。,usingSystem;publicclassFactor3{publicstaticvoidMain(){for(intn=1;n<=100;n++){if(n%3!=0)continue;//如果n不能被3整除,則直接進入下一輪循環(huán)Console.WriteLine(n);//只有能被3整除的數(shù),才會執(zhí)行到此}}},【例2.8】輸出1~100之間含有因子3的數(shù)。,2.break語句,語法形式:break;break語句只能用于循環(huán)語句或switch語句中。如果在switch語句中執(zhí)行到break語句,則立刻從switch語句中跳出,轉(zhuǎn)到switch語句的下一條語句;如果在循環(huán)語句執(zhí)行到break語句,則會導(dǎo)致循環(huán)立刻結(jié)束,跳轉(zhuǎn)到循環(huán)語句的下一條語句。不管循環(huán)有多少層,break語句只能從包含它的最內(nèi)層循環(huán)跳出一層。,例2.9】求1~100之間的所有素數(shù)。usingSystem;publicclassPrime{publicstaticvoidMain(){intm,k,n=0;for(m=2;m=m){Console.Write("{0,?4}",m);if(++n%10==0)Console.WriteLine("\n");}}}},3.return語句,語法形式:return;或return表達式;return語句出現(xiàn)在一個方法內(nèi)。在方法中執(zhí)行到return語句時,程序流程轉(zhuǎn)到調(diào)用這個方法處。如果方法沒有返回值(返回類型修飾為void),則使用“return”格式返回;如果方法有返回值,那么使用“return表達式”格式,其后面跟的表達式就是方法的返回值。,例2.9】求1~100之間的所有素數(shù)。usingSystem;publicclassPrime100{publicstaticboolprime(intm){for(inti=2;i- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 實用教程 鄭阿奇 主編 電子 教案 第一 第二
鏈接地址:http://m.appdesigncorp.com/p-11494722.html