猜数字游戏,分支和循环知识

写一个猜数字游戏

游戏要求:

1. 电脑

自动生成1~100的随机数

2.

玩家猜数字,猜数字的过程中,根据猜测数字的大小给出大了或小了的反馈,直到猜对,游戏结束

生成伪随机数的rand函数

‼️前提:必须加一个头文件

#include <stdlib.h>

这时候,打出“rand()“就代表一个伪随机数

比如

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%d", rand());
    return 0;
}

你就会得到一个伪随机数

当然,多来几个也行

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%d", rand());
    printf("%d", rand());
    printf("%d", rand());
    printf("%d", rand());
    printf("%d", rand());
    return 0;
}

为什么叫伪随机数

因为不论运行代码多少次都不会改变生成的数字

生成随机数

这时候要用到两个其他函数

第一个是srand

第二个是time

srand

为什么用这个?

你把rand理解为一个公式,比如“1的平方”

那么srand就相当于把这个式子改为了“x的平方”

这时候你输入x的值就可以得到不同的rand的值

time

“time(NULL)”

用这个来改变上面提到的x

‼️头文件#include <time.h>

这时候就有3个头文件了,让人头大

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

这时候如果打出“time(NULL)”,就可以刷新一个新的数字———现在的时间,带入x,从而得到真随机数

实践的注意事项

time本质是个长整型整数(比如像long/long long那样的大整数类型

srand要的是unsigned int

那么这样就不行⬇️

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    srand(time(NULL)); 
    printf("随机数:%d\n", rand());
    return 0;
}

这时候需要用到

强制类型转换

int a = (int)3.14;//意 思是 将 3.14换为int类型,这种只 取 整 数部分

就像在3.14前面加上“(int)”,使浮点型强迫转化为整形

我们这样做

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    srand((unsigned int)time(NULL)); //‼️
    printf("随机数:%d\n", rand());
    return 0;
}

注意‼️部分的变化

就可以实现随机数的生成,耶耶耶

设置随机数的范围,1到100

‼️利用余数的性质➡️如果一个数除以3,那么余数只能是0,1或2

➡️如果一个数除以a,那么余数只能在0到a-1

rand() % 100;//余数的 范围是 0~99

⬆️余数的 范围是 0~99

1 + rand() % 100 ;//范围是 1~100

⬆️实现啦

生成100到200的随机数

100 + rand() % 101 ;

生成a到b的随机数

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

具体实践

开始菜单

来一个式子叫menu(随便起的),在游戏最开始提示

void menu()
{
    printf("--------------");
    printf("----1. play---");
    printf("----0. leave--");
    printf("--------------");

}

游戏实体

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

游戏整体

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void menu()
{
    printf("--------------\n");
    printf("----1. play---\n");
    printf("----0. leave--\n");
    printf("--------------\n");

}

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

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

增加次数限制

改变“游戏实体”⬇️

void game()
{   
    int a = 0;
    int r = rand() % 100 + 1;
    int count = 5;
    while(count)
    {
        printf("\n你还有 %d 次机会\n", count);
        printf("请猜数字>:");
        scanf("%d", &a);
        if(a < r)
            printf("猜小了\n");
        else if(a > r)
            printf("猜大了\n");
        else
            {printf("恭喜你,猜对了\n");
            break;} 
        count --; 
            
    }
    if (count == 0);
        printf("你这次没对,正确值是%d。要再来一次吗\n", r);
}

评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值