關鍵詞:隨機數
設計要求:生成一個100~200之間的隨機數,玩家有5次猜數字的機會。
以下為完整代碼。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("***** 猜數字遊戲 *****\n");
printf("***** 輸入1開始 ******\n");
printf("***** 輸入0結束 ******\n");
printf("***** 範圍為100~200 **\n");
}
void game()
{
int r = 100 + rand() % (200 - 100 + 1);
int guess = 0;
int count = 5;
while (1)
{
printf("剩餘機會%d,開始猜數字:", count);
scanf("%d", &guess);
if (r == guess)
{
printf("感謝您,猜對了!\n");
break;
}
else if (r < guess)
{
printf("猜大了!\n");
}
else
{
printf("猜小了!\n");
}
count--;
if (count == 0)
{
printf("你失敗了,正確答案為:%d\n", r);
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("請選擇:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("輸入有誤\n");
break;
}
} while (input);
return 0;
}
該程序實現的關鍵在於生成隨機數。在C中,提供了一個函數叫rand,可以用來生成隨機數。使用它需要包含頭文件stdlib.h。該函數原型如下:
int rand (void)
生成的隨機數範圍是在0〜RAND_MAX之間,這個RAND_MAX的大小是依賴編譯器上實現的,但是大部分編譯器上是32767。
原理上,rand函數是對一個叫”種子“的基準值進行運算生成的隨機數,默認種子是1。詳細一點説,rand()生成的是偽隨機數,因為它是通過確定性的算法計算出來的,但只要種子足夠隨機(如時間),其結果在統計上就是隨機的。為了每次運行能生成不同的隨機數,我們需要改變種子。C語言中,又提供了一個函數叫srand,用來初始化隨機數的生成器,srand的原型如下:
void srand (unsigned int seed);
程序中在調用rand函數之前先調用srand函數,通過srand函數的參數seed來設置rand函數生成隨機數的時候的種子,只要種子在變化,每次生成的隨機數序列也就變化起來了。程序中我們一般是使用程序運行的時間作為種子的,因為時間時刻在發生變化的。
在C中,有一個函數叫time,就可以獲得這個時間。使用它需要包含頭文件time.h。time函數原型如下:
time_t time (time_t* timer);
time函數會返回當前的日曆時間,其實返回的是1970年1月1日0時0分0秒到現在程序運行時間之間的差值,單位是秒。返回的類型是time_t類型的,time_t類型本質上其實就是32位或者64位的整型類型。
time函數的參數timer如果是非NULL的指針的話,函數也會將這個返回的差值放在timer指向的內存中帶回去。
如果timer是NULL,就只返回這個時間的差值。time函數返回的這個時間差也被叫做:時間戳。
正文完
Tip:如果要生成a~b的隨機數,a + rand() % (b - a + l)