三、請使用 C 程式語言撰寫一猜數字遊戲程式,此程式必須滿足下列規 定:
撰寫一函式 int Randomize(int n),可回傳一個隨機產生 介於 1 到 n 間(包含 1 與 n)的正整數,此正整數即為此遊戲 的答案。
利用上述函式實作一猜數字遊戲,此遊戲開始時先讓使用者輸 入此猜數字遊戲的最大值,程式須確認使用者所輸入的數值必 須大於 20。
使用者每次猜答時,程式必須顯示出是第幾次的猜答。 使用者每次輸入後,程式必須顯示結果,如果猜錯時,程式必須 依使用者的輸入值縮小範圍;當猜對時,就顯示『恭喜你猜對 了!』。
當使用者猜答次數超過 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 結果為:恭喜你猜對了! 請按任意鍵繼續 . . .
撰寫一函式 int Randomize(int n),可回傳一個隨機產生 介於 1 到 n 間(包含 1 與 n)的正整數,此正整數即為此遊戲 的答案。
利用上述函式實作一猜數字遊戲,此遊戲開始時先讓使用者輸 入此猜數字遊戲的最大值,程式須確認使用者所輸入的數值必 須大於 20。
使用者每次猜答時,程式必須顯示出是第幾次的猜答。 使用者每次輸入後,程式必須顯示結果,如果猜錯時,程式必須 依使用者的輸入值縮小範圍;當猜對時,就顯示『恭喜你猜對 了!』。
當使用者猜答次數超過 10 次仍未猜中答案時,程式就必須結束 使用者的猜答,並顯示出正確答案。詳解 (共 1 筆)
詳解
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdlib.h>
#include <time.h>
// 函式宣告
int Randomize(int n);
int Randomize(int n);
int main() {
int max_value;
int guess;
int answer;
int attempts = 0;
int lower_bound, upper_bound;
int max_value;
int guess;
int answer;
int attempts = 0;
int lower_bound, upper_bound;
// 初始化隨機數生成器
srand(time(0));
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);
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);
answer = Randomize(max_value);
// 設置初始的猜測範圍
lower_bound = 1;
upper_bound = max_value;
lower_bound = 1;
upper_bound = max_value;
// 猜數字遊戲
while (attempts < 10) {
attempts++;
printf("第 %d 次猜答:", attempts);
scanf("%d", &guess);
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);
}
}
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);
}
printf("您已經猜了 10 次但仍未猜中答案,正確答案是 %d\n", answer);
}
return 0;
}
}
// 函式定義
int Randomize(int n) {
return rand() % n + 1;
}
程式說明
初始化隨機數生成器:
int Randomize(int n) {
return rand() % n + 1;
}
程式說明
初始化隨機數生成器:
srand(time(0)); 初始化隨機數生成器,以確保每次執行程式時產生不同的隨機數。
輸入最大值並檢查是否大於 20:
輸入最大值並檢查是否大於 20:
使用 do-while 迴圈確保使用者輸入的最大值大於 20,如果不符合條件,則提示重新輸入。
隨機產生答案:
隨機產生答案:
使用 Randomize 函式產生一個 1 到 max_value 之間的隨機數作為答案。
設置初始的猜測範圍:
設置初始的猜測範圍:
設置 lower_bound 和 upper_bound 變數來追蹤使用者的猜測範圍。
猜數字遊戲的主要邏輯:
猜數字遊戲的主要邏輯:
使用 while 迴圈讓使用者最多猜 10 次,每次猜測後更新範圍並提示使用者是否猜對。
如果在 10 次內猜對,則顯示「恭喜你猜對了」。
如果 10 次後仍未猜對,則顯示正確答案。
如果在 10 次內猜對,則顯示「恭喜你猜對了」。
如果 10 次後仍未猜對,則顯示正確答案。