




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章數(shù)據(jù)類型與流程控制2.1C#語言概述
2.2C#數(shù)據(jù)類型
2.3C#流程控制語句
本章教學(xué)目的
學(xué)習(xí)C#數(shù)據(jù)類型、流程控制語句,為實(shí)際應(yīng)用打基礎(chǔ)。本章教學(xué)要求
(1)掌握C#常用數(shù)據(jù)類型的格式及聲明方法;
(2)掌握C#流程控制語句的格式及基本編程方法;
(3)掌握VS2005控制臺(tái)應(yīng)用程序的編寫、調(diào)試方法;
(4)了解不常用的數(shù)據(jù)類型;
(5)了解C#與其他語言的比較。2.1C#語言概述
在C++和Java的基礎(chǔ)上設(shè)計(jì)的,語法和C++、Java語言都比較相似。完全面向?qū)ο?。面向組件(component-oriented):自包含、自描述。通過屬性(property)、方法(method)和事件(event)來提供編程模型;并提供了關(guān)于組件的聲明性信息的特性(attribute);而且這些內(nèi)容可以通過代碼直接編寫。
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í)行超過定義變量的作用域時(shí)由垃圾回收機(jī)制負(fù)責(zé)回收可以為null不可以可以2.2.1值類型
值類型包括整型、浮點(diǎn)型、小數(shù)型、布爾型、字符型、結(jié)構(gòu)型、枚舉型。聲明一個(gè)值類型的語法形式為:
<數(shù)據(jù)類型名><變量名>[=n];
例如:
inta=100;//聲明一個(gè)整型變量a,并賦初值為100;注意,C#不允許引用未初始化的變量。1.整型
C#提供了九種整型:
sbyte:1字節(jié)有符號(hào)
byte:1字節(jié)無符號(hào)
short:2字節(jié)有符號(hào)
ushort:2字節(jié)無符號(hào)
int:4字節(jié)有符號(hào),最常用
uint:4字節(jié)無符號(hào)
long:8字節(jié)有符號(hào)
ulong:8字節(jié)無符號(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)引起來。如果是字符串(單個(gè)字符的組合),對(duì)應(yīng)的類型為string。string類型的常量用雙引號(hào)將字符串引起來。
char和string類型的常量均可以使用轉(zhuǎn)義符。6.結(jié)構(gòu)型
結(jié)構(gòu)是值類型凡是使用結(jié)構(gòu)實(shí)現(xiàn)的功能,均可以用類實(shí)現(xiàn)。聲明struct類型的語法形式為:
[附加聲明][訪問修飾符]struct
結(jié)構(gòu)名稱[:實(shí)現(xiàn)的接口]結(jié)構(gòu)體[;]結(jié)構(gòu)類型不支持用戶指定的繼承,所有結(jié)構(gòu)類型都隱式地從類型object繼承。結(jié)構(gòu)對(duì)于具有值語義的小型的數(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類型變量的語法為:
[附加聲明][訪問修飾符]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ī)制,通過繼承,派生類可以擴(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ù)來描述的。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ù)組的聲明語法舉例
數(shù)組類型語法例子一維數(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ù)組類型??梢允褂肔ength屬性獲取一維數(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)換的形式來表示。如: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#流程控制語句流程控制的形式:順序分支循環(huán)異常捕獲如果一個(gè)邏輯塊包含兩條或兩條以上的語句序列,必須使用大括號(hào){}將語句括起來。2.3.1條件分支語句
if語句:根據(jù)布爾表達(dá)式的值(true或者false)選擇要執(zhí)行的語句序列,使用時(shí)要注意else應(yīng)和最近的if語句匹配。2.3.1條件分支語句(續(xù))switch語句也叫case語句switch語句與C++和Java均不完全相同。
switch語句常用形式為:switch(表達(dá)式){case常量表達(dá)式1:
語句序列1case常量表達(dá)式2:
語句序列2……[default:語句序列]}2.3.1條件分支語句(續(xù))常量表達(dá)式
switch條件表達(dá)式的值和每個(gè)case后的常量表達(dá)式可以是string、int、char、enum或其它值類型。語句序列每個(gè)case后的語句序列可以用大括號(hào)括起來,也可以不用,但是每個(gè)case塊的最后一句一定要是break語句,或者是goto語句。switch語句的執(zhí)行順序
a)如果switch語句的條件表達(dá)式的值和某一個(gè)case標(biāo)記后指定的值相等,則轉(zhuǎn)到該case標(biāo)記后的語句序列執(zhí)行;
b)若switch語句的條件表達(dá)式的值和任何一個(gè)case標(biāo)記后指定的值都不相等,則跳到default標(biāo)記后的語句序列執(zhí)行;2.3.1條件分支語句(續(xù))
c)若switch語句下面沒有default標(biāo)記,則跳到switch語句的結(jié)尾。注意:
a)當(dāng)找到符合條件表達(dá)式值的case標(biāo)記時(shí),如果其后有語句序列,則它只會(huì)執(zhí)行此case塊中的語句序列,不會(huì)再對(duì)其它的case標(biāo)記進(jìn)行判斷,所以才要求每個(gè)語句序列的最后一條語句必須是break語句,但是有一個(gè)情況例外:如果某個(gè)case塊為空,則會(huì)從這個(gè)case塊直接跳到下一個(gè)case塊上。b)如果case后有語句,則此case的順序怎么放都無所謂,甚至可以將default子句放到最上面。因此,在一個(gè)switch中,不能有相同的兩個(gè)case標(biāo)記。
例.使用switch語句,完成對(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)語句
包括:
for語句
while語句
do-while語句
foreach語句,用于對(duì)集合進(jìn)行操作。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)的程序可能會(huì)執(zhí)行多次,也可能一次也不執(zhí)行。2.3.2循環(huán)語句(續(xù))do-while一般形式:
do{語句序列}while(條件);
循環(huán)體內(nèi)的程序至少會(huì)執(zhí)行一次,然后再判斷條件是否為true,如果條件為true,則繼續(xù)循環(huán)。
foreach語句
foreach語句用于逐個(gè)提取集合中的元素,并對(duì)集合中每個(gè)元素執(zhí)行語句序列中操作的場(chǎng)合。一般形式為:
foreach
(類型標(biāo)識(shí)符in表達(dá)式){
語句序列
}2.3.2循環(huán)語句(續(xù))
2.3.3跳轉(zhuǎn)語句
1.break語句
功能:退出最近的封閉switch、while、do-while、for或foreach語句。
格式:
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語句
功能:將控制傳遞給下一個(gè)while、do-while、for或foreach,繼續(xù)執(zhí)行下一次循環(huán)。
格式:
continue;2.3.3跳轉(zhuǎn)語句(續(xù))
3.goto語句僅在下面兩種情況下才可能會(huì)使用goto語句:(1)用于switch語句中從一個(gè)case標(biāo)簽轉(zhuǎn)到另一個(gè)case標(biāo)簽處。(2)用于直接退出到多重嵌套循環(huán)的外部。2.3.3跳轉(zhuǎn)語句(續(xù))
4.return語句
功能:將控制返回到出現(xiàn)return語句的函數(shù)成員的調(diào)用方。
格式:
return[表達(dá)式];
其中表達(dá)式為可選項(xiàng),如果該函數(shù)成員的返回類型不為null,則return語句必須使用表達(dá)式返回這個(gè)類型的值,否則return語句不能使用表達(dá)式?!纠?-14】循環(huán)與跳轉(zhuǎn)綜合舉例。
2.3.3跳轉(zhuǎn)語句(續(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語句try{
語句序列}catch(異常類型標(biāo)識(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 土地開發(fā)工程中介居間合同
- 國(guó)際工程項(xiàng)目合同管理簡(jiǎn)介
- 《生命體系的結(jié)構(gòu)層次》課件
- 《靜脈血管和心臟》課件
- 《緊守安全知識(shí)防溺水》課件
- 中級(jí)經(jīng)濟(jì)師人力資源 第十四章 勞動(dòng)合同管理與特殊用工知識(shí)點(diǎn)和練習(xí)題庫(kù)
- 揭秘科研之旅
- 商鋪門面轉(zhuǎn)租合同范本
- 吉林宣傳拍攝合同范本
- 舍務(wù)部申請(qǐng)書1000字
- 人教版九年級(jí)化學(xué) 5.2 化學(xué)方程式(學(xué)習(xí)、上課課件)
- 研學(xué)旅行我做主(課件)20232024學(xué)期六年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)遼師大版
- 2024-2025學(xué)年人教版八年級(jí)物理上學(xué)期課后習(xí)題答案
- 氣體滅火系統(tǒng)氣體鋼瓶檢測(cè)充裝技術(shù)文件
- 成人鼻腸管的留置與維護(hù)
- 國(guó)能遼寧北票 200MW 風(fēng)力發(fā)電項(xiàng)目地質(zhì)災(zāi)害危險(xiǎn)性評(píng)估報(bào)告
- DZ∕T 0214-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 銅、鉛、鋅、銀、鎳、鉬(正式版)
- QCSG1204009-2015電力監(jiān)控系統(tǒng)安全防護(hù)技術(shù)規(guī)范
- 新生兒傳統(tǒng)四病篩查
- 小班社會(huì)《多喝水身體好》課件
- 2024年單招必備時(shí)事政治200題(含答案)
評(píng)論
0/150
提交評(píng)論