用C语言的rand和srand产生伪随机数的方法总结

时间:2019-05-12 05:01:20下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《用C语言的rand和srand产生伪随机数的方法总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《用C语言的rand和srand产生伪随机数的方法总结》。

第一篇:用C语言的rand和srand产生伪随机数的方法总结

标准库(被包含于中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void);

从srand(seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。函数二:void srand(unsigned seed);

参数seed是rand()的种子,用来初始化rand()的起始值。可以认为rand()在每次被调用的时候,它会查看:

1)如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。

2)如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。根据上面的第一点我们可以得出:

1)如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。

2)否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。

3)如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。

举几个例子,假设我们要取得0~6之间的随机整数(不含6本身): 例一,不指定seed: for(int i=0;i<10;i++){ ran_num=rand()% 6;cout< //…

srand((unsigned)time(0));for(int i=0;i<10;i++){ ran_num=rand()% 6;cout<

time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。比如假设输出: cout<

要取得[a,b)之间的随机整数,使用(rand()%(b-a))+ a(结果值将含a不含b)。在a为0的情况下,简写为rand()% b。最后,关于伪随机浮点数:

用rand()/ double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模),举例: double ran_numf=0.0;srand((unsigned)time(0));for(int i=0;i<10;i++){ ran_numf = rand()/(double)(RAND_MAX);cout<

rand()/(double)(RAND_MAX)改为 rand()/(double)(RAND_MAX/10)运行结果为:7.19362,6.45775,…等10个1~10之间的浮点数,每次结果都不同。至于100,1000的情况,如此类推。

第二篇:c语言数组方法总结

数组方法总结

1.输入元素的值:

inti,a [10];

for(i = 0;i < 9;i ++);

a[i] = i;

(1)正序排列:(2)倒序排列:

for(i =0;i < 10;i ++)for(i = 9;i >= 0;i--)printf(“%d”, a[i]);printf(“%d”, a[i]);

2.初始化元素的值:

(1)在定义时,将数组元素一次放在一对花括号里;

eg: int a[10]={1,2,3,4,5,6,7,8,9,0};

(2)可以只给一部分元素赋值:

eg: int a[10]={1,3};

(3)使数组全部元素为0:

eg: int a[10]={0,0,0,0,0,0,0,0,0,0};或者 int a[10]={0};

(4)在对全部元素赋初值的时候,由于元素数已经确定,因此,可以不指定数组长度。(注:数组长度与提供初值个数不相同时,则长度不可以省略。)

3.巧妙地将两个元素列在一个循环中输出:(用for循环处理fobonacci数列); eg:int f[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-1]+f[i-2];

4. 数列Fobonacci数列核心:

int f[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-1]+f[i-2];

5.换行操作:

for(i=0;i<=20;i++)/*当然也可以在for循环中处理,直接将{if(i%5= =0)printf(“n”);if(i%5= =0)printf(“n”);插入换行*/Printf(“%12ld”,f[i]);

}

6.起泡法:

int a[10];

for(j=0;j<9;j++)/*进行n-1趟比较*/

for(i=0;i<9-j;i++)/*在j趟比较中,比较n-1次*/

if(a[i]>a[i+i])/*由小到大排列,if(a[i]

7.初始化二维数组:

 分行给二维数组赋初值;

 将所有的元素都写在一个花括号里;

 对部分元素赋值:

1)int a[3][3]={{3},{5},{9}};只讲0列元素赋值

2)int a[3][3]={{1}, {0,6},{0,0,11}};对部分元素赋值,对非0元素少使用方便

3)int a[3][3]={{1}, {5,6}};只对几行元素赋值

4)int a[3][3]={{1}, {},{9}};对第二行元素赋值

 对全部元素赋值可以省略一维长度:

 对部分元素赋初值,在省略一位长度时,应分行赋值:

8.二维数组的输入输出:

 输入:直接定义

 输出:

for(i=0;i<=2;i++)

{for(j=0;j<=1;j++)

printf(“%5d”,b[i][j]);

printf(“n”);

}

9.二维数组的行列转换:

b[j][i]=a[i][j];

10.数组中求最大值并输出行列号:

Eg:inti,row=0,colum=0,max;

inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

max=a[0][0];

for(i=0;i<=2;i++)

for(j=0;j<=3;j++)

if(a[i][j]>max)

{max=a[i][j];

row=i;

colum=j;}

11.字符数组的初始化方法:

 逐个字符初始化:

eg:char c[10]={„I‟, „‟, „a‟, „m‟, „‟, „h‟, „a‟, „p‟, „p‟, „y‟};

1)在定义字符数组时,不初始化,则数组中的各元素的之不可预料;

2)如果花括号中提供的初值个数(即字符个数)大于数组的长度,则按语法错误

处理;

3)如果花括号中提供的初值个数(即字符个数)小于数组的长度,其余元素自动

定为空字符即(„‟);

 如果提供的初值个数与数组长度相同,则在定义时可以省略数组长度;  也可以定义一个二维数组:

eg:char diamond[5][5]={{},{},{},{},{}}; 用字符串常量,使字符数组初始化:

eg: char c[ ]={“I am happy”};或char c[ ]= “I am happy”;

12.字符数组的输出:

一维:二维:

for(i=0;i<=11;i++)for(i=0;i<=11;i++)

printf(“%c”,c[i]);for(i=0;i<5;i++)

printf(“n”);printf(“%c”,diamond[i][j]);

13.字符数组输出最大值:

eg:if(strcmp(string,str[1]>0)

strcpy(string,str[0]>0);

else

strcpy(string,str[1]);

if(strcmp(str[2],string>0)

strcpy(string,str[2]);

printf(“%s”,string);

第三篇:求解Josephus问题实验总结(用C语言循环单链表实现)

求解Josephus问题实验总结

1实验题目: josephus问题可描述如下:

设有n个人围成一个环,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人从新开始报数,数到第m的人又出列,如此重复,直至所有人均出列为止。求这些人出列的顺序。

2实验目的:

熟练掌握线性表的顺序实现和链式实现的基本操作。

3实验方法:

通过运用已学的向量和循环单链表编写程序,并在电脑上运行,实现josephus问题的求解。4实验过程与结果:

(1)输入n值为6,s值为3,m值为2,输入A[i]的值为1 2 3 4 5 6 输出结 果为:4 6 2 5 3 1 截图如下:

(2)

1、输入n值为-1, s值为3,m值为2,显示:ERROR。截图如下:

2、输入n值为6, s值为0,m值为3,显示:ERROR。截图如下:

3、输入n值为6, s值为3,m值为0,显示:ERROR。截图如下

5试验体会与收获:

(1)写程序是要随时注意缩进,使得程序层次清晰,便于寻找错误,同时也让别人看的更加方便。(2)构造循环单链表,要以单链表为单元指针指向把最后个单元与第一个即可(3)建立好循环单链表后,通过三个指针(p,q,tmp)的指示,来确定报数,出列人的位置,得以完成。具体过程如下:p指向head头指针,通过s次循环将p指向报数的起始位置s,用q记录p的位置,再经过m次循环另p指向出列者的位置,将其数值保存在一维数组中,并将其从链表中删除,p指向下一次起始位置,结束时返回数组A[j]。(4)删除节点时,注意要释放节点。

(5)构造函数时,一定要明确函数的类型,即返回行还是不返回型,以免出现不必要的错误。

下载用C语言的rand和srand产生伪随机数的方法总结word格式文档
下载用C语言的rand和srand产生伪随机数的方法总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐