C语言 - 随机4位数 猜数游戏2.0 (函数设计应用 循环 流程控制)解决在程序中获取随机数的问题

目录

1.前言

2.(猜数游戏)2.0

1.要求

2.思路

提示:

1.如何生成不重复四位数的随机数?

2.获取用户输入的值 

3.做随机数和输入值的判断 

3.流程

3.代码实现过程

4.结束


1.前言

由于第三讲 "单数的猜数游戏" 不是很完善,只是介绍了 if 和 while的基本用法,结合之前所讲的知识点综合引用一下,编程只是一个工具,目的是为了要解决问题

---------------------------------------------------------------------------------------------------------------------------------

2.(猜数游戏)2.0

1.要求

随机生成4四位数非重复的值,依次输入,正确返回T(true),错误返回F(felse),例如"TTFT" 第三位有错,直到输入正确 返回"TTTT",程序结束。

2.思路

继要求之后 要拆分问题

提示:

        程序为什么要做循环呢?

                在用户没有办法一次性就可以输入正确,要想办法在某一部插入循环

                假设有一个F(错误),就要重新输入,应当在输入用户值前些一个循环

                直到完全输入正确break; 停止循环

        程序为什么要做判断呢?

                因为要判断随机值 和 用户输入的值

1.如何生成不重复四位数的随机数?

        在程序最前行 声明#include <stdlib.h>  和 #include <time.h> 结合使用

        引用库函数 srand((int)time(NULL)); 生成整型类型的随机数

        但是每声明一次 srand函数会返回一个很大的值

        因为还没有讲述到数组 ,这里选择声明 四个变量,四个变量分别获取随机数去个位数(对原来的变量做%10,取余数)例如: 10595 % 10 = 5 //可以看成 10595 % 10 =(的余数)

        然后按照要求判断是否重复  去做 if 判断

2.获取用户输入的值 

        声明四个变量 ,引用scanf() 赋值到变量,,

3.做随机数和输入值的判断 

        做四次(因为要反复去写的代码块 可以写成函数设计的形式)然后返回 T;F。

3.流程

程序说明  -> 生成随机数 -> 循环 -> 取值 -判断 -> 输出结果

我们要想为了main函数(主函数)思路清晰,尽可能的使用函数设计

-----------------------------------------------------------------------------------------------------

程序说明      函数名:begin                       无返回值

生成随机数  函数名:num_four                要在main声明变量

做循环                                   因为不知道要循环多少次,要使用while 或do..while(至少做一次循环)

取值                引用        scanf()  (自带的库函数)

判断                函数名:judge()                要判断 第一个随机值和第一个输入值,依次往后

输出结果        引用        printf()   (自带的库函数)

3.代码实现过程

/**
 *      program:    随机4位数 猜数游戏2.0
 * 
 *      思路:
 *      程序说明  -> 生成随机数 -> 循环 -> 取值 -判断 -> 输出结果
 *      
 *      新知识点    如何生成随机数
 *      在程序最前行 声明#include <stdlib.h
 *      引用库函数 srand((int)time(NULL)); 生成整型类型的随机数
 * 
 *      根据思路流程做函数设计
*/
#include <stdio.h>          //引用 输入 输入函数
#include <stdlib.h>         //引用srand()  生成随机值函数
#include <time.h>           //与上面结合使用

void begin(void)
{	
    printf("**********Guessing game:***********\n");
	printf("\tGuess four number\n");
	printf("\tT is true, F is Felse\n");
	printf("***********************************\n");
    return;
}

//经过 %10 运算 返回一个 个位数的值
int num_four(int x)
{
    x = rand() % 10;    //生成了一个 个位数的值

    return x;           //结果在返回到main函数中的实参上
}

//比较同位的随机值和用户输入值 并返回结果
void judge(int a, int b)
{
    if (a == b)
    {
        printf("T ");
    }
    else 
        printf("F ");
    
    return;
}

int main(void)
{
    //程序说明
    begin();

    //生成随机数
    srand((int)time(NULL));     //生成随机数种子 若是生成随机数用rand()
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;

    //获取随机值
    do
    {
        num_four(a);
        num_four(b);
        num_four(c);
        num_four(d);
        
        //如果 在不相等的情况下
        if(a!=b && a!=c && a!=d && b!=c && b!=d && c!= d);
			break;
    }while (1);

    //在赋值前要声明变量
    int x, y, n, m;         //分别为用户输入的四个值

    //循环 赋值开始判断
    //解释 输入0000 退出
    printf("Enter 0000 to exit\n");
    do
    {
        printf("input:");
        //赋值 ->用户值
        scanf("%d", &x);

        if (0000 == x)
        {
            break;
        }

        //四位数 拆开 赋值给用户值变量
		y = x / 100 % 10;
		n = x / 10 % 10;
		m = x % 10;
        x = x / 1000 % 10;

        //输入的值
        printf("entered value:%d %d %d %d\n", x, y, n, m);

        //返回结果
        printf("return result:");

        //比较用户值 与 随机值 同时输出结果
        judge(a,x);
        judge(b,y);
        judge(c,n);
        judge(d,m);
        printf("\n");
        
        if(a==x && b==y && c==n && d==m)
        {
            //输入正确 然后结束
			printf("Great and quit\n");
			break;
        }
        
    } while (1);

    printf("Program is over\n");

    getchar();
    return 0;
}

4.结束

重点看代码块中的注释 和思路       //复制后可以直接运行

重点:随机取值 和 拆分变量 并赋值

下一讲   整型转字符串(数组的基本用法)
有问题可以直接私信 ,You should elevate yourself. Of course, and me.

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A.Helen

当然重点是个人成长

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值