版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、函式 ( function ) 的宣告(1)2)以 #define 的形式,來定義需要重複呼叫的程式部分!當有一件事需要重複去作或過程比較複雜時,1)可以寫成函式,方便偵錯維護與往後呼叫!int sum(int N) int k, total=0; for ( k=1; k 原意:產生 0 5 的隨機數 事實是 = ( rand() % 5 + 1 ) / 1 = value 10 - 5 = 5subtract( 10, 2+3 ) = 10 - 2+3 = 11 != 5函式 ( function ) 的宣告(3)傳回型態 函式名稱( 參數列 , ) . 函式主體; return ( 具有
2、傳回型態的結果 );/ 傳回型態可以是void,表示函式不必傳回任何值。/ 當函式執行過程遇到return時,便會立即結束該函式的執 行,並返回原呼叫函式的下一個指令繼續執行。需傳回 的資料則緊接著在return後面。/ 形式參數(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);無參數時呼
3、叫ex. line();一個整數型態參數ex. line1(10);具有兩個參數ex. line2(10,*);函式呼叫時的執行流程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 );更正確的說:當執行到return時,便會自程式所呼叫的函式返回!變數在函式間的可視範圍規則:在變數宣告以下的函式,理論上均可存取該變數,但 會將變數隱藏起來,此時外界便無法直接存取或引用
4、此變數!函式尋找變數的順序為:由內而外向上找。int showData(int n) int k; for ( k=0; k=0 ) return (k); else return (-k); 經return傳回值並跳離該函數 float abs(float f);double abs(double d);int abs(int k);float abs(int k);兩者相同函式參數的預設初值設定(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具初值的參數必須靠右排列錯誤例:int sum(int x=1, int y, int z)函式呼叫時參數的傳遞方式(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;給的是位址注意&符號函式呼叫時參數的傳遞方式(for C+ only)傳參數別名:(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 可以當成是該參數的一個別名,於是在使用這個別名時就跟直接使用原來的變數是一樣的!注意!宣告的方式函式呼叫時參數的傳遞方式(in Java)Call by value ( primitive data type ) ex. char, int, float, double, String 2) Call by reference ( objects and array ) reference 表示該類別所在的位址、或視為此object的代名。因此經由reference對該object所代表的內容的任何改變 ,也將
8、真正反應在該object上。 當函式在傳遞object參數時,其實是在該被呼叫函式中產生一個reference,指向原呼叫函式中對應實際參數所在的位址。常用函式群簡介(for C/C+)數學類: (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) / 轉成小寫strupr(s) / 轉成大寫strcat(s1, s2) / s1 = s1+s2strcpy(s1, s2) / s1 =
9、 s2參數是弳度radian常用函式群簡介 ( in Java )要使用Java所提供的數學函式,必須引用類別 Math。例如: Math.E = 2.718281828459045 Math.PI = 3.141592653589793 Math.abs(.); Math.sin(.);.參考課本 8-40 頁函式的遞迴呼叫(recursive call)所謂的遞迴呼叫:就是函式在執行過程中又呼叫到自己,而同樣自我呼叫的方式一再的繼續下去!這種情形就稱為遞迴 (recursion).*使用時,先歸納出一再重複部分的規則.*必須有一個能終止一再呼叫的條件產生,否則就成了無盡 迴圈的狀況,將導致
10、堆疊(stack)爆滿,程式當掉!*遞迴程式能以非常精簡的方式來巧妙的解決問題!* 一種四兩撥千斤,叫人嘆為觀止的藝術展現!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)可以視為自訂之新的資料型態。其成員包含資料與方法。資料成員或屬性(data member or property): 用以儲存描述該物件特性或相關屬性及記錄目
11、前類別狀況的各種型態的變數。成員函式或方法(member function or method): 處理、運算或展現資料的相關方法或函式(function)。類別僅是描述所有物件都會具有的特性與功能;而物件(object)才是具該類別所陳述之所有功能的真正個體。類別(class)的定義與宣告(2)類別(class)可以想成是對物件的完整描述。因此在物件導向程式設計(OOP)中,我們可由外而內、經巨觀到細微的思考我們想要創造物件的概觀,再逐步的設計與實現其被期待的功能。這種想法與現實世界我們處理事務的方法是一致的。一旦類別確立了,接下來就把它當成是新的資料型態,所以就能夠像宣告一般變數一樣的來宣
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() / 可經由類別直接呼叫 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(); 不希望資料直接經由物件修改,所以設成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); / 呼叫建構子 建構子的目的:設定資料成員的初始值使用this以便與形式參數的name區別一旦有宣告建構子在new新物件時,就必須使用適當的建構子類別(class)的定義與宣告(8)class Person String name; float weight;
20、 float height; boolean sex; /final boolean sex; .public Person() ; / (1) 不需宣告傳回型態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); / 呼叫建構子(2) Person pJack = new Person(); /
21、呼叫建構子(1) 建構子可以有很多個,祇要符合overload規則即可,且不可有傳回型態類別(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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年个人独资企业股权转让协议书与合同变更程序
- 导热油锅炉施工方案
- 二零二五年度互联网+项目立项合同3篇
- 二零二五年度物联网技术应用个人劳务合同4篇
- 智能交通系统建设服务合同
- 股权转让合同补充协议书
- 二零二五年个人农产品加工厂所有权转让协议3篇
- 知识产权转让合同模板
- 二零二五年度房地产广告宣传品制作合同3篇
- 2024年文化产业创新孵化项目合同
- 《携程旅行营销环境及营销策略研究》10000字(论文)
- 餐饮行业优化食品供应链管理计划
- 微信小程序用户服务协议和隐私政策-带目录
- 江苏省徐州市、宿迁市2025年高三下期末测试化学试题含解析
- 要分手费的分手协议书(标准)
- 2024夏季广东广州期货交易所招聘高频难、易错点500题模拟试题附带答案详解
- 浙江省2024年高考化学模拟试题(含答案)2
- 2024新人教七年级英语上册 Unit 2 Were Family!(大单元教学设计)
- 碳排放管理员 (碳排放核查员)技能考核内容结构表三级、技能考核要素细目表三级
- DB12T 1339-2024 城镇社区公共服务设施规划设计指南
- 电竞赛事策划全解析
评论
0/150
提交评论