106 銀行招考七職等 高雄銀行-網路應用程式設計人員 高雄銀行網路應用程式設計人員-程式撰寫 考古題詳解

106 年・銀行招考・七職等・高雄銀行-網路應用程式設計人員
試題代碼 106高雄銀行網路應用程式設計人員-程式撰寫

第 一 題25 分

(一)下列為 JAVA 部分程式內容,若輸出結果如下,請完成下列方框內適當的程式碼。【15 分】

原高鐵車廂號碼排列為:606 號車廂, 508 號車廂, 701 號車廂 重新排列後車廂號碼為:701 號車廂, 508 號車廂, 606 號車廂

public class StackTest {
    public static void main(String args[]) {
        System.out.print("原高鐵車廂號碼排列為: 606 號車廂, 508 號車廂, 701 號車廂\n");

        // 建立空的字串堆疊
        java.util.Stack<String> st = new java.util.Stack<String>();

        // 堆疊依序壓入三元素物件
        String c1 = "601"; st.push(c1);
        String c2 = "501"; st.push(c2);
        String c3 = "701"; st.push(c3);

        // 堆疊依序彈出三元素物件
        String e1 = st.pop();
        String e2 = st.pop();
        String e3 = st.pop();

        // 確認資料是否符合先進後出特性
        System.out.println("重新排列後車廂號碼為: " + e1 + "號車廂, " + e2 + "號車廂, " + e3 + "號車廂");
    }
}

(二)下列 JAVA 程式內容,請問執行結果為何?【10 分】

public class Exam05 {
    private static void permutation(int data[], int n, int got) {
        if (n == got) {
            for (int i = 0; i < n; i++) {
                System.out.print(data[i] + " ");
            }
            System.out.println();
            return;
        }
        int tmp;
        for (int i = got; i < data.length; i++) {
            tmp = data[i];
            data[i] = data[got];
            data[got] = tmp;
            permutation(data, n, got + 1);
            tmp = data[i];
            data[i] = data[got];
            data[got] = tmp;
        }
    }

    public static void permutation(int data[], int n) {
        permutation(data, n, 0);
    }

    public static void main(String[] argv) {
        int data[] = {4, 5, 6};
        permutation(data, 3);
    }
}

登入後即可作答並保存紀錄。

這一題的完整詳解

第一題(一):Java Stack 堆疊

核心觀念

本題考查 Java Stack 類別及堆疊的「後進先出」特性(LIFO,Last In First Out)。

主要方法如下:

  • push:將元素放入堆疊頂端。
  • pop:取出並移除堆疊頂端元素。
  • 先壓入的元素,會後取出;最後壓入的元素,會先取出。

解題方法

題目要求輸出:

原高鐵車廂號碼排列為:606 號車廂, 508 號車廂, 701 號車廂
重新排列後車廂號碼為:701 號車廂, 508 號車廂, 606 號車廂

因此堆疊應依序放入:

String c1 = "606"; st.push(c1);
String c2 = "508"; st.push(c2);
String c3 = "701"; st.push(c3);

堆疊內容變化如下:

操作堆疊由底至頂
push("606")606
push("508")606, 508
push("701")606, 508, 701
第一次 pop取出 701
第二次 pop取出 508
第三次 pop取出 606

所以:

e1 = "701";
e2 = "508";
e3 = "606";

題目程式碼的文字誤植

題目所列程式碼為:

String c1 = "601";
String c2 = "501";
String c3 = "701";

若完全依照此程式執行,實際輸出會是:

重新排列後車廂號碼為: 701號車廂, 501號車廂, 601號車廂

因此,為符合題目指定輸出,601 應修正為 606,501 應修正為 508。

解題技巧

看到 Stack 題目時,直接抓住兩點:

  1. push 的順序是由底到頂。
  2. pop 的順序完全相反。

若壓入順序為:

A→B→CA \rightarrow B \rightarrow C

則彈出順序必為:

C→B→AC \rightarrow B \rightarrow A

【答案】

String c1 = "606"; st.push(c1);
String c2 = "508"; st.push(c2);
String c3 = "701"; st.push(c3);

第一題(二):排列組合遞迴程式

核心觀念

本題考查:

  • 遞迴(recursion)
  • 陣列元素交換
  • 回溯法(backtracking)
  • nn 個元素的排列數量

permutation(data, n, got) 中:

  • got 表示目前已決定到第幾個位置。
  • 當 n == got 時,代表前 nn 個位置均已完成,輸出目前排列。
  • for 迴圈逐一選擇尚未固定區域的元素,與 data[got] 交換。
  • 遞迴結束後再交換一次,恢復原本陣列順序,供下一種排列使用。

解題方法

初始陣列為:

data = {4, 5, 6}

程式從第 0 個位置開始固定元素。

第 0 個位置固定為 4

陣列狀態:

{4, 5, 6}

接著處理第 1 個位置:

🔒

後續完整解題步驟與【答案】

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊

第 二 題25 分

下列 C 程式內容為:in1.txt 內之數字若為偶數,則將其值除以 22;若為奇數,則乘以 33 加 11,直到小於等於 11 停止。再換行處理下一筆資料,執行到沒有資料為止。經過處理後輸出至 out1.txt 中,檔案內容如下,請完成方框內適當的程式碼。【25 分】

in1.txt 檔案內容: 執行後 Out1.txt 檔案內容:

void main(void)
{
    FILE *fin, *fout;
    int n;

    // 開啟資料輸入檔 in1.txt
    fin = fopen("in1.txt", "rt");
    if (fin == NULL) {
        printf("Fail To Open File in1.txt!!");
        return;
    }

    // 開啟資料輸出檔 out1.txt
    fout = fopen("out1.txt", "w+t");
    if (fout == NULL) {
        printf("Fail To Open File out1.txt!!");
        fclose(fin);
        return;
    }

    // 自輸入檔讀取資料、處理運算、輸出資料至輸出檔
    while (!feof(fin)) {

    }
    fclose(fin);
    fclose(fout);
}
🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查:

  • 使用 fopen、fscanf、fprintf 進行檔案輸入與輸出。
  • 以 feof(fin) 判斷輸入檔是否讀取完畢。
  • 偶數判斷:n % 2 == 0。
  • 奇數運算:n←3n+1n \leftarrow 3n+1。
  • 重複運算直到 n≤1n \leq 1,且每筆資料處理完成後輸出換行。

由於 00、11 本身已經符合停止條件,仍須先輸出原始值,因此適合使用 do...while 迴圈。

解題方法

每次先利用:

fscanf(fin, "%d", &n)

讀取一個整數,並確認確實讀取成功。接著使用 do...while:

  1. 先輸出目前的 n。
  2. 若目前值大於 11,輸出連字號 -。
  3. 若 n≤1n \leq 1,停止本筆資料處理。
  4. 若為偶數,令 n=n/2n=n/2。
  5. 若為奇數,令 n=3n+1n=3n+1。
  6. 本筆資料完成後輸出換行。

填入程式碼

 // 自輸入檔讀取資料、處理運算、輸出資料至輸出檔
 while (!feof(fin)) {
 if (fscanf(fin, "%d", &n) == 1) {
 do {
 fprintf(fout, "%d", n);

 if (n <= 1) {
 break;
 }

 fprintf(fout, "-");

 if (n % 2 == 0) {
 n = n / 2;
 }
 else {
 n = n * 3 + 1;
 }
 } while (n > 1);

 fprintf(fout, "\n");
 }
 }

解題技巧與常見陷阱

  • while (!feof(fin)) 只能表示「尚未讀到檔案結尾」,不能保證目前讀取成功,因此必須搭配:
🔒

後續完整解題步驟與【答案】

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊

第 三 題25 分

下列為購物車系統,當按下此商品的「放入購物車」按鈕後,則在 GridView 物件 gvCar 下方的 Label 控制項 lblCar 內出現此商品的規格與「已經放入購物車」,gvCar 連接 SQL 的 Price 資料庫,gvCar 的 OnRowCommand="ShowOrderList",「放入購物車」Button 的 CommandName="Order",請完成下列方框內 ShowOrderList 程式碼內容。【25 分】

protected void ShowOrderList(object sender, GridViewCommandEventArgs e)
{
    int i = Convert.ToInt32(e.CommandArgument);

}
🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 ASP.NET GridView 的 RowCommand 事件處理:

  • e.CommandName:判斷按下哪一個按鈕。
  • e.CommandArgument:取得該筆資料所在的列索引。
  • gvCar.Rows[i]:取得指定的 GridViewRow。
  • row.Cells[1].Text:取得該列第二欄「規格」內容。
  • lblCar.Text:顯示購物車提示訊息。

題目已給定:

int i = Convert.ToInt32(e.CommandArgument);

因此可直接將 i 視為被按下按鈕的資料列索引。依圖中欄位順序,「規格」為第二欄,索引值為 1。

解題方法

先確認命令名稱必須是 "Order",避免其他 GridView 命令誤觸發。接著依列索引取得資料列,再取出第二欄規格,組合成指定訊息:

protected void ShowOrderList(object sender, GridViewCommandEventArgs e)
{
 int i = Convert.ToInt32(e.CommandArgument);

 if (e.CommandName == "Order")
 {
 GridViewRow row = gvCar.Rows[i];
 lblCar.Text = row.Cells[1].Text + " 已經放入購物車";
 }
}

依圖中資料,若按下規格為 P8B75-V 的按鈕,lblCar 將顯示:

P8B75-V 已經放入購物車

解題技巧與常見陷阱

  1. Cells 採用從 0 開始的索引,因此第一欄是 Cells[0],第二欄「規格」是 Cells[1]。
🔒

後續完整解題步驟與【答案】

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊

第 四 題25 分

下列為商品顯示系統,當按下 GridView 物件 GridView1 中此商品的「詳細資料」後,則在同一網頁內顯示 DetailsView 物件 DetailsView1,顯示此商品所有詳細資料。當按下「返回」則顯示 GridView1,並回到原先顯示的分頁,如下圖,選擇編號 25 商品,顯示其詳細資料後按返回,仍然顯示包含編號 25 的分頁,GridView1 每頁顯示 10 筆資料。

GridView1 與 DetailsView1 都連接 SQL 的 Product 資料庫,按下「詳細資料」時執行 GV_SelectedIndexChanged,而 DetailsView 的「返回」其 CommandName="Return",執行 DV_ItemCommand。

請完成下列方框內 GV_SelectedIndexChanged【15 分】與 DV_ItemCommand【10 分】程式碼內容。

protected void GV_SelectedIndexChanged(object sender, EventArgs e)
{
    GridView1.Visible = false;
    DetailsView1.PageIndex
}

protected void DV_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
    if (e.CommandName == "Return")
    {
        Det
    }
}
🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 ASP.NET Web Forms 中:

  • GridView 的分頁索引 PageIndex
  • GridView 每頁筆數 PageSize
  • 目前選取列的索引 SelectedIndex
  • DetailsView 顯示資料的索引 PageIndex
  • Visible 控制控制項顯示與隱藏
  • DetailsViewCommandEventArgs.CommandName 判斷按鈕命令

GridView.SelectedIndex 是「目前分頁內的相對索引」,而 DetailsView.PageIndex 必須使用整個資料來源的絕對索引。

解題方法

假設:

  • GridView1.PageIndex:目前第幾頁,從 00 開始
  • GridView1.PageSize:每頁顯示筆數,本題為 1010
  • GridView1.SelectedIndex:目前頁面中被選取的資料索引,從 00 開始

因此被選取資料在整個資料來源中的絕對索引為:

DetailsView1.PageIndex=GridView1.PageIndex×GridView1.PageSize+GridView1.SelectedIndex\text{DetailsView1.PageIndex} = \text{GridView1.PageIndex} \times \text{GridView1.PageSize} + \text{GridView1.SelectedIndex}

顯示詳細資料時,隱藏 GridView1,顯示 DetailsView1。

按下 CommandName="Return" 時,利用:

GridView1.PageIndex=⌊DetailsView1.PageIndexGridView1.PageSize⌋\text{GridView1.PageIndex} = \left\lfloor \frac{\text{DetailsView1.PageIndex}} {\text{GridView1.PageSize}} \right\rfloor

即可回到原先包含該商品的分頁。C# 整數相除會自動捨去小數部分。

完整程式碼

🔒

後續完整解題步驟與【答案】

免費註冊,2026/11/15 前全站完整詳解免費看。

免費註冊

其他考古題

106 年高雄銀行-網路應用程式設計人員的其他科目