第02章 C#數(shù)據(jù)類型c#_第1頁
第02章 C#數(shù)據(jù)類型c#_第2頁
第02章 C#數(shù)據(jù)類型c#_第3頁
第02章 C#數(shù)據(jù)類型c#_第4頁
第02章 C#數(shù)據(jù)類型c#_第5頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章數(shù)據(jù)類型與流程控制2.1C#語言概述

2.2C#數(shù)據(jù)類型

2.3C#流程控制語句

本章教學(xué)目的

學(xué)習(xí)C#數(shù)據(jù)類型、流程控制語句,為實際應(yīng)用打基礎(chǔ)。本章教學(xué)要求

(1)掌握C#常用數(shù)據(jù)類型的格式及聲明方法;

(2)掌握C#流程控制語句的格式及基本編程方法;

(3)掌握VS2005控制臺應(yīng)用程序的編寫、調(diào)試方法;

(4)了解不常用的數(shù)據(jù)類型;

(5)了解C#與其他語言的比較。2.1C#語言概述

在C++和Java的基礎(chǔ)上設(shè)計的,語法和C++、Java語言都比較相似。完全面向?qū)ο?。面向組件(component-oriented):自包含、自描述。通過屬性(property)、方法(method)和事件(event)來提供編程模型;并提供了關(guān)于組件的聲明性信息的特性(attribute);而且這些內(nèi)容可以通過代碼直接編寫。

2.2C#數(shù)據(jù)類型

分為兩類:值類型和引用類型。值類型:包括基本類型、枚舉類型、結(jié)構(gòu)類型。引用類型:包括類、接口、數(shù)組、委托。

一般把引用類型的變量稱為對象。值類型和引用類型的區(qū)別

特性值類型引用類型變量中保存的內(nèi)容實際數(shù)據(jù)指向?qū)嶋H數(shù)據(jù)的引用指針內(nèi)存空間配置堆棧(Stack)受管制的堆(ManagedHeap)內(nèi)存需求較少較多執(zhí)行效率較快較慢內(nèi)存釋放時間點執(zhí)行超過定義變量的作用域時由垃圾回收機制負責回收可以為null不可以可以2.2.1值類型

值類型包括整型、浮點型、小數(shù)型、布爾型、字符型、結(jié)構(gòu)型、枚舉型。聲明一個值類型的語法形式為:

<數(shù)據(jù)類型名><變量名>[=n];

例如:

inta=100;//聲明一個整型變量a,并賦初值為100;注意,C#不允許引用未初始化的變量。1.整型

C#提供了九種整型:

sbyte:1字節(jié)有符號

byte:1字節(jié)無符號

short:2字節(jié)有符號

ushort:2字節(jié)無符號

int:4字節(jié)有符號,最常用

uint:4字節(jié)無符號

long:8字節(jié)有符號

ulong:8字節(jié)無符號

char:2字節(jié),單個Unicode字符編碼,常用,例如:'1'

2.浮點類型

float:4字節(jié)浮點數(shù),常用。例如:35.0fdouble:8字節(jié)浮點數(shù),常用。例如:2.7E+23浮點數(shù)格式與計算機組成原理介紹的IEEE754規(guī)定的格式相同3.小數(shù)型(不常用)

即decimal類型,共占16個字節(jié)(128個二進制位),具有28至29位十進制有效數(shù)字。尾數(shù)位數(shù)多,因此可以達到很高的精度,階碼位數(shù)少,所以范圍并不大。

適用于金融、貨幣等需要高精度數(shù)值的領(lǐng)域。其類型指定符為M(或m)。例如:

decimalmyMoney=300.5m;decimaly=9999999999999999999999999m;decimalx=123.123456789123456789m;4.布爾型

用bool表示,bool類型只有兩個值true和false。例如:

bool

isExist=false;

boolb=(i>0&&i<10);注意

if(i)j+=10;//錯誤

if(j=15)j+=10;//錯誤

5.字符型

char型,為單個Unicode字符,字符型常量必須用單引號引起來。如果是字符串(單個字符的組合),對應(yīng)的類型為string。string類型的常量用雙引號將字符串引起來。

char和string類型的常量均可以使用轉(zhuǎn)義符。6.結(jié)構(gòu)型

結(jié)構(gòu)是值類型凡是使用結(jié)構(gòu)實現(xiàn)的功能,均可以用類實現(xiàn)。聲明struct類型的語法形式為:

[附加聲明][訪問修飾符]struct

結(jié)構(gòu)名稱[:實現(xiàn)的接口]結(jié)構(gòu)體[;]結(jié)構(gòu)類型不支持用戶指定的繼承,所有結(jié)構(gòu)類型都隱式地從類型object繼承。結(jié)構(gòu)對于具有值語義的小型的數(shù)據(jù)結(jié)構(gòu)特別有用。復(fù)數(shù)、坐標系中的點或字典中的“鍵-值”對都是結(jié)構(gòu)的典型示例。對小型數(shù)據(jù)結(jié)構(gòu)而言,使用結(jié)構(gòu)而不使用類會大大節(jié)省應(yīng)用程序分配的內(nèi)存量。例如,下面的程序創(chuàng)建并初始化一個含有100個點的數(shù)組。對于作為類實現(xiàn)的Point,出現(xiàn)了101個實例對象,其中,數(shù)組需要一個,它的100個元素每個都需要一個。classPoint{ publicintx,y; publicPoint(intx,inty){ this.x=x; this.y=y; }}classTest{ staticvoidMain(){ Point[]points=newPoint[100]; for(inti=0;i<100;i++)points[i]=newPoint(i,i); }}這種情況下,最好將Point定義為結(jié)構(gòu):structPoint{ publicintx,y; publicPoint(intx,inty){ this.x=x; this.y=y; }}

此時,只有一個對象被實例化(即用于數(shù)組的那個對象),而Point實例以值的形式直接內(nèi)聯(lián)存儲在數(shù)組中。調(diào)用結(jié)構(gòu)構(gòu)造函數(shù)也是使用new運算符,但是并不是指分配內(nèi)存。與動態(tài)分配對象并返回對它的引用不同,結(jié)構(gòu)構(gòu)造函數(shù)直接返回結(jié)構(gòu)值本身(通常是堆棧上的一個臨時位置),然后根據(jù)需要復(fù)制該結(jié)構(gòu)值。7.枚舉型

枚舉(enum)是一組命名常量的集合,稱為枚舉成員列表。它可以為一組在邏輯上密不可分的整數(shù)值提供便于記憶的符號,從而使代碼更清晰,也易于維護。聲明enum類型變量的語法為:

[附加聲明][訪問修飾符]enum

名稱[:數(shù)據(jù)類型]{枚舉列表}2.2.2引用類型

“引用”指該類型的變量并不直接存儲所包含的實際數(shù)據(jù),而是存儲實際數(shù)據(jù)的地址。

(回想計算機組成原理“間接尋址”的實現(xiàn))C#中的引用類型有四種:類、委托、接口和數(shù)組。1.類

C#的類與Java的類非常相似。個別地方有區(qū)別。類支持繼承機制,通過繼承,派生類可以擴展基類的數(shù)據(jù)成員和函數(shù)方法,進而達到代碼重用和設(shè)計重用的目的。2.委托

指引用方法的類型,相當于C++中的函數(shù)指針原型,主要區(qū)別是:委托在C#中是安全的,它允許實例化和調(diào)用類的靜態(tài)方法,也可以調(diào)用類的指定實例的方法。3.接口

接口是一組包含屬性、方法聲明的數(shù)據(jù)結(jié)構(gòu),接口只有聲明部分,沒有實現(xiàn)部分。

接口一旦聲明,就不要再更改,否則就失去了接口的意義。4.數(shù)組

數(shù)組用于存儲同一種類型的數(shù)據(jù)。數(shù)組是一種引用類型,而不是值類型。數(shù)組是按照數(shù)組名、數(shù)據(jù)元素的類型和維數(shù)來描述的。C#中可以有一維數(shù)組、多維數(shù)組、交錯數(shù)組交錯數(shù)組的實際含義就是指數(shù)組的數(shù)組。例如:

int[][]jaggedArray3={newint[]{1,3,5,7,9},newint[]{0,2,4,6},newint[]{11,22}};

數(shù)組的聲明語法舉例

數(shù)組類型語法例子一維數(shù)組數(shù)據(jù)類型[]數(shù)組變量;int[]myArray;二維數(shù)組數(shù)據(jù)類型[,]數(shù)組變量;int[,]myArray;三維數(shù)組數(shù)據(jù)類型[,,]數(shù)組變量;int[,,]myArray;交錯數(shù)組數(shù)據(jù)類型[][]數(shù)組變量;int[][]myArray;數(shù)組的使用

訪問數(shù)組中的元素時,其下標是從0開始索引的。數(shù)組元素可以是任何類型,包括數(shù)組類型??梢允褂肔ength屬性獲取一維數(shù)組的長度,如果是多維數(shù)組,則可以使用GetLength方法確定其某一特定維的長度。由多種對數(shù)組操作的方法,例如Sort和Reverse,可以將數(shù)組按照升序或降序排列。例.使用Sort和Reverse方法對數(shù)組排序

usingSystem;namespaceArrayExample1{classProgram{staticvoidMain(){//聲明一維數(shù)組Artists,并賦初始值;string[]Artists={"Leonardo","Monet","VanGogh","Klee"};//將數(shù)組Artists做升序排列,并輸出其結(jié)果;

Array.Sort(Artists);for(inti=0;i<Artists.Length;i++){Console.WriteLine(Artists[i]);}//將數(shù)組Artists做降序排列,并輸出其結(jié)果;

Array.Reverse(Artists);for(inti=0;i<Artists.Length;i++){Console.WriteLine(Artists[i]);}Console.ReadLine();}}}

2.2.3值類型之間的數(shù)據(jù)轉(zhuǎn)換

有兩種轉(zhuǎn)換方式:隱式轉(zhuǎn)換與顯式轉(zhuǎn)換;如果是不同值類型之間的轉(zhuǎn)換,可以使用Convert類。2.2.3值類型之間的數(shù)據(jù)轉(zhuǎn)換(續(xù))隱式轉(zhuǎn)換從低精度、小范圍的數(shù)據(jù)類型轉(zhuǎn)換為高精度、大范圍的數(shù)據(jù)類型,可以用隱式轉(zhuǎn)換。例如:

intk=1;longi=2;i=k;//隱式轉(zhuǎn)換2.2.3值類型之間的數(shù)據(jù)轉(zhuǎn)換(續(xù))顯式轉(zhuǎn)換如:longk=5000;inti=(int)k

所有的隱式轉(zhuǎn)換也都可以采用顯式轉(zhuǎn)換的形式來表示。如:inti=10;longj=(long)i;將大范圍類型的數(shù)據(jù)轉(zhuǎn)換為小范圍類型的數(shù)據(jù)的時候,必須特別謹慎,因為此時有丟失數(shù)據(jù)的危險。2.2.4裝箱與拆箱

裝箱:將值類型轉(zhuǎn)換為object類型拆箱:將object類型轉(zhuǎn)換為值類型2.2.5運算符與優(yōu)先級與C++和Java相同2.3C#流程控制語句流程控制的形式:順序分支循環(huán)異常捕獲如果一個邏輯塊包含兩條或兩條以上的語句序列,必須使用大括號{}將語句括起來。2.3.1條件分支語句

if語句:根據(jù)布爾表達式的值(true或者false)選擇要執(zhí)行的語句序列,使用時要注意else應(yīng)和最近的if語句匹配。2.3.1條件分支語句(續(xù))switch語句也叫case語句switch語句與C++和Java均不完全相同。

switch語句常用形式為:switch(表達式){case常量表達式1:

語句序列1case常量表達式2:

語句序列2……[default:語句序列]}2.3.1條件分支語句(續(xù))常量表達式

switch條件表達式的值和每個case后的常量表達式可以是string、int、char、enum或其它值類型。語句序列每個case后的語句序列可以用大括號括起來,也可以不用,但是每個case塊的最后一句一定要是break語句,或者是goto語句。switch語句的執(zhí)行順序

a)如果switch語句的條件表達式的值和某一個case標記后指定的值相等,則轉(zhuǎn)到該case標記后的語句序列執(zhí)行;

b)若switch語句的條件表達式的值和任何一個case標記后指定的值都不相等,則跳到default標記后的語句序列執(zhí)行;2.3.1條件分支語句(續(xù))

c)若switch語句下面沒有default標記,則跳到switch語句的結(jié)尾。注意:

a)當找到符合條件表達式值的case標記時,如果其后有語句序列,則它只會執(zhí)行此case塊中的語句序列,不會再對其它的case標記進行判斷,所以才要求每個語句序列的最后一條語句必須是break語句,但是有一個情況例外:如果某個case塊為空,則會從這個case塊直接跳到下一個case塊上。b)如果case后有語句,則此case的順序怎么放都無所謂,甚至可以將default子句放到最上面。因此,在一個switch中,不能有相同的兩個case標記。

例.使用switch語句,完成對成績等級的評定

usingSystem;namespaceSwitchExample{publicclassProgram{publicstaticvoidMain(){Console.Write("請輸入成績:");//從鍵盤接收一行字符stringstr=Console.ReadLine();//轉(zhuǎn)換為整型inti=Int32.Parse(str.Trim());if(i>100||i<0){Console.WriteLine("成績不在0-100范圍內(nèi)");}else{switch(i/10){case10:Console.Write("滿分,");gotocase9;case9:Console.WriteLine("優(yōu)秀");break;case8:case7:Console.WriteLine("良好");break;case6:Console.WriteLine("及格");break;default:Console.WriteLine("不及格");break;}}

Console.ReadLine();}}}2.3.2循環(huán)語句

包括:

for語句

while語句

do-while語句

foreach語句,用于對集合進行操作。2.3.2循環(huán)語句(續(xù))for語句一般形式:for(初始值;循環(huán)條件;循環(huán)控制){語句序列}publicstaticvoidMain(){Console.Clear();Console.BackgroundColor=ConsoleColor.Blue;Console.ForegroundColor=ConsoleColor.Red;Console.Beep();for(inti=1;i<10;i+=2){Console.SetCursorPosition(40-i/2,i);

for(intj=0;j<i;j++){Console.Write("*");}}Console.WriteLine();Console.ReadLine();}

例.使用for語句控制循環(huán)體2.3.2循環(huán)語句(續(xù))while語句一般形式:while(條件){語句序列}循環(huán)體內(nèi)的程序可能會執(zhí)行多次,也可能一次也不執(zhí)行。2.3.2循環(huán)語句(續(xù))do-while一般形式:

do{語句序列}while(條件);

循環(huán)體內(nèi)的程序至少會執(zhí)行一次,然后再判斷條件是否為true,如果條件為true,則繼續(xù)循環(huán)。

foreach語句

foreach語句用于逐個提取集合中的元素,并對集合中每個元素執(zhí)行語句序列中操作的場合。一般形式為:

foreach

(類型標識符in表達式){

語句序列

}2.3.2循環(huán)語句(續(xù))

2.3.3跳轉(zhuǎn)語句

1.break語句

功能:退出最近的封閉switch、while、do-while、for或foreach語句。

格式:

break;【例】循環(huán)接收和輸出鍵盤輸入的每一行的值,當接收的內(nèi)容為空字符串時退出。

usingSystem;namespaceBreakExample{publicclassProgram{publicstaticvoidMain(){for(;;){Console.Write("請輸入一個字符串(直接回車退出):");

strings=Console.ReadLine();if(s=="")break;Console.WriteLine("你輸入的是:{0}.",s);}Console.ReadLine();}}}

2.continue語句

功能:將控制傳遞給下一個while、do-while、for或foreach,繼續(xù)執(zhí)行下一次循環(huán)。

格式:

continue;2.3.3跳轉(zhuǎn)語句(續(xù))

3.goto語句僅在下面兩種情況下才可能會使用goto語句:(1)用于switch語句中從一個case標簽轉(zhuǎn)到另一個case標簽處。(2)用于直接退出到多重嵌套循環(huán)的外部。2.3.3跳轉(zhuǎn)語句(續(xù))

4.return語句

功能:將控制返回到出現(xiàn)return語句的函數(shù)成員的調(diào)用方。

格式:

return[表達式];

其中表達式為可選項,如果該函數(shù)成員的返回類型不為null,則return語句必須使用表達式返回這個類型的值,否則return語句不能使用表達式。【例2-14】循環(huán)與跳轉(zhuǎn)綜合舉例。

2.3.3跳轉(zhuǎn)語句(續(xù))usingSystem;publicclassIfTest{ publicstaticvoidMain() { while(true) { Console.Write("請輸入一個字符串(q結(jié)束):");//從鍵盤接收一行信息 strings=Console.ReadLine();//如果接收的首字符等于Q或者q,則退出循環(huán) if(s.Substring(0,1).ToUpper()=="Q") break; intletterIndex=-1,digitIndex=-1; boolcheckLetter,checkDigit; checkLetter=checkDigit=true;

//s.Length是字符串長度,注意字符串為Unicode字符組成,即

//漢字和字母均是兩字節(jié),例如:“ab章三c”的長度為5 for(inti=0;i<s.Length;i++) {//如果既不是字母也不是數(shù)字,則退出for循環(huán) if(!checkLetter&&!checkDigit)break; if(checkLetter){//如果第i個字符是字母,則記住字母位置 if(Char.IsLetter(s[i])) { letterIndex=i; checkLetter=false; } } if(checkDigit) {//如果第i個字符是數(shù)字,則記住數(shù)字位置 if(Char.IsDigit(s[i])) { digitIndex=i; checkDigit=false; } } } if(letterIndex>-1) { Console.WriteLine("包含的第一個字母是'{0}'。",s[letterIndex]); } else { Console.WriteLine("字符串中不包含字母。"); } if(digitIndex>-1) { Console.WriteLine("包含的第一個數(shù)字是'{0}'。",s[digitIndex]); } else { Console.WriteLine("字符串中不包含數(shù)字。"); }}}}2.3.5異常處理

1.try-catch語句try{

語句序列}catch(異常類型標識

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論