函式(function)的宣告(1)_第1頁(yè)
函式(function)的宣告(1)_第2頁(yè)
函式(function)的宣告(1)_第3頁(yè)
函式(function)的宣告(1)_第4頁(yè)
函式(function)的宣告(1)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、函式 ( function ) 的宣告(1)2)以 #define 的形式,來定義需要重複呼叫的程式部分!當(dāng)有一件事需要重複去作或過程比較複雜時(shí),1)可以寫成函式,方便偵錯(cuò)維護(hù)與往後呼叫!int sum(int N) int k, total=0; for ( k=1; k 原意:產(chǎn)生 0 5 的隨機(jī)數(shù) 事實(shí)是 = ( rand() % 5 + 1 ) / 1 = value 10 - 5 = 5subtract( 10, 2+3 ) = 10 - 2+3 = 11 != 5函式 ( function ) 的宣告(3)傳回型態(tài) 函式名稱( 參數(shù)列 , ) . 函式主體; return ( 具有

2、傳回型態(tài)的結(jié)果 );/ 傳回型態(tài)可以是void,表示函式不必傳回任何值。/ 當(dāng)函式執(zhí)行過程遇到return時(shí),便會(huì)立即結(jié)束該函式的執(zhí) 行,並返回原呼叫函式的下一個(gè)指令繼續(xù)執(zhí)行。需傳回 的資料則緊接著在return後面。/ 形式參數(shù)(formal argument)列可有可無!函式的範(fàn)例void line() for (k=0; k10; +k) printf(“*”);void line1(int n) for (k=0; kn: +k) printf(“*”);void line2(int n, char ch) for (k=0; kn; +k) printf(“%c”,ch);無參數(shù)時(shí)呼

3、叫ex. line();一個(gè)整數(shù)型態(tài)參數(shù)ex. line1(10);具有兩個(gè)參數(shù)ex. line2(10,*);函式呼叫時(shí)的執(zhí)行流程void main(String args) int squ; squ = square(10); System.out.println(squ); System.out.println( “The End !”);int square(int k) rerurn ( k*k );更正確的說:當(dāng)執(zhí)行到return時(shí),便會(huì)自程式所呼叫的函式返回!變數(shù)在函式間的可視範(fàn)圍規(guī)則:在變數(shù)宣告以下的函式,理論上均可存取該變數(shù),但 會(huì)將變數(shù)隱藏起來,此時(shí)外界便無法直接存取或引用

4、此變數(shù)!函式尋找變數(shù)的順序?yàn)椋河蓛?nèi)而外向上找。int showData(int n) int k; for ( k=0; k=0 ) return (k); else return (-k); 經(jīng)return傳回值並跳離該函數(shù) float abs(float f);double abs(double d);int abs(int k);float abs(int k);兩者相同函式參數(shù)的預(yù)設(shè)初值設(shè)定(for C+ only)int sum(int x, int y=0, int z=1) return ( x+y+z); ex. k=sum(10); k=sum(10, 12); k=sum(

5、10, 12, 9)/ k=10+0+1=11/ k=10+12+1=23/ k=10+12+9=31具初值的參數(shù)必須靠右排列錯(cuò)誤例:int sum(int x=1, int y, int z)函式呼叫時(shí)參數(shù)的傳遞方式(for C/C+)傳值呼叫:(call by value)void exchange(int x, int y) int temp; temp=x; x=y; y=temp;void main() int a=3, b=8; cout a b endl; exchange(a, b); cout a b endl;傳址呼叫:(call by address)void excha

6、nge(int *x, int *y) int temp; temp=*x; *x=*y; *y=temp;void main() int a=3, b=8; cout a b endl; exchange(&a, &b); cout a b endl;給的是位址注意&符號(hào)函式呼叫時(shí)參數(shù)的傳遞方式(for C+ only)傳參數(shù)別名:(call by reference)viod exchange(int &x, int &y) int temp; temp=x; x=y; y=temp;main() int a=3, b=8; cout a b ednl; exchange(a, b); c

7、out a b endl;Call by reference 的reference 可以當(dāng)成是該參數(shù)的一個(gè)別名,於是在使用這個(gè)別名時(shí)就跟直接使用原來的變數(shù)是一樣的!注意!宣告的方式函式呼叫時(shí)參數(shù)的傳遞方式(in Java)Call by value ( primitive data type ) ex. char, int, float, double, String 2) Call by reference ( objects and array ) reference 表示該類別所在的位址、或視為此object的代名。因此經(jīng)由reference對(duì)該object所代表的內(nèi)容的任何改變 ,也將

8、真正反應(yīng)在該object上。 當(dāng)函式在傳遞object參數(shù)時(shí),其實(shí)是在該被呼叫函式中產(chǎn)生一個(gè)reference,指向原呼叫函式中對(duì)應(yīng)實(shí)際參數(shù)所在的位址。常用函式群簡(jiǎn)介(for C/C+)數(shù)學(xué)類: (math.h)sin(x)cos(x)tan(x)atan(x)exp(x) =exsqrt(x)pow(y, x) =yxpow10(x) =10 xlog(x) =ln(x)log10(x)字串類: (string.h)strlen(s)strlwr(s) / 轉(zhuǎn)成小寫strupr(s) / 轉(zhuǎn)成大寫strcat(s1, s2) / s1 = s1+s2strcpy(s1, s2) / s1 =

9、 s2參數(shù)是弳度radian常用函式群簡(jiǎn)介 ( in Java )要使用Java所提供的數(shù)學(xué)函式,必須引用類別 Math。例如: Math.E = 2.718281828459045 Math.PI = 3.141592653589793 Math.abs(.); Math.sin(.);.參考課本 8-40 頁(yè)函式的遞迴呼叫(recursive call)所謂的遞迴呼叫:就是函式在執(zhí)行過程中又呼叫到自己,而同樣自我呼叫的方式一再的繼續(xù)下去!這種情形就稱為遞迴 (recursion).*使用時(shí),先歸納出一再重複部分的規(guī)則.*必須有一個(gè)能終止一再呼叫的條件產(chǎn)生,否則就成了無盡 迴圈的狀況,將導(dǎo)致

10、堆疊(stack)爆滿,程式當(dāng)?shù)?*遞迴程式能以非常精簡(jiǎn)的方式來巧妙的解決問題!* 一種四兩撥千斤,叫人嘆為觀止的藝術(shù)展現(xiàn)!1+2+3+(n-1)+n = sum(n)|sum(n-1)+ n|sum(n-2)+(n-1)|sum(n-3)+(n-2).|sum( 2 ) + 3|sum( 1 ) + 2.nn-1n-232:stack|1Save toRecursive Demo :類別(class)的定義與宣告(1)類別(class)可以視為自訂之新的資料型態(tài)。其成員包含資料與方法。資料成員或?qū)傩裕╠ata member or property): 用以儲(chǔ)存描述該物件特性或相關(guān)屬性及記錄目

11、前類別狀況的各種型態(tài)的變數(shù)。成員函式或方法(member function or method): 處理、運(yùn)算或展現(xiàn)資料的相關(guān)方法或函式(function)。類別僅是描述所有物件都會(huì)具有的特性與功能;而物件(object)才是具該類別所陳述之所有功能的真正個(gè)體。類別(class)的定義與宣告(2)類別(class)可以想成是對(duì)物件的完整描述。因此在物件導(dǎo)向程式設(shè)計(jì)(OOP)中,我們可由外而內(nèi)、經(jīng)巨觀到細(xì)微的思考我們想要?jiǎng)?chuàng)造物件的概觀,再逐步的設(shè)計(jì)與實(shí)現(xiàn)其被期待的功能。這種想法與現(xiàn)實(shí)世界我們處理事務(wù)的方法是一致的。一旦類別確立了,接下來就把它當(dāng)成是新的資料型態(tài),所以就能夠像宣告一般變數(shù)一樣的來宣

12、告物件。 class ClassName extends SuperClass class contentClassName objectName;objectName = new ClassName(.); or ClassName objectName = new ClassName(.); 類別(class)的定義與宣告(3)/ define the class Student class Student /等同於: class Student extends Object String name; float height, weight; int grade; void whoIAm

13、() System.out.println(“My name is “+name); . . . . . Student stu1; / 宣告而已,尚未真正的指向物件, / 所以對(duì)成員的引用會(huì)造成錯(cuò)誤!stu1 = new Student(); / 要求配置該物件,可以引用資料成員。Student stu2 = new Student(.); / 宣告並要求配置該物件Student stus = new Student12; / array of Student類別(class)的定義與宣告(4)Import javax.swing.JOptionPane;class Person / dat

14、a members, String name; float weight; float height; boolean sex; /final boolean sex; / member functions, void show() String sex; if ( this.sex ) sex = male; else sex = female; System.out.println(I am +name+ (+sex+ ),nmy height is +height+ cm,nmy weight is +weight+ kgs.); 類別(class)的定義與宣告(5)static voi

15、d whatIsThis() / 可經(jīng)由類別直接呼叫 String msg; msg = String name;n + float weight;n + float height;n +boolean sex;n; JOptionPane.showMessageDialog(null, msg); public class TestClass static public void main(String args) Person.whatIsThis(); / class-level member function invoked without via object. Person per

16、son = new Person(); / declare a new object with type Person; / assigning value to object person = Jack; person.sex = true; person.weight = 21; person.height = 117; person.show(); while (true); 類別(class)的定義與宣告(6)class Person / data members, private String name / original : String name; fl

17、oat weight; float height; boolean sex; /final boolean sex; . public class TestClass static public void main(String args) Person.whatIsThis(); / class-level member function invoked without via object. Person person = new Person(); / declare a new object with type Person; / assigning value to object p

18、erson person.sex = true; = Jack; / Error ! person.weight = 21; person.height = 117; person.show(); 不希望資料直接經(jīng)由物件修改,所以設(shè)成private類別(class)的定義與宣告(7)class Person String name; float weight; float height; boolean sex; /final boolean sex; .public Person(String name, float ht, float wt, boolean mal

19、e) = name; height = ht; weight = wt; sex = male; public class TestClass static public void main(String args) Person pMing = new Person(“Casey”,128, 25, false); / 呼叫建構(gòu)子 建構(gòu)子的目的:設(shè)定資料成員的初始值使用this以便與形式參數(shù)的name區(qū)別一旦有宣告建構(gòu)子在new新物件時(shí),就必須使用適當(dāng)?shù)慕?gòu)子類別(class)的定義與宣告(8)class Person String name; float weight;

20、 float height; boolean sex; /final boolean sex; .public Person() ; / (1) 不需宣告?zhèn)骰匦蛻B(tài)public Person(String name, float ht, float wt, boolean male) / (2) = name; height = ht; weight = wt; sex = male; . Person pMing = new Person(“Casey”, 128, 25, false); / 呼叫建構(gòu)子(2) Person pJack = new Person(); /

21、呼叫建構(gòu)子(1) 建構(gòu)子可以有很多個(gè),祇要符合overload規(guī)則即可,且不可有傳回型態(tài)類別(class)的定義與宣告(9)class Pig String name; boolean sex; float weight; void whoIAm() System.out.println(I am a Pig, named + name); class ColorPig extends Pig / ColorPig 繼承自Pig String color = black; / new data member added, / override the method, whoIAm(), in

22、super class Pig. 1) void whoIAm() / added somthing new: super.whoIAm(); / invoke the method in super class System.out.println(with + color + hairs.); 2) void whoIAm() / completely rewrite: System.out.println(I am a + color + Pig, named + name+.); 類別的繼承使用extendsPig : 父類別,super classColorPig :子類別,derived class類別(class)的定義與宣告(9)class Pig String name; class ColorPig extends Pig / ColorPig 繼承自Pig String color = black; public ColorPig() ; void whoIAm() / completely rewrite: System.out.println(I am a + color + Pig, named + name+.); 使用例: ColorPig cpig = new ColorPig(); = “Rich

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論