关于srand()函数
本文最后更新于 2712 天前,其中的信息可能已经有所发展或是发生改变。

内容纲要

之前在一些代码的测试上面偶尔会出现不用srand()设置种子的,也有不理解srand()用来干什么的。
虽然不用srand()设置种子程序也可以运行,看起来也貌似是正确的。
但是实际上我们不难发现如果用rand()直接生成的数列,是有规律的。
我们以rand()%10+1(也就是本周的作业)来说明这个问题。
我写一个简单的程序,来说明这个问题。运行环境是gcc 4.9 CLion 2016.2 for Windows (Windows 10家庭中文版64位)

[code lang=”c”]
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for (i = 0; i < 10; i++) {
printf("i[%d]=%d\n",i,rand()%10+1);
}
return 0;
}
[/code]

事实上,我们运行以后的结果永远是固定的。

rand()%10+1的结果

这也就是为什么我们要用srand()的原因。让rand()随机是很重要的。我们不妨看一下rand()的定义。

The C library function int rand(void) returns a pseudo-random number in the range of 0 to RAND_MAX.

RAND_MAX is a constant whose default value may vary between implementations but it is granted to be at least 32767.

引用:https://www.tutorialspoint.com/c_standard_library/c_function_rand.htm
而在另一篇文章中关于srand()的作用则是这样解释的。
(引用自学步园-Srand函数


比如VC中对于rand()函数是如下实现的:
int __cdecl rand (void)
{  return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff); }
————————————————————————-
而srand()的函数是如下实现的:
void __cdecl srand (unsigned int seed)
{
#ifdef _MT
_getptd()->_holdrand = (unsigned long)seed;
#else /* _MT */
holdrand = (long)seed;
#endif /* _MT */
}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇