---
# System prepended metadata

title: 2022工科系程式作業作業簡述
tags: [工科系, 2022程式設計]

---

# Hw0 基礎輸出練習
## 作業要求：
請分行print出自己的學號、名字和星座，格式隨意，並截圖上傳。
## 成績：
    100/100

# Hw1 基本運算子練習
## 作業要求：
1. 宣告兩個正整數 i = 5, j = 10，
2. 分行 print 出 i + j = ?. i - j = ?, ( i + j ) *15 / i =?， 並在每行後面寫上註解
3. 請在確認程式碼可以執行後繳交程式碼的 .c 檔
## 成績：
    100/100
# Hw2 原神四星五星角色抽中機率
![](https://hackmd.io/_uploads/S1p-4xX5h.png)
## 重點整理：
1. 不含保底：
    - 五星角色抽中機率0.6%
    - 四星角色抽中機率5.1%
2.  含保底
    - 五星角色
        - 73抽前五星角色機率皆0.6%
        - 74後每多抽一次，五星角色機率就多6%（第90抽時機率為100%）
    - 四星角色
        - 8抽前四星角色機率為5.1%
        - 第9抽四星角色機率是56.2%（第10抽機率為99.4%）
## 作業要求：
1. `hw2-1.c`
    - 請撰寫程式，嘗試在不含保底機制情況下驗證抽中5星角色的機率。
    - 請撰寫程式，嘗試在不含保底機制情況下驗證抽中4星角色的機率。
2. `hw2-2.c`
    - 請撰寫程式，嘗試在含保底機制情況下驗證抽中5星角色的機率，和官方提供的綜合抽取機率(含保底)1.6%比較。
    - 請撰寫程式，請嘗試在含保底機制情況下驗證抽中4星角色的機率，和官方提供的綜合抽取機率(含保底)13%比較。
3. `E94111164_陳珮綾_hw2.pdf`
請用一個pdf詳細講解上述程式碼，內容需包含實現方法、延伸問題與討論。
5. 繳交方式：請將每題程式碼和報告檔案放在**hw2**的資料夾，壓縮後至Moodle繳交。

        - hw2-1.c
        - hw2-2.c
        - E94111164_陳珮綾_hw2.pdf
5. 注意事項：
    - 程式碼請附上英文註解。
    - 若有參考資料請附上連結。
## 成績：
    95/100
# Hw3 1A2B
## 1A2B規則說明：
1. 出題者給定一組四位數為謎底，且這四個數字不重複。每猜一個數，出題者須做出XAYB 形式的提示，直至出題方說出4A0B時停止。其中，A代表數字對且位置對，B代表數字對但位置錯。
2. Example
    ```C=   
    // Example: 0234

    Input: 2345
    >> 0A3B
    Input: 3456
    >> 0A2B
    Input: 7243
    >> 1A2B
    Input: 0342
    >> 1A3B
    Input: 0234
    >> 4A0B
    ```
## 作業要求：
1. `hw3.c`
    請撰寫一1A2B的遊戲，須包含以下功能：
    - 讓使用者輸入數字選擇遊戲模式
        - 1：電腦為出題者，使用者為答題者。謎底由電腦亂數給定。
        - 2：使用者為出題者，電腦為答題者。謎底由使用者輸入。
        - 3：五位數版本之電腦為出題者，使用者為答題者。
        - 4：遊戲結束
    - 程式需不斷執行，直到使用者選擇模式4才停止。
2. `E94111164_陳珮綾_hw3.pdf`
請用一個pdf詳細講解上述程式碼，內容需包含實現方法、延伸問題與討論。

    **高分秘訣為自行開發額外功能或防呆機制**
3. 繳交方式：請將程式碼和報告檔案放在**hw3**的資料夾，壓縮後至Moodle繳交。

        - hw3.c
        - E94111164_陳珮綾_hw3.pdf
4. 注意事項：
    - 程式碼請附上英文註解。
    - 若有參考資料請附上連結。
## 成績：
    100/100
# Hw4 撲克牌發牌系統
## 撲克牌介紹
撲克牌擁有4 種花色13種不同數字，花色分為 ”Spade” , “Heart” , “Diamond” , “Club”，數字從代表 "1" 的 "A"，2~10以及代表 "11" , "12" , "13"的 "J" , "Q" , "K" 總共52張牌，其玩法在不同國家有相當多種玩法，**試撰寫程式因應使用者要求進行發牌，並能夠告訴使用者所有出牌順序。**
![](https://hackmd.io/_uploads/S16t9nQq3.jpg)

## 作業要求：
1. `hw4.c`
    **請撰寫撲克牌發牌系統，並擁有以下 2 種功能：**
    - 因應使用者需求能發給使用者1~13張牌，並可以重發

        - 發出來牌需擁有其花色與數字兩項屬性
        - 兩項屬性完全相同者則兩張牌為同一張牌
        - 發出來的所有牌不得重複
    - 在使用者確定不要重發後詢問使用者是否列出使用者所有的出牌順序
        - 出牌順序不考慮套牌的出法，一張一張的出
        - 當總發牌數大於6張時，能詢問使用者，出牌順序總量繁多，是否要繼續陳列，是則繼續
    - 流程圖如下：
    ![](https://hackmd.io/_uploads/HJYVzRX9h.png)
    - 注意 : 整個系統功能請用英文敘述，不得用中文
2. `E94111164_陳珮綾_hw4.pdf`
請用一個pdf詳細講解上述程式碼，內容需包含實現方法、延伸問題與討論。

    **高分秘訣為羅列出牌順序的方法探討**
3. 繳交方式：請將程式碼和報告檔案放在**hw4**的資料夾，壓縮後至Moodle繳交。

        - hw4.c
        - E94111164_陳珮綾_hw4.pdf
4. 注意事項：
    - 程式碼請附上英文註解。
    - 若有參考資料請附上連結。
## 成績：
    100/100
# Hw5 selection sort       
## 作業要求：
1. `hw5.c`
    - 請撰寫程式，以陣列初始化100個以內的待排列的數值，實現selection sort 由大排到小。
    - 參考模板，完成selection_sort的函式即可。
    
        ```c= 
        #include <stdio.h>

        /* Print an array */
        void print_arr(int arr[], int n) {
            int i;
            for (i = 0; i < n; i++)
                printf("%d ", arr[i]);
            printf("\n");
        }

        /* selection sort */
        void selection_sort(int arr[], int n) {

            /*
             */
        }

        int main(void) {

            int n = 8; // Array size
            int arr[] = {16, 25, 39, 27, 12, 8, 45, 63}; // Array

            printf("Origin: ");
            print_arr (arr, n);

            selection_sort(arr, n); // Call the function of selection sort

            printf("Result: ");
            print_arr (arr, n);

            return 0;
        }
        ````
2. `E94111164_陳珮綾_hw5.pdf`
    請用一個pdf詳細講解上述程式碼，內容需包含實現方法、延伸問題與討論。
3. 繳交方式：請將程式碼和報告檔案放在**hw5**的資料夾，壓縮後至Moodle繳交。
        
        - hw5.c
        - E94111164_陳珮綾_hw5.pdf
4. 注意事項：
        - 程式碼請附上英文註解。
        - 若有參考資料請附上連結。
## 成績：
    100/100 
# Bonus 鏈結串列(Linked list)實作
## 作業要求：
1. `bonus.c` 50%
    
    請撰寫以下函式實現對應功能：
    
    - **函式** `**combineList()**`
        - 將兩個串列串接起來，串列 2 鏈接在串列 1 的後面
    - **函式** `**insertFirstNode()**`
        - 在串列的**第一個位置（第一個節點前面）**插入節點
    - **函式** `**listLength()**`
        - 計算鏈結串列中共有多少個節點，回傳值為整數
    - **函式** `**reverseList()**`
        - 將串列反轉，即原先的head節點變為最後一個節點，最後一個節點變為head節點。
    - **主程式 `int main()`**
        1. 以陣列1 `arr1[] = {12, 43, 56, 34, 98}` 及陣列2 `arr2[] = {36, 77, 99}` 建立兩個鏈結串列並分別印出 (5%)
        2. 使用`combineList()`串接兩個鏈結串列並印出結果 (10%) 
        3. 使用`insertFirstNode()`在第一個位置加入節點，加入的節點個數與內容由`scanf()`輸入，每次加入後印出結果 (10%)
        4. 使用`listLength()`印出串列長度 (10%)   
        5. 使用`reverseList()`反轉串列並印出結果 (15%)
2. `E94111164_陳珮綾_bonus.pdf`
    請用一個pdf詳細講解上述程式碼，內容需包含實現方法、延伸問題與討論。
3. 繳交方式：請將程式碼和報告檔案放在**bonus**的資料夾，壓縮後至Moodle繳交。
        
        - bonus.c
        - E94111164_陳珮綾_bonus.pdf
4. 注意事項：
        - 程式碼請附上英文註解。
        - 若有參考資料請附上連結。  
## 成績：
    100/100