IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 随机数函数有多随机呢~给幼稚园小朋友出计算题~~ -> 正文阅读

[C++知识库]随机数函数有多随机呢~给幼稚园小朋友出计算题~~

目录

rand()的实质

引入srand()

生成指定范围内的随机数

程序演示

应用:给幼稚园小朋友出题


rand()函数是用于生成随机数的函数,用时常和srand()函数一起,两者都包含在stdlib.c头文件里。

rand()的实质

该函数其实是一个伪随机数生成器,开始于一个相同的种子,通过乱七八糟公式生成新数,作为新的种子。我们大概模拟一下rand函数,假设初始的种子是0。

#include<stdio.h>
static unsigned long int next = 1;//种子 
unsigned int rand)() 
{
	next=next*1103515245+12345;//生成伪随机数的魔术公式
	return(unsigned int)(next/65536)%32768;
}

其实每次运行结果是一样的,随机数也不随机嘛,真是徒有虚名


引入srand()

既然是因为每次开始于相同的种子导致生成的随机数不随机,不如我们让每次的种子不同就好了。

srand()函数用于初始化种子,他的参数是一个unsigned的种子。

如果我们传入不同的数字,那么srand()会让rand()每一次的种子都不一样。

如果我们没有使用srand(),初始种子就是不变的1。

所以我们需要一个变化的量传给srand()。

即重置种子:

time()函数返回系统的时间,这是一个随时间变化的量而且可以用于运算。不过其返回值类型是time_c类型,我们需要(unsigned int)强制转换类型,然后才能给srand()用。

time这个函数在time.h头文件里,接受的参数是一个time_c类型对象的地址,不过我们不需要那么麻烦,传入空指针(0或者NULL)作为参数,利用返回值就够了。

生成指定范围内的随机数

????????利用取余数控制数值范围。

  1. 随机数求模N,获得 0 ~ N-1 的整数。????????????????rand()%N
  2. 求模+1,获得1~N的整数。????????rand()%N+1

程序演示

#include "stdio.h"
#include "stdlib.h" 
#include "time.h"
#define RANGENUM 100//控制随机数的范围为0-100
main()
{
	int nRandNum;
	srand((unsigned int)time(NULL)); //重置种子
    for(int i = 0;i<=10;i++)  //产生10个随机数
	{
		nRandNum=rand()%RANGENUM;//生成随机数,并利用取余数控制数值范围
		printf("The %dth random num is: %d\n",i,nRandNum);
	}
	return 0;
 
}

应用:给幼稚园小朋友出题

我们小朋友不会太难的题,所以是十以内的加减乘除,除法也是整除,不过假设我的小朋友们比较聪明,知道负数好啦~~

  1. 生成两个随机数;
  2. 生成一个随机符号;(这里我们用随机的数字对应随机的符号)
  3. 输出两个随机数的算式;
  4. 获得用户输入的算式答案;
    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>//提供rand()原型 
    #include<string.h> 
    //生成两个10以内的随机数,及一个随机生成+,-,*,/ 一个运算符号,给用户显示算式,并让用户输入结果,比较结果是否正确
    int GiveQuestion();
    int continuation();
    void Judge(char nsign,int rightanswer,int answer);
    int Calculate(char c,int x,int y);
    
    int Whole=0;
    int correct=0;
    int main()
    {
    	printf("来做加减乘除运算题叭~\n");
    	int right=GiveQuestion();
    	printf("这次总共做了%d道题,你一共做对了%d道题~你真棒!!!\n下次再见~~",Whole,right);
     } 
    int GiveQuestion()
    {
    	int num1,num2,answer;
    	char sign[4]={'+','-','*','/'};
    	srand((unsigned int)time(NULL));
    	do
    	{
    		char nsign=sign[rand()%3+1]; 
    		num1=rand()%10;
    		num2=rand()%10;
    		Whole++;
    		while(nsign=='/'&&num1%num2!=0)
    		{
    			num1=rand()%10;
    			num2=rand()%10;
    		}
    		printf("%d %c %d = ? ",num1,nsign,num2);
    		scanf("%d",&answer);
    		int flag=0;
    		Judge(nsign,Calculate(nsign,num1,num2),answer);//调用判断正误的函数 
    	}while(continuation());
    	return correct;
    }
    
    
    int Calculate(char c,int x,int y)
    {
    	if(c=='+') return(x+y);
        if(c=='-') return(x-y);
     	if(c=='*') return(x*y);
     	if(c=='/') return(x/y);
    }
    
    void Judge(char nsign,int rightanswer,int answer)
    {
    	int flag=0;
    	
    		if(rightanswer==answer) 
    			{
    				printf("你太聪明啦~~~\n");
    				correct++;
    			}
    		else
    			printf("太可惜了,不对哟~\n");
    }
    
    int continuation()
    {
    	printf("你想要继续游戏吗?按1则游戏继续,否则游戏结束。\n");
    	int sign;
    	scanf("%d",&sign);
    	if(sign==1)
    		return 1;
    	else
    		return 0;
    }

分享就结束啦,感谢阅读!!!!阿里嘎多!!!

2021.11.27

SThree楠钰子.

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:05:10  更:2021-11-28 11:05:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:49:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码