猜数字游戏-C语言

要求:用C语言设计一个猜数字的游戏,系统将随机生成一个1~100之间的整数,你将有7次(次数可以自行修改)机会进行猜测,若7次猜测都未成功,则游戏失败;若在7次之内成功,则游戏成功。

a7c9003027584f6d96827feff3af89cf.png

 分析:首先要解决的问题就是要产生一个随机数,供我们去猜测。下面介绍随机数的引用。

rand()作为一个随机变量,就如同int a;只不过不需要定义,语句printf("%d\n",rand());则会打出一个随机数。但是rand()打出的随机数只是伪随机数,伪随机数不是真正的随机数,是通过某种算法生成的随机数,真正的随机数是无法预测下一个值是多少的。rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是 依赖编译器上实现的,但是⼤部分编译器上是32767。需要在()上加上数字,即rand的种子,不然一次输出的随机数就不会改变。我要通过改变种子来改变随机数,生成种子可以用srand函数,在前面用。然而srand生成的种子也不是随机的,又是个伪随机数种子,又要另一个东西来生成一直在变化的种子,来彻彻底底的实现随机数。我们可以以时间为变量,因为时间每时每刻都在发生改变,所以以时间为种子,种子每时每刻都在变化,生成的就是变化种子的随机数,即完全意义上的随机数。所以引用time函数。最终的代码如下 :

srand((unsigned int)time(NULL));//time是整型,这里强制取整来确保整型。

然后就是把随机数控制在0到100的范围内,任何一个自然数除以100,余数的范围在0~99之间,加上1,范围就变成了0~100。即rand%100+1的范围在0~100之间。

int r = rand() % 100 + 1;

接下来就是创建变量,用一个循环引入开始游戏进入游戏,把这个循环称为循环1,在循环1上嵌套循环2,循环2用来解决猜数字的程序,所以我创建一个game函数,即:猜数字的程序。为了增加游戏难度,我在game函数中设置了猜数字的机会,由二分法可知,1~100之间的猜数字,在有反馈提示的条件下,至多需要7次机会,这里交给读者去思考如何猜才能在七步之内猜到正确答案。这里在开始界面输入1后会开始游戏,猜完之后(无论是否猜对)会再次到这个界面;如果你不想继续或不想开始,输入0直接退出游戏,程序终止。


                               //猜数字游戏//
#include <stdio.h>
#include <stdlib.h>//使用此头文件,就可以使用伪随机数rand()。再用srand()来生成种子。
#include <time.h>//      时间戳       使用srand来生成种子,又以时时刻刻变化的时间time为种子,如此生成的随机数
//则不再是伪随机数,而是完全意义上的随机数。
void meau()//游戏开始界面的菜单的函数。
{
    printf("******猜数字游戏*******\n");
    printf("1~(到)100之间猜一个数\n");
    printf("***********************\n");
    printf("******* 1. play *******\n");//输入1开始游戏
    printf("******* 0. exit *******\n");//输入0退出游戏
    printf("***********************\n");
}
void game()//猜数字的函数。
{
    int r = rand() % 100 + 1;
    int guess = 0;
    int count = 7;
    
    while (count)
    {
        printf("你还有%d次猜数字的机会\n", count);
        scanf("%d", &guess);

        if (guess > r)
            printf("猜大了\n");
        else if(guess < r)
            printf("猜小了\n");
        else
        {
            printf("恭喜你,猜对了\n");
            printf("正确答案就是%d", r);
            break;
        }
        count--;
    }
    if (count==0)
    {
        printf("你未能猜对数字,游戏失败\n");
        printf("正确答案是%d\n", r);
    }


}

int main()//主程序
{
    int input = 0;
    srand((unsigned int)time(NULL));//time是整型,这里强制取整来确保整型。
    do
    {
        meau();//菜单,前面创建函数,这里引入,使代码简洁。
        printf("请选择是否开始>:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            printf("游戏开始\n");
            game();//前面创建函数,这里引入,使代码简洁。
            break;
        case 2:
            printf("退出游戏\n");
            break;
        default :
            printf("输入错误,请再次输入\n");
            break;
        }

    } while (input);

    return 0;
}

​

 

42a4d9f8c8164d72b53edaa013b15c03.png

b9f3042aedbe4376842e321e12c488b6.png 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值