《Visual C# NET案例教程》課件第5章_第1頁
《Visual C# NET案例教程》課件第5章_第2頁
《Visual C# NET案例教程》課件第5章_第3頁
《Visual C# NET案例教程》課件第5章_第4頁
《Visual C# NET案例教程》課件第5章_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章方法

5.1任務(wù)描述5.2聲明與調(diào)用方法5.3遞歸5.4學(xué)生成績管理系統(tǒng)的模塊化5.5習(xí)題對學(xué)生成績管理系統(tǒng),我們已經(jīng)實現(xiàn)了其菜單功能,也能夠利用數(shù)組完成系統(tǒng)的主要功能,但還沒有將這些功能有條理地組合起來。大型程序可能很復(fù)雜,這就需要把問題分解,即將程序分成獨立的段,逐段編寫與調(diào)試,然后像搭積木一樣實現(xiàn)一個系統(tǒng)。

在程序設(shè)計中,C#?提供了方法這種語法來實現(xiàn)程序的模塊化搭建。方法是具有某種功能的獨立程序段。

當(dāng)復(fù)雜的應(yīng)用程序被分割成方法時,就能方便靈活地維護和調(diào)試代碼??梢詫Ψ椒ǘ啻握{(diào)用。

學(xué)生成績管理系統(tǒng)的模塊調(diào)用如圖5-1所示。5.1任務(wù)描述圖5-1學(xué)生成績管理系統(tǒng)的模塊調(diào)用圖5.2.1聲明方法

聲明方法的一般格式如下:

訪問修飾符返回類型方法名(參數(shù)列表)

{

方法主體

}5.2聲明與調(diào)用方法其中:

●訪問修飾符:確定方法可訪問的范圍。

●返回類型:方法返回值的類型,可以是任何有效的類型,如果沒有返回值時用void。

●方法名:是一個合法的C#標(biāo)識符。

●參數(shù)列表:用于傳遞和接收來自方法的數(shù)據(jù),它在圓括號之間。即使沒有參數(shù),也要有圓括號。參數(shù)之間以逗號分隔。

●方法主體:操作所需的指令集。注意以下方法定義的代碼段:

classCalculator

{

publicintAddNumber(intnum1,intnum2)

{

intresult;

result=num1+num2;

returnresult;

}

}5.2.2調(diào)用方法

當(dāng)調(diào)用一個方法時,執(zhí)行流程就跳轉(zhuǎn)到該方法開始執(zhí)行。當(dāng)執(zhí)行到return語句或到達方法的終點后,執(zhí)行流程就返回到調(diào)用該方法的地方。

注意:當(dāng)調(diào)用方法時,在返回類型、參數(shù)個數(shù)、參數(shù)順序以及參數(shù)類型等方面要實現(xiàn)精確匹配。

從方法被調(diào)用的位置,可以分為在方法聲明的類定義中調(diào)用該方法和在方法聲明的類定義外部調(diào)用該方法。在方法聲明的類定義中調(diào)用該方法的語法格式為:

方法名(參數(shù)列表)

在方法聲明的類定義外部調(diào)用該方法實際上是通過對象調(diào)用該方法,其格式為:

對象名.方法名(參數(shù)列表)【例5-1】計算圓面積的方法。

usingSystem;

classProgram

{

staticvoidCalculateArea(intr)

{

doublearea;

area=r*r*Math.PI;

Console.WriteLine("面積為{0:0.00}",area);

}

publicstaticvoidMain()

{

intradius=1;

CalculateArea(radius);

}

}

運行結(jié)果如圖5-2所示。圖5-2例5-1運行結(jié)果5.2.3使用返回值

當(dāng)需要方法向調(diào)用者返回一個值時,可以使用關(guān)鍵字return,其格式如下:

return表達式;

該表達式可能是數(shù)值、變量或算式,但是它的類型必須與方法在聲明中指定的返回類型一樣。

如果方法無返回值,在方法主體中可以不包含或包含一個不指定任何值的return語句,運行return語句時,程序立刻返回到調(diào)用方;如果沒有return語句,缺省的情況下,當(dāng)?shù)竭_方法中的最后一條語句后執(zhí)行程序才返回到調(diào)用方?!纠?-2】計算圓面積的方法,返回圓面積。

usingSystem;

classReturnTest

{

staticdoubleCalculateArea(intr)

{

doublearea;

area=r*r*Math.PI;

returnarea;

}

publicstaticvoidMain()

{

intradius=1;

Console.WriteLine("面積為{0:0.00}",CalculateArea(radius));

}

}

運行結(jié)果如圖5-3所示。圖5-3例5-2運行結(jié)果【例5-3】計算兩數(shù)之和的函數(shù)。

usingSystem;

classCalculator

{

publicintAddNumber(intnum1,intnum2)

{

intresult;

result=num1+num2;

returnresult;

}

staticvoidMain(string[]args)

{

Calculatorcal=newCalculator();

intvalue=cal.AddNumber(10,20);

Console.WriteLine("10+20={0}",value);

Console.ReadLine();

}

}

運行結(jié)果如圖5-4所示。圖5-4例5-3運行結(jié)果5.2.4傳遞參數(shù)

在方法聲明中使用的參數(shù)叫形式參數(shù)(形參),在調(diào)用方法中使用的參數(shù)叫實際參數(shù)(實參)。大多數(shù)情況下,為了方便計算和簡化程序,往往需要在方法中帶有參數(shù),通過方法的形參將值傳遞給方法,從而實現(xiàn)有針對性的計算或操作。在調(diào)用方法時,參數(shù)傳遞就是將實參傳遞給形參的過程,傳遞按照從左到右的順序發(fā)生,調(diào)用必須提供參數(shù)的正確數(shù)值和類型。

C#?中方法的參數(shù)有以下四種類型:

●值類型參數(shù),不含任何修飾符。

●引用型參數(shù),以ref修飾符聲明。

●輸出參數(shù),以out修飾符聲明。

●數(shù)組型參數(shù),以params修飾符聲明。

1.值類型參數(shù)

當(dāng)利用值向方法傳遞參數(shù)時,編譯程序給實參的值做一份拷貝,并將拷貝傳遞給該方法。被調(diào)用的方法不會修改內(nèi)存中實參的值。定義含有值類型參數(shù)方法的格式:

[修飾符]返回的數(shù)據(jù)類型方法名(參數(shù)列表)

其中,值類型參數(shù)的格式為:

參數(shù)類型參數(shù)名【例5-4】值類型參數(shù)。

usingSystem;

classProgram

{

publicstaticvoidAddOne(inta)

{

a++;

Console.WriteLine("a={0}",a);

}

staticvoidMain()

{

inta=3;

Console.WriteLine("調(diào)用AddOne之前,a={0}",a);

AddOne(a);

Console.WriteLine("調(diào)用AddOne之后,a={0}",a);

Console.ReadLine();

}

}

運行結(jié)果如圖5-5所示。圖5-5例5-4運行結(jié)果

2.引用型參數(shù)

和值類型參數(shù)不同的是,引用型參數(shù)并不開辟新的內(nèi)存區(qū)域,當(dāng)利用引用型參數(shù)向方法傳遞形參時,編譯程序把實參的地址傳遞給方法。因此對引用參數(shù)的修改會影響對應(yīng)的實參,這種傳遞方式稱為引用傳遞。

傳遞的參數(shù)格式:

ref參數(shù)類型參數(shù)名

從格式上看,與值傳遞不同的是,引用型參數(shù)的數(shù)據(jù)類型前加ref關(guān)鍵字。定義和調(diào)用引用型參數(shù)的方法時,在形參和實參前都必須加ref關(guān)鍵字。【例5-5】交換兩個變量的值。

usingSystem;

classTest

{

staticvoidSwap1(intx,inty) //數(shù)值參數(shù)

{

inttemp=x;

x=y;

y=temp;

}

staticvoidSwap2(refintx,refinty) //引用參數(shù)

{

inttemp=x;x=y;

y=temp;

}

staticvoidMain()

{

inta=3,b=4;

Swap1(a,b);

Console.WriteLine("a={0},b={1}",a,b);

a=13;b=14;

Swap2(refa,refb);

Console.WriteLine("a={0},b={1}",a,b);

}

}

運行結(jié)果如圖5-6所示。圖5-6例5-5運行結(jié)果提示:

C#?允許用戶像傳遞其他類型的參數(shù)那樣將對象以參數(shù)形式傳遞給方法。但必須記住,類是引用類型,引用類型變量的值為該變量引用對象的地址,當(dāng)把一個對象傳遞給一個方法的值參數(shù)時,其實是把對象的地址傳遞給了該方法的值參數(shù)。對象參數(shù)總是按引用傳遞的,所以類對象作參數(shù)傳遞時不需要使用ref關(guān)鍵字。

3.輸出型參數(shù)

C#?提供了一種特殊的參數(shù)傳遞方式,專門用于從方法返回數(shù)據(jù),完成這種數(shù)據(jù)傳遞方式的輸出型參數(shù),用關(guān)鍵字out表示。

輸出型參數(shù)與引用型參數(shù)的差別在于:調(diào)用帶有out關(guān)鍵字參數(shù)的方法之前,不需要對傳遞給形參的實參值進行初始化。注意輸出參數(shù)在方法中必須被賦值。

在定義和調(diào)用輸出型參數(shù)的方法時,在形參和實參前都必須加上out關(guān)鍵字。

【例5-6】計算一個圓的面積,使用out關(guān)鍵字實現(xiàn)輸出型參數(shù)傳遞的方法。

usingSystem;

classProgram

{

staticvoidCalculateArea(intr,outdoublearea)

{

area=r*r*Math.PI;

}

publicstaticvoidMain()

{

intradius=1;

doublearea;

CalculateArea(radius,outarea);

Console.WriteLine("面積為{0:0.00}",area);

}

}

運行結(jié)果如圖5-7所示。圖5-7例5-6運行結(jié)果

4.數(shù)組型參數(shù)

在使用數(shù)組作為形參時,C#提供了params關(guān)鍵字,使調(diào)用數(shù)組為形參的方法時,既可以傳遞數(shù)組實參,也可以只傳遞一組數(shù)據(jù)。

params的使用格式為:

返回類型方法名稱(params類型名稱[]數(shù)組名稱){}

說明:

●需要傳遞的參數(shù)個數(shù)不確定時,可以采用params關(guān)鍵字。

●帶有關(guān)鍵字params的數(shù)組型參數(shù)必須是方法的參數(shù)列表中最后一個參數(shù),否則會出現(xiàn)編譯錯誤。

●數(shù)組型參數(shù)中的數(shù)組必須是一維數(shù)組類型。【例5-7】數(shù)組型參數(shù)。

usingSystem;

classProgram

{

staticintsumVals(paramsint[]vals)

{

intsum=0;

foreach(intvalinvals)

{

sum+=val;

}

returnsum;}

staticvoidMain(string[]args)

{

intsum=sumVals(1,2,9,8);

Console.WriteLine("1,2,9,8總和為:{0}",sum);

sum=sumVals(1,5,7);

Console.WriteLine("1,5,7總和為:={0}",sum);

}

}

運行結(jié)果如圖5-8所示。圖5-8例5-7運行結(jié)果

C#?程序中的方法能夠調(diào)用自身方法,這就是遞歸。

遞歸可以把一個大型復(fù)雜的問題層層轉(zhuǎn)化,最終變成一個與原問題類似的簡單問題。利用遞歸算法只需要少量的操作就可以解決一個復(fù)雜的計算。遞歸是由遞歸出口和遞歸表達式兩大部分組成的。

5.3遞歸

(1)遞歸出口是遞歸結(jié)束的條件,也就是最終要變成的簡單問題。這個簡單問題的解決方法必須是已經(jīng)知道的,或者是已經(jīng)給出的計算結(jié)果。

(2)遞歸表達式是從遞歸出口到最終復(fù)雜問題的轉(zhuǎn)化規(guī)律。

如求階乘問題也可以使用遞歸方式來解決。其遞歸數(shù)學(xué)表達式為:

當(dāng)N=1時,1!=1;當(dāng)N>1時,N!=N*(N-1)!。【例5-8】用遞歸方法計算5!。

遞歸公式:n!=n*(n-1)!如:5!=5*(4*3*2*1)=5*4!

usingSystem;

classProgram

{

staticvoidMain(string[]args)

{

Console.WriteLine("5!={0}",fact(5));

}

staticintfact(intn)

{

intresult;

if(n==1)

return1;

else

result=n*fact(n-1);

returnresult;

}

}

運行結(jié)果如圖5-9所示。圖5-9例5-8運行結(jié)果下面利用模塊化的思想改造學(xué)生成績管理系統(tǒng)V2.0,將輸入學(xué)生記錄、顯示所有成績、查詢學(xué)生成績、按語文成績排序分別用方法實現(xiàn),而不再是全部寫在Main方法里。

學(xué)生成績管理系統(tǒng)V3.0代碼的實現(xiàn)步驟如下:5.4學(xué)生成績管理系統(tǒng)的模塊化usingSystem;

publicclassGradeManage

{

constintCOUNT=100; //最多處理100位學(xué)生信息

staticstring[,]student=newstring[COUNT,4];//student用于保存學(xué)生信息

staticintpos=0;

publicstaticvoidMain()

{

do

{Console.WriteLine(" ***學(xué)生成績管理系統(tǒng)***\n");

Console.WriteLine(" 1---輸入學(xué)生記錄");

Console.WriteLine(" 2---顯示所有成績");

Console.WriteLine(" 3---查詢學(xué)生成績");

Console.WriteLine(" 4---退出");

Console.Write(" 請選擇:");

intchoice=int.Parse(Console.ReadLine());

switch(choice)

{

case1:append();break;

case2:listStudent();break;

case3:query();break;

case4:return;

}

}while(true);

}//列出所有學(xué)生成績

publicstaticvoidlistStudent()

{

Console.WriteLine("顯示學(xué)生成績:");

Console.WriteLine("學(xué)號\t姓名\t語文\t英語");

for(inti=0;i<pos;i++)

{

Console.WriteLine("{0}\t{1}\t{2}\t{3}",student[i,0],student[i,1],student[i,2],student[i,3]);

}

}

//輸入學(xué)生記錄publicstaticvoidappend()

{

if(pos>=COUNT)

{

Console.WriteLine("最多只能處理"+COUNT+"個學(xué)生!");

return;

}

do

{

//該循環(huán)確保輸入學(xué)號不重復(fù)

while(true)

{

Console.Write("請輸入學(xué)號:");StringstudentNO=Console.ReadLine();

if(!exist(studentNO))

{

student[pos,0]=studentNO;

break;

}

Console.WriteLine("該學(xué)號已存在!");

}

Console.Write("請輸入姓名:");

student[pos,1]=Console.ReadLine();

Console.Write("請輸入語文成績:");

student[pos,2]=Console.ReadLine();

Console.Write("請輸入英語成績:");

student[pos,3]=Console.ReadLine();

pos++;

if(pos>=COUNT)

{

break;

}

Console.Write("是否繼續(xù)輸入?(y/n)");

}while(char.Parse(Console.ReadLine())=='y');

}

//判斷是否存在某學(xué)號的學(xué)生。stuNO為學(xué)號

publicstaticboolexist(stringstuNO)

{

for

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論