c语⾔随机变量seed,如何产⽣随机数?C语⾔rand()和
srand()⽤法详解
在实际编程中,我们经常需要⽣成。因此rand()与srand()出现了,本⽂详解随机数相关内容
⼀、rand()函数相关
函数:stdlib.h
函数定义:int rand(void)
函数功能:产⽣⼀个随机数
返回值:返回0⾄RAND_MAX之间的随机整数值
下⾯我们来进⾏编写,看下结果
#include
#include
int main(){undefined
int a = rand();
printf("%d\n",a);
return 0;
}
当我们多次运⾏上⾯程序后发现,每次⽣成的数字都是⼀样的!所以我们来探索下rand()函数的本质:
⼆、rand()函数的本质——产⽣⼀个种⼦(⼀个随机数)
实际上,rand() 函数产⽣的随机数是伪随机数,是根据⼀个数值按照某个公式推算出来的,这个数值我们称之为“种⼦”
当我们定义了⼀个rand()函数,产⽣的虽然是随机数,但这个随机数在开始就已经产⽣了且不在变化
也可以说,程序运⾏时最开始时产⽣随机数,但后续就相当于⼀个固定值
既然只能产⽣⼀个种⼦(随机数),那么怎么样才能重新播种(产⽣新随机数)呢?
三、srand()函数——进⾏重新播种
函数头⽂件:stdlib.h
函数定义:void srand(unsinged int seed)
函数功能:设置随机数种⼦
函数说明:通常可以⽤getpid()(获取当前进程的进程识别码)或者time(NULL)(获取当前系统的时间信息)来充当种⼦,保持每次运⾏时的种⼦是不⼀样的
#include
#include
#include
int main() {undefined
int a;
srand(time(NULL));
a = rand();
printf("%d\n", a);
return 0;
}
多次运⾏后,发现每次运⾏结果不同,随机数产⽣成功!
四、⽣成⼀定范围内的随机数
在实际开发中,我们往往需要⼀定范围内的随机数,过⼤或者过⼩都不符合要求,那么,如何产⽣⼀定范围的随机数呢?我们可以利⽤取余的⽅法:
int a = rand() % 10; //产⽣0~9的随机数,注意10会被整除
int a = rand() % 9+1; //产⽣1-9的随机数
五、连续⽣成随机数
利⽤for循环 来试⼀下
#include
#include
#include
int main() {undefined
int a, i;
for (i = 0; i < 10; i++) {undefined
srand((unsigned)time(NULL));
a = rand();
printf("%d ", a);
}
return 0;
}
运⾏结果.png
为什么每次运⾏结果都相同呢?因为某⼀⼩段时间的种⼦是⼀样的,利⽤for循环运⾏时间很短暂,time()函数只能精确到秒,但for太快,导致种⼦⼀样,那么随机数也就⼀样了
利⽤unsigned int seed = time(NULL); 定义⼀个时间种⼦seed,并在循环中每次将seed进⾏加减变化,srand(seed+=300)这样就表⽰播种时间不同了。我们将其写⼊程序:
#include
#include
#include
int main() {undefined
unsigned int seed = time(NULL);
int a, i;
for (i = 0; i < 10; i++) {undefined
seed+=300; //让播种时间不同
srand(seed);
a = rand();
printf("%d ", a);
}
return 0;
}
修改后运⾏结果.png
我们可以看到每次循环的结果不同,问题得到解决!
六、for循环与随机数⽣成函数——记数字
⼩游戏:最强⼤脑
1 2 3 4
2s后消失
输⼊:刚才产⽣的数字 1 2 3 4
输⼊正确后,产⽣多⼀位元素的 随机数集合 重复游戏
导⼊头⽂件
#include
#include //利⽤ system("cls") 当数字展⽰⼀定时间后进⾏清屏#include
#include //srand(time(NULL)) time 导⼊头⽂件
#include
#include
#include
#include
int main(){undefined
int count = 3; //记录每次⽣成多少个随机数
while(1)
{undefined
unsigned int seed = time(NULL); //1000
count++; //每次多增加⼀个数字
//设置随机数的种⼦
srand(seed);
for(int i = 0; i < count; i++){undefined
//⽣成⼀个随机数
int temp2 = rand() % 9 + 1;
printf("%d ",temp2);
}
printf("\n");
// 延时2s
Sleep(2000);
//for(int i = 0; i < 10000000000/15*2; i++); //刷新屏幕
system("cls");
int temp;
printf("请输⼊:");
//重新设种⼦和之前⽣成时的种⼦⼀样
srand(seed);
//接收⽤户输⼊ ⼀个⼀个接收
for(int i = 0; i < count; i++)
{undefined
scanf("%d", &temp);
//获取对应的⽣成的随机数
int old = rand() % 9 + 1;
//⽐较输⼊的和随机数是否相同
printf("old:%d\n", old);
if (temp != old)
{undefined
printf("错误 退出!\n");
exit(EXIT_SUCCESS);
c语言编程小游戏}
}
printf("正确!\n");
}
return 0;
}
思路:⾸先产⽣⼀组随机数存储在缓冲区,再⼀个⼀个输⼊数字,⼀个⼀个与对应位置数字进⾏⽐对,因此利⽤到循环,来接受⽤户⼀个⼀个输⼊。
如何进⾏⽐对?这就需要两次⽣成的随机数完全⼀致,
感悟:要对随机数的产⽣有⾃⼰的理解,学会利⽤随机数;编写代码要有逻辑性。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。