第4部分類、常量與變量_第1頁
第4部分類、常量與變量_第2頁
第4部分類、常量與變量_第3頁
第4部分類、常量與變量_第4頁
第4部分類、常量與變量_第5頁
已閱讀5頁,還剩89頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、sophie內(nèi)容(內(nèi)容(contents)數(shù)據(jù)類型數(shù)據(jù)類型詞法結(jié)構(gòu)詞法結(jié)構(gòu) 常量和變量常量和變量 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式練習(xí)練習(xí)c#語言編程基礎(chǔ)語言編程基礎(chǔ) sophiev數(shù)據(jù)類型、運(yùn)算符和表達(dá)式是編程的數(shù)據(jù)類型、運(yùn)算符和表達(dá)式是編程的基礎(chǔ)基礎(chǔ)。vc#支持種類豐富的數(shù)據(jù)類型和運(yùn)算符,這支持種類豐富的數(shù)據(jù)類型和運(yùn)算符,這種特性使種特性使c#適用于廣泛的編程范圍。適用于廣泛的編程范圍。v本章將介紹本章將介紹c#的的基本語法基本語法,包括,包括詞法結(jié)詞法結(jié)構(gòu)構(gòu)、數(shù)據(jù)類型數(shù)據(jù)類型、變量與常量變量與常量、運(yùn)算符運(yùn)算符和和表達(dá)式表達(dá)式等編程的基礎(chǔ)知識。等編程的基礎(chǔ)知識。2sophie1 詞法結(jié)構(gòu)詞法

2、結(jié)構(gòu)v詞法是構(gòu)成程序設(shè)計語言的最基本單詞法是構(gòu)成程序設(shè)計語言的最基本單位。位。v程序是由若干個語句構(gòu)成,而語句是由若程序是由若干個語句構(gòu)成,而語句是由若干個具有特殊含義的單詞和運(yùn)算符構(gòu)成的。干個具有特殊含義的單詞和運(yùn)算符構(gòu)成的。v所以學(xué)習(xí)一門編程語言,首先應(yīng)該從所以學(xué)習(xí)一門編程語言,首先應(yīng)該從詞法詞法入手。入手。3sophie1.1 標(biāo)識符標(biāo)識符(標(biāo)識符(identifier)是由程序開發(fā)人員為類型、方是由程序開發(fā)人員為類型、方法、變量等所選擇的名字。法、變量等所選擇的名字。 c#的標(biāo)識符應(yīng)當(dāng)使用字母或下劃線作為開頭,由字的標(biāo)識符應(yīng)當(dāng)使用字母或下劃線作為開頭,由字母、數(shù)字、下劃線(母、數(shù)字、下

3、劃線(“_”)和美元符號()和美元符號(“$”)組成,不能包括空格、標(biāo)點(diǎn)符號和運(yùn)算符組成,不能包括空格、標(biāo)點(diǎn)符號和運(yùn)算符,而且標(biāo),而且標(biāo)識符的名稱最好和實(shí)際的應(yīng)用聯(lián)系起來,這樣可以識符的名稱最好和實(shí)際的應(yīng)用聯(lián)系起來,這樣可以使程序更容易理解,做到使程序更容易理解,做到“見名知意見名知意”。 比如,用來表示售貨員的標(biāo)識符使用比如,用來表示售貨員的標(biāo)識符使用salesman比比用用people更容易理解。更容易理解。4sophie 下面是下面是合法合法的標(biāo)識符:的標(biāo)識符:sum,average,_total,student_name,lotus_1_2_3 下面是下面是不合法不合法的標(biāo)識符:的標(biāo)識

4、符:abc-abc/中間使用了減號而非下劃線中間使用了減號而非下劃線3abc /以數(shù)字開頭以數(shù)字開頭abc abc /中間有空格中間有空格class /使用關(guān)鍵字作為標(biāo)識符使用關(guān)鍵字作為標(biāo)識符5sophievc#的標(biāo)識符不能與的標(biāo)識符不能與關(guān)鍵字關(guān)鍵字相同,但是相同,但是可以使用可以使用“”前綴來避免這種沖突。前綴來避免這種沖突。例如:例如:whilewhilev上面兩個標(biāo)識符中,第一個標(biāo)識符是上面兩個標(biāo)識符中,第一個標(biāo)識符是合法的,而第二個標(biāo)識符不是合法的,合法的,而第二個標(biāo)識符不是合法的,因?yàn)橐驗(yàn)閣hile是關(guān)鍵詞。是關(guān)鍵詞。6sophievc#的標(biāo)識符的標(biāo)識符區(qū)別大小寫區(qū)別大小寫,例如下

5、面的,例如下面的4個標(biāo)識符是不同的:個標(biāo)識符是不同的:membermembermembermember7sophie1.2 關(guān)鍵字v同同c和和c+語言一樣,語言一樣,c#也規(guī)定了很多關(guān)也規(guī)定了很多關(guān)鍵字用于程序控制、數(shù)據(jù)說明或者其他功鍵字用于程序控制、數(shù)據(jù)說明或者其他功能,由于它們的能,由于它們的特殊意義特殊意義,所以這些關(guān)鍵,所以這些關(guān)鍵字不能作為標(biāo)識符使用。字不能作為標(biāo)識符使用。8sophie2 數(shù)據(jù)類型數(shù)據(jù)類型v數(shù)據(jù)類型數(shù)據(jù)類型是用來定義現(xiàn)實(shí)生活中各種數(shù)是用來定義現(xiàn)實(shí)生活中各種數(shù)據(jù)形式的標(biāo)識符及其存儲形式。據(jù)形式的標(biāo)識符及其存儲形式。vc#中數(shù)據(jù)類型主要分為兩大類:中數(shù)據(jù)類型主要分為兩大

6、類:值類型值類型和和引用類型引用類型。v在此,先講解這兩種類型,然后再討論在此,先講解這兩種類型,然后再討論數(shù)據(jù)類型之間的轉(zhuǎn)換。數(shù)據(jù)類型之間的轉(zhuǎn)換。9sophie2.1 值類型值類型值類型通常用來表示通常用來表示基本類型基本類型、簡單類簡單類型型。 c#的值類型包括的值類型包括3種:種:簡單類型簡單類型、結(jié)構(gòu)結(jié)構(gòu)類型類型和和枚舉類型枚舉類型。 簡單類型包括整數(shù)類型、浮點(diǎn)類型、小簡單類型包括整數(shù)類型、浮點(diǎn)類型、小數(shù)類型、字符類型和布爾類型等。數(shù)類型、字符類型和布爾類型等。10sophie 1. 整數(shù)類型 整數(shù)類型的數(shù)據(jù)值只能是整數(shù)。數(shù)學(xué)上的整整數(shù)類型的數(shù)據(jù)值只能是整數(shù)。數(shù)學(xué)上的整數(shù)可以從負(fù)無窮大

7、到正無窮大,由于計算機(jī)數(shù)可以從負(fù)無窮大到正無窮大,由于計算機(jī)存儲單元的限制,程序語言提供的整數(shù)類型存儲單元的限制,程序語言提供的整數(shù)類型的值總是在一定的范圍內(nèi)。的值總是在一定的范圍內(nèi)。 c#定義了定義了8種整數(shù)類型,劃分的根據(jù)是這些種整數(shù)類型,劃分的根據(jù)是這些類型所占存儲器的位數(shù)。例如,一個類型所占存儲器的位數(shù)。例如,一個8位的位的整數(shù)類型可以表示整數(shù)類型可以表示28=256個數(shù)值。個數(shù)值。11sophie整數(shù)類型如表所示。整數(shù)類型如表所示。12sophiev2. 浮點(diǎn)類型v實(shí)數(shù)在實(shí)數(shù)在c#中采用浮點(diǎn)類型的數(shù)據(jù)來表示。中采用浮點(diǎn)類型的數(shù)據(jù)來表示。v浮點(diǎn)類型的數(shù)據(jù)包括兩種:浮點(diǎn)類型的數(shù)據(jù)包括兩種

8、:單精度浮點(diǎn)型(float)和和雙精度浮點(diǎn)型(double),其區(qū)別在于取值范圍),其區(qū)別在于取值范圍和精度不同。和精度不同。13sophie3.2.1 值類型v浮點(diǎn)類型數(shù)據(jù)的精度(小數(shù)點(diǎn)后所保留的有效數(shù)浮點(diǎn)類型數(shù)據(jù)的精度(小數(shù)點(diǎn)后所保留的有效數(shù)字)和取值范圍如表字)和取值范圍如表3-3所示。所示。14sophie 3. 小數(shù)類型 小數(shù)類型(小數(shù)類型(decimal)數(shù)據(jù)是高精度的類型數(shù)據(jù),占用)數(shù)據(jù)是高精度的類型數(shù)據(jù),占用16個字節(jié),主要是為了滿足需要高精度的財務(wù)和金融方個字節(jié),主要是為了滿足需要高精度的財務(wù)和金融方面的計算。面的計算。 小數(shù)類型數(shù)據(jù)的取值范圍和精度如下:小數(shù)類型數(shù)據(jù)的取值范

9、圍和精度如下: 小數(shù)類型:取值范圍在小數(shù)類型:取值范圍在1.0 x 10-287.9 x 1028之間,精之間,精度為度為29位數(shù)。位數(shù)。 要注意的是,小數(shù)類型數(shù)據(jù)的后面必須跟要注意的是,小數(shù)類型數(shù)據(jù)的后面必須跟m或者或者m后綴后綴來表示它是來表示它是decimal類型的,如類型的,如3.15m,0.35m等,否則等,否則就會被視為標(biāo)準(zhǔn)的浮點(diǎn)類型數(shù)據(jù),導(dǎo)致數(shù)據(jù)類型不匹配。就會被視為標(biāo)準(zhǔn)的浮點(diǎn)類型數(shù)據(jù),導(dǎo)致數(shù)據(jù)類型不匹配。15sophiev提示:在在c#中,可以通過給數(shù)值常數(shù)加后綴的方法中,可以通過給數(shù)值常數(shù)加后綴的方法來指定數(shù)值常數(shù)的類型,可以使用的數(shù)值常數(shù)后綴來指定數(shù)值常數(shù)的類型,可以使用的

10、數(shù)值常數(shù)后綴有以下幾種:有以下幾種:(1)u(或者(或者u)后綴:加在整型常數(shù)后面,代表)后綴:加在整型常數(shù)后面,代表該常數(shù)是該常數(shù)是uint類型或者類型或者ulong類型。類型。(2)l(或者(或者l)后綴:加在整型常數(shù)后面,代表該)后綴:加在整型常數(shù)后面,代表該常數(shù)是常數(shù)是long類型或者類型或者ulong類型。類型。(3)ul(或者(或者ul、ul、ul、lu、lu、lu)后綴:)后綴:加在整型常數(shù)后面,代表該常數(shù)是加在整型常數(shù)后面,代表該常數(shù)是ulong類型。類型。16sophie(4)f(或者(或者f)后綴:加在任何一種數(shù)值常數(shù)后面,)后綴:加在任何一種數(shù)值常數(shù)后面,代表該常數(shù)是代表

11、該常數(shù)是float類型。類型。(5)d(或者(或者d)后綴:加在任何一種數(shù)值常數(shù)后)后綴:加在任何一種數(shù)值常數(shù)后面,代表該常數(shù)是面,代表該常數(shù)是double類型。類型。(6)m(或者(或者m)后綴:加在任何一種數(shù)值常數(shù)后)后綴:加在任何一種數(shù)值常數(shù)后面,代表該常數(shù)是面,代表該常數(shù)是decimal類型。類型。17sophiev示例如下:示例如下:137f 代表代表float類型的數(shù)值類型的數(shù)值137.0137u 代表代表unit類型的數(shù)值類型的數(shù)值137137.2m 代表代表decimal類型的數(shù)值類型的數(shù)值137.2137.22 代表代表double類型的數(shù)值類型的數(shù)值137.22137 代表

12、代表int類型的數(shù)值類型的數(shù)值13718sophie 4. 字符類型 c#中的字符類型數(shù)據(jù)采用中的字符類型數(shù)據(jù)采用unicode字符集。字符類型的類字符集。字符類型的類型標(biāo)識符是型標(biāo)識符是char,因此也可稱為,因此也可稱為char類型。類型。 凡是在單引號中的一個字符,就構(gòu)成一個字符常數(shù),如下凡是在單引號中的一個字符,就構(gòu)成一個字符常數(shù),如下所示:所示: a、o、*、 9 在表示一個字符常數(shù)時,在表示一個字符常數(shù)時,單引號內(nèi)的有效字符必須且只能內(nèi)的有效字符必須且只能有一個,并且不能是單引號或者反斜杠(有一個,并且不能是單引號或者反斜杠()等。)等。 為了表示單引號和反斜杠等特殊的字符常數(shù),提

13、供了為了表示單引號和反斜杠等特殊的字符常數(shù),提供了轉(zhuǎn)義符,在需要表示這些特殊常數(shù)的地方,可以使用轉(zhuǎn)義符來,在需要表示這些特殊常數(shù)的地方,可以使用轉(zhuǎn)義符來替代這些特殊的字符。常用的轉(zhuǎn)義符如表替代這些特殊的字符。常用的轉(zhuǎn)義符如表3-4所示。所示。19sophiev常用的常用的轉(zhuǎn)義符轉(zhuǎn)義符如表如表3-4所示。所示。20sophiev5. 布爾類型v布爾類型數(shù)據(jù)用于表示邏輯真和邏輯假,布爾類型數(shù)據(jù)用于表示邏輯真和邏輯假,布爾類型的類型標(biāo)識符是布爾類型的類型標(biāo)識符是bool。v布爾類型常數(shù)只有兩種值:布爾類型常數(shù)只有兩種值:true(代表(代表“真真”)和)和false(代表(代表“假假”)。)。21s

14、ophie2.2 引用類型 在在c#中,引用類型的中,引用類型的引入主要是因?yàn)橹殿愋捅容^簡單,引入主要是因?yàn)橹殿愋捅容^簡單,不能描述結(jié)構(gòu)復(fù)雜、抽象能力比較強(qiáng)的數(shù)據(jù)不能描述結(jié)構(gòu)復(fù)雜、抽象能力比較強(qiáng)的數(shù)據(jù)。引用類型引用類型,其含義是該類型的變量不直接存儲所包含的,其含義是該類型的變量不直接存儲所包含的值,而是存儲當(dāng)前引用值的地址,因此引用類型數(shù)據(jù)的值,而是存儲當(dāng)前引用值的地址,因此引用類型數(shù)據(jù)的值會隨所指向的值的不同而變化,同一個數(shù)據(jù)也可以有值會隨所指向的值的不同而變化,同一個數(shù)據(jù)也可以有多個引用。多個引用。 這與簡單類型數(shù)據(jù)是不同的,簡單類型數(shù)據(jù)存儲的是自這與簡單類型數(shù)據(jù)是不同的,簡單類型數(shù)據(jù)存

15、儲的是自身的值,而引用類型存儲的是將自身的值所直接指向到身的值,而引用類型存儲的是將自身的值所直接指向到某個對象的值。它就像一面鏡子一樣,雖然從鏡子可以某個對象的值。它就像一面鏡子一樣,雖然從鏡子可以看到物體,但物體并不在鏡子中,只不過是物體的反射看到物體,但物體并不在鏡子中,只不過是物體的反射而已。而已。22sophievc#的引用的引用引用類型引用類型有有4種:種:類類型類類型、數(shù)組類型數(shù)組類型、接接口類型口類型和和委托類型委托類型。v類(類(class)是面向?qū)ο缶幊痰幕締挝弧K且皇敲嫦驅(qū)ο缶幊痰幕締挝?。它是一種包含數(shù)據(jù)成員、函數(shù)成員的數(shù)據(jù)結(jié)構(gòu)。類的數(shù)據(jù)種包含數(shù)據(jù)成員、函數(shù)成員的數(shù)

16、據(jù)結(jié)構(gòu)。類的數(shù)據(jù)成員有常量、域和事件,函數(shù)成員包括方法、屬性、成員有常量、域和事件,函數(shù)成員包括方法、屬性、構(gòu)造函數(shù)和析構(gòu)函數(shù)等。構(gòu)造函數(shù)和析構(gòu)函數(shù)等。v下面將介紹經(jīng)常用到的兩個類:下面將介紹經(jīng)常用到的兩個類:object(對象類型)(對象類型)和和string(字符串類型)(字符串類型)。23sophie 1. object類 在在c#中,中,object類是系統(tǒng)提供的基類型,是所有類型的基類是系統(tǒng)提供的基類型,是所有類型的基類,所有的類型都直接或間接派生于對象類型。類,所有的類型都直接或間接派生于對象類型。 因此,對于任何一個因此,對于任何一個object變量,均可以賦給任何類型的變量,均

17、可以賦給任何類型的值。值。 int x1 = 10; object obj1; obj1 = x1; object obj2 = string; 對于對于object類型的變量,聲明時必須使用類型的變量,聲明時必須使用object關(guān)鍵字。關(guān)鍵字。24sophiev2. string類v在在c#中,有一個用于操作字符串?dāng)?shù)據(jù)的中,有一個用于操作字符串?dāng)?shù)據(jù)的string類,類,string類直接派生于類直接派生于object類,類,且它是被密封的,這意味著不能從其派生出且它是被密封的,這意味著不能從其派生出類。類。v一個字符串是被一對雙引號所包含的一系列一個字符串是被一對雙引號所包含的一系列字符。例

18、如,字符。例如,hello world!就是一個字符就是一個字符串。串。vstring類的用法十分簡單:類的用法十分簡單:string str1=hello,;string str2=china!“;25sophie合并字符串合并字符串也很簡單:也很簡單: string str3=str1+str2; 如果想訪問單個字符,所要做的就是訪問下標(biāo):如果想訪問單個字符,所要做的就是訪問下標(biāo): char c=str30; 當(dāng)當(dāng)比較兩個字符串是否相等比較兩個字符串是否相等時,簡單地使用時,簡單地使用“=”比較比較操作符。操作符。if(str1=str2) .26sophievc#支持以下兩種形式的字符串

19、常數(shù)。支持以下兩種形式的字符串常數(shù)。v(1)常規(guī)字符串常數(shù)。放在雙引號間的一串。放在雙引號間的一串字符,就是一個常規(guī)字符串常數(shù)。如前面所字符,就是一個常規(guī)字符串常數(shù)。如前面所示的,即為常規(guī)字符串常數(shù)。示的,即為常規(guī)字符串常數(shù)。v除了普通的字符,一個字符串常數(shù)也允許包除了普通的字符,一個字符串常數(shù)也允許包含一個或多個轉(zhuǎn)義符。例如在下例中,使用含一個或多個轉(zhuǎn)義符。例如在下例中,使用了了n和和t轉(zhuǎn)義符。轉(zhuǎn)義符。27sophie3.2.2 引用類型【例3-1】在字符串中,在字符串中,轉(zhuǎn)義符的應(yīng)用示范。的應(yīng)用示范。 程序代碼如下:程序代碼如下:using system; class stringdemo

20、 static void main() console.writeline(first linensecond line);/使使用用n轉(zhuǎn)義符產(chǎn)生新的一行轉(zhuǎn)義符產(chǎn)生新的一行 console.writeline(atbtc); /使用使用t轉(zhuǎn)義符排轉(zhuǎn)義符排列輸出列輸出 console.writeline(dtetf); 程序運(yùn)行的結(jié)果如圖程序運(yùn)行的結(jié)果如圖3-1所示。所示。28sophie3.2.2 引用類型v【例3-1】在字符串中,在字符串中,轉(zhuǎn)義符的應(yīng)用示范。的應(yīng)用示范。v程序運(yùn)行的結(jié)果如圖程序運(yùn)行的結(jié)果如圖3-1所示。所示。29sophiev(2)逐字字符串常數(shù)。 逐字字符串常數(shù)以逐字字符

21、串常數(shù)以“”開頭,后跟一對雙引號,開頭,后跟一對雙引號,在雙引號中放入字符。如:在雙引號中放入字符。如:中國人中國人;hello world!“;30sophie3.2.2 引用類型v逐字字符串常數(shù)同常規(guī)字符串常數(shù)的區(qū)別在于,在逐字字符串常數(shù)同常規(guī)字符串常數(shù)的區(qū)別在于,在逐字字符串常數(shù)的雙引號中,每個字符都代表其原逐字字符串常數(shù)的雙引號中,每個字符都代表其原始的含義,在逐字字符串常數(shù)中不能使用轉(zhuǎn)義字符。始的含義,在逐字字符串常數(shù)中不能使用轉(zhuǎn)義字符。即,逐字字符串常數(shù)中雙引號內(nèi)的內(nèi)容在被接受時即,逐字字符串常數(shù)中雙引號內(nèi)的內(nèi)容在被接受時是不變的,并且可以跨越多行。是不變的,并且可以跨越多行。v所

22、以,在逐字字符串中,以所以,在逐字字符串中,以“”開始的字符被當(dāng)作開始的字符被當(dāng)作正常的字符處理,而不是轉(zhuǎn)義符。正常的字符處理,而不是轉(zhuǎn)義符。v但是要注意的是,如果要包含雙引號(但是要注意的是,如果要包含雙引號(“),就必),就必須在一行中使用兩個雙引號(須在一行中使用兩個雙引號(”“”“)。)。31sophie(2)逐字字符串常數(shù)。 string str1 = hello,china; /定義規(guī)則字符串常數(shù):定義規(guī)則字符串常數(shù):hello,china string str2 = “hello,china”; /定義逐字字符串常數(shù):定義逐字字符串常數(shù):hello,china string st

23、r3 = hellotworld; /hello world string str4 = hellotworld; /hellotworld string str5 = jack said hello to you; /jack said hello to you string str6 = jack said hello to you; /jack said hello to you32sophiev簡單來說,規(guī)則字符串要對字符串的轉(zhuǎn)義序列進(jìn)行簡單來說,規(guī)則字符串要對字符串的轉(zhuǎn)義序列進(jìn)行解釋,而逐字字符串除了對雙引號進(jìn)行解釋之外,解釋,而逐字字符串除了對雙引號進(jìn)行解釋之外,對其它字符,無需解

24、釋,用戶定義成什么樣,顯示對其它字符,無需解釋,用戶定義成什么樣,顯示結(jié)果就是什么樣。結(jié)果就是什么樣。33sophiev【例3-2】如何定義規(guī)則字符串和逐字字符串。v 程序代碼如下所示:using system; class stringdemo static void main() string str1 = one linetwo linentthree line; string str2 = one linetwo linentthree line; console.writeline(str1); console.writeline(-); console.writeline(str2

25、); 34sophiev【例3-2】如何定義規(guī)則字符串和逐字字符串。如何定義規(guī)則字符串和逐字字符串。v程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖3-2所示。所示。35sophie2.3 類型轉(zhuǎn)換 數(shù)據(jù)類型在一定條件下是可以相互轉(zhuǎn)換的,如將數(shù)據(jù)類型在一定條件下是可以相互轉(zhuǎn)換的,如將int類型數(shù)據(jù)轉(zhuǎn)換成類型數(shù)據(jù)轉(zhuǎn)換成double類型數(shù)據(jù)。類型數(shù)據(jù)。 在在c#中,允許兩種轉(zhuǎn)換方式:中,允許兩種轉(zhuǎn)換方式:隱式轉(zhuǎn)換隱式轉(zhuǎn)換(implicit conversions)和)和顯式轉(zhuǎn)換顯式轉(zhuǎn)換(explicit conversions)。)。36sophie 1. 隱式轉(zhuǎn)換 隱式轉(zhuǎn)換是系統(tǒng)默認(rèn)的,不需要加以聲明就可

26、以隱式轉(zhuǎn)換是系統(tǒng)默認(rèn)的,不需要加以聲明就可以進(jìn)行轉(zhuǎn)換。進(jìn)行轉(zhuǎn)換。 在隱式轉(zhuǎn)換過程中,編譯器不需要對轉(zhuǎn)換進(jìn)行詳在隱式轉(zhuǎn)換過程中,編譯器不需要對轉(zhuǎn)換進(jìn)行詳細(xì)的檢查就能安全地執(zhí)行轉(zhuǎn)換,例如數(shù)據(jù)從細(xì)的檢查就能安全地執(zhí)行轉(zhuǎn)換,例如數(shù)據(jù)從int類型到類型到long類型的轉(zhuǎn)換。類型的轉(zhuǎn)換。37sophiev1. 隱式轉(zhuǎn)換v其中,從其中,從int,uint或或long到到float以及從以及從long到到double的轉(zhuǎn)換可能會導(dǎo)致精度下降,的轉(zhuǎn)換可能會導(dǎo)致精度下降,但決不會引起數(shù)量上的丟失。其它的隱式數(shù)但決不會引起數(shù)量上的丟失。其它的隱式數(shù)值轉(zhuǎn)換則不會有任何信息丟失。值轉(zhuǎn)換則不會有任何信息丟失。v隱式數(shù)據(jù)轉(zhuǎn)

27、換的使用方法如下所示:隱式數(shù)據(jù)轉(zhuǎn)換的使用方法如下所示:int a=10; /a為整型數(shù)據(jù)為整型數(shù)據(jù)long b=a; /b為長整型數(shù)據(jù)為長整型數(shù)據(jù)double c=a; /c為雙精度浮點(diǎn)型數(shù)據(jù)為雙精度浮點(diǎn)型數(shù)據(jù)38sophie 2. 顯式轉(zhuǎn)換 顯式轉(zhuǎn)換又稱為強(qiáng)制類型轉(zhuǎn)換,與隱式轉(zhuǎn)換相反,顯顯式轉(zhuǎn)換又稱為強(qiáng)制類型轉(zhuǎn)換,與隱式轉(zhuǎn)換相反,顯式轉(zhuǎn)換需要用戶明確地指定轉(zhuǎn)換類型。式轉(zhuǎn)換需要用戶明確地指定轉(zhuǎn)換類型。 顯式轉(zhuǎn)換可以將一數(shù)值類型強(qiáng)制轉(zhuǎn)換成另一種數(shù)據(jù)類顯式轉(zhuǎn)換可以將一數(shù)值類型強(qiáng)制轉(zhuǎn)換成另一種數(shù)據(jù)類型,其格式如下:型,其格式如下:(類型標(biāo)識符類型標(biāo)識符) 表達(dá)式表達(dá)式 上式的含義為:將表達(dá)式的值的類

28、型轉(zhuǎn)換為類型標(biāo)識上式的含義為:將表達(dá)式的值的類型轉(zhuǎn)換為類型標(biāo)識符的類型。比如:符的類型。比如:(int)5.17/把把double類型的類型的5.17轉(zhuǎn)換成轉(zhuǎn)換成int類型類型39sophiev這種類型轉(zhuǎn)換有可能會丟失信息或?qū)е庐惓伋觯D(zhuǎn)這種類型轉(zhuǎn)換有可能會丟失信息或?qū)е庐惓伋?,轉(zhuǎn)換按照下列規(guī)則進(jìn)行:換按照下列規(guī)則進(jìn)行:(1)對于從一種整型到另一種整型的轉(zhuǎn)換,編譯器將)對于從一種整型到另一種整型的轉(zhuǎn)換,編譯器將針對轉(zhuǎn)換進(jìn)行溢出檢測,如果沒有發(fā)生溢出,轉(zhuǎn)換成針對轉(zhuǎn)換進(jìn)行溢出檢測,如果沒有發(fā)生溢出,轉(zhuǎn)換成功,否則拋出一個轉(zhuǎn)換異常。功,否則拋出一個轉(zhuǎn)換異常。(2)對于從)對于從float,dou

29、ble或或decimal到整型的轉(zhuǎn)換,到整型的轉(zhuǎn)換,將通過舍入到最接近的整型值作為轉(zhuǎn)換的結(jié)果。如果將通過舍入到最接近的整型值作為轉(zhuǎn)換的結(jié)果。如果這個整型值超出了目標(biāo)類型的值域,則將拋出一個轉(zhuǎn)這個整型值超出了目標(biāo)類型的值域,則將拋出一個轉(zhuǎn)換異常。換異常。40sophie(3)對于從)對于從double到到float的轉(zhuǎn)換,的轉(zhuǎn)換,double值通過舍入值通過舍入取最接近的取最接近的float值。如果這個值太小,結(jié)果將變成正值。如果這個值太小,結(jié)果將變成正0或負(fù)或負(fù)0;如果這個值太大,將變成正無窮或負(fù)無窮。;如果這個值太大,將變成正無窮或負(fù)無窮。(4)對于從)對于從float或或double到到d

30、ecimal的轉(zhuǎn)換,將轉(zhuǎn)換的轉(zhuǎn)換,將轉(zhuǎn)換成小數(shù)形式并通過舍入取到小數(shù)點(diǎn)后成小數(shù)形式并通過舍入取到小數(shù)點(diǎn)后28位。如果值太位。如果值太小,則結(jié)果為小,則結(jié)果為0;如果太大以致不能用小數(shù)表示,或;如果太大以致不能用小數(shù)表示,或是無窮或是無窮或null,則將拋出轉(zhuǎn)換異常。,則將拋出轉(zhuǎn)換異常。(5)對于從)對于從decimal到到float或或double的轉(zhuǎn)換,小數(shù)的的轉(zhuǎn)換,小數(shù)的值通過舍入取最接近的值。這種轉(zhuǎn)換可能會丟失精度,值通過舍入取最接近的值。這種轉(zhuǎn)換可能會丟失精度,但不會引起異常。但不會引起異常。41sophiev顯式數(shù)據(jù)轉(zhuǎn)換的使用方法如下所示:顯式數(shù)據(jù)轉(zhuǎn)換的使用方法如下所示:(int)

31、7.18m/deimal類型的數(shù)值類型的數(shù)值7.18轉(zhuǎn)換為轉(zhuǎn)換為int類型的數(shù)類型的數(shù)值值7v轉(zhuǎn)換的結(jié)果為轉(zhuǎn)換的結(jié)果為7。vc#中還經(jīng)常要進(jìn)行中還經(jīng)常要進(jìn)行string類型和其他簡單類型的轉(zhuǎn)類型和其他簡單類型的轉(zhuǎn)換,這里需要使用框架類庫中提供的一些方法。換,這里需要使用框架類庫中提供的一些方法。42sophiev3. string類型轉(zhuǎn)換為其他類型v整型、浮點(diǎn)型、字符型和布爾類型都對應(yīng)有一個結(jié)整型、浮點(diǎn)型、字符型和布爾類型都對應(yīng)有一個結(jié)構(gòu)類型,該結(jié)構(gòu)類型中提供構(gòu)類型,該結(jié)構(gòu)類型中提供parse方法,可以把,可以把string類型轉(zhuǎn)換成相應(yīng)的類型。類型轉(zhuǎn)換成相應(yīng)的類型。v例如,要把例如,要把st

32、ring類型轉(zhuǎn)換成類型轉(zhuǎn)換成int類型,則有相應(yīng)的類型,則有相應(yīng)的int.parse(string)方法,如:方法,如:string str = 123;int i = int.parse(str);v則則i的值為的值為123。43sophiev4. 其他類型轉(zhuǎn)換為string類型v計算后的數(shù)據(jù)如果要以文本的方式輸出,如在文本計算后的數(shù)據(jù)如果要以文本的方式輸出,如在文本框中顯示計算后的數(shù)據(jù),則需要將數(shù)值數(shù)據(jù)轉(zhuǎn)換成框中顯示計算后的數(shù)據(jù),則需要將數(shù)值數(shù)據(jù)轉(zhuǎn)換成string類型,轉(zhuǎn)換方法是執(zhí)行類型,轉(zhuǎn)換方法是執(zhí)行tostring方法。例如:。例如:int j = 5 * 8;string str =

33、 5 * 8的積是:的積是: + j.tostring();v除了使用相應(yīng)類的除了使用相應(yīng)類的parse()方法之外,還可以使用方法之外,還可以使用system.convert類的對應(yīng)方法將數(shù)字轉(zhuǎn)換為相應(yīng)類的對應(yīng)方法將數(shù)字轉(zhuǎn)換為相應(yīng)的值。的值。44sophie 2.4 裝箱與拆箱裝箱裝箱(boxing)和)和拆箱拆箱(unboxing)是)是c#類型系統(tǒng)中重類型系統(tǒng)中重要的概念。要的概念。 它允許將任何類型的數(shù)據(jù)轉(zhuǎn)換為對象,同時也允許任何類它允許將任何類型的數(shù)據(jù)轉(zhuǎn)換為對象,同時也允許任何類型的對象轉(zhuǎn)換到與之兼容的數(shù)據(jù)類型。型的對象轉(zhuǎn)換到與之兼容的數(shù)據(jù)類型。 經(jīng)過裝箱操作,使得任何類型的數(shù)據(jù)都可

34、以看做是對象的經(jīng)過裝箱操作,使得任何類型的數(shù)據(jù)都可以看做是對象的類型系統(tǒng)。反之,拆箱是裝箱的逆過程。必須注意的是:類型系統(tǒng)。反之,拆箱是裝箱的逆過程。必須注意的是:裝箱轉(zhuǎn)換和拆箱轉(zhuǎn)換過程中必須遵循類型兼容的原則,否裝箱轉(zhuǎn)換和拆箱轉(zhuǎn)換過程中必須遵循類型兼容的原則,否則轉(zhuǎn)換會失敗。則轉(zhuǎn)換會失敗。45sophiev 1裝箱轉(zhuǎn)換裝箱轉(zhuǎn)換v 裝箱轉(zhuǎn)換是指將一個值類型的數(shù)據(jù)隱式地轉(zhuǎn)換成一個對象類裝箱轉(zhuǎn)換是指將一個值類型的數(shù)據(jù)隱式地轉(zhuǎn)換成一個對象類型(型(object)的數(shù)據(jù),或者把這個值類型數(shù)據(jù)隱式轉(zhuǎn)換成一)的數(shù)據(jù),或者把這個值類型數(shù)據(jù)隱式轉(zhuǎn)換成一個被該值類型數(shù)據(jù)對應(yīng)的接口類型數(shù)據(jù)。把一個值類型裝箱,個被

35、該值類型數(shù)據(jù)對應(yīng)的接口類型數(shù)據(jù)。把一個值類型裝箱,就是創(chuàng)建一個就是創(chuàng)建一個object類型的實(shí)例,并把該值類型的值復(fù)制給類型的實(shí)例,并把該值類型的值復(fù)制給該該object。v 例如,下面的語句就執(zhí)行了裝箱轉(zhuǎn)換:例如,下面的語句就執(zhí)行了裝箱轉(zhuǎn)換: int i=108; object obj=i;v 上面的語句中,第上面的語句中,第1條語句先聲明一個整型變量條語句先聲明一個整型變量i并對其賦值,并對其賦值,第第2條語句則先創(chuàng)建一個條語句則先創(chuàng)建一個object類型的實(shí)例類型的實(shí)例obj,然后將,然后將i的值的值復(fù)制給復(fù)制給obj。46sophiev在執(zhí)行裝箱轉(zhuǎn)換時,也可以使用顯式轉(zhuǎn)換,例如:在執(zhí)行

36、裝箱轉(zhuǎn)換時,也可以使用顯式轉(zhuǎn)換,例如:int i=120;object obj=(object) i;47sophie【例3-3】演示裝箱轉(zhuǎn)換。演示裝箱轉(zhuǎn)換。程序代碼如下:程序代碼如下:using system; class boxingdemo static void main() console.writeline(裝箱轉(zhuǎn)換演示:裝箱轉(zhuǎn)換演示:); int i = 120; object obj = i; i = 300; console.writeline(obj=0, obj); console.writeline(i=0, i); 48sophiev【例3-3】演示裝箱轉(zhuǎn)換。演示裝箱

37、轉(zhuǎn)換。v該程序執(zhí)行后,輸出結(jié)果如下:該程序執(zhí)行后,輸出結(jié)果如下:裝箱轉(zhuǎn)換演示:裝箱轉(zhuǎn)換演示:obj=120i=300v說明:從上面的輸出結(jié)果可知,通過裝箱轉(zhuǎn)換,可從上面的輸出結(jié)果可知,通過裝箱轉(zhuǎn)換,可以把一個整型值復(fù)制給一個以把一個整型值復(fù)制給一個object類型的實(shí)例,而類型的實(shí)例,而被裝箱的整型變量自身的數(shù)值并不會受到裝箱的影被裝箱的整型變量自身的數(shù)值并不會受到裝箱的影響。響。49sophiev2拆箱轉(zhuǎn)換拆箱轉(zhuǎn)換v和裝箱相反,拆箱轉(zhuǎn)換是指將一個對象類型的數(shù)據(jù)和裝箱相反,拆箱轉(zhuǎn)換是指將一個對象類型的數(shù)據(jù)顯式地轉(zhuǎn)換成一個值類型數(shù)據(jù),或者將一個接口類顯式地轉(zhuǎn)換成一個值類型數(shù)據(jù),或者將一個接口類型

38、顯式地轉(zhuǎn)換成一個執(zhí)行該接口的值類型數(shù)據(jù)。型顯式地轉(zhuǎn)換成一個執(zhí)行該接口的值類型數(shù)據(jù)。v拆箱操作包括兩步,首先檢查對象實(shí)例,確保其是拆箱操作包括兩步,首先檢查對象實(shí)例,確保其是給定值類型的一個裝箱值,然后把實(shí)例的值復(fù)制到給定值類型的一個裝箱值,然后把實(shí)例的值復(fù)制到值類型數(shù)據(jù)中。值類型數(shù)據(jù)中。50sophiev例如,下面的語句就執(zhí)行了拆箱轉(zhuǎn)換:例如,下面的語句就執(zhí)行了拆箱轉(zhuǎn)換:object obj=225;int i=(int)obj;v上面的語句在執(zhí)行過程中,首先檢查上面的語句在執(zhí)行過程中,首先檢查obj這個這個object實(shí)例的值是否為給定值類型的裝箱值,由于實(shí)例的值是否為給定值類型的裝箱值,由

39、于ojb的值的值為為225,給定的值類型為整型,所以滿足拆箱轉(zhuǎn)換的,給定的值類型為整型,所以滿足拆箱轉(zhuǎn)換的條件,會將條件,會將obj的值復(fù)制給整型變量的值復(fù)制給整型變量i。v需要注意的是,拆箱轉(zhuǎn)換必須需要執(zhí)行顯式轉(zhuǎn)換,需要注意的是,拆箱轉(zhuǎn)換必須需要執(zhí)行顯式轉(zhuǎn)換,這是與裝箱轉(zhuǎn)換不同之處。這是與裝箱轉(zhuǎn)換不同之處。51sophiev【例3-4】演示拆箱轉(zhuǎn)換。演示拆箱轉(zhuǎn)換。v 程序代碼如下:程序代碼如下:using system; class unboxingdemo static void main() int i=225; object obj = i; /裝箱轉(zhuǎn)換裝箱轉(zhuǎn)換 int j = (in

40、t)obj; /拆箱轉(zhuǎn)換拆箱轉(zhuǎn)換 console.writeline(i=0nobj=1nj=2, i, obj, j); 52sophiev【例3-4】演示拆箱轉(zhuǎn)換。演示拆箱轉(zhuǎn)換。v該程序執(zhí)行后,輸出結(jié)果如下:該程序執(zhí)行后,輸出結(jié)果如下:i=225obj=225;j=22553sophie3 常量和變量常量和變量v正確定義和使用正確定義和使用常量常量及及變量變量,會使開,會使開發(fā)人員在編程過程中減少錯誤,提高發(fā)人員在編程過程中減少錯誤,提高程序開發(fā)效率。程序開發(fā)效率。54sophie 3.1 常量v常量常量是指那些基于可讀格式的固定數(shù)值,在程序的是指那些基于可讀格式的固定數(shù)值,在程序的運(yùn)行過

41、程中其值是不可改變的。運(yùn)行過程中其值是不可改變的。v通過關(guān)鍵字通過關(guān)鍵字const來聲明常量,其格式如下:來聲明常量,其格式如下:const 類型標(biāo)識符類型標(biāo)識符 常量名常量名 = 表達(dá)式表達(dá)式;v類型標(biāo)識符指示所定義的常量的數(shù)據(jù)類型,常量名類型標(biāo)識符指示所定義的常量的數(shù)據(jù)類型,常量名必須是合法的標(biāo)識符,在程序中通過常量名來訪問必須是合法的標(biāo)識符,在程序中通過常量名來訪問該常量。如下例所示:該常量。如下例所示:const double pi = 3.14159265;v上面的語句就定義了一個上面的語句就定義了一個double類型的常量類型的常量pi,它,它的值是的值是3.14159265。55

42、sophiev常量常量有如下特點(diǎn):有如下特點(diǎn): (1)程序中,常量只能被賦予初始值。一旦賦予一個常量)程序中,常量只能被賦予初始值。一旦賦予一個常量初始值,這個常量的值在程序的運(yùn)行過程中就不允許改變,初始值,這個常量的值在程序的運(yùn)行過程中就不允許改變,即無法對一個常量賦值。即無法對一個常量賦值。 (2)定義常量時,表達(dá)式中的運(yùn)算符對象只允許出現(xiàn)常量,)定義常量時,表達(dá)式中的運(yùn)算符對象只允許出現(xiàn)常量,不能有變量存在。不能有變量存在。v 例如:例如: int a = 20; const int b = 30; const int c = b + 25; /正確,因?yàn)檎_,因?yàn)閎是常量是常量 con

43、st int k = a + 45; /錯誤,表達(dá)式中不允許出現(xiàn)變量錯誤,表達(dá)式中不允許出現(xiàn)變量 c = 150; /錯誤,不能修改常量的值錯誤,不能修改常量的值56sophiev變量是程序運(yùn)行過程中用于存放數(shù)據(jù)的存儲單元。變是程序運(yùn)行過程中用于存放數(shù)據(jù)的存儲單元。變量的值在程序的運(yùn)行過程中是可以改變的。量的值在程序的運(yùn)行過程中是可以改變的。v1變量的定義v在定義變量時,首先必須給每一個變量起名,稱為變在定義變量時,首先必須給每一個變量起名,稱為變量名,以便區(qū)分不同的變量。變量名必須是合法的標(biāo)量名,以便區(qū)分不同的變量。變量名必須是合法的標(biāo)識符。為了保存不同類型的數(shù)據(jù),除了變量名之外,識符。為了

44、保存不同類型的數(shù)據(jù),除了變量名之外,在定義變量時,還必須為每個變量指定數(shù)據(jù)類型,變在定義變量時,還必須為每個變量指定數(shù)據(jù)類型,變量的類型決定了存儲在變量中的數(shù)值的類型。量的類型決定了存儲在變量中的數(shù)值的類型。v對于一個變量的定義,變量名和變量類型缺一不可。對于一個變量的定義,變量名和變量類型缺一不可。c#中,采用如下格式定義一個變量:中,采用如下格式定義一個變量:類型標(biāo)識符類型標(biāo)識符 變量名變量名1, 變量名變量名2, 變量名變量名3,.57sophiev變量定義如下例所示:變量定義如下例所示:int i, j, k;/同時聲明多個同時聲明多個int類型相同的變量,在類型相同的變量,在類型的后

45、面用逗號分割變量名類型的后面用逗號分割變量名float fsum;string strname, straddress;v注意:任何變量在使用前,必須先定義,后使用。任何變量在使用前,必須先定義,后使用。58sophiev2變量的賦值v變量是一個能保存某種類型的具體數(shù)據(jù)的內(nèi)存單元,可以變量是一個能保存某種類型的具體數(shù)據(jù)的內(nèi)存單元,可以通過變量名來訪問這個具體的內(nèi)存單元。變量的賦值,就通過變量名來訪問這個具體的內(nèi)存單元。變量的賦值,就是把數(shù)據(jù)保存到變量中的過程。給一個變量賦值的格式如是把數(shù)據(jù)保存到變量中的過程。給一個變量賦值的格式如下:下: 變量名變量名=表達(dá)式表達(dá)式;v這里的表達(dá)式同數(shù)學(xué)中的表

46、達(dá)式是類似的,如這里的表達(dá)式同數(shù)學(xué)中的表達(dá)式是類似的,如9+10、4+a-c都是表達(dá)式。單個常數(shù)或者變量,也可以構(gòu)成表達(dá)都是表達(dá)式。單個常數(shù)或者變量,也可以構(gòu)成表達(dá)式。由單個常數(shù)或者變量構(gòu)成的表達(dá)式的值,就是由這個式。由單個常數(shù)或者變量構(gòu)成的表達(dá)式的值,就是由這個常數(shù)或者變量本身。變量賦值的意義是:首先計算表達(dá)式常數(shù)或者變量本身。變量賦值的意義是:首先計算表達(dá)式的值,然后將這個值賦予變量。的值,然后將這個值賦予變量。59sophiev比如,定義了兩個比如,定義了兩個double類型的變量類型的變量dbltotalscore、dblaveragescore和一個和一個int類型的變量類型的變量n

47、studentcount: double dbltotalscore,dblaveragescore; int nstudentcount;60sophiev2變量的賦值v下面給下面給dbltotalscore、nstudentcount賦值,應(yīng)該賦值,應(yīng)該寫成:寫成: dbltotalscore = 2000; nstudentcount = 20;v如果要讓如果要讓dblaveragescore的值等于的值等于dbltotalscore的值除以的值除以nstudentcount,應(yīng)該寫成:,應(yīng)該寫成: dblaveragescore = dbltotalscore / nstudentco

48、unt;61sophiev在程序中,可以給一個變量多次賦值。變量的當(dāng)前在程序中,可以給一個變量多次賦值。變量的當(dāng)前值等于最近一次給變量所賦的值。如:值等于最近一次給變量所賦的值。如:nstudentcount = 20; /此時此時nstudentcount等等于于20nstudentcount = 70;/此時此時nstudentcount等于等于70nstudentcount = nstudentcount + 15; /此時此時nstudentcount等于等于8562sophiev在對變量進(jìn)行賦值時,表達(dá)式的值的類型必須同變量的在對變量進(jìn)行賦值時,表達(dá)式的值的類型必須同變量的類型相同。

49、對于類型相同。對于string類型的變量類型的變量strname和和int類型的類型的變量變量nscore: string strname; int nscore;v則下面的賦值語句是則下面的賦值語句是正確的:的: strname = jim; strname = xiaobao; nscore = 100;v但是,以下的賦值語句是但是,以下的賦值語句是錯誤的:的: strname = 120; /不能把整數(shù)賦予字符串變量不能把整數(shù)賦予字符串變量 nscore = hello;/不能把字符串賦予整形變量不能把字符串賦予整形變量63sophiev3變量的初始化v在定義變量的同時,也可以對變量賦值

50、,稱為變量的在定義變量的同時,也可以對變量賦值,稱為變量的初始化。初始化。v在在c#中,對變量進(jìn)行初始化的格式如下所示:中,對變量進(jìn)行初始化的格式如下所示:類型標(biāo)識符類型標(biāo)識符 變量名變量名=表達(dá)式表達(dá)式;v例如:例如:int nstudentcount = 150;/定義一個定義一個int類型變量類型變量nstudentcount,并將其賦予初始值為,并將其賦予初始值為15064sophie 4 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式v運(yùn)算符是表示各種不同運(yùn)算的符號,運(yùn)算符和運(yùn)算是表示各種不同運(yùn)算的符號,運(yùn)算符和運(yùn)算緊密相關(guān)。緊密相關(guān)。v表達(dá)式由變量、常數(shù)和運(yùn)算符組成,是用運(yùn)算符將表達(dá)式由變量、常數(shù)和

51、運(yùn)算符組成,是用運(yùn)算符將運(yùn)算對象連接起來的運(yùn)算式,是基本的對數(shù)據(jù)進(jìn)行運(yùn)算對象連接起來的運(yùn)算式,是基本的對數(shù)據(jù)進(jìn)行運(yùn)算和加工的表示形式。表達(dá)式的計算結(jié)果是表達(dá)運(yùn)算和加工的表示形式。表達(dá)式的計算結(jié)果是表達(dá)式的返回值。使用不同的運(yùn)算符連接運(yùn)算對象,其式的返回值。使用不同的運(yùn)算符連接運(yùn)算對象,其返回值的類型是不同的。返回值的類型是不同的。65sophie 4.1 運(yùn)算符v根據(jù)運(yùn)算符所要求的操作數(shù)的個數(shù),運(yùn)算符分為根據(jù)運(yùn)算符所要求的操作數(shù)的個數(shù),運(yùn)算符分為“一元運(yùn)算符”、“二元運(yùn)算符”和和“多元運(yùn)算符”。v一元運(yùn)算符是指只有一個操作數(shù)的運(yùn)算符,比如一元運(yùn)算符是指只有一個操作數(shù)的運(yùn)算符,比如“+”運(yùn)算符、

52、運(yùn)算符、“-”運(yùn)算符等。運(yùn)算符等。v二元運(yùn)算符是指有二個操作數(shù)的運(yùn)算符,比如二元運(yùn)算符是指有二個操作數(shù)的運(yùn)算符,比如“+”運(yùn)算符、運(yùn)算符、“*”運(yùn)算符等。運(yùn)算符等。v在在c#中,還有一個三元運(yùn)算符,即中,還有一個三元運(yùn)算符,即“?:”運(yùn)算符,運(yùn)算符,它有三個操作數(shù)。它有三個操作數(shù)。v根據(jù)運(yùn)算的類型,運(yùn)算符又分為以下幾類:根據(jù)運(yùn)算的類型,運(yùn)算符又分為以下幾類:算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符和和其他運(yùn)算符。66sophiev1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符v算術(shù)運(yùn)算符用于對操作數(shù)進(jìn)行算術(shù)運(yùn)算,算術(shù)運(yùn)算符用于對操作數(shù)進(jìn)行算術(shù)運(yùn)算,c#中的算中的算術(shù)運(yùn)算符及其功能如表術(shù)運(yùn)算符及其功

53、能如表3-5所示。所示。67sophiev(1)除法運(yùn)算符和模運(yùn)算符)除法運(yùn)算符和模運(yùn)算符v需要說明的是,盡管需要說明的是,盡管+、-、*和和/這些運(yùn)算符的意義和這些運(yùn)算符的意義和數(shù)學(xué)上的運(yùn)算符是一樣的。數(shù)學(xué)上的運(yùn)算符是一樣的。v但是,對于除法運(yùn)算符來說,整數(shù)相除的結(jié)果也應(yīng)該但是,對于除法運(yùn)算符來說,整數(shù)相除的結(jié)果也應(yīng)該為整數(shù),比如為整數(shù),比如7/5和和9/5的結(jié)果都為的結(jié)果都為1,而不是,而不是1.4及及1.8,計算結(jié)果要舍棄小數(shù)部分。計算結(jié)果要舍棄小數(shù)部分。v可以通過模運(yùn)算符可以通過模運(yùn)算符%來獲得這個除法的余數(shù)。運(yùn)算符來獲得這個除法的余數(shù)。運(yùn)算符%可以應(yīng)用于整數(shù)和浮點(diǎn)類型,例如,可以應(yīng)用

54、于整數(shù)和浮點(diǎn)類型,例如,10%3的結(jié)果的結(jié)果為為1,10.0%3.0的結(jié)果為的結(jié)果為1。68sophiev【例3-5】/和%運(yùn)算符的示例。v 程序代碼如下:using system; class divandmoddemo static void main() int nresult, nremainder; double dblresult, dblremainder; nresult = 10 / 3; nremainder = 10 % 3; dblresult = 10.0 / 3.0; dblremainder = 10.0 % 3.0; console.writeline(10/3

55、=0,10%3=1n, nresult, nremainder); console.writeline(10.0/3.0=0,10.0%3.0=1, dblresult, dblremainder); 69sophiev【例例3-5】/和和%運(yùn)算符的示例。運(yùn)算符的示例。v程序的執(zhí)行結(jié)果如圖程序的執(zhí)行結(jié)果如圖3-3所示:所示:70sophiev(2)自增運(yùn)算符和自減運(yùn)算符)自增運(yùn)算符和自減運(yùn)算符v在在c#中,還有兩種特殊的算術(shù)運(yùn)算符:中,還有兩種特殊的算術(shù)運(yùn)算符:+(自增運(yùn)(自增運(yùn)算符)和算符)和-(自減運(yùn)算符),其作用是使變量的值自(自減運(yùn)算符),其作用是使變量的值自動增加動增加1或者減去或者

56、減去1。vx=x+1和和x+的作用是一樣的,的作用是一樣的,x=x-1和和x-的作用也的作用也是一樣的。是一樣的。+(自增運(yùn)算符)和(自增運(yùn)算符)和-(自減運(yùn)算符)都(自減運(yùn)算符)都是一元運(yùn)算符,只能用于變量,而不能用于常量或是一元運(yùn)算符,只能用于變量,而不能用于常量或表達(dá)式,例如,表達(dá)式,例如,12+或或-(x+y)都是錯誤的。都是錯誤的。v自增和自減運(yùn)算符可以在操作數(shù)前面(前綴),也自增和自減運(yùn)算符可以在操作數(shù)前面(前綴),也可以在操作數(shù)后面(后綴)。例如:可以在操作數(shù)后面(后綴)。例如:+x; /前綴格式前綴格式x+; /后綴格式后綴格式71sophie 3.4.1 運(yùn)算符v 當(dāng)自增或自

57、減運(yùn)算符的前綴和后綴格式用在一個表達(dá)式中時,當(dāng)自增或自減運(yùn)算符的前綴和后綴格式用在一個表達(dá)式中時,存在著區(qū)別。存在著區(qū)別。v 當(dāng)一個自增或自減運(yùn)算符在它的操作數(shù)前面(前綴格式)時,當(dāng)一個自增或自減運(yùn)算符在它的操作數(shù)前面(前綴格式)時,將在取得操作數(shù)的值前執(zhí)行自增或自減操作,并將其用于表將在取得操作數(shù)的值前執(zhí)行自增或自減操作,并將其用于表達(dá)式的其它部分。如果運(yùn)算符在操作數(shù)年的后面(后綴格達(dá)式的其它部分。如果運(yùn)算符在操作數(shù)年的后面(后綴格式),將先取得操作數(shù)的值,然后進(jìn)行自增或自減運(yùn)算。式),將先取得操作數(shù)的值,然后進(jìn)行自增或自減運(yùn)算。v 比如下面的例子:比如下面的例子: x=11; y=+x;v

58、 在這種情況下,在這種情況下,y被賦值為被賦值為12。但是,如果代碼如果改為:。但是,如果代碼如果改為: x=11; y=x+;v 那么,那么,y被賦值為被賦值為11。在兩種情況下,最終。在兩種情況下,最終x都被賦值為都被賦值為12。72sophiev【例3-6】自增運(yùn)算符的示例。using system; class test static void main() int x = 5; int y = x+; console.writeline(y=0, y); y = +x; console.writeline(y=0, y); 73sophiev【例3-6】自增運(yùn)算符的示例。自增運(yùn)算符的

59、示例。v該程序的運(yùn)行結(jié)果如圖該程序的運(yùn)行結(jié)果如圖3-4所示。所示。說明:說明:第一次對于x是先使用后自增,所以輸出的結(jié)果為5,第二次對于x是先自增后使用,所以輸出的結(jié)果為7。74sophiev2.賦值運(yùn)算符賦值運(yùn)算符v 賦值運(yùn)算符用于將一個數(shù)據(jù)賦予一個變量,賦值操作符的左賦值運(yùn)算符用于將一個數(shù)據(jù)賦予一個變量,賦值操作符的左操作數(shù)必須是一個變量,賦值結(jié)果是將一個新的數(shù)值存放在操作數(shù)必須是一個變量,賦值結(jié)果是將一個新的數(shù)值存放在變量所指示的內(nèi)存空間中。常用的賦值運(yùn)算符如表變量所指示的內(nèi)存空間中。常用的賦值運(yùn)算符如表3-6所示。所示。75sophiev 其中,其中,“=”是簡單的賦值運(yùn)算符,它的作用

60、是將右邊的數(shù)值賦是簡單的賦值運(yùn)算符,它的作用是將右邊的數(shù)值賦值給左邊的變量,數(shù)值可以是常量,也可以是表達(dá)式。值給左邊的變量,數(shù)值可以是常量,也可以是表達(dá)式。v 例如,例如,x=18或者或者x=10-x都是允許的,它們分別執(zhí)行了一次賦值都是允許的,它們分別執(zhí)行了一次賦值操作。操作。v 除了簡單的賦值運(yùn)算符之外,其他的賦值運(yùn)算符都是復(fù)合的賦除了簡單的賦值運(yùn)算符之外,其他的賦值運(yùn)算符都是復(fù)合的賦值運(yùn)算符,是在值運(yùn)算符,是在“=”之前加上其他運(yùn)算符。之前加上其他運(yùn)算符。v復(fù)合賦值運(yùn)算符的運(yùn)算很簡單,例如的運(yùn)算很簡單,例如x*=10等價于等價于x=x*10,它,它是對變量進(jìn)行一次自乘操作。復(fù)合賦值運(yùn)算符

溫馨提示

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

評論

0/150

提交評論