版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章方法
5.1任務(wù)描述5.2聲明與調(diào)用方法5.3遞歸5.4學(xué)生成績(jī)管理系統(tǒng)的模塊化5.5習(xí)題對(duì)學(xué)生成績(jī)管理系統(tǒng),我們已經(jīng)實(shí)現(xiàn)了其菜單功能,也能夠利用數(shù)組完成系統(tǒng)的主要功能,但還沒(méi)有將這些功能有條理地組合起來(lái)。大型程序可能很復(fù)雜,這就需要把問(wèn)題分解,即將程序分成獨(dú)立的段,逐段編寫(xiě)與調(diào)試,然后像搭積木一樣實(shí)現(xiàn)一個(gè)系統(tǒng)。
在程序設(shè)計(jì)中,C#?提供了方法這種語(yǔ)法來(lái)實(shí)現(xiàn)程序的模塊化搭建。方法是具有某種功能的獨(dú)立程序段。
當(dāng)復(fù)雜的應(yīng)用程序被分割成方法時(shí),就能方便靈活地維護(hù)和調(diào)試代碼??梢詫?duì)方法多次調(diào)用。
學(xué)生成績(jī)管理系統(tǒng)的模塊調(diào)用如圖5-1所示。5.1任務(wù)描述圖5-1學(xué)生成績(jī)管理系統(tǒng)的模塊調(diào)用圖5.2.1聲明方法
聲明方法的一般格式如下:
訪問(wèn)修飾符返回類(lèi)型方法名(參數(shù)列表)
{
方法主體
}5.2聲明與調(diào)用方法其中:
●訪問(wèn)修飾符:確定方法可訪問(wèn)的范圍。
●返回類(lèi)型:方法返回值的類(lèi)型,可以是任何有效的類(lèi)型,如果沒(méi)有返回值時(shí)用void。
●方法名:是一個(gè)合法的C#標(biāo)識(shí)符。
●參數(shù)列表:用于傳遞和接收來(lái)自方法的數(shù)據(jù),它在圓括號(hào)之間。即使沒(méi)有參數(shù),也要有圓括號(hào)。參數(shù)之間以逗號(hào)分隔。
●方法主體:操作所需的指令集。注意以下方法定義的代碼段:
classCalculator
{
publicintAddNumber(intnum1,intnum2)
{
intresult;
result=num1+num2;
returnresult;
}
}5.2.2調(diào)用方法
當(dāng)調(diào)用一個(gè)方法時(shí),執(zhí)行流程就跳轉(zhuǎn)到該方法開(kāi)始執(zhí)行。當(dāng)執(zhí)行到return語(yǔ)句或到達(dá)方法的終點(diǎn)后,執(zhí)行流程就返回到調(diào)用該方法的地方。
注意:當(dāng)調(diào)用方法時(shí),在返回類(lèi)型、參數(shù)個(gè)數(shù)、參數(shù)順序以及參數(shù)類(lèi)型等方面要實(shí)現(xiàn)精確匹配。
從方法被調(diào)用的位置,可以分為在方法聲明的類(lèi)定義中調(diào)用該方法和在方法聲明的類(lèi)定義外部調(diào)用該方法。在方法聲明的類(lèi)定義中調(diào)用該方法的語(yǔ)法格式為:
方法名(參數(shù)列表)
在方法聲明的類(lèi)定義外部調(diào)用該方法實(shí)際上是通過(guò)對(duì)象調(diào)用該方法,其格式為:
對(duì)象名.方法名(參數(shù)列表)【例5-1】計(jì)算圓面積的方法。
usingSystem;
classProgram
{
staticvoidCalculateArea(intr)
{
doublearea;
area=r*r*Math.PI;
Console.WriteLine("面積為{0:0.00}",area);
}
publicstaticvoidMain()
{
intradius=1;
CalculateArea(radius);
}
}
運(yùn)行結(jié)果如圖5-2所示。圖5-2例5-1運(yùn)行結(jié)果5.2.3使用返回值
當(dāng)需要方法向調(diào)用者返回一個(gè)值時(shí),可以使用關(guān)鍵字return,其格式如下:
return表達(dá)式;
該表達(dá)式可能是數(shù)值、變量或算式,但是它的類(lèi)型必須與方法在聲明中指定的返回類(lèi)型一樣。
如果方法無(wú)返回值,在方法主體中可以不包含或包含一個(gè)不指定任何值的return語(yǔ)句,運(yùn)行return語(yǔ)句時(shí),程序立刻返回到調(diào)用方;如果沒(méi)有return語(yǔ)句,缺省的情況下,當(dāng)?shù)竭_(dá)方法中的最后一條語(yǔ)句后執(zhí)行程序才返回到調(diào)用方?!纠?-2】計(jì)算圓面積的方法,返回圓面積。
usingSystem;
classReturnTest
{
staticdoubleCalculateArea(intr)
{
doublearea;
area=r*r*Math.PI;
returnarea;
}
publicstaticvoidMain()
{
intradius=1;
Console.WriteLine("面積為{0:0.00}",CalculateArea(radius));
}
}
運(yùn)行結(jié)果如圖5-3所示。圖5-3例5-2運(yùn)行結(jié)果【例5-3】計(jì)算兩數(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();
}
}
運(yùn)行結(jié)果如圖5-4所示。圖5-4例5-3運(yùn)行結(jié)果5.2.4傳遞參數(shù)
在方法聲明中使用的參數(shù)叫形式參數(shù)(形參),在調(diào)用方法中使用的參數(shù)叫實(shí)際參數(shù)(實(shí)參)。大多數(shù)情況下,為了方便計(jì)算和簡(jiǎn)化程序,往往需要在方法中帶有參數(shù),通過(guò)方法的形參將值傳遞給方法,從而實(shí)現(xiàn)有針對(duì)性的計(jì)算或操作。在調(diào)用方法時(shí),參數(shù)傳遞就是將實(shí)參傳遞給形參的過(guò)程,傳遞按照從左到右的順序發(fā)生,調(diào)用必須提供參數(shù)的正確數(shù)值和類(lèi)型。
C#?中方法的參數(shù)有以下四種類(lèi)型:
●值類(lèi)型參數(shù),不含任何修飾符。
●引用型參數(shù),以ref修飾符聲明。
●輸出參數(shù),以out修飾符聲明。
●數(shù)組型參數(shù),以params修飾符聲明。
1.值類(lèi)型參數(shù)
當(dāng)利用值向方法傳遞參數(shù)時(shí),編譯程序給實(shí)參的值做一份拷貝,并將拷貝傳遞給該方法。被調(diào)用的方法不會(huì)修改內(nèi)存中實(shí)參的值。定義含有值類(lèi)型參數(shù)方法的格式:
[修飾符]返回的數(shù)據(jù)類(lèi)型方法名(參數(shù)列表)
其中,值類(lèi)型參數(shù)的格式為:
參數(shù)類(lèi)型參數(shù)名【例5-4】值類(lèi)型參數(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();
}
}
運(yùn)行結(jié)果如圖5-5所示。圖5-5例5-4運(yùn)行結(jié)果
2.引用型參數(shù)
和值類(lèi)型參數(shù)不同的是,引用型參數(shù)并不開(kāi)辟新的內(nèi)存區(qū)域,當(dāng)利用引用型參數(shù)向方法傳遞形參時(shí),編譯程序把實(shí)參的地址傳遞給方法。因此對(duì)引用參數(shù)的修改會(huì)影響對(duì)應(yīng)的實(shí)參,這種傳遞方式稱(chēng)為引用傳遞。
傳遞的參數(shù)格式:
ref參數(shù)類(lèi)型參數(shù)名
從格式上看,與值傳遞不同的是,引用型參數(shù)的數(shù)據(jù)類(lèi)型前加ref關(guān)鍵字。定義和調(diào)用引用型參數(shù)的方法時(shí),在形參和實(shí)參前都必須加ref關(guān)鍵字?!纠?-5】交換兩個(gè)變量的值。
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);
}
}
運(yùn)行結(jié)果如圖5-6所示。圖5-6例5-5運(yùn)行結(jié)果提示:
C#?允許用戶(hù)像傳遞其他類(lèi)型的參數(shù)那樣將對(duì)象以參數(shù)形式傳遞給方法。但必須記住,類(lèi)是引用類(lèi)型,引用類(lèi)型變量的值為該變量引用對(duì)象的地址,當(dāng)把一個(gè)對(duì)象傳遞給一個(gè)方法的值參數(shù)時(shí),其實(shí)是把對(duì)象的地址傳遞給了該方法的值參數(shù)。對(duì)象參數(shù)總是按引用傳遞的,所以類(lèi)對(duì)象作參數(shù)傳遞時(shí)不需要使用ref關(guān)鍵字。
3.輸出型參數(shù)
C#?提供了一種特殊的參數(shù)傳遞方式,專(zhuān)門(mén)用于從方法返回?cái)?shù)據(jù),完成這種數(shù)據(jù)傳遞方式的輸出型參數(shù),用關(guān)鍵字out表示。
輸出型參數(shù)與引用型參數(shù)的差別在于:調(diào)用帶有out關(guān)鍵字參數(shù)的方法之前,不需要對(duì)傳遞給形參的實(shí)參值進(jìn)行初始化。注意輸出參數(shù)在方法中必須被賦值。
在定義和調(diào)用輸出型參數(shù)的方法時(shí),在形參和實(shí)參前都必須加上out關(guān)鍵字。
【例5-6】計(jì)算一個(gè)圓的面積,使用out關(guān)鍵字實(shí)現(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);
}
}
運(yùn)行結(jié)果如圖5-7所示。圖5-7例5-6運(yùn)行結(jié)果
4.數(shù)組型參數(shù)
在使用數(shù)組作為形參時(shí),C#提供了params關(guān)鍵字,使調(diào)用數(shù)組為形參的方法時(shí),既可以傳遞數(shù)組實(shí)參,也可以只傳遞一組數(shù)據(jù)。
params的使用格式為:
返回類(lèi)型方法名稱(chēng)(params類(lèi)型名稱(chēng)[]數(shù)組名稱(chēng)){}
說(shuō)明:
●需要傳遞的參數(shù)個(gè)數(shù)不確定時(shí),可以采用params關(guān)鍵字。
●帶有關(guān)鍵字params的數(shù)組型參數(shù)必須是方法的參數(shù)列表中最后一個(gè)參數(shù),否則會(huì)出現(xiàn)編譯錯(cuò)誤。
●數(shù)組型參數(shù)中的數(shù)組必須是一維數(shù)組類(lèi)型?!纠?-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);
}
}
運(yùn)行結(jié)果如圖5-8所示。圖5-8例5-7運(yùn)行結(jié)果
C#?程序中的方法能夠調(diào)用自身方法,這就是遞歸。
遞歸可以把一個(gè)大型復(fù)雜的問(wèn)題層層轉(zhuǎn)化,最終變成一個(gè)與原問(wèn)題類(lèi)似的簡(jiǎn)單問(wèn)題。利用遞歸算法只需要少量的操作就可以解決一個(gè)復(fù)雜的計(jì)算。遞歸是由遞歸出口和遞歸表達(dá)式兩大部分組成的。
5.3遞歸
(1)遞歸出口是遞歸結(jié)束的條件,也就是最終要變成的簡(jiǎn)單問(wèn)題。這個(gè)簡(jiǎn)單問(wèn)題的解決方法必須是已經(jīng)知道的,或者是已經(jīng)給出的計(jì)算結(jié)果。
(2)遞歸表達(dá)式是從遞歸出口到最終復(fù)雜問(wèn)題的轉(zhuǎn)化規(guī)律。
如求階乘問(wèn)題也可以使用遞歸方式來(lái)解決。其遞歸數(shù)學(xué)表達(dá)式為:
當(dāng)N=1時(shí),1!=1;當(dāng)N>1時(shí),N!=N*(N-1)!?!纠?-8】用遞歸方法計(jì)算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;
}
}
運(yùn)行結(jié)果如圖5-9所示。圖5-9例5-8運(yùn)行結(jié)果下面利用模塊化的思想改造學(xué)生成績(jī)管理系統(tǒng)V2.0,將輸入學(xué)生記錄、顯示所有成績(jī)、查詢(xún)學(xué)生成績(jī)、按語(yǔ)文成績(jī)排序分別用方法實(shí)現(xiàn),而不再是全部寫(xiě)在Main方法里。
學(xué)生成績(jī)管理系統(tǒng)V3.0代碼的實(shí)現(xiàn)步驟如下:5.4學(xué)生成績(jī)管理系統(tǒng)的模塊化usingSystem;
publicclassGradeManage
{
constintCOUNT=100; //最多處理100位學(xué)生信息
staticstring[,]student=newstring[COUNT,4];//student用于保存學(xué)生信息
staticintpos=0;
publicstaticvoidMain()
{
do
{Console.WriteLine(" ***學(xué)生成績(jī)管理系統(tǒng)***\n");
Console.WriteLine(" 1---輸入學(xué)生記錄");
Console.WriteLine(" 2---顯示所有成績(jī)");
Console.WriteLine(" 3---查詢(xún)學(xué)生成績(jī)");
Console.WriteLine(" 4---退出");
Console.Write(" 請(qǐng)選擇:");
intchoice=int.Parse(Console.ReadLine());
switch(choice)
{
case1:append();break;
case2:listStudent();break;
case3:query();break;
case4:return;
}
}while(true);
}//列出所有學(xué)生成績(jī)
publicstaticvoidlistStudent()
{
Console.WriteLine("顯示學(xué)生成績(jī):");
Console.WriteLine("學(xué)號(hào)\t姓名\t語(yǔ)文\t英語(yǔ)");
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+"個(gè)學(xué)生!");
return;
}
do
{
//該循環(huán)確保輸入學(xué)號(hào)不重復(fù)
while(true)
{
Console.Write("請(qǐng)輸入學(xué)號(hào):");StringstudentNO=Console.ReadLine();
if(!exist(studentNO))
{
student[pos,0]=studentNO;
break;
}
Console.WriteLine("該學(xué)號(hào)已存在!");
}
Console.Write("請(qǐng)輸入姓名:");
student[pos,1]=Console.ReadLine();
Console.Write("請(qǐng)輸入語(yǔ)文成績(jī):");
student[pos,2]=Console.ReadLine();
Console.Write("請(qǐng)輸入英語(yǔ)成績(jī):");
student[pos,3]=Console.ReadLine();
pos++;
if(pos>=COUNT)
{
break;
}
Console.Write("是否繼續(xù)輸入?(y/n)");
}while(char.Parse(Console.ReadLine())=='y');
}
//判斷是否存在某學(xué)號(hào)的學(xué)生。stuNO為學(xué)號(hào)
publicstaticboolexist(stringstuNO)
{
for
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 政府績(jī)效評(píng)估 課件 蔡立輝 第6-10章 政府績(jī)效評(píng)估的結(jié)果應(yīng)用與改進(jìn) -政府績(jī)效評(píng)估在當(dāng)代中國(guó)的推進(jìn)
- 電力設(shè)備網(wǎng)絡(luò)安全管理規(guī)定
- 臨時(shí)展廳簡(jiǎn)單搭建協(xié)議
- 水利建設(shè)資金管理合同要點(diǎn)
- 住宅小區(qū)總價(jià)承包合同
- 電視制作公司員工借款流程
- 2024手術(shù)室內(nèi)多功能設(shè)備租賃與維護(hù)服務(wù)合同3篇
- 建筑電氣工程師聘用協(xié)議
- 農(nóng)業(yè)產(chǎn)業(yè)信息大棚租賃協(xié)議
- 游樂(lè)園設(shè)備租賃協(xié)議
- GB/T 45076-2024再生資源交易平臺(tái)建設(shè)規(guī)范
- 10.2《師說(shuō)》課件 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 2024年度企業(yè)重組與債務(wù)重組協(xié)議3篇
- 2024年公交車(chē)開(kāi)通儀式講話(huà)例文(4篇)
- 年高考新課標(biāo)I卷語(yǔ)文試題講評(píng)課件
- 《三 采用合理的論證方法》教學(xué)設(shè)計(jì)統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
- 2024-2025學(xué)年語(yǔ)文二年級(jí)上冊(cè) 部編版期末測(cè)試卷 (含答案)
- 2024-2025學(xué)年八年級(jí)上冊(cè)物理 第五章 透鏡以及其應(yīng)用 測(cè)試卷(含答案)
- 《自理理論orem》課件
- 職業(yè)技術(shù)學(xué)院無(wú)人機(jī)應(yīng)用技術(shù)專(zhuān)業(yè)人才培養(yǎng)方案
- 神經(jīng)病學(xué)第九版腦梗死
評(píng)論
0/150
提交評(píng)論