版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年KTV特色主題活動策劃與執(zhí)行合同3篇
- 2025版攤鋪機租賃及施工質(zhì)量保障合同范本6篇
- 個人健身教練合同:2024版專業(yè)輔導(dǎo)合同書
- 2025年度臨時用工勞務(wù)合同編制指南范本2篇
- 二零二五年度光伏電站運維人工勞務(wù)合同范本3篇
- 2025年木材市場分析與預(yù)測合作合同范本
- 二零二五版木門行業(yè)展會參展與推廣服務(wù)合同4篇
- 二零二五年度數(shù)字貨幣技術(shù)研發(fā)與應(yīng)用合同集2篇
- 2025年戶外健身路徑欄桿設(shè)施采購合同3篇
- 2025年度獵頭服務(wù)人才引進與培養(yǎng)合作協(xié)議5篇
- 《電影之創(chuàng)戰(zhàn)紀(jì)》課件
- 社區(qū)醫(yī)療抗菌藥物分級管理方案
- 開題報告-鑄牢中華民族共同體意識的學(xué)校教育研究
- 《醫(yī)院標(biāo)識牌規(guī)劃設(shè)計方案》
- 公司2025年會暨員工團隊頒獎盛典攜手同行共創(chuàng)未來模板
- 夜市運營投標(biāo)方案(技術(shù)方案)
- 電接點 水位計工作原理及故障處理
- 國家職業(yè)大典
- 2024版房產(chǎn)代持協(xié)議書樣本
- 公眾號運營實戰(zhàn)手冊
- 科研倫理與學(xué)術(shù)規(guī)范(研究生)期末試題庫及答案
評論
0/150
提交評論