E10.【C语言】练习:编写一个猜数字游戏

server/2025/1/15 2:30:32/

目录

1.规则

2.准备

3.游戏代码


1.规则

1.程序生成1-100间的随机数

2.用户猜数字

猜对了:游戏结束

猜错了:程序会告知猜大了或猜小了,继续进行游戏,直到猜对

3.游戏可以一直玩除非退出游戏

2.准备

1.框架:循环结构:do while 先循环(游戏进入主界面)后判断(进行或退出)

2.生成随机数:

#include <stdio.h>
#include <stdlib.h>
int main() 
{int random = rand() % 101; // 生成1-100之间的随机数(%101,余数是1-100)printf("%d\n", random);return 0;
}

每次运行结果都是一样的

 rand函数会返回一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器上是32767,因此要配合time函数才能实现真随机数(真正的随机数的是无法预测下一个值是多少的)

rand函数是对一个叫“种子”的基准值进行运算生成的随机数,之所以前面每次运行程序产生的随机数序列是一样的,那是因为rand函数生成随机数的默认种子是1,如果要生成不同的随机数,就要让种子是变化的

-->用srand来设置种子

#include <stdio.h>
#include <stdlib.h>
int main() 
{srand(2);int random = rand() % 101; // 生成1-100之间的随机数(%101,余数是1-100)printf("%d\n", random);return 0;
}

 数字3发生变化,但是每次运行结果都是一样的

必须让srand()内的数字发生变化,才能实现真随机数

-->时间戳_百度百科,时间戳在不断变化

time 函数就可以获得这个时间(基于系统维护的内部时钟来计算的),返回值的是1970年1月1日0时0分0秒到现在程序运行时间之间的
差值,单位是秒,类型是time_t,本质上其实就是32位或者64位的整型类型(使用前写#include <time.h>)

time函数原型如下:

time_t time (time_t* timer);

这里不需要指针类型,写成time(NULL);(空指针)即可

但写成srand(time(NULL));会有问题

void srand (1 unsigned int seed);

srand的返回值是unsigned int,time的返回值是time_t,这里要强制类型转换

srand((unsigned int)time(NULL));

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() 
{// 设置随机数生成器,设置随机数的起点//设置随机种子time时间戳,将时间转化为数字,srand();填入不同数字,生成的随机数不同srand((unsigned int)time(NULL));int random = rand() % 101; // 生成1-100之间的随机数(%101,余数是1-100)printf("%d\n", random);return 0;
}

3.游戏代码

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <time.h>
void menu()//主菜单函数
{printf("**********************************************\n");printf("*******************1.PLAY********************\n");printf("*******************2.EXIT*********************\n");printf("**********************************************\n");printf("请选择:\n");
}
void game()//游戏函数
{printf("请猜数:\n");srand((unsigned int)time(NULL));int random = rand() % 101;//写成rand()%100+1也可以//printf("%d\n", random);//作弊模式:)int guess = 0;while (guess != random){scanf("%d", &guess);if (guess > random)printf("猜大了\n");else if (guess < random)printf("猜小了\n");else{printf("猜对了\n");}}
}
int main()
{int tmp = 0;do{menu();//调用菜单函数scanf("%d", &tmp);switch (tmp){case 2:break;default:{printf("输入错误,重新选择!\n");break;}case 1:{game();break;}}} while (tmp != 2);
}

补充:如果要生成a~b间的随机数(a<b)

random = rand() % (a+1);

上方生成的是0~a的随机数

略作修改:(0+a)~(b-a+a)

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

http://www.ppmy.cn/server/158442.html

相关文章

基于Springboot美食推荐商城系统【附源码】

基于Springboot美食推荐商城系统 效果如下&#xff1a; 系统登录页面 系统首页页面 公告信息页面 在线留言页面 美食页面 购物车页面 美食订单管理页面 会员等级类型管理页面 研究背景 随着信息技术的不断发展和互联网的普及&#xff0c;电子商务在美食销售领域中的应用越来…

《机器学习》之K-means聚类

目录 一、简介 二、K-means聚类实现步骤 1、初始化数据点、确定K值 2、通过距离分配数据点 3、更新簇中心 4、 迭代更新 三、聚类效果评价方式 1、轮廓系数的定义 2、整体轮廓系数 3、使用场景 4、优点 5、缺点 6、代码实现方法 四、K-means聚类代码实现 1、API接…

vue集成导出 txt文本文档 和 excel文档 的方法

1、导出txt文档方法 &#xff08;1&#xff09;在template中定义方法 <template> <li><el-button class"download" type"success" click"download">下载</el-button> </li> </template>&#xff08;2&…

Ubuntu 22.04 英伟达开发环境 CUDA 12.4 | cuDNN 9.0.0 | TensorRT 10.1 版本安装指南

NVIDIA 驱动安装 前置 笔者近期重整服务器&#xff0c;计划重新安装操作系统并配置新的开发环境。服务器的主要配置如下&#xff1a; Dell PowerEdge R730 Intel Xeon E5-2630v3 x2 64GB ECC DDR4 NVIDIA GeForce RTX 2080 Ti Rev. A Ubuntu 22.04.5 LTS x86_64 (No Desktop…

【Docker系列】容器内目录显示异常的解决之道

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

2025网络架构

一、园区网络概述。 园区网络典型层次和区域&#xff1a; 核心层&#xff1a;是园区网骨干&#xff0c;是园区数据交换的核心&#xff0c;联接园区网的各个组成部分&#xff0c;如数据中心、管理中心、园区出口等。汇聚层&#xff1a;处于园区网的中间层次&#xff0c;完成数据…

Addrange的用法

效果如下&#xff1a; 附代码&#xff1a; public static void List(){List<int> list new List<int> { 1,3,5};List<int> list2 new List<int> { 2, 4,6 };"\n原始list为&#xff1a;\n".Print();list.ForEach(x>x.Print());//var li…

农业电商|基于SprinBoot+vue的农业电商服务系统(源码+数据库+文档)

农业电商服务系统 目录 基于SprinBootvue的农业电商服务系统 一、前言 二、系统设计 三、系统功能设计 5.1系统功能实现 5.2后台模块实现 5.2.1管理员模块实现 5.2.2商家模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码…