C语言分支和循环(下

分支和循环·练习

        数字游戏:电脑生成1~100的随机数。玩家进行猜数字,根据猜测的数据给出大了或者小了的反馈,直到猜对为止,游戏结束。

1)生成随机数

        1.1)首先生成随机数需要用到 rand 函数。函数原型如下:

int rand (void);

        rand 函数的使用需要包含一个头文件:stdlib.h

        需要注意的是,rand 函数返回的只是一个伪随机值,所以无论我们运行多少次,输出的结果都是一样的。比如:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());

    return 0;
}
    
    

第一次结果:第二次结果:

        很明显这不是我们想要的结果。

         rand 生成的始终是一个伪随机值,它是对一个叫“种子”的基准值进行运算生成的, rand 函数生成随机数的默认种子是1。

        我们要生成不同的随机数,就不要让种子为默认值,而是随机变化的,但首先我们先要让种子初始化,不让它以默认值进行,这个时候就需要用到srand函数。

        1.2)srand

        原型如下:

viod srand(unsigned int seed);

        加上 srand 函数之后,只是让 rand 函数初始化了而已,我们想要真正生成一个随机值,就要让“种子”始终保持一个一直变化的值,还需要用到 time 函数。

        1.3)time

        原型如下:

time_t time(time_t* timer);

         time函数的使用需要包含一个头文件:time.h

        time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒。
        现在我们可以让生成随机数的代码改成如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
    //使用time函数的返回值作为种子
    //因为srand的参数是unsigned int类型,我们要将time函数的返回值进行强制类型转换
    srand((unsigned int)time(NULL));
    //NULL指的是调用、time函数返回“时间戳”,没有接受返回值。此处是指针内容,不会细说。
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());

    return 0;
}
        1.4)随机数范围

        如果要生成a~b的随机数,方法如下:

a + rand()%(b-a+1)

        例:如果生成100~200之间的随机数

100 + rand()%(200-100+1)
2)游戏实现
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void game()
{
    int r = rand()%100+1;
    int guess = 0;
    while(1)
    {   printf("请猜数字:");
        scanf("%d",&guess);
        if(guess < r)
        {
            printf("小了\n");
        }
        else if(guess > r)
        {
            printf("大了\n");
        }
        else
        {
            printf("猜对了!\n");
            break;
        }
    }
}

void menu()
{
    printf("-------------------------\n");
    printf("----------1.开始---------\n");
    printf("----------0.结束---------\n");
    printf("-------------------------\n");
}


int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("请选择:");
        scanf("%d",&input);
        switch(input)
        {
            case 1:
                game();
                break;
            case 0:
                printf("游戏结束\n");
            default:
                printf("选择错误,请重新选择\n");
                break;
        }
    }while(input);

    return 0;
}

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值