流程控制語句與函數(shù)課件_第1頁
流程控制語句與函數(shù)課件_第2頁
流程控制語句與函數(shù)課件_第3頁
流程控制語句與函數(shù)課件_第4頁
流程控制語句與函數(shù)課件_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章流程控制語句與函數(shù)5.1控制程序流程5.2使用選擇語句5.3使用循環(huán)語句5.4使用goto語句5.5嵌套使用流程控制語句5.6函數(shù)5.7常用內(nèi)部函數(shù)5.8小結(jié)15.1控制程序流程控制程序流程的方法很多,主要有如下3種。選擇語句:如同考試中的單選題目,選擇執(zhí)行了某條語句,另一條就不會(huì)再執(zhí)行。循環(huán)語句:在需要將一個(gè)表達(dá)式進(jìn)行多次重復(fù)運(yùn)算時(shí),可以使用循環(huán)語句,指定其循環(huán)次數(shù)或者界定其退出循環(huán)的條件。goto語句:即標(biāo)記語句,使程序自動(dòng)跳到標(biāo)記語句處執(zhí)行,標(biāo)記語句執(zhí)行完畢又直接回到調(diào)用標(biāo)記語句處。需要注意的是,在程序中最好不使用goto語句,因?yàn)樵撜Z句會(huì)使得程序代碼可讀性很差。25.2使用選擇語句5.2.1if語句用if語句實(shí)現(xiàn)單分支選擇結(jié)構(gòu)

if(表達(dá)式)語句;語句中的表達(dá)式通常用于表示條件,應(yīng)為關(guān)系表達(dá)式或邏輯表達(dá)式。語句只是一條語句,如果在條件滿足時(shí)需要執(zhí)行多條語句,應(yīng)使用花括號(hào)({})括起來,使之成為語句塊?!?表達(dá)式)”中的括號(hào)不能省略。35.2.1if語句用if語句實(shí)現(xiàn)雙分支選擇結(jié)構(gòu)

if(表達(dá)式)語句1;else語句2;55.2.1if語句用if語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;elseif(表達(dá)式3)語句3;……else語句n;6staticvoidMain(string[]args){doublex;doubley=0;Strings;Regexr=newRegex("^[0-9]{1,}.[0-9]{1,}$");Console.WriteLine("請(qǐng)輸入一個(gè)浮點(diǎn)數(shù)");s=Console.ReadLine();if(r.IsMatch(s)){x=Convert.ToDouble(s);if((x-(int)x)>=0.5){y=(int)x+1;}elsey=(int)x;Console.WriteLine("{0}經(jīng)過四舍五入后的結(jié)果是:{1}",x,y);}elseConsole.WriteLine("您輸入的不是一個(gè)浮點(diǎn)數(shù)");Console.ReadLine();}75.2.2switch語句switch表達(dá)式的類型為sbyte、byte、short、ushort、int、uint、long、ulong、char、string、枚舉或用戶自定義類型。每個(gè)case分支中的常量表達(dá)式必須能隱式轉(zhuǎn)換為switch表達(dá)式的類型,且常量表達(dá)式的值不能相同,從而保證分支選擇的唯一性。如果某個(gè)分支有多條語句,可以用花括號(hào)括起來,也可以不加花括號(hào)。default分支可有可無,但是每個(gè)switch語句最多只能有一個(gè)default分支。當(dāng)default語句缺省時(shí),如果switch后面的表達(dá)式值與任意常量表達(dá)式值不相等,將不執(zhí)行任何語句,直接退出switch語句。各分支語句中的break不可省略,否則將會(huì)出現(xiàn)某些錯(cuò)誤。使用switch語句時(shí)一定要注意,case后面必須是常量表達(dá)式,以冒號(hào)結(jié)束而不是分號(hào)。95.2.2switch語句示例:staticvoidMain(string[]args){doublescore;charclass1;inti;Console.WriteLine("請(qǐng)輸入你的成績(jī):");score=Convert.ToDouble(Console.ReadLine());i=(int)score/10;switch(i){case10:case9:class1='A';break;case8:class1='B';break;case7:class1='C';break;case6:class1='D';break;default:class1='E';break;}Console.WriteLine("你的成績(jī)等級(jí)為:{0}",class1);}105.2.3switch語句的控制類型switch語句的控制可以按case語句的排列先后順序進(jìn)行,也可以通過跳轉(zhuǎn)語句來實(shí)現(xiàn)。示例:實(shí)現(xiàn)switch語句的跳轉(zhuǎn)語句。

staticvoidMain(string[]args){intdays=0;intmonth=3;switch(month){case1:case3:case5:case7:case8:case10:case12:days=31;break;case2:days=28;break;case4:case6:case9:case11:days=30;break;default:days=0;break;}Console.WriteLine("thismonthhas{0}days",days);}115.3使用循環(huán)語句5.3.1while語句while語句是用來實(shí)現(xiàn)循環(huán)的語句,該類循環(huán)先測(cè)試循環(huán)條件再執(zhí)行循環(huán)體,按照不同條件執(zhí)行循環(huán)體部分零次或多次。它的語法形式如下。while(表達(dá)式)循環(huán)體部分;135.3.1while語句注意:循環(huán)體如果包含一條以上的語句,應(yīng)以花括號(hào)括起來作為復(fù)合語句。在循環(huán)體中,通常應(yīng)包含改變循環(huán)條件表達(dá)式值的語句,否則便會(huì)造成無限循環(huán)。由于先判斷條件,可能出現(xiàn)第一次測(cè)試條件時(shí),表達(dá)式的值就為false。此種情況下循環(huán)體將一次也不執(zhí)行,又稱“允許0次循環(huán)”。145.3.1while語句示例:

classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;

while(number<=10){sum+=number;number++;}Console.WriteLine("thesumis{0}",sum);Console.Read();}}執(zhí)行上述代碼,運(yùn)行結(jié)果為:thesumis55。155.3.2do語句示例:

classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;

do{sum+=number;number++;}while(number<=10);Console.WriteLine("thesumis{0}",sum);Console.Read();}}執(zhí)行上述代碼,運(yùn)行結(jié)果為:thesumis55。17使用do循環(huán),求輸入任意大于0整數(shù)的階乘。輸入一個(gè)整數(shù),將各位數(shù)字反轉(zhuǎn)后輸出。Console.write()輸出時(shí)不換行。185.3.3for語句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;195.3.4foreach語句foreach(類型標(biāo)識(shí)符in表達(dá)式)嵌入語句;示例:staticvoidMain(string[]args){int[]list={10,20,30,40,50,60};//初始數(shù)組

foreach(intiinlist)Console.Write("{0,-5}",i);

Console.Read();}215.3.5break語句和continue語句break語句用于跳出包含它的switch、while、do、for、foreach語句。如果break不是在switch、while、do、for、foreach語句塊中,將發(fā)生編譯錯(cuò)誤。當(dāng)switch、while、do、for、foreach語句相互嵌套時(shí),break語句只是跳出直接包含它的語句塊。225.3.5break語句和continue語句

classTestBreak{staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")

break;

//跳出最內(nèi)層的循環(huán)Console.WriteLine("youentered:{0}",s);}Console.Read();}}235.3.5break語句和continue語句示例staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")continue;Console.WriteLine("youentered:{0}",s);}Console.Read();}255.4使用goto語句

goto語句是除選擇語句、循環(huán)語句之外的控制程序流程的語句,常用于將程序流程轉(zhuǎn)移出嵌套范圍。goto語句的常見用法為gotolable語句。其中,lable為一個(gè)標(biāo)簽,其語法形式為:標(biāo)簽1:265.5嵌套使用流程控制語句循環(huán)結(jié)構(gòu)的嵌套示例:staticvoidMain(string[]args){inti=1,a=0;for(;i<=5;i++){do{i++;a++;}while(i<3);i++;}Console.WriteLine("a的值為{0},i的值為{1}",a,i);Console.ReadLine();}295.6函數(shù)5.6.1函數(shù)的定義與使用函數(shù)在使用之前必須先定義,函數(shù)定義的形式如下。函數(shù)修飾符數(shù)據(jù)類型標(biāo)識(shí)符函數(shù)名(形式參數(shù)說明列表){變量、數(shù)組的定義語句;其他可執(zhí)行部分}函數(shù)的返回值是需要返回給主調(diào)函數(shù)的處理結(jié)果,由return語句給出。對(duì)于無返回值的函數(shù),其類型標(biāo)識(shí)符為void,不需要return語句305.6.1函數(shù)的定義與使用示例:編寫一個(gè)函數(shù),用于求任意兩個(gè)整數(shù)之間所有數(shù)的平方和。classProgram{privatestaticintpfh(intx,inty){inti,sum=0;for(i=x;i<=y;i++)sum=sum+i*i;return(sum);}}315.6.1函數(shù)的定義與使用函數(shù)的使用在類中的某個(gè)函數(shù)中,調(diào)用本類中由“函數(shù)名”指定的函數(shù),其語法形式如下:函數(shù)名([實(shí)際參數(shù)列表])調(diào)用由另一個(gè)類的對(duì)象指定的函數(shù),其語法形式如下:對(duì)象名.方法名([實(shí)際參數(shù)列表])只能調(diào)用非本類的另一個(gè)類的靜態(tài)方法,其語法形式如下:類名.方法名([實(shí)際參數(shù)列表])325.6.2函數(shù)的參數(shù)傳遞參數(shù)傳遞中的類型轉(zhuǎn)化

示例:classProgram{staticfloatSqr(floatk){return(k*k);}staticvoidMain(string[]args){inty;floatyy;y=6;yy=Sqr(y);Console.WriteLine("{0}的平方是{1}",y,yy);Console.ReadLine();}}335.6.2函數(shù)的參數(shù)傳遞參數(shù)傳遞的類型:值傳遞時(shí)參數(shù)的語法形式如下:參數(shù)類型參數(shù)名引用傳遞時(shí)參數(shù)的語法形式如下:ref參數(shù)類型參數(shù)名輸出傳遞時(shí)參數(shù)的語法形式如下:out參數(shù)類型參數(shù)名參數(shù)數(shù)組:使用params關(guān)鍵字聲明參數(shù),參數(shù)個(gè)數(shù)為不確定。345.6.2函數(shù)的參數(shù)傳遞值傳遞參數(shù)示例:classProgram{staticvoidswap(inta,intb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;

Console.WriteLine("請(qǐng)輸入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());

swap(x,y);

Console.WriteLine("轉(zhuǎn)換后x和y的值為:{0},{1}",x,y);

Console.ReadLine();}}355.6.2函數(shù)的參數(shù)傳遞引用傳遞參數(shù)示例:classProgram{staticvoidswap(ref

inta,refintb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;

Console.WriteLine("請(qǐng)輸入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());

sx,refy);

Console.WriteLine("轉(zhuǎn)換后x和y的值為:{0},{1}",x,y);

Console.ReadLine();}}365.6.2函數(shù)的參數(shù)傳遞輸出傳遞參數(shù)示例:classProgram{staticvoidswap(out

inta,outintb){

inti;a=Convert.ToInt32(Console.ReadLine());b=Convert.ToInt32(Console.ReadLine());i=a;a=b;b=i;}staticvoidMain(string[]args){

intx,y;

sx,outy);

Console.WriteLine("轉(zhuǎn)換后x和y的值為:{0},{1}",x,y);

Console.ReadLine();}}37Ref與out的區(qū)別:out關(guān)鍵字會(huì)導(dǎo)致參數(shù)通過引用來傳遞,這與ref關(guān)鍵字類似。不同之處在于:(1)ref傳進(jìn)去的參數(shù)必須在調(diào)用前初始化,而out不必,因?yàn)閛ut的函數(shù)會(huì)先清空變量,即使變量已經(jīng)賦值。

inti;SomeMethod(refi);//語法錯(cuò)誤SomeMethod(outi);//通過38Ref與out的區(qū)別:(2)ref傳進(jìn)去的參數(shù)在函數(shù)內(nèi)部可以直接使用,而out不可。publicvoidSomeMethod(refinti)

{

intj=i;//通過

//...

}publicvoidSomeMethod(outinti)

{

intj=i;//語法錯(cuò)誤

}(3)ref傳進(jìn)去的參數(shù)在函數(shù)內(nèi)部可以不被修改,但out必須在離開函數(shù)體前進(jìn)行賦值。39usingsystem;

classtestapp

{

staticvoidouttest(outintx,outinty)

{//離開這個(gè)函數(shù)前,必須對(duì)x和y賦值,否則會(huì)報(bào)錯(cuò)。//y=x;

//上面這行會(huì)報(bào)錯(cuò),因?yàn)槭褂昧薿ut后,x和y都清空了,需要重新賦值,即使調(diào)用函數(shù)前賦過值也不行x=1;

y=2;

}

staticvoidreftest(refintx,refinty)

{

y=x;

}40publicstaticvoidmain()

{

inta,b;

//out使用前,變量可以不賦值

outtest(outa,outb);

console.writeline("a={0};b={1}",a,b);

intc=11,d=22;

outtest(outc,outd);

console.writeline("c={0};d={1}",c,d);

intm,n;

//reftest(refm,refn);

//上面這行會(huì)出錯(cuò),ref使用前,變量必須賦值into=11,p=22;

reftest(refo,refp);

console.writeline("o={0};p={1}",o,p);

}41(4)ref:

當(dāng)需要通過調(diào)用某函數(shù)來改變實(shí)參變量的值時(shí),使用ref。out:

主要是為了一個(gè)方法能返回兩個(gè)以上的結(jié)果。Ref與out的區(qū)別:42注:※對(duì)于值型變量作為方法參數(shù)時(shí),可以有如上所述三種情況:1.沒有ref和out修飾(直接傳值,不能改變實(shí)參)2.使用ref修飾(引用傳遞,輸入,可以改變實(shí)參)3.使用out修飾(引用傳遞,輸出,可以改變實(shí)參)※對(duì)于引用類型的變量的三種情況:1.沒有ref和out修飾(引用傳遞,可以改變實(shí)參)2.使用ref修飾(與1類似。但如果在被調(diào)用函數(shù)里面把傳過來的類=null,我們就可以看出區(qū)別了)3.使用out修飾(引用傳遞,可以改變實(shí)參)Ref與out的區(qū)別:435.6.2函數(shù)的參數(shù)傳遞參數(shù)數(shù)組

有時(shí)需要傳遞的參數(shù)個(gè)數(shù)不確定,例如求幾個(gè)數(shù)的平均值??梢允褂胮aram關(guān)鍵字聲明參數(shù)的個(gè)數(shù)為不確定。

445.6.2函數(shù)的參數(shù)傳遞參數(shù)數(shù)組示例:classProgram{publicstaticfloatAverage(paramslong[]array){longtotal,i;for(i=0,total=0;i<array.Length;i++){total=total+array[i];}return((float)total/array.Length);}staticvoidMain(string[]args){floatx=Average(1,2,3,5);Console.WriteLine("1、2、3、5的平均值為{0}",x);

x=Average(10,20,35,52);Console.WriteLine("10、20、35、52的平均值為{0}",x);Console.ReadLine();}}455.6.3內(nèi)聯(lián)函數(shù)對(duì)于一些功能簡(jiǎn)單、規(guī)模較小又使用頻繁的函數(shù),CLR會(huì)做出是否使用內(nèi)聯(lián)函數(shù)的判斷。內(nèi)聯(lián)函數(shù)不在調(diào)用時(shí)發(fā)生控制轉(zhuǎn)移,而是在編譯時(shí)將函數(shù)體嵌入在每一個(gè)調(diào)用處,這樣就節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等消耗。注意:在何處內(nèi)聯(lián)代碼完全由CLR判斷得出,無法使用諸如C++中inline的關(guān)鍵字來控制哪些方法是內(nèi)聯(lián)的。465.6.4函數(shù)重載函數(shù)重載允許一個(gè)類中有同名的函數(shù)存在,即一個(gè)類中可以存在兩個(gè)以上的函數(shù)名稱相同。重載函數(shù)的形參必須不同,可以個(gè)數(shù)不同或者類型不同。示例:intadd(intx,inty);intadd(inta,intb); //錯(cuò)誤!編譯器不以形參名來區(qū)分函數(shù)intadd(intx,inty);voidadd(intx,inty); //錯(cuò)誤!編譯器不以返回值來區(qū)分函數(shù)475.6.4函數(shù)重載示例:classProgram{publicstaticintAdd(inti,intj){returni+j;}publicstaticstringAdd(strings1,strings2){returns1+s2;}publicstaticlongAdd(longx){returnx+5;}staticvoidMain(string[]args){Console.WriteLine(Add(1,2));Console.WriteLine(Add("1","2"));Console.WriteLine(Add(10));Console.ReadLine();}}485.7常用內(nèi)部函數(shù)5.7.1隨機(jī)函數(shù)介紹在C#中要生成隨機(jī)數(shù)需要使用Random類。該類的主要方法是Next方法,它生成一個(gè)介于兩個(gè)整數(shù)之間的隨機(jī)數(shù),其語法形式如下:publicvirtualintNext([intminValue,intmaxValue]);495.7.1隨機(jī)函數(shù)介紹示例:

classProgram{staticvoidMain(string[]args){

Randomop1=newRandom(10);Randomop2=newRandom();intresult;result=op1.Next(10,99)+op2.Next(0,9);Console.WriteLine(result);Console.Read();}}由于結(jié)果是隨機(jī)值,所以這里不再描述運(yùn)行結(jié)果,505.7.2格式化函數(shù)介紹.NET為處理數(shù)字、日期以及字符串的格式化提供了WriteLine方法、Format方法和ToString方法。通過WriteLine方法和Format方法可對(duì)多個(gè)變量進(jìn)行格式化,ToString方法只能對(duì)一個(gè)變量進(jìn)行格式化。對(duì)于使用WriteLine方法和Format方法格式化字符串,規(guī)定格式的一般語法形式如下。{N,[M][:格式碼精度]}515.7.2格式化函數(shù)介紹{N,[M][:格式碼精度]}[]:表示其中的內(nèi)容為可選項(xiàng)。N:表示要格式化的參數(shù)的索引。M:可選參數(shù),表示格式化后的參數(shù)所占的寬度。如果M是負(fù)數(shù),那么格式化后的值就是左對(duì)齊的;如果M是正數(shù),那么格式化后的值是右對(duì)齊的;如果未指定M,則默認(rèn)為零。格式碼:可選的格式化代碼字符串。精度:格式化輸出的有效位數(shù)或小數(shù)位數(shù)。52//部分?jǐn)?shù)值格式輸出方式的例子usingSystem;classFormating{publicstaticvoidMain(){Console.WriteLine("在寬度為的空間里靠左對(duì)齊:{0,-10}",99);Console.WriteLine("在寬度為的空間里靠右對(duì)齊:{0,10}",99);Console.WriteLine("在寬度為的空間里靠左對(duì)齊:{0,-10}","LLL");Console.WriteLine("在寬度為的空間里靠右對(duì)齊:{0,10}","RRR");Console.WriteLine("貨幣-{0:C}{1:C4}",88.8,-888.8);Console.WriteLine("10進(jìn)制整數(shù)-{0:D5}",88);Console.WriteLine("科學(xué)計(jì)數(shù)-{0:E}",888.8);Console.WriteLine("固定小數(shù)點(diǎn)-{0:F3}",888.8888);Console.WriteLine("浮點(diǎn)數(shù)-{0:G}",888.8888);Console.WriteLine("數(shù)字格式-{0:N}",8888888.8);Console.WriteLine("16進(jìn)制格式-{0:X4}",88);Console.ReadLine();}}intval1=0;intval2=val1;val2=123;stringval3="一個(gè)占位符例子";Console.WriteLine("Values:{0},{1},這是{2}",val1,val2,val3);{N,[M][:格式碼精度]}535.7.3日期函數(shù)介紹用于處理時(shí)間和日期的對(duì)象為DateTime結(jié)構(gòu)和TimeSpan類。DateTime結(jié)構(gòu)用于表示日期和時(shí)間,表示范圍在0001年1月1日午夜00:00:00到9999年12月31日晚上11:59:59之間的日期和時(shí)間,最小時(shí)間單位等于100納秒。TimeSpan類可以表示一個(gè)時(shí)間間隔,表示范圍可以在Int64.MinValue到Int64.MaxValue之間。545.7.3日期函數(shù)介紹DateTime結(jié)構(gòu)的常用方法如下:AddYears、AddMonths、AddDays、AddHours、AddMinutes、AddSeconds方法,用于將指定的年、月、日、時(shí)、分、秒加到DateTime上。Substract方法:日期相減。IsLeapYear方法:判斷是否為閏年。true為閏年,false為非閏年。ToLongDateString和ToLongTimeString方法:把DateTime轉(zhuǎn)換為字符串,且以長(zhǎng)格式表示日期或時(shí)間。ToShortDateString和ToShortTimeString方法:把DateTime轉(zhuǎn)換為字符串,且以短格式表示日期或時(shí)間。==、!=、<、>、>=、<=運(yùn)算符:用于比較日期。+、-運(yùn)算符:用于日期的加、減。555.7.4數(shù)學(xué)運(yùn)算函數(shù)介紹Math類屬于命名空間System,包含很多數(shù)學(xué)函數(shù)。常用方法如下:Abs方法:返回值指定數(shù)字的絕對(duì)值。例如,代碼Math

溫馨提示

  • 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論