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