srand()与rand()函数的问题

#include<stdio.h>
#include<time.h>
main()
{
int x;
srand(1000);
x=rand(1,10);
printf("%d",x);
}

为什么出来的数字不是1-10之间的数字?
rand()函数语法不是int rand(int min,int max)吗?
而且每次还一样?
另外srand()函数里的种子对rand()有什么影响?

第1个回答  推荐于2016-06-09
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
main()
{
int x;
srand((int)time(NULL));
x=rand()%10+1;
printf("%d",x);
}

//随即产生min-max 的话 语法为 rand()%(max-min+1)+min追问

srand((int)time(NULL));是取得系统时间
我想自定义种子应该没错吧!

rand()%10+1;我只得知道可以,为什么我这样写不对?

追答

你那个是matlab里面的写法吧 c语言没那么写的

还有因为你每次中的种子都是一样的所以产生的结果都一样 你要产生不同结果的话就要设置不同种子

追问

rand(1,10);
这样写,系统不报错~
但是就是数字不对

那取系统时间和自定义时间有区别吗?

追答

系统时间的话每次时间都是不一样的呀 所以可以产生不同的伪随机素 你自定义一个
srand(1000);产生的永远是同一个随机数

追问

但是这语句总是执行一次,即使每次都要重载,那效果也应该一样的~

追答

重载以后你的1000没有变啊 自变量没有变 函数结果会变?
随机数是通过一个特定的数学运算得到的

追问

哦~这样。

有什么办法可以实现随机生成1-35的数字,而没有重复吗?

不用筛选的语句

追答

不可能吧 要筛选 学了这么多年 编写了这么多程序 还没看到过 应该都要加筛选条件的

本回答被提问者采纳
第2个回答  2011-06-07
rand不是这样用的!srand里面的种子就是为了在每次产生不同的随机数追问

rand()函数语法不是int rand(int min,int max)吗?
随机产生min-max之间的数字

追答

要产生1-10之间的随机数可以这样写:x=rand()%10+1;
srand里面的种子就是产生随机数的一个引子...
为了在每次产生不同的随机数 应该把实时时间作为种子。

追问

srand((int)time(NULL));是取得系统时间
我想自定义种子应该没错吧!

rand()%10+1;我只得知道可以,为什么我这样写不对?

追答

自定义种子也可以,但每次产生的随机数还是会一样!在VC6中rand函数没有重载,只有这一个使用形式

追问

我用的codeblock
那为什么rand(1,10);
不对呢?

追答

那就不知道了...我没有用过codeblock

追问

VC貌似也可以~

int rand(int min,int max)有这个用法的

追答

没有,我查过MSDN

追问

~~~
我知道上查的~

那是标准的原因?

追答

百度知道上查的也要分清是属于那个编译器的标准,而MSDN就是VC编译器的标准文档

追问

那有什么办法可以随机生成1-35的数字7个,要无重复的
不写判断重复的语句可以实现吗?

第3个回答  2011-06-07
编辑本段C语言函数名
简介
  功 能::伪随机数发生器   所属库:stdlib.h   用 法:   需要先调用srand初始化,一般用当前日历时间初始化随机数种子,这样每次执行代码都可以产生不同的随机数。  
 函数原型:int rand(void);  //看这里
 相关函数:srand、time、GetTickCount
程序例  
#include "stdio.h"   
#include "stdlib.h"   
int main(void)   
{   
int i;   printf("Ten random numbers from 0 to 99\n\n");   
for(i=0; i<10; i++)   
printf("%d\n", rand() % 100);
  return 0;  
 }
相似回答