首页 > 其他分享 >关于我、重生到500年前凭借C语言改变世界科技vlog.4

关于我、重生到500年前凭借C语言改变世界科技vlog.4

时间:2024-10-14 14:22:18浏览次数:9  
标签:rand 函数 time C语言 vlog.4 随机数 printf 100 500

文章目录

猜数字游戏专题

掌握了前面学习的vlog的知识,尤其是分支与循环,我们可以写一个经典有趣的游戏:猜数字
游戏要求:
1.电脑自动生成1~100的随机数
2.玩家猜数字,程序根据玩家猜的数字,做出猜大了或猜小了的判断,直到玩家猜对为止

1.随机数生成

1.1 rand

rand是C语言中的一种函数,其语法形式为:

 int rand (void);

rand 会返回一个随机数,这个随机数的范围在0~RAND_MAX(理论值)之间
使用该函数需要包括头文件**#include <stdlib.h>**

实际上我们多次运行只有 rand 函数的程序会发现,每次打印的随机数都相同,其实只有 rand 函数返回的是一个伪随机数,真正的随机数是无法预测下一个数是多少的, rand 函数是基于一个叫 “种子” 的基准值生成随机数,种子默认值为1,所以我们想生成完全随机的数,要让种子时刻处于变化状态

1.2 srand

srand 也是C语言中的一种函数,其语法形式为:

void srand (unsigned int seed);

srand 会初始化随机数的生成器,调用 rand 函数前要调用 srand 函数,通过 srand 函数的参数seed来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了
那也就是说 srand 的种子如果是随机的, rand 就能生成随机数

1.3 time

易知时间是在时刻发生变化的,所以我们可以将时间作为种子来使用
time 就是C语言中的一个时间函数,其语法形式为:

 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 函数返回的这个时间差也被叫做:时间戳, time 函数的时候需要包含头文件:#include <time.h>

于是完整的生成随机数代码可以这样写:

srand((unsigned int)time(NULL));
printf("%d\n", rand());

srand函数是不需要频繁调用的,⼀次运行的程序中调用⼀次就够了

1.4 随机数的范围

生成0~99之间的随机数:

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

生成1~100之间的随机数:

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

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

100 + rand()%(200-100+1)//余数的范围是0~100,加100后就是100~200

生成a~b之间的随机数:

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

2.猜数字游戏的实现

首先设置主要的菜单界面:

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

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");
          break;
     default:
          printf("选择错误,重新选择\n");
          break;
    }
 } while (input);
void menu()
{
 printf("***********************\n");
 printf("****** 1. play ******\n");
 printf("****** 0. exit ******\n");
 printf("***********************\n");
}

然后设计主要的猜数字代码:

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;
       }
    } 
}

除此之外,丰富游戏玩法我们还可以加上猜的次数,自定义函数game可修改为:

void game()
{
     int r = rand() % 100 + 1;
     int guess = 0;
     int count = 5;
     while (count)
   {
       printf("\n你还有%d次机会\n", count);
       printf("请猜数字>:");
       scanf("%d", &guess);
       if (guess < r)
       {
            printf("猜⼩了\n");
            else if (guess > r)
       {
            printf("猜⼤了\n");
       }
       else
       {
            printf("恭喜你,猜对了\n");
            break;
       }
     count--;
   }
   if (count == 0)
   {
         printf("你失败了,正确值是:%d\n", r);
   }
}

最后要注意把两个自定义函数 game 和 menu 放在主函数前
或者在主函数前加上 void mean() 和 void game() 进行函数声明 (后面会讲)

希望读者们多多三连支持

小编会继续更新

你们的鼓励就是我前进的动力!

在这里插入图片描述

标签:rand,函数,time,C语言,vlog.4,随机数,printf,100,500
From: https://blog.csdn.net/Zero_VPN/article/details/142914853

相关文章

  • C语言-用指针遍历二维数组
    一、1.用一级指针遍历二维数组7#include<stdio.h>89intmain(intargc,char*argv[])10{11inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};12int*p;13p=*a;14inti;15for(i=0;i<12;i++){16if(i!=0&&i%4==0)17......
  • C语言实现将一个输入的十进制数转换为二进制输出
    一、意义  由于计算机是由一系列电子元件组成的,这些元件只能处理两种状态:开和关。这两种状态可以用二进制表示,其中0代表关闭状态,1代表开启状态。因此,计算机只能存储和处理二进制数。二、原理方法除二取余法是一种将十进制数转换为二进制数的方法。其原理如下:将待转换的......
  • C语言学习3
    二分法查找    二分法查找,也称为折半查找,是一种在有序数组中查找特定元素的高效算法。该算法的基本思想是将数组分成两半,比较中间元素与目标值的大小,然后选择一半继续查找,直到找到目标值或确定目标值不存在。步骤确定数组的左右边界索引,通常左边界为0,右边界为数组......
  • 初始C语言
    目录引语计算机语言的发展一.c语言的定义第一个c语言程序二.数据类型1.数据类型大小计算机单位换算......
  • Wx64ST:一款轻松可修改的C语言Shellcode模板
    原创Alpha_h4ckFreeBuf关于windows_x64_shellcode_templatewindows_x64_shellcode_template简称为Wx64ST,它是一款功能强大的Shellcode模板,该模板基于C语言编写,其简单、可扩展和易于修改等特性可以帮助广大安全研究人员轻松开发适用于Windowsx64的Shellcode。值得一提的是,......
  • C语言——指针全解
    目录一、指针变量  二、指针和指针类型        1、指针类型        2、指针变量大小 三、指针类型的意义        1、解引用         2、指针+-整数         3、void*指针类型 四、野指针 五、指针的运算     ......
  • C语言——自定义类型
    目录一、结构体        1、结构体的定义与声明        2、结构体变量的定义和初始化        3、结构体的自引用         4、结构体的内存对齐         5、为什么要结构体的内存对齐                1、性能......
  • (C语言)算法数据结构
    王道数据结构以及本人上课的笔记             ......
  • 与C语言的旅程之分支与循环
                    C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,        C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。        我们......
  • C语言分支与循环的学习(小知识)
    学习目录 1.if 表达式成立(为真),则语句执行;表达式不成立(为假),这语句不执行。    注解:C语言中,非零表示真,0表示假。如果一个表达式的结果不是0,这语句执行。反之,则语句执行。实例:输入一个整数,判断是否为奇数该程序的执行逻辑是包含头文件#include<stdio.h>,输入主函数,......