
代號:
頁次:
-
二、請說明下列 PHP 程式設計的觀念。
Class 和Interface 的差異為何?請從可否宣告屬性、可否實例化、可
否有實作方法 3個面相加以說明。(5分)
若前端網頁以 HTML 程式上傳一個檔案到後端,請以 PHP 寫出後端
要處理的部分,包括檢查檔案是否上傳成功、檢查檔案是否存在(不
可覆蓋)、將上傳的檔案搬移到指定位置。(15 分)
前端:
data" action="upload.php">
type="file" name="to be uploaded">
type="submit" value="Upload">
後端:
. . .
?>
三、請說明下列程式設計概念的差異。(每小題 5分,共 20 分)
請說明傳址(call-by-reference)與傳值(call-by-value)參數傳遞的差異。
請說明靜態及動態記憶體(static memory allocation vs. dynamic memory
allocation)配置的主要差別。
請說明語法錯誤(syntax error)、語意錯誤(semantic error)、執行錯誤
(run-time error)的主要差別。
上述的錯誤,編譯程式過程中可以發現的是那一種錯誤(可複選)?

代號:
頁次:
-
四、超商預計發展合併集點卡程式,說明如下。若有 n張集點卡要合併,但只
能兩張兩張合併,因此共需合併 n-1 次才能把點數全部集中到一張卡。2
張合併時會扣掉較少點數那張的 1/10 點數(無條件進位至整數)做為手
續費。例如,若有 A, B, C 3 張集點卡要合併,且點數分別為 25, 30, 51
點。若先合併 A, B,再合併 C,則會扣掉 3+6 點,因此合併後剩 97 點,
這也剛好是最差合併策略下的合併總點數;但在最佳的合併策略下(先
合併 B, C,再合併 A),則可有 100 點。(每小題 15 分,共 30 分)
請寫 best_case() 函式,計算 n張集點卡合併過後最多可有多少點數。
請寫 worst_case() 函式,計算 n張集點卡合併過後最少可有多少點數。
#include tdio.h>
int a[101], n; // 最多可有100 張集點卡要合併,實際上要合併n張卡
int best_case () {
...
}
int worst_case () {
...
}
int main () {
scanf ("%d", &n);
for (i=0; i i++)
scanf ("%d", a[i]);
printf ("Best case: %d pointsn", best_case());
printf ("Worst case: %d pointsn", worst_case());
return 0;
}