阿摩線上測驗 登入

申論題資訊

試卷:109年 - 109 地方政府特種考試_四等_資訊處理:程式設計概要#94914
科目:程式設計
年份:109年
排序:0

申論題內容

三、請使用 C 程式語言撰寫一猜數字遊戲程式,此程式必須滿足下列規 定: 
5fe2e48a9738e.jpg 撰寫一函式 int Randomize(int n),可回傳一個隨機產生 介於 1 到 n 間(包含 1 與 n)的正整數,此正整數即為此遊戲 的答案。 
5fe2e493906f0.jpg 利用上述函式實作一猜數字遊戲,此遊戲開始時先讓使用者輸 入此猜數字遊戲的最大值,程式須確認使用者所輸入的數值必 須大於 20。 
5fe2e4a76e27f.jpg 使用者每次猜答時,程式必須顯示出是第幾次的猜答。  使用者每次輸入後,程式必須顯示結果,如果猜錯時,程式必須 依使用者的輸入值縮小範圍;當猜對時,就顯示『恭喜你猜對 了!』。 
5fe2e4a7c9f88.jpg 當使用者猜答次數超過 10 次仍未猜中答案時,程式就必須結束 使用者的猜答,並顯示出正確答案。

 程式執行範例如下: 
 
請輸入答案的可能最大值(至少必須大於20):15 
輸入錯誤!15沒有大於20,請重新輸入! 
請輸入答案的可能最大值(至少必須大於20):30
 第1次猜答:15 
結果為:猜錯了,答案介於 15 與 30 之間! 
第2次猜答:23 
結果為:猜錯了,答案介於 15 與 23 之間! 
第3次猜答:19 
結果為:猜錯了,答案介於 15 與 19 之間! 
第4次猜答:17 
結果為:猜錯了,答案介於 17 與 19 之間! 
第5次猜答:18 
結果為:恭喜你猜對了! 
請按任意鍵繼續 . . .

詳解 (共 1 筆)

詳解 提供者:hchungw
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 函式宣告
int Randomize(int n);
int main() {
    int max_value;
    int guess;
    int answer;
    int attempts = 0;
    int lower_bound, upper_bound;
    // 初始化隨機數生成器
    srand(time(0));
    // 輸入最大值並檢查是否大於 20
    do {
        printf("請輸入答案的可能最大值(至少必須大於20):");
        scanf("%d", &max_value);
        if (max_value <= 20) {
            printf("輸入錯誤!%d 沒有大於 20,請重新輸入!\n", max_value);
        }
    } while (max_value <= 20);
    // 隨機產生答案
    answer = Randomize(max_value);
    // 設置初始的猜測範圍
    lower_bound = 1;
    upper_bound = max_value;
    // 猜數字遊戲
    while (attempts < 10) {
        attempts++;
        printf("第 %d 次猜答:", attempts);
        scanf("%d", &guess);
        if (guess == answer) {
            printf("結果為:恭喜你猜對了!\n");
            break;
        } else if (guess < answer) {
            lower_bound = guess;
            printf("結果為:猜錯了,答案介於 %d 與 %d 之間!\n", lower_bound, upper_bound);
        } else {
            upper_bound = guess;
            printf("結果為:猜錯了,答案介於 %d 與 %d 之間!\n", lower_bound, upper_bound);
        }
    }
    if (attempts == 10 && guess != answer) {
        printf("您已經猜了 10 次但仍未猜中答案,正確答案是 %d\n", answer);
    }
    return 0;
}
// 函式定義
int Randomize(int n) {
    return rand() % n + 1;
}
程式說明
初始化隨機數生成器:
srand(time(0)); 初始化隨機數生成器,以確保每次執行程式時產生不同的隨機數。
輸入最大值並檢查是否大於 20:
使用 do-while 迴圈確保使用者輸入的最大值大於 20,如果不符合條件,則提示重新輸入。
隨機產生答案:
使用 Randomize 函式產生一個 1 到 max_value 之間的隨機數作為答案。
設置初始的猜測範圍:
設置 lower_bound 和 upper_bound 變數來追蹤使用者的猜測範圍。
猜數字遊戲的主要邏輯:
使用 while 迴圈讓使用者最多猜 10 次,每次猜測後更新範圍並提示使用者是否猜對。
如果在 10 次內猜對,則顯示「恭喜你猜對了」。
如果 10 次後仍未猜對,則顯示正確答案。