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

下載本文檔

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

文檔簡介

1、函式 ( function ) 的宣告(1)2)以 #define 的形式,來定義需要重複呼叫的程式部分!當有一件事需要重複去作或過程比較複雜時,1)可以寫成函式,方便偵錯維護與往後呼叫!int sum(int N) int k, total=0; for ( k=1; k 原意:產(chǎn)生 0 5 的隨機數(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,表示函式不必傳回任何值。/ 當函式執(zhí)行過程遇到return時,便會立即結(jié)束該函式的執(zhí) 行,並返回原呼叫函式的下一個指令繼續(xù)執(zhí)行。需傳回 的資料則緊接著在return後面。/ 形式參數(shù)(formal argument)列可有可無!函式的範例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ù)時呼

3、叫ex. line();一個整數(shù)型態(tài)參數(shù)ex. line1(10);具有兩個參數(shù)ex. line2(10,*);函式呼叫時的執(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 );更正確的說:當執(zhí)行到return時,便會自程式所呼叫的函式返回!變數(shù)在函式間的可視範圍規(guī)則:在變數(shù)宣告以下的函式,理論上均可存取該變數(shù),但 會將變數(shù)隱藏起來,此時外界便無法直接存取或引用

4、此變數(shù)!函式尋找變數(shù)的順序為:由內(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ù)的預設初值設定(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ù)必須靠右排列錯誤例:int sum(int x=1, int y, int z)函式呼叫時參數(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;給的是位址注意&符號函式呼叫時參數(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 可以當成是該參數(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對該object所代表的內(nèi)容的任何改變 ,也將

8、真正反應在該object上。 當函式在傳遞object參數(shù)時,其實是在該被呼叫函式中產(chǎn)生一個reference,指向原呼叫函式中對應實際參數(shù)所在的位址。常用函式群簡介(for C/C+)數(shù)學類: (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常用函式群簡介 ( in Java )要使用Java所提供的數(shù)學函式,必須引用類別 Math。例如: Math.E = 2.718281828459045 Math.PI = 3.141592653589793 Math.abs(.); Math.sin(.);.參考課本 8-40 頁函式的遞迴呼叫(recursive call)所謂的遞迴呼叫:就是函式在執(zhí)行過程中又呼叫到自己,而同樣自我呼叫的方式一再的繼續(xù)下去!這種情形就稱為遞迴 (recursion).*使用時,先歸納出一再重複部分的規(guī)則.*必須有一個能終止一再呼叫的條件產(chǎn)生,否則就成了無盡 迴圈的狀況,將導致

10、堆疊(stack)爆滿,程式當?shù)?*遞迴程式能以非常精簡的方式來巧妙的解決問題!* 一種四兩撥千斤,叫人嘆為觀止的藝術(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): 用以儲存描述該物件特性或相關屬性及記錄目

11、前類別狀況的各種型態(tài)的變數(shù)。成員函式或方法(member function or method): 處理、運算或展現(xiàn)資料的相關方法或函式(function)。類別僅是描述所有物件都會具有的特性與功能;而物件(object)才是具該類別所陳述之所有功能的真正個體。類別(class)的定義與宣告(2)類別(class)可以想成是對物件的完整描述。因此在物件導向程式設計(OOP)中,我們可由外而內(nèi)、經(jīng)巨觀到細微的思考我們想要創(chuàng)造物件的概觀,再逐步的設計與實現(xiàn)其被期待的功能。這種想法與現(xiàn)實世界我們處理事務的方法是一致的。一旦類別確立了,接下來就把它當成是新的資料型態(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; / 宣告而已,尚未真正的指向物件, / 所以對成員的引用會造成錯誤!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)由物件修改,所以設成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)子的目的:設定資料成員的初始值使用this以便與形式參數(shù)的name區(qū)別一旦有宣告建構(gòu)子在new新物件時,就必須使用適當?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)子可以有很多個,祇要符合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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論