版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章數(shù)據(jù)類型與流程控制2.1C#語(yǔ)言概述
2.2C#數(shù)據(jù)類型
2.3C#流程控制語(yǔ)句
本章教學(xué)目的
學(xué)習(xí)C#數(shù)據(jù)類型、流程控制語(yǔ)句,為實(shí)際應(yīng)用打基礎(chǔ)。本章教學(xué)要求
(1)掌握C#常用數(shù)據(jù)類型的格式及聲明方法;
(2)掌握C#流程控制語(yǔ)句的格式及基本編程方法;
(3)掌握VS2005控制臺(tái)應(yīng)用程序的編寫、調(diào)試方法;
(4)了解不常用的數(shù)據(jù)類型;
(5)了解C#與其他語(yǔ)言的比較。2.1C#語(yǔ)言概述
在C++和Java的基礎(chǔ)上設(shè)計(jì)的,語(yǔ)法和C++、Java語(yǔ)言都比較相似。完全面向?qū)ο?。面向組件(component-oriented):自包含、自描述。通過(guò)屬性(property)、方法(method)和事件(event)來(lái)提供編程模型;并提供了關(guān)于組件的聲明性信息的特性(attribute);而且這些內(nèi)容可以通過(guò)代碼直接編寫。
2.2C#數(shù)據(jù)類型
分為兩類:值類型和引用類型。值類型:包括基本類型、枚舉類型、結(jié)構(gòu)類型。引用類型:包括類、接口、數(shù)組、委托。
一般把引用類型的變量稱為對(duì)象。值類型和引用類型的區(qū)別
特性值類型引用類型變量中保存的內(nèi)容實(shí)際數(shù)據(jù)指向?qū)嶋H數(shù)據(jù)的引用指針內(nèi)存空間配置堆棧(Stack)受管制的堆(ManagedHeap)內(nèi)存需求較少較多執(zhí)行效率較快較慢內(nèi)存釋放時(shí)間點(diǎn)執(zhí)行超過(guò)定義變量的作用域時(shí)由垃圾回收機(jī)制負(fù)責(zé)回收可以為null不可以可以2.2.1值類型
值類型包括整型、浮點(diǎn)型、小數(shù)型、布爾型、字符型、結(jié)構(gòu)型、枚舉型。聲明一個(gè)值類型的語(yǔ)法形式為:
<數(shù)據(jù)類型名><變量名>[=n];
例如:
inta=100;//聲明一個(gè)整型變量a,并賦初值為100;注意,C#不允許引用未初始化的變量。1.整型
C#提供了九種整型:
sbyte:1字節(jié)有符號(hào)
byte:1字節(jié)無(wú)符號(hào)
short:2字節(jié)有符號(hào)
ushort:2字節(jié)無(wú)符號(hào)
int:4字節(jié)有符號(hào),最常用
uint:4字節(jié)無(wú)符號(hào)
long:8字節(jié)有符號(hào)
ulong:8字節(jié)無(wú)符號(hào)
char:2字節(jié),單個(gè)Unicode字符編碼,常用,例如:'1'
2.浮點(diǎn)類型
float:4字節(jié)浮點(diǎn)數(shù),常用。例如:35.0fdouble:8字節(jié)浮點(diǎn)數(shù),常用。例如:2.7E+23浮點(diǎn)數(shù)格式與計(jì)算機(jī)組成原理介紹的IEEE754規(guī)定的格式相同3.小數(shù)型(不常用)
即decimal類型,共占16個(gè)字節(jié)(128個(gè)二進(jìn)制位),具有28至29位十進(jìn)制有效數(shù)字。尾數(shù)位數(shù)多,因此可以達(dá)到很高的精度,階碼位數(shù)少,所以范圍并不大。
適用于金融、貨幣等需要高精度數(shù)值的領(lǐng)域。其類型指定符為M(或m)。例如:
decimalmyMoney=300.5m;decimaly=9999999999999999999999999m;decimalx=123.123456789123456789m;4.布爾型
用bool表示,bool類型只有兩個(gè)值true和false。例如:
bool
isExist=false;
boolb=(i>0&&i<10);注意
if(i)j+=10;//錯(cuò)誤
if(j=15)j+=10;//錯(cuò)誤
5.字符型
char型,為單個(gè)Unicode字符,字符型常量必須用單引號(hào)引起來(lái)。如果是字符串(單個(gè)字符的組合),對(duì)應(yīng)的類型為string。string類型的常量用雙引號(hào)將字符串引起來(lái)。
char和string類型的常量均可以使用轉(zhuǎn)義符。6.結(jié)構(gòu)型
結(jié)構(gòu)是值類型凡是使用結(jié)構(gòu)實(shí)現(xiàn)的功能,均可以用類實(shí)現(xiàn)。聲明struct類型的語(yǔ)法形式為:
[附加聲明][訪問修飾符]struct
結(jié)構(gòu)名稱[:實(shí)現(xiàn)的接口]結(jié)構(gòu)體[;]結(jié)構(gòu)類型不支持用戶指定的繼承,所有結(jié)構(gòu)類型都隱式地從類型object繼承。結(jié)構(gòu)對(duì)于具有值語(yǔ)義的小型的數(shù)據(jù)結(jié)構(gòu)特別有用。復(fù)數(shù)、坐標(biāo)系中的點(diǎn)或字典中的“鍵-值”對(duì)都是結(jié)構(gòu)的典型示例。對(duì)小型數(shù)據(jù)結(jié)構(gòu)而言,使用結(jié)構(gòu)而不使用類會(huì)大大節(jié)省應(yīng)用程序分配的內(nèi)存量。例如,下面的程序創(chuàng)建并初始化一個(gè)含有100個(gè)點(diǎn)的數(shù)組。對(duì)于作為類實(shí)現(xiàn)的Point,出現(xiàn)了101個(gè)實(shí)例對(duì)象,其中,數(shù)組需要一個(gè),它的100個(gè)元素每個(gè)都需要一個(gè)。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í),只有一個(gè)對(duì)象被實(shí)例化(即用于數(shù)組的那個(gè)對(duì)象),而Point實(shí)例以值的形式直接內(nèi)聯(lián)存儲(chǔ)在數(shù)組中。調(diào)用結(jié)構(gòu)構(gòu)造函數(shù)也是使用new運(yùn)算符,但是并不是指分配內(nèi)存。與動(dòng)態(tài)分配對(duì)象并返回對(duì)它的引用不同,結(jié)構(gòu)構(gòu)造函數(shù)直接返回結(jié)構(gòu)值本身(通常是堆棧上的一個(gè)臨時(shí)位置),然后根據(jù)需要復(fù)制該結(jié)構(gòu)值。7.枚舉型
枚舉(enum)是一組命名常量的集合,稱為枚舉成員列表。它可以為一組在邏輯上密不可分的整數(shù)值提供便于記憶的符號(hào),從而使代碼更清晰,也易于維護(hù)。聲明enum類型變量的語(yǔ)法為:
[附加聲明][訪問修飾符]enum
名稱[:數(shù)據(jù)類型]{枚舉列表}2.2.2引用類型
“引用”指該類型的變量并不直接存儲(chǔ)所包含的實(shí)際數(shù)據(jù),而是存儲(chǔ)實(shí)際數(shù)據(jù)的地址。
(回想計(jì)算機(jī)組成原理“間接尋址”的實(shí)現(xiàn))C#中的引用類型有四種:類、委托、接口和數(shù)組。1.類
C#的類與Java的類非常相似。個(gè)別地方有區(qū)別。類支持繼承機(jī)制,通過(guò)繼承,派生類可以擴(kuò)展基類的數(shù)據(jù)成員和函數(shù)方法,進(jìn)而達(dá)到代碼重用和設(shè)計(jì)重用的目的。2.委托
指引用方法的類型,相當(dāng)于C++中的函數(shù)指針原型,主要區(qū)別是:委托在C#中是安全的,它允許實(shí)例化和調(diào)用類的靜態(tài)方法,也可以調(diào)用類的指定實(shí)例的方法。3.接口
接口是一組包含屬性、方法聲明的數(shù)據(jù)結(jié)構(gòu),接口只有聲明部分,沒有實(shí)現(xiàn)部分。
接口一旦聲明,就不要再更改,否則就失去了接口的意義。4.數(shù)組
數(shù)組用于存儲(chǔ)同一種類型的數(shù)據(jù)。數(shù)組是一種引用類型,而不是值類型。數(shù)組是按照數(shù)組名、數(shù)據(jù)元素的類型和維數(shù)來(lái)描述的。C#中可以有一維數(shù)組、多維數(shù)組、交錯(cuò)數(shù)組交錯(cuò)數(shù)組的實(shí)際含義就是指數(shù)組的數(shù)組。例如:
int[][]jaggedArray3={newint[]{1,3,5,7,9},newint[]{0,2,4,6},newint[]{11,22}};
數(shù)組的聲明語(yǔ)法舉例
數(shù)組類型語(yǔ)法例子一維數(shù)組數(shù)據(jù)類型[]數(shù)組變量;int[]myArray;二維數(shù)組數(shù)據(jù)類型[,]數(shù)組變量;int[,]myArray;三維數(shù)組數(shù)據(jù)類型[,,]數(shù)組變量;int[,,]myArray;交錯(cuò)數(shù)組數(shù)據(jù)類型[][]數(shù)組變量;int[][]myArray;數(shù)組的使用
訪問數(shù)組中的元素時(shí),其下標(biāo)是從0開始索引的。數(shù)組元素可以是任何類型,包括數(shù)組類型。可以使用Length屬性獲取一維數(shù)組的長(zhǎng)度,如果是多維數(shù)組,則可以使用GetLength方法確定其某一特定維的長(zhǎng)度。由多種對(duì)數(shù)組操作的方法,例如Sort和Reverse,可以將數(shù)組按照升序或降序排列。例.使用Sort和Reverse方法對(duì)數(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)換的形式來(lái)表示。如:inti=10;longj=(long)i;將大范圍類型的數(shù)據(jù)轉(zhuǎn)換為小范圍類型的數(shù)據(jù)的時(shí)候,必須特別謹(jǐn)慎,因?yàn)榇藭r(shí)有丟失數(shù)據(jù)的危險(xiǎn)。2.2.4裝箱與拆箱
裝箱:將值類型轉(zhuǎn)換為object類型拆箱:將object類型轉(zhuǎn)換為值類型2.2.5運(yùn)算符與優(yōu)先級(jí)與C++和Java相同2.3C#流程控制語(yǔ)句流程控制的形式:順序分支循環(huán)異常捕獲如果一個(gè)邏輯塊包含兩條或兩條以上的語(yǔ)句序列,必須使用大括號(hào){}將語(yǔ)句括起來(lái)。2.3.1條件分支語(yǔ)句
if語(yǔ)句:根據(jù)布爾表達(dá)式的值(true或者false)選擇要執(zhí)行的語(yǔ)句序列,使用時(shí)要注意else應(yīng)和最近的if語(yǔ)句匹配。2.3.1條件分支語(yǔ)句(續(xù))switch語(yǔ)句也叫case語(yǔ)句switch語(yǔ)句與C++和Java均不完全相同。
switch語(yǔ)句常用形式為:switch(表達(dá)式){case常量表達(dá)式1:
語(yǔ)句序列1case常量表達(dá)式2:
語(yǔ)句序列2……[default:語(yǔ)句序列]}2.3.1條件分支語(yǔ)句(續(xù))常量表達(dá)式
switch條件表達(dá)式的值和每個(gè)case后的常量表達(dá)式可以是string、int、char、enum或其它值類型。語(yǔ)句序列每個(gè)case后的語(yǔ)句序列可以用大括號(hào)括起來(lái),也可以不用,但是每個(gè)case塊的最后一句一定要是break語(yǔ)句,或者是goto語(yǔ)句。switch語(yǔ)句的執(zhí)行順序
a)如果switch語(yǔ)句的條件表達(dá)式的值和某一個(gè)case標(biāo)記后指定的值相等,則轉(zhuǎn)到該case標(biāo)記后的語(yǔ)句序列執(zhí)行;
b)若switch語(yǔ)句的條件表達(dá)式的值和任何一個(gè)case標(biāo)記后指定的值都不相等,則跳到default標(biāo)記后的語(yǔ)句序列執(zhí)行;2.3.1條件分支語(yǔ)句(續(xù))
c)若switch語(yǔ)句下面沒有default標(biāo)記,則跳到switch語(yǔ)句的結(jié)尾。注意:
a)當(dāng)找到符合條件表達(dá)式值的case標(biāo)記時(shí),如果其后有語(yǔ)句序列,則它只會(huì)執(zhí)行此case塊中的語(yǔ)句序列,不會(huì)再對(duì)其它的case標(biāo)記進(jìn)行判斷,所以才要求每個(gè)語(yǔ)句序列的最后一條語(yǔ)句必須是break語(yǔ)句,但是有一個(gè)情況例外:如果某個(gè)case塊為空,則會(huì)從這個(gè)case塊直接跳到下一個(gè)case塊上。b)如果case后有語(yǔ)句,則此case的順序怎么放都無(wú)所謂,甚至可以將default子句放到最上面。因此,在一個(gè)switch中,不能有相同的兩個(gè)case標(biāo)記。
例.使用switch語(yǔ)句,完成對(duì)成績(jī)等級(jí)的評(píng)定
usingSystem;namespaceSwitchExample{publicclassProgram{publicstaticvoidMain(){Console.Write("請(qǐng)輸入成績(jī):");//從鍵盤接收一行字符stringstr=Console.ReadLine();//轉(zhuǎn)換為整型inti=Int32.Parse(str.Trim());if(i>100||i<0){Console.WriteLine("成績(jī)不在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)語(yǔ)句
包括:
for語(yǔ)句
while語(yǔ)句
do-while語(yǔ)句
foreach語(yǔ)句,用于對(duì)集合進(jìn)行操作。2.3.2循環(huán)語(yǔ)句(續(xù))for語(yǔ)句一般形式:for(初始值;循環(huán)條件;循環(huán)控制){語(yǔ)句序列}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語(yǔ)句控制循環(huán)體2.3.2循環(huán)語(yǔ)句(續(xù))while語(yǔ)句一般形式:while(條件){語(yǔ)句序列}循環(huán)體內(nèi)的程序可能會(huì)執(zhí)行多次,也可能一次也不執(zhí)行。2.3.2循環(huán)語(yǔ)句(續(xù))do-while一般形式:
do{語(yǔ)句序列}while(條件);
循環(huán)體內(nèi)的程序至少會(huì)執(zhí)行一次,然后再判斷條件是否為true,如果條件為true,則繼續(xù)循環(huán)。
foreach語(yǔ)句
foreach語(yǔ)句用于逐個(gè)提取集合中的元素,并對(duì)集合中每個(gè)元素執(zhí)行語(yǔ)句序列中操作的場(chǎng)合。一般形式為:
foreach
(類型標(biāo)識(shí)符in表達(dá)式){
語(yǔ)句序列
}2.3.2循環(huán)語(yǔ)句(續(xù))
2.3.3跳轉(zhuǎn)語(yǔ)句
1.break語(yǔ)句
功能:退出最近的封閉switch、while、do-while、for或foreach語(yǔ)句。
格式:
break;【例】循環(huán)接收和輸出鍵盤輸入的每一行的值,當(dāng)接收的內(nèi)容為空字符串時(shí)退出。
usingSystem;namespaceBreakExample{publicclassProgram{publicstaticvoidMain(){for(;;){Console.Write("請(qǐng)輸入一個(gè)字符串(直接回車退出):");
strings=Console.ReadLine();if(s=="")break;Console.WriteLine("你輸入的是:{0}.",s);}Console.ReadLine();}}}
2.continue語(yǔ)句
功能:將控制傳遞給下一個(gè)while、do-while、for或foreach,繼續(xù)執(zhí)行下一次循環(huán)。
格式:
continue;2.3.3跳轉(zhuǎn)語(yǔ)句(續(xù))
3.goto語(yǔ)句僅在下面兩種情況下才可能會(huì)使用goto語(yǔ)句:(1)用于switch語(yǔ)句中從一個(gè)case標(biāo)簽轉(zhuǎn)到另一個(gè)case標(biāo)簽處。(2)用于直接退出到多重嵌套循環(huán)的外部。2.3.3跳轉(zhuǎn)語(yǔ)句(續(xù))
4.return語(yǔ)句
功能:將控制返回到出現(xiàn)return語(yǔ)句的函數(shù)成員的調(diào)用方。
格式:
return[表達(dá)式];
其中表達(dá)式為可選項(xiàng),如果該函數(shù)成員的返回類型不為null,則return語(yǔ)句必須使用表達(dá)式返回這個(gè)類型的值,否則return語(yǔ)句不能使用表達(dá)式。【例2-14】循環(huán)與跳轉(zhuǎn)綜合舉例。
2.3.3跳轉(zhuǎn)語(yǔ)句(續(xù))usingSystem;publicclassIfTest{ publicstaticvoidMain() { while(true) { Console.Write("請(qǐng)輸入一個(gè)字符串(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是字符串長(zhǎng)度,注意字符串為Unicode字符組成,即
//漢字和字母均是兩字節(jié),例如:“ab章三c”的長(zhǎng)度為5 for(inti=0;i<s.Length;i++) {//如果既不是字母也不是數(shù)字,則退出for循環(huán) if(!checkLetter&&!checkDigit)break; if(checkLetter){//如果第i個(gè)字符是字母,則記住字母位置 if(Char.IsLetter(s[i])) { letterIndex=i; checkLetter=false; } } if(checkDigit) {//如果第i個(gè)字符是數(shù)字,則記住數(shù)字位置 if(Char.IsDigit(s[i])) { digitIndex=i; checkDigit=false; } } } if(letterIndex>-1) { Console.WriteLine("包含的第一個(gè)字母是'{0}'。",s[letterIndex]); } else { Console.WriteLine("字符串中不包含字母。"); } if(digitIndex>-1) { Console.WriteLine("包含的第一個(gè)數(shù)字是'{0}'。",s[digitIndex]); } else { Console.WriteLine("字符串中不包含數(shù)字。"); }}}}2.3.5異常處理
1.try-catch語(yǔ)句try{
語(yǔ)句序列}catch(異常類型標(biāo)識(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度車庫(kù)門防火安全檢測(cè)與維護(hù)服務(wù)合同4篇
- 二零二五年度農(nóng)業(yè)科技成果轉(zhuǎn)化合同4篇
- 2025年度綠色建筑窗戶安裝與節(jié)能評(píng)估合同4篇
- 2025年羊毛衫片項(xiàng)目可行性研究報(bào)告
- 2025年能源行業(yè)碳排放交易與減排合同3篇
- 2025年度車輛抵押借款合同范本模板3篇
- 2025年油毛氈原紙行業(yè)深度研究分析報(bào)告
- 2025年塑料梳子項(xiàng)目可行性研究報(bào)告
- 2025年中國(guó)家用醫(yī)療器械行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 溫州市2025年度二手房交易市場(chǎng)發(fā)展趨勢(shì)研究報(bào)告合同3篇
- 不同茶葉的沖泡方法
- 光伏發(fā)電并網(wǎng)申辦具體流程
- 建筑勞務(wù)專業(yè)分包合同范本(2025年)
- 企業(yè)融資報(bào)告特斯拉成功案例分享
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制完整
- 食管癌的早期癥狀和手術(shù)治療
- 垃圾分類和回收利用課件
- 北侖區(qū)建筑工程質(zhì)量監(jiān)督站監(jiān)督告知書
- 法考客觀題歷年真題及答案解析卷一(第1套)
- 央國(guó)企信創(chuàng)白皮書 -基于信創(chuàng)體系的數(shù)字化轉(zhuǎn)型
- 6第六章 社會(huì)契約論.電子教案教學(xué)課件
評(píng)論
0/150
提交評(píng)論