You are on page 1of 3

金門技術學院 資管系 日四技一年級 程式設計 94 上 學期 期末考 出題者 : 陳鍾誠

學號 : 姓名 : 分數 :
1. 填充題 (20%)
public class ParamTest { class ObjTest {
public static void main(String args[]) { static int x = 0;
int x = 10; int y = 0;
System.out.println("x="+x);
static void addX() { x++; }
modifyValue(x); void addY() { y++; }
System.out.println("x="+x);
int [] a = {10, 5}; public static void main(String[] args) {
ObjTest o1 = new ObjTest();
System.out.println("a[0]="+a[0]); ObjTest o2 = new ObjTest();
modifyArray(a); o1.addX();
System.out.println("a[0]="+a[0]); o1.addY();
System.out.println("x="+o1.x);
System.out.println("a[1]="+a[1]);
System.out.println("y="+o1.y);
} o2.addX();
o2.addY();
static void modifyValue(int x) { System.out.println("x="+o2.x);
System.out.println("y="+o2.y);
x += 5; System.out.println("x="+o1.x);
} }
}
static void modifyArray(int[] a) {
a[0] += 5;
}
}
ParamTest 的輸出 : ObjTest 的輸出 :
x= 10 x= 1
x= 10 y= 1
a[0]= 10 x= 2
a[0]= 15 y= 1
a[1]= 5 x= 2

2.函數 (20%)
(1) 請以廻圈的方式定義一個函數 static int power2(int (2) 請以遞回的方式定義一個函數 static int power2(int k),
k),可以計算 2 的 k 次方 2k 後傳回。 可以計算 2 的 k 次方 2k 後傳回,其遞回公式如下。
power2(1) = 2
power2(k) = power2(k-1)*2;

static int power2(int k) {


int x = 1; static int power2(int k) {
for (int i=0; i<k; i++) if (k==1)
x = x * 2; return 2;
return x; else
} return 2*power2(k-1);
}

1
金門技術學院 資管系 日四技一年級 程式設計 94 上 學期 期末考 出題者 : 陳鍾誠
學號 : 姓名 : 分數 :
3. 直線 (10%)
右列類別代表一條直線,包含兩個端點 (x1,y1) class Line {
(x2,y2)。 double x1,y1,x2,y2;
Line(double x1, double y1, double x2, double y2) {
(1) 請寫一個建構函數 Line(double x1, double y1, this.x1 = x1 ; this.y1 = y1 ; this.x2=x2 ; this.y2=y2 ;
double x2, double y2) 以設定該兩端點的初值。 }
double length() {
double dx = x2-x1 ;
(2) 請寫一個函數 double length() 可以算出該線段的 double dy = y2-y1 ;
長 return Math.sqrt(dx*dx+dy*dy) ;
 度。 }
}

4. 三度空間的物件 (20%)

以下宣告一個代表三度空間物體的類別 Object3D, class Test {


並繼 // (1). 請填入程式碼。
承該類別後宣告一個球體類別與一個立方體類別。 public static double sum(Object3D o[]) {
double vsum = 0.0;
class Object3D { for (int i=0; i<o.length; i++) {
double volume() { return 0.0; } vsum = vsum + o[i].volume();
} }
class Ball3D extends Object3D { return vsum;
double r; }
Ball3D(double pr) { r = pr ; } // (2). 請填入程式碼。
double volume() { return (4.0/3.0) * 3.14 * r * r *r ; } public static void main(String[] args) {
} Ball3D b = new Ball3D(2.0);
class Cube3D extends Object3D { Cube3D c = new Cube3D(1.0);
double w; Object3D o[] = { b, c };
Cube3D(double pw) { w = pw ; } double s = sum(o);
double volume() { return w * w *w ; } System.out.println("總和="+s);
} }
}
請填入右列主程式中的空白段:

(1) 請寫一個 sum 函數計算所有傳入之三度空間物


體的總體積。

(2) 請寫一個主程式,宣告一個 Object3D 陣列,該


陣列一個半徑為 2.0 的球體與一個長寬高都為
1.0 的立方體,接著利用 sum 計算出其總體積後
印出。

2
金門技術學院 資管系 日四技一年級 程式設計 94 上 學期 期末考 出題者 : 陳鍾誠
學號 : 姓名 : 分數 :
5. 物件 (20%)
class Date {
請定義一個日期的類別 Date ,其特性如下: int year, month, day;
public Date(int y, int m, int d) {
(1) 包含年(Year)、月(month)、日(day) 等三個欄位 year = y; month = m; day = d;
,該表示法用西元的方式記錄之。 }
public String toString() {
(2) 定義一建構函數 Date(int y, int m, int d) 可設定初 return year+"/"+month+"/"+day;
值。 }
public String toROC() {
(3) 定義一函數 String toString() 可將該表式法轉為字 return "民國"+(year-1911)+"年"+month
串傳回。 +"月"+day+"日";
}
(4) 定義一函數 toROC() 將該年月日轉成民國的記年 }
方式 (將西元年減掉 1911 即為民國年)。

以下是上述函數的一個呼叫範例,僅供參考。

class DateTest {
public static void main(String[] args) {
Date d = new Date(2005, 4, 19);
System.out.println(”d.toString()=”+d.toString());
System.out.println(“d.toROC()=”+d.toROC());
}
}

輸出:

d.toString()=2005/4/19
d.toROC()=民國 94 年 4 月 19 日

You might also like