| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6568 人关注过本帖
标题:srand函数是什么意思啊?
只看楼主 加入收藏
好学
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:622
专家分:318
注 册:2004-5-4
结帖率:50%
收藏
 问题点数:0 回复次数:13 
srand函数是什么意思啊?

我从网上找了一个产生随机数的程序

#include <iostream> #include <cstdlib> using namespace std;

int main() { int counter; for(counter=0;counter<10;counter++) { srand(counter+1); cout<<"Random number"<<counter+1<<":"<<rand()<<endl; } system("pause"); return 0; }

其中有

srand(counter+1);

srand是什么意思啊,起什么作用啊

还有

system("pause");
好象没用啊,我去掉了还照样运行
搜索更多相关主题的帖子: srand 函数 意思 
2004-06-16 21:36
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 

srand(counter+1); 函数的作用是让你的随机函数rand()有种子数可依据,从而产生比较分散的伪随机数.

system("pause");是针对BCB,C++ Builder,Dev C++,GCC3.3 等编译器而用的,因为在它们当中编译控制台程序时必须要暂停一下来看结果,不然程序的控制台界面就会一闪就什么也没有了.也可以使用getchat();


I am a big fan of c plus plus.
2004-06-16 21:43
guanyou
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2004-6-14
收藏
得分:0 
怎么每次产生的随机数都一样的??能不能每次产生的都不一样??请指教!!

2004-06-16 23:23
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

guanyou

这个程序在上面程序的基础上作了改动,这样每次执行后产生的结果就不一样了。

如果你有兴趣可以写一个 lotto 程序, lotto 是一种搏彩,玩法是这样的。在一个固定的数子范围内,猜数字,举例来讲,1 到 49 这 49 个数字中猜 6 个 数,也就是选出其中 6 个数, 比如,如果我选 2 4 6 8 10 12 而那天开奖的数和我的数一样,那我就中大奖了。大家应该注意到了,所选出的数没有一个会是重复的,因为选掉的数就不可以在选了呀,好了,大家如果有兴趣,就写写这个程序吧。国內各种福利彩票也很多,你的程序或许还能帮你中奖呢。

#include <iostream> #include <cstdlib> #include <ctime>

using namespace std;

int main() { int counter; srand( (unsigned)time( NULL ) );

for(int i = 0; i<10; i++) { cout<<"6 Random number(between 1 and 49): "; for(counter=0;counter<6;counter++) { cout<<rand()%49+1<<" "; } cout<<endl; } system("pause"); return 0; }


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-06-17 01:40
好学
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:622
专家分:318
注 册:2004-5-4
收藏
得分:0 

请问kai版主,

srand( (unsigned)time( NULL ) );中(unsigned)time( NULL )是不是根据时间产生随机数啊,unsigned和null分别代表什么意思啊

rand()%49+1是什么意思 ,是不是rand()产生的随机数除以49取余然后再加1,直接用rand()代替不行吗

2004-06-17 12:57
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

#include <iostream> #include <cstdlib> // for srand() und rand() using namespace std;

int main() { unsigned int i, num;

cout<<"\nPlease enter a number between 1 and 65535: "; cin>>num;

srand(num); // initialize the the random-number generator printf("\n\n******* random-number *******\n"); for( i = 1 ; i <= 15 ; ++i) cout<<endl<<i<<".Random-number = "<<rand() % 200 + 1; cout<<endl; return 0; }

运行完上面这段程序,可以发现,如果你每次输入的数值是一样的,那么每次产生的随机数也是一样的,也就是说,以一个固定的数值作为种子是一个缺点。 通常的做法是 以这样一句代码srand((unsigned) time(NULL));来取代,这样将使得种子为一个不固定的数, 这样产生的随机数就不会每次执行都一样了。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-06-17 17:40
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

载录于msdn

time

Gets the system time.

time_t time( time_t *timer );

RoutineRequired HeaderCompatibility
time<time.h>ANSI, Win 95, Win NT

For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIBSingle thread static library, retail version
LIBCMT.LIBMultithread static library, retail version
MSVCRT.LIBImport library for MSVCRT.DLL, retail version

Return Value

time returns the time in elapsed seconds. There is no error return.

Parameter

timer

Storage location for time

Remarks

The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970, coordinated universal time, according to the system clock. The return value is stored in the location given by timer. This parameter may be NULL, in which case the return value is not stored.

Example

/* TIMES.C illustrates various time and date functions including: *      time            _ftime          ctime       asctime *      localtime       gmtime          mktime      _tzset *      _strtime        _strdate        strftime * * Also the global variable: *      _tzname */#include <time.h>#include <stdio.h>#include <sys/types.h>#include <sys/timeb.h>#include <string.h>void main(){    char tmpbuf[128], ampm[] = "AM";    time_t ltime;    struct _timeb tstruct;    struct tm *today, *gmt, xmas = { 0, 0, 12, 25, 11, 93 };    /* Set time zone from TZ environment variable. If TZ is not set,     * the operating system is queried to obtain the default value      * for the variable.      */    _tzset();    /* Display operating system-style date and time. */    _strtime( tmpbuf );    printf( "OS time:\t\t\t\t%s\n", tmpbuf );    _strdate( tmpbuf );    printf( "OS date:\t\t\t\t%s\n", tmpbuf );    /* Get UNIX-style time and display as number and string. */    time( &ltime );    printf( "Time in seconds since UTC 1/1/70:\t%ld\n", ltime );    printf( "UNIX time and date:\t\t\t%s", ctime( &ltime ) );    /* Display UTC. */    gmt = gmtime( &ltime );    printf( "Coordinated universal time:\t\t%s", asctime( gmt ) );    /* Convert to time structure and adjust for PM if necessary. */    today = localtime( &ltime );    if( today->tm_hour > 12 )    {   strcpy( ampm, "PM" );   today->tm_hour -= 12;    }    if( today->tm_hour == 0 )  /* Adjust if midnight hour. */   today->tm_hour = 12;    /* Note how pointer addition is used to skip the first 11      * characters and printf is used to trim off terminating      * characters.     */    printf( "12-hour time:\t\t\t\t%.8s %s\n",       asctime( today ) + 11, ampm );    /* Print additional time information. */    _ftime( &tstruct );    printf( "Plus milliseconds:\t\t\t%u\n", tstruct.millitm );    printf( "Zone difference in seconds from UTC:\t%u\n",              tstruct.timezone );    printf( "Time zone name:\t\t\t\t%s\n", _tzname[0] );    printf( "Daylight savings:\t\t\t%s\n",              tstruct.dstflag ? "YES" : "NO" );    /* Make time for noon on Christmas, 1993. */    if( mktime( &xmas ) != (time_t)-1 )   printf( "Christmas\t\t\t\t%s\n", asctime( &xmas ) );    /* Use time structure to build a customized time string. */    today = localtime( &ltime );    /* Use strftime to build a customized time string. */    strftime( tmpbuf, 128,         "Today is %A, day %d of %B in the year %Y.\n", today );    printf( tmpbuf );}

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-06-17 17:56
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

好学,

其实不必指名道姓的问,你有问题,直接问就可以了,我相信大家都会回答你的。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-06-17 17:59
onicuka
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2004-6-23
收藏
得分:0 

KAI先生写的的确达到了随机数,不过有一个小问题就是srand( (unsigned)time( NULL ) );之后

虽然每次出现的都不一样了,不过还是有一排里2到3个数相等的可能,因为rand()%49+1虽然是随机产生数不过不能保证每次产生的都不一样.

下面是我写的一段程序,因为没有这个问题:)

#include "stdafx.h" #include <algorithm> #include <iostream> #include <algorithm> #include <functional> #include <vector> #include <TIME.H> using namespace std; #define VECTOR_SIZE 49

int main(int argc, char* argv[]) { srand( (unsigned)time( NULL ) );

typedef vector<int> IntVector; typedef IntVector::iterator IntVectorIt; IntVector Numbers(VECTOR_SIZE) ; IntVectorIt sss, end, it; for(int i = 0,j = 0;i < VECTOR_SIZE;i++,j++) { Numbers[i] = j; } sss = Numbers.begin(); end = Numbers.end(); random_shuffle(sss, end); it = sss; for(int t = 0;t < 7;t++) { cout<<*it<<" "; it++; } system("pause"); return 0; }

经VC6.0++编译通过.


2004-06-23 11:42
guanyou
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2004-6-14
收藏
得分:0 
onicuka,我编译时出了问题,系统提示#include "stdafx.h"头文件找不到,为什么啊??我把它去掉了就能通过编译???

[此贴子已经被作者于2004-06-23 16:33:48编辑过]


2004-06-23 16:30
快速回复:srand函数是什么意思啊?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.680783 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved