流程控制語句與函數課件_第1頁
流程控制語句與函數課件_第2頁
流程控制語句與函數課件_第3頁
流程控制語句與函數課件_第4頁
流程控制語句與函數課件_第5頁
已閱讀5頁,還剩111頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1第5章流程控制語句與函數5.1控制程序流程5.2使用選擇語句5.3使用循環語句5.4使用goto語句5.5嵌套使用流程控制語句5.6函數5.7常用內部函數5.8小結1第5章流程控制語句與函數5.1控制程序流程25.1控制程序流程控制程序流程的方法很多,主要有如下3種:選擇語句:如同考試中的單選題目,選擇執行了某條語句,另一條就不會再執行。循環語句:在需要將一個表達式進行多次重復運算時,可以使用循環語句,指定其循環次數或者界定其退出循環的條件。goto語句:即標記語句,使程序自動跳到標記語句處執行,標記語句執行完畢又直接回到調用標記語句處。需要注意的是,在程序中最好不使用goto語句,因為該語句會使得程序代碼可讀性很差。25.1控制程序流程控制程序流程的方法很多,主要有如下335.2使用選擇語句5.2.1if語句用if語句實現單分支選擇結構:if(表達式)語句;語句中的表達式通常用于表示條件,應為關系表達式或邏輯表達式。語句只是一條語句,如果在條件滿足時需要執行多條語句,應使用花括號({})括起來,使之成為語句塊。“(表達式)”中的括號不能省略。35.2使用選擇語句5.2.1if語句45.2.1if語句示例:staticvoidMain(string[]args){doublescore;score=Convert.ToDouble(Console.ReadLine());if(score>=60)Console.WriteLine("恭喜你,通過了這次考試!");Console.Read();}45.2.1if語句示例:55.2.1if語句用if語句實現雙分支選擇結構:

if(表達式)

語句1;else

語句2;55.2.1if語句用if語句實現雙分支選擇結構:65.2.1if語句用if語句實現多分支選擇結構If(表達式1)語句1;elseif(表達式2)語句2;elseif(表達式3)語句3;……else語句n;65.2.1if語句用if語句實現多分支選擇結構75.2.2switch語句在C#語言中,除使用if語句實現多分支外,也可以使用switch語句。switch(表達式){case常量表達式1:

語句1;

break;case常量表達式2:

語句2;

break;……case常量表達式n:

語句n;

break;default:

語句n+1;

break;}75.2.2switch語句在C#語言中,除使用if語句85.2.2switch語句switch表達式的類型為sbyte、byte、short、ushort、int、uint、long、ulong、char、string、枚舉或用戶自定義類型。每個case分支中的常量表達式必須能隱式轉換為switch表達式的類型,且常量表達式的值不能相同,從而保證分支選擇的唯一性。如果某個分支有多條語句,可以用花括號括起來,也可以不加花括號。default分支可有可無,但是每個switch語句最多只能有一個default分支。當default語句缺省時,如果switch后面的表達式值與任意常量表達式值不相等,將不執行任何語句,直接退出switch語句。各分支語句中的break不可省略,否則將會出現錯誤,這一點跟Java和C++不同。使用switch語句時一定要注意,case后面必須是常量表達式,以冒號結束而不是分號。85.2.2switch語句switch表達式的類型為s95.2.2switch語句示例:staticvoidMain(string[]args){doublescore;charclass1;inti;Console.WriteLine("請輸入你的成績:");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("你的成績等級為:{0}",class1);}95.2.2switch語句示例:105.2.3switch語句的控制類型switch語句的控制可以按case語句的排列先后順序進行,也可以通過跳轉語句來實現。示例:實現switch語句的跳轉語句。

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);}105.2.3switch語句的控制類型switch語句115.3使用循環語句5.3.1while語句while語句是用來實現循環的語句,該類循環先測試循環條件再執行循環體,按照不同條件執行循環體部分零次或多次。它的語法形式如下。while(表達式)循環體部分;115.3使用循環語句5.3.1while語句125.3.1while語句注意:循環體如果包含一條以上的語句,應以花括號括起來作為復合語句。在循環體中,通常應包含改變循環條件表達式值的語句,否則便會造成無限循環。由于先判斷條件,可能出現第一次測試條件時,表達式的值就為false。此種情況下循環體將一次也不執行,又稱“允許0次循環”。125.3.1while語句注意:135.3.1while語句示例:

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

while(number<=10){sum+=number;number++;}Console.WriteLine("thesumis{0}",sum);Console.Read();}}執行上述代碼,運行結果為:thesumis55。135.3.1while語句示例:145.3.2do語句do循環語句實現的是直到型循環,該類循環先執行循環體再測試循環條件。do循環體語句while(表達式);145.3.2do語句do循環語句實現的是直到型循環,該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();}}執行上述代碼,運行結果為:thesumis55。155.3.2do語句示例:165.3.3for語句for(表達式1;表達式2;表達式3)

語句;165.3.3for語句for(表達式1;表達式2;175.3.3for語句表達式1、2、3都可以省略,分號不能省略。如果表達式1、2、3都省略,則將無終止地執行循環體。表達式2是循環控制條件,如果省略,循環將無終止地進行下去。表達式1一般用于為循環控制條件賦初值,也可以是與循環變量無關的其他表達式。如果表達式1省略或者是與循環條件無關的其他表達式,則應該在for語句之前給循環控制條件賦初值。表達式3一般用于改變循環控制條件的值。如果表達式3省略或者是其他與循環條件無關的表達式,則應該在循環體中另有語句改變循環條件,以保證循環能正常結束。175.3.3for語句表達式1、2、3都可以省略,分號185.3.4foreach語句foreach(類型標識符in表達式)

嵌入語句;示例:staticvoidMain(string[]args){int[]list={10,20,30,40,50,60};

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

Console.Read();}185.3.4foreach語句foreach(195.3.5break語句和continue語句break語句用于跳出包含它的switch、while、do、for、foreach語句。如果break不是在switch、while、do、for、foreach語句塊中,將發生編譯錯誤。當switch、while、do、for、foreach語句相互嵌套時,break語句只是跳出直接包含它的語句塊。195.3.5break語句和continue語句bre205.3.5break語句和continue語句

classTestBreak{staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")break;Console.WriteLine("youentered:{0}",s);}Console.Read();}}205.3.5break語句和continue語句cl215.3.5break語句和continue語句continue語句類似于break語句,也必須用于while、dowhile、for、foreach語句,它只從循環的當前迭代中退出,然后在循環的下一次迭代開始重新執行,而不是退出循環。需要注意如下事項:continue語句的目標地址為直接包含它的while、dowhile、for或者foreach語句的嵌套語句結尾。假如continue語句不能被while、dowhile、for或者foreach語句包含,將發生編譯錯誤。當有while、dowhile、for或者foreach語句相互嵌套時,continue語句只適用于直接包含它的語句塊。215.3.5break語句和continue語句con225.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();}225.3.5break語句和continue語句示例235.4使用goto語句

goto語句是除選擇語句、循環語句之外的控制程序流程的語句,常用于將程序流程轉移出嵌套范圍。goto語句的常見用法為gotolable語句。其中,lable為一個標簽,其語法形式為:標簽1:235.4使用goto語句goto語句是除選擇語句、循245.4使用goto語句示例:staticvoidMain(string[]args){intn=1,sum=0;

lable:if(n<=5){sum=sum+n;n++;

gotolable;}Console.WriteLine("sum={0}",sum);Console.Read();}245.4使用goto語句示例:255.5嵌套使用流程控制語句選擇結構的嵌套:if(表達式1)if(表達式2)

語句1else

語句2elseif(表達式3)

語句3else

語句4255.5嵌套使用流程控制語句選擇結構的嵌套:265.5嵌套使用流程控制語句循環結構的嵌套示例: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();}265.5嵌套使用流程控制語句循環結構的嵌套275.6函數5.6.1函數的定義與使用函數在使用之前必須先定義,函數定義的形式如下。函數修飾符數據類型標識符函數名(形式參數說明列表){

變量、數組的定義語句;

其他可執行部分}函數的返回值是需要返回給主調函數的處理結果,由return語句給出。對于無返回值的函數,其類型標識符為void,不需要return語句275.6函數5.6.1函數的定義與使用285.6.1函數的定義與使用示例:編寫一個函數,用于求任意兩個整數之間所有數的平方和。classProgram{privatestaticintpfh(intx,inty){inti,sum=0;for(i=x;i<=y;i++)sum=sum+i*i;return(sum);}}285.6.1函數的定義與使用示例:編寫一個函數,用于求295.6.1函數的定義與使用函數的使用:在類中的某個函數中,調用本類中由“函數名”指定的函數,其語法形式如下:函數名([實際參數列表])調用另一個類的非靜態函數,其語法形式如下:對象名.方法名([實際參數列表])調用另一個類的靜態函數,其語法形式如下:類名.方法名([實際參數列表])295.6.1函數的定義與使用函數的使用:305.6.2函數的參數傳遞參數傳遞中的類型轉化

示例:classProgram{staticfloatSqr(floatk){return(k*k);}staticvoidMain(string[]args){inty;floatyy;y=6;yy=Sqr(y);Console.WriteLine("{0}的平方是{1}",y,yy);

Console.ReadLine();}}305.6.2函數的參數傳遞參數傳遞中的類型轉化315.6.2函數的參數傳遞參數傳遞的類型:值傳遞時參數的語法形式如下:參數類型參數名引用傳遞時參數的語法形式如下:ref參數類型參數名輸出傳遞時參數的語法形式如下:out參數類型參數名參數數組:使用params關鍵字聲明參數,參數個數為不確定。315.6.2函數的參數傳遞參數傳遞的類型:325.6.2函數的參數傳遞值傳遞參數示例:classProgram{staticvoidswap(inta,intb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;Console.WriteLine("請輸入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());

swap(x,y);Console.WriteLine("轉換后x和y的值為:{0},{1}",x,y);Console.ReadLine();}}325.6.2函數的參數傳遞值傳遞參數示例:335.6.2函數的參數傳遞引用傳遞參數示例:classProgram{staticvoidswap(refinta,refintb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;Console.WriteLine("請輸入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());

swap(refx,refy);Console.WriteLine("轉換后x和y的值為:{0},{1}",x,y);Console.ReadLine();}}335.6.2函數的參數傳遞引用傳遞參數示例:345.6.2函數的參數傳遞輸出傳遞參數示例:classProgram{staticvoidswap(outinta,outintb){inti;a=Convert.ToInt32(Console.ReadLine());b=Convert.ToInt32(Console.ReadLine());i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;

swap(outx,outy);Console.WriteLine("轉換后x和y的值為:{0},{1}",x,y);Console.ReadLine();}}345.6.2函數的參數傳遞輸出傳遞參數示例:35Ref與out的區別:out關鍵字會導致參數通過引用來傳遞,這與ref關鍵字類似。不同之處在于:(1)ref傳進去的參數必須在調用前初始化,而out不必,因為out的函數會先清空變量,即使變量已經賦值。

inti;SomeMethod(refi);//語法錯誤

SomeMethod(outi);//通過35Ref與out的區別:out關鍵字會導致參36Ref與out的區別:(2)ref傳進去的參數在函數內部可以直接使用,而out不可。

publicvoidSomeMethod(refinti)

{

intj=i;//通過

//...

}publicvoidSomeMethod(outinti)

{

intj=i;//語法錯誤

}(3)ref傳進去的參數在函數內部可以不被修改,但out必須在離開函數體前進行賦值。36Ref與out的區別:(2)ref傳進去的參數在函數內部37usingsystem;

classtestapp

{

staticvoidouttest(outintx,outinty)

{//離開這個函數前,必須對x和y賦值,否則會報錯。

//y=x;

//上面這行會報錯,因為使用了out后,x和y都清空了,需要重新賦值,即使調用函數前賦過值也不行

x=1;

y=2;

}

staticvoidreftest(refintx,refinty)

{

y=x;

}37usingsystem;

classtes38publicstaticvoidmain()

{

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);

//上面這行會出錯,ref使用前,變量必須賦值

into=11,p=22;

reftest(refo,refp);

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

}38publicstaticvoidma39(4)ref:

當需要通過調用某函數來改變實參變量的值時,使用ref。

out:主要是為了一個方法能返回兩個以上的結果。Ref與out的區別:當一個方法需要多個返回值時,靠方法返回值(return)就不能勝任,幸好.Net有out和ref關鍵字。比如:登錄方法,登錄結果有成功和失敗,但是如果失敗還要知道原因。僅靠返回值就不行了,這個就可以用out。

boolLogin(stringname,stringpassword,outstringerrMsg){……}out方法參數傳遞前可以不賦值,但是方法中必須先賦值后使用;

ref方法參數傳遞前必須賦值,方法中可以直接使用。

out側重輸出(方法傳遞前,不知道值,調用方法后獲得值),ref側重更改(調用方法前就有明確的值,方法中發生更改)。那么剛才登陸的例子到底用ref還是out呢?這樣分析:如果成功是不需要errMsg的,如果失敗調用前errMsg的實參是不需要賦值的,所以應該側重于輸出,使用out比較合適。39(4)ref:

當需要通過調用某函數來改變實參變量的值時40注:※對于值型變量作為方法參數時,可以有如上所述三種情況:1.沒有ref和out修飾(直接傳值,不能改變實參)2.使用ref修飾(引用傳遞,輸入,可以改變實參)3.使用out修飾(引用傳遞,輸出,可以改變實參)※

對于引用類型的變量的三種情況:1.沒有ref和out修飾(引用傳遞,可以改變實參)2.使用ref修飾(與1類似。但如果在被調用函數里面把傳過來的類=null,我們就可以看出區別了)3.使用out修飾(引用傳遞,可以改變實參)Ref與out的區別:40注:Ref與out的區別:415.6.2函數的參數傳遞參數數組

有時需要傳遞的參數個數不確定,例如求幾個數的平均值。可以使用params關鍵字聲明參數的個數為不確定。

415.6.2函數的參數傳遞參數數組425.6.2函數的參數傳遞參數數組示例:classProgram{publicstaticfloatAverage(paramslong[]array){longtotal=0,i;for(i=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();}}425.6.2函數的參數傳遞參數數組示例:435.6.3內聯函數對于一些功能簡單、規模較小又使用頻繁的函數,CLR會做出是否使用內聯函數的判斷。內聯函數不在調用時發生控制轉移,而是在編譯時將函數體嵌入在每一個調用處,這樣就節省了參數傳遞、控制轉移等消耗。注意:在何處內聯代碼完全由CLR判斷得出,無法使用諸如C++中inline的關鍵字來控制哪些方法是內聯的。435.6.3內聯函數對于一些功能簡單、規模較小又使用頻445.6.4函數重載函數重載允許一個類中有同名的函數存在,即一個類中可以存在兩個以上的函數名稱相同。重載函數的形參必須不同,可以個數不同或者類型不同。示例:intadd(intx,inty);intadd(inta,intb); //錯誤!編譯器不以形參名來區分函數intadd(intx,inty);voidadd(intx,inty); //錯誤!編譯器不以返回值來區分函數445.6.4函數重載函數重載允許一個類中有同名的函數存455.6.4函數重載示例: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();}}455.6.4函數重載示例:465.7常用內部函數5.7.1隨機函數介紹在C#中要生成隨機數需要使用Random類。該類的主要方法是Next方法,它生成一個介于兩個整數之間的隨機數,其語法形式如下:publicvirtualintNext([intminValue,intmaxValue]);465.7常用內部函數5.7.1隨機函數介紹475.7.1隨機函數介紹示例:

classProgram{staticvoidMain(string[]args){

Randomop1=newRandom(10);Randomop2=newRandom();intresult;result=op1.Next(10,99)+op2.Next(0,9);Console.WriteLine(result);Console.Read();}}由于結果是隨機值,所以這里不再描述運行結果,475.7.1隨機函數介紹示例:485.7.2格式化函數介紹.NET為處理數字、日期以及字符串的格式化提供了WriteLine方法、Format方法和ToString方法。通過WriteLine方法和Format方法可對多個變量進行格式化,ToString方法只能對一個變量進行格式化。對于使用WriteLine方法和Format方法格式化字符串,規定格式的一般語法形式如下。{N,[M][:格式碼精度]}485.7.2格式化函數介紹.NET為處理數字、日期以及495.7.2格式化函數介紹{N,[M][:格式碼精度]}[]:表示其中的內容為可選項。N:表示要格式化的參數的索引。M:可選參數,表示格式化后的參數所占的寬度。如果M是負數,那么格式化后的值就是左對齊的;如果M是正數,那么格式化后的值是右對齊的;如果未指定M,則默認為零。格式碼:可選的格式化代碼字符串。精度:格式化輸出的有效位數或小數位數。495.7.2格式化函數介紹{N,[M][:格式碼50//部分數值格式輸出方式的例子usingSystem;classFormating{publicstaticvoidMain(){Console.WriteLine("在寬度為的空間里靠左對齊:{0,-10}",99);Console.WriteLine("在寬度為的空間里靠右對齊:{0,10}",99);Console.WriteLine("在寬度為的空間里靠左對齊:{0,-10}","LLL");Console.WriteLine("在寬度為的空間里靠右對齊:{0,10}","RRR");Console.WriteLine("貨幣-{0:C}{1:C4}",88.8,-888.8);Console.WriteLine("10進制整數-{0:D5}",88);Console.WriteLine("科學計數-{0:E}",888.8);Console.WriteLine("固定小數點-{0:F3}",888.8888);Console.WriteLine("浮點數-{0:G}",888.8888);Console.WriteLine("數字格式-{0:N}",8888888.8);Console.WriteLine("16進制格式-{0:X4}",88);Console.ReadLine();}}intval1=0;Intval2=123;stringval3="一個占位符例子";Console.WriteLine("Values:{0},{1},這是{2}",val1,val2,val3);{N,[M][:格式碼精度]}50//部分數值格式輸出方式的例子{N,[M][:格式515.7.3日期函數介紹用于處理時間和日期的對象為DateTime結構和TimeSpan類。DateTime結構用于表示日期和時間,表示范圍在0001年1月1日午夜00:00:00到9999年12月31日晚上11:59:59之間的日期和時間,最小時間單位等于100納秒。TimeSpan類可以表示一個時間間隔,表示范圍可以在Int64.MinValue到Int64.MaxValue之間。515.7.3日期函數介紹用于處理時間和日期的對象為Da525.7.3日期函數介紹DateTime結構的常用方法如下:AddYears、AddMonths、AddDays、AddHours、AddMinutes、AddSeconds方法,用于將指定的年、月、日、時、分、秒加到DateTime上。Substract方法:日期相減。IsLeapYear方法:判斷是否為閏年。true為閏年,false為非閏年。ToLongDateString和ToLongTimeString方法:把DateTime轉換為字符串,且以長格式表示日期或時間。ToShortDateString和ToShortTimeString方法:把DateTime轉換為字符串,且以短格式表示日期或時間。==、!=、<、>、>=、<=運算符:用于比較日期。+、-運算符:用于日期的加、減。525.7.3日期函數介紹DateTime結構的常用方法535.7.4數學運算函數介紹Math類屬于命名空間System,包含很多數學函數。常用方法如下:Abs方法:返回值指定數字的絕對值。例如,代碼Math.Abs(-3.5),結果為3.5。Sqrt方法:返回指定數字的平方根。例如,代碼Math.Sqrt(9),結果為3。Pow方法:返回指定數字的指定次冪。例如,代碼Math.Pow(2,3),結果為8。Log方法:返回指定數字的對數。例如,代碼Math.Log(8,2),結果為3。Log10方法:返回指定數字以10為底的對數。例如,代碼Math.Log10(100),結果為2。535.7.4數學運算函數介紹Math類屬于命名空間Sy545.7.4數學運算函數介紹Sin、Cos、Tan、Asin、Acos、Atan方法:返回指定弧度的正弦值、余弦值、正切值、反正弦值、反余弦值、反正切值。例如,代碼Math.Sin(30*Math.PI/180),結果為0.5。Floor方法:返回小于或等于參數的最大整數。例如,代碼Math.Floor(3.5),結果為3;Math.Floor(-3.5),結果為-4。如果想得到一個四舍五入的數,可以采用式子Math.Floor(x+0.5)。Ceiling方法:返回大于或等于參數的最小整數。例如,代碼Math.Ceiling(3.5),結果為4;Math.Ceiling(-3.5),結果為-3。Max方法:求兩個值中的較大者。例如,代碼Math.Max(-3.5,-10.4),結果為-3.5。Min方法:求兩個值中的較小者。例如,代碼Math.Min(-3.5,-10.4),結果為-10.4。545.7.4數學運算函數介紹Sin、Cos、Tan、A55方法功能示例Abs(x)求x的絕對值Abs(15.3)=15.3、Abs(0)=0、Abs(-5.3)=5.3Ceiling(x)求不小于x的最小整數Ceiling(7.3)=8.0、Ceiling(-9.6)=-9.0Cos(x)求x的余弦值(x為弧度)Cos(0.0)=1.0Exp(x)求指數Exp(1.0)=2.718281828Floor(x)求不大于x的最小整數Floor(7.8)=7.0、Floor(-9.2)=-10.0Log(x)求以e為底的自然對數Log(2.718281828)=1.0Max(x,y)求x和y的最大值Max(5.6,8.3)=8.3Min(x,y)求x和y的最小值Min(5.6,8.3)=5.6Pow(x,y)求x的y次冪Pow(3.0,3.0)=27.0、Pow(4.0,0.5)=2.0Sin(x)求x的正弦值(x為弧度)Sin(0.0)=0.0、Sin(3.1415929/2)=1.0Sqrt(x)求x的算術平方根Sqrt(9.0)=3.0Tan(x)求x的正切值(x為弧度)Tan(0.0)=0.0、Tan(3.1415926/4)=1.055方法功能示例Abs(x)求x的絕對值Abs(15.3)=56

調用以上數學方法的一般形式:

System.Math.方法名([參數])

在Math類中定義了兩個重要的常數:Math.PI(圓周率3.14159265358979323846)

Math.E(自然對數—2.71828182845904523)56調用以上數學方法的一般形式:575.8小結本章主要介紹了流程控制語句和函數的相關知識。任何程序都有一定的流程,其中的順序語句、循環語句和選擇語句是本章介紹的重點,也是編寫程序代碼的基礎。只需充分掌握這3種結構,再復雜的程序都能夠游刃有余。另外還介紹了一些函數的基本知識以及常用的內部函數。函數的基礎知識需要讀者重點掌握,也是后續章節中將要介紹的類的重要組成部分。熟記常用的內部函數,能夠大大提高代碼編寫效率。575.8小結本章主要介紹了流程控制語句和函數的相關知識演講完畢,謝謝觀看!演講完畢,謝謝觀看!59第5章流程控制語句與函數5.1控制程序流程5.2使用選擇語句5.3使用循環語句5.4使用goto語句5.5嵌套使用流程控制語句5.6函數5.7常用內部函數5.8小結1第5章流程控制語句與函數5.1控制程序流程605.1控制程序流程控制程序流程的方法很多,主要有如下3種:選擇語句:如同考試中的單選題目,選擇執行了某條語句,另一條就不會再執行。循環語句:在需要將一個表達式進行多次重復運算時,可以使用循環語句,指定其循環次數或者界定其退出循環的條件。goto語句:即標記語句,使程序自動跳到標記語句處執行,標記語句執行完畢又直接回到調用標記語句處。需要注意的是,在程序中最好不使用goto語句,因為該語句會使得程序代碼可讀性很差。25.1控制程序流程控制程序流程的方法很多,主要有如下3615.2使用選擇語句5.2.1if語句用if語句實現單分支選擇結構:if(表達式)語句;語句中的表達式通常用于表示條件,應為關系表達式或邏輯表達式。語句只是一條語句,如果在條件滿足時需要執行多條語句,應使用花括號({})括起來,使之成為語句塊。“(表達式)”中的括號不能省略。35.2使用選擇語句5.2.1if語句625.2.1if語句示例:staticvoidMain(string[]args){doublescore;score=Convert.ToDouble(Console.ReadLine());if(score>=60)Console.WriteLine("恭喜你,通過了這次考試!");Console.Read();}45.2.1if語句示例:635.2.1if語句用if語句實現雙分支選擇結構:

if(表達式)

語句1;else

語句2;55.2.1if語句用if語句實現雙分支選擇結構:645.2.1if語句用if語句實現多分支選擇結構If(表達式1)語句1;elseif(表達式2)語句2;elseif(表達式3)語句3;……else語句n;65.2.1if語句用if語句實現多分支選擇結構655.2.2switch語句在C#語言中,除使用if語句實現多分支外,也可以使用switch語句。switch(表達式){case常量表達式1:

語句1;

break;case常量表達式2:

語句2;

break;……case常量表達式n:

語句n;

break;default:

語句n+1;

break;}75.2.2switch語句在C#語言中,除使用if語句665.2.2switch語句switch表達式的類型為sbyte、byte、short、ushort、int、uint、long、ulong、char、string、枚舉或用戶自定義類型。每個case分支中的常量表達式必須能隱式轉換為switch表達式的類型,且常量表達式的值不能相同,從而保證分支選擇的唯一性。如果某個分支有多條語句,可以用花括號括起來,也可以不加花括號。default分支可有可無,但是每個switch語句最多只能有一個default分支。當default語句缺省時,如果switch后面的表達式值與任意常量表達式值不相等,將不執行任何語句,直接退出switch語句。各分支語句中的break不可省略,否則將會出現錯誤,這一點跟Java和C++不同。使用switch語句時一定要注意,case后面必須是常量表達式,以冒號結束而不是分號。85.2.2switch語句switch表達式的類型為s675.2.2switch語句示例:staticvoidMain(string[]args){doublescore;charclass1;inti;Console.WriteLine("請輸入你的成績:");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("你的成績等級為:{0}",class1);}95.2.2switch語句示例:685.2.3switch語句的控制類型switch語句的控制可以按case語句的排列先后順序進行,也可以通過跳轉語句來實現。示例:實現switch語句的跳轉語句。

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);}105.2.3switch語句的控制類型switch語句695.3使用循環語句5.3.1while語句while語句是用來實現循環的語句,該類循環先測試循環條件再執行循環體,按照不同條件執行循環體部分零次或多次。它的語法形式如下。while(表達式)循環體部分;115.3使用循環語句5.3.1while語句705.3.1while語句注意:循環體如果包含一條以上的語句,應以花括號括起來作為復合語句。在循環體中,通常應包含改變循環條件表達式值的語句,否則便會造成無限循環。由于先判斷條件,可能出現第一次測試條件時,表達式的值就為false。此種情況下循環體將一次也不執行,又稱“允許0次循環”。125.3.1while語句注意:715.3.1while語句示例:

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

while(number<=10){sum+=number;number++;}Console.WriteLine("thesumis{0}",sum);Console.Read();}}執行上述代碼,運行結果為:thesumis55。135.3.1while語句示例:725.3.2do語句do循環語句實現的是直到型循環,該類循環先執行循環體再測試循環條件。do循環體語句while(表達式);145.3.2do語句do循環語句實現的是直到型循環,該735.3.2do語句示例:

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

do{sum+=number;number++;}while(number<=10);Console.WriteLine("thesumis{0}",sum);Console.Read();}}執行上述代碼,運行結果為:thesumis55。155.3.2do語句示例:745.3.3for語句for(表達式1;表達式2;表達式3)

語句;165.3.3for語句for(表達式1;表達式2;755.3.3for語句表達式1、2、3都可以省略,分號不能省略。如果表達式1、2、3都省略,則將無終止地執行循環體。表達式2是循環控制條件,如果省略,循環將無終止地進行下去。表達式1一般用于為循環控制條件賦初值,也可以是與循環變量無關的其他表達式。如果表達式1省略或者是與循環條件無關的其他表達式,則應該在for語句之前給循環控制條件賦初值。表達式3一般用于改變循環控制條件的值。如果表達式3省略或者是其他與循環條件無關的表達式,則應該在循環體中另有語句改變循環條件,以保證循環能正常結束。175.3.3for語句表達式1、2、3都可以省略,分號765.3.4foreach語句foreach(類型標識符in表達式)

嵌入語句;示例:staticvoidMain(string[]args){int[]list={10,20,30,40,50,60};

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

Console.Read();}185.3.4foreach語句foreach(775.3.5break語句和continue語句break語句用于跳出包含它的switch、while、do、for、foreach語句。如果break不是在switch、while、do、for、foreach語句塊中,將發生編譯錯誤。當switch、while、do、for、foreach語句相互嵌套時,break語句只是跳出直接包含它的語句塊。195.3.5break語句和continue語句bre785.3.5break語句和continue語句

classTestBreak{staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")break;Console.WriteLine("youentered:{0}",s);}Console.Read();}}205.3.5break語句和continue語句cl795.3.5break語句和continue語句continue語句類似于break語句,也必須用于while、dowhile、for、foreach語句,它只從循環的當前迭代中退出,然后在循環的下一次迭代開始重新執行,而不是退出循環。需要注意如下事項:continue語句的目標地址為直接包含它的while、dowhile、for或者foreach語句的嵌套語句結尾。假如continue語句不能被while、dowhile、for或者foreach語句包含,將發生編譯錯誤。當有while、dowhile、for或者foreach語句相互嵌套時,continue語句只適用于直接包含它的語句塊。215.3.5break語句和continue語句con805.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();}225.3.5break語句和continue語句示例815.4使用goto語句

goto語句是除選擇語句、循環語句之外的控制程序流程的語句,常用于將程序流程轉移出嵌套范圍。goto語句的常見用法為gotolable語句。其中,lable為一個標簽,其語法形式為:標簽1:235.4使用goto語句goto語句是除選擇語句、循825.4使用goto語句示例:staticvoidMain(string[]args){intn=1,sum=0;

lable:if(n<=5){sum=sum+n;n++;

gotolable;}Console.WriteLine("sum={0}",sum);Console.Read();}245.4使用goto語句示例:835.5嵌套使用流程控制語句選擇結構的嵌套:if(表達式1)if(表達式2)

語句1else

語句2elseif(表達式3)

語句3else

語句4255.5嵌套使用流程控制語句選擇結構的嵌套:845.5嵌套使用流程控制語句循環結構的嵌套示例: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();}265.5嵌套使用流程控制語句循環結構的嵌套855.6函數5.6.1函數的定義與使用函數在使用之前必須先定義,函數定義的形式如下。函數修飾符數據類型標識符函數名(形式參數說明列表){

變量、數組的定義語句;

其他可執行部分}函數的返回值是需要返回給主調函數的處理結果,由return語句給出。對于無返回值的函數,其類型標識符為void,不需要return語句275.6函數5.6.1函數的定義與使用865.6.1函數的定義與使用示例:編寫一個函數,用于求任意兩個整數之間所有數的平方和。classProgram{privatestaticintpfh(intx,inty){inti,sum=0;for(i=x;i<=y;i++)sum=sum+i*i;return(sum);}}285.6.1函數的定義與使用示例:編寫一個函數,用于求875.6.1函數的定義與使用函數的使用:在類中的某個函數中,調用本類中由“函數名”指定的函數,其語法形式如下:函數名([實際參數列表])調用另一個類的非靜態函數,其語法形式如下:對象名.方法名([實際參數列表])調用另一個類的靜態函數,其語法形式如下:類名.方法名([實際參數列表])295.6.1函數的定義與使用函數的使用:885.6.2函數的參數傳遞參數傳遞中的類型轉化

示例:classProgram{staticfloatSqr(floatk){return(k*k);}staticvoidMain(string[]args){inty;floatyy;y=6;yy=Sqr(y);Console.WriteLine("{0}的平方是{1}",y,yy);

Console.

溫馨提示

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

評論

0/150

提交評論