当前位置:首页 » 编程语言 » C语言线性同余法格式
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言线性同余法格式

发布时间: 2022-08-14 22:10:01

㈠ 线性同余法(或者称混合同余数法)的递推同余式

线性同余法(或者称混合同余数法)的递推同余式是
X(i)=λX(i-1)+C (modM) (i=1,2,……n)
λ,C为常数

c语言中rand()%m是啥意思

rand()%m这个函数是随机产生0到m-1的随机数;比如rand()%10就是随机产生0到9的随机数。

拓展资料

使用C语言的rand函数,生成的是伪随机数;

c语言之rand函数的使用

1、写入头文件

生成随机数rand函数的用法:

函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 srand()会导致相同的随机数序列被生成。

srand((unsigned)time(NULL))则使用系统定时/计数器的值做为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到的“随机数”都会是一组固定的序列,因此srand生成的随机数是伪随机数。

㈢ c语言问题,

rand()函数是采用线性同余算法来生成伪随机数序列的,它依赖一个随机种子来计算随机序列的第一个数,如果随机种子是相同的,那么生成的随机序列就是相同的。
srand()函数的作用就是生成随机种子,通常它的参数是time(NULL),表示使用当前系统时间戳(单位为秒)作为随机种子。每次调用srand()都会将随机序列重置,下一次调用rand()将返回随机序列的第一个数。由于程序执行很快,循环在1秒之内就已经完成,time(NULL)每次取到的时间戳都是相同的,srand()自然产生相同的随机序列。下一次调用rand(),总是返回这个序列的第一个数。
而如果将srand()放在循环外,那么srand只会在程序中运行一次,生成一个随机种子。接下来循环调用rand()函数,将根据这个随机种子,不断生成随机序列的下一个数。

㈣ c 语言函数里面有个随即数:rand(),但是总是产生346这个数,怎么办

(1)添加头文件 #include"windows.h"
然后在文件中添加srand((unsigned)GetCurrentTime());或srand((unsigned)GetTickCount());
或者
(2)添加头文件 #include<time.h>
然后在文件中添加 srand((unsigned)time(NULL));
解释:
srand()是用来初始化随机种子数的,因为rand的内部实现是用线性同余法做的,它不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的.

㈤ 线性同余法产生伪随机数流,给定初始值:a=5,c=3,m6,种子值=5,则生成的第一个[0,1]区

咨询记录 · 回答于2021-10-11

㈥ C++产生随机数的程序

r = 2053.0 * r + 13849.0; //这是两个有个是素数吧 应该是的 2053就是
//质因数分解13849=11*1259
//那么这两个素数的公倍数大于65535吧
//而65535是unsigned short两个字节吧
//这样递归 乘开后就能分散到(低2字节)所有0-65536的数字

这个随机产生办法的灵魂就在这句了:r = 2053.0 * r + 13849.0

其实就是《线性同余法》 产生的随机数
线性同余法:一般递推公式为:Xn = (a*X(n-1) + c)%M Rn = Xn/M
其中M为模数,a为常子(乘数),c为增量(加数),且均为非负整数.

给定一组参数,就可以得到一列数,它是否具有类似于均匀随机变量的独立抽样序列的性质,与这些参数的选择有关.例如,用下面的递推公式产生的随机数就是比较好的随机数:
a=235 c=0 M=0xFFF-21 种子x0小于M就行

s = (int)(r / 65536.0); //取整 得到高字(高2字节)部分的整数
r = r - s * 65536.0; //去掉高字(高2字节)部分的整数 不细讲 分解就知道 明显
其实你会发现 上面3句后 s和r仍然为整数 下面假定r, s是unsigned int了

改写上面两句,就容易理解了:(去掉乘除法, 速度还能快一点)
r = r & 0xFFFF; //(一个语句解决,看明白了吧) r的值在0-65536之间

rnd = r / 65536.0; //65536.0使除法不进行整数除法 rnd是0和1之间 由上面一看就知道了

程序好一点的写法:

float MyRand(unsigned int seed=1)
{
static unsigned int _seed = seed& 0xFFFF; //第一次初始化种子
_seed = (2053 * _seed + 13849) & 0xFFFF;
return (float)_seed / (float)(0xFFFF);
}

就这样吧

㈦ C语言所有语句格式

循环结构是程序中一种很重要的结构。其特点是, 在给定条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。 C语言提供了多种循环语句,可以组成各种不同形式的循环结构。

while语句

while语句的一般形式为: while(表达式)语句; 其中表达式是循环条件,语句为循环体。
while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。其执行过程可用图3—4表示。 统计从键盘输入一行字符的个数。
#include <stdio.h>
void main(){
int n=0;
printf("input a string:\n");
while(getchar()!='\n') n++;
printf("%d",n);
}
本例程序中的循环条件为getchar()!='\n',其意义是, 只要从键盘输入的字符不是回车就继续循环。循环体n++完成对输入字符个数计数。从而程序实现了对输入一行字符的字符个数计数。
使用while语句应注意以下几点:
1.while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
while (n--)
printf("%d ",a++*2);
}
本例程序将执行n次循环,每执行一次,n值减1。循环体输出表达式a++*2的值。该表达式等效于(a*2;a++)
2.循环体如包括有一个以上的语句,则必须用{}括起来, 组成复合语句。
3.应注意循环条件的选择以避免死循环。
void main(){
int a,n=0;
while(a=5)
printf("%d ",n++);
}
本例中while语句的循环条件为赋值表达式a=5, 因此该表达式的值永远为真,而循环体中又没有其它中止循环的手段, 因此该循环将无休止地进行下去,形成死循环。4.允许while语句的循环体又是while语句,从而形成双重循环。

do-while语句

do-while语句的一般形式为:
do
语句;
while(表达式);
其中语句是循环体,表达式是循环条件。
do-while语句的语义是:
先执行循环体语句一次, 再判别表达式的值,若为真(非0)则继续循环,否则终止循环。
do-while语句和while语句的区别在于do-while是先执行后判断,因此do-while至少要执行一次循环体。而while是先判断后执行,如果条件不满足,则一次循环体语句也不执行。
while语句和do-while语句一般都可以相互改写。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
do printf("%d ",a++*2);
while (--n);
}

在本例中,循环条件改为--n,否则将多执行一次循环。这是由于先执行后判断而造成的。
对于do-while语句还应注意以下几点:
1.在if语句,while语句中, 表达式后面都不能加分号, 而在 do-while语句的表达式后面则必须加分号。
2.do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。
3.在do和while之间的循环体由多个语句组成时,也必须用{}括起来组成一个复合语句。
4.do-while和while语句相互替换时,要注意修改循环控制条件。

㈧ C中,rand()是什么意思,有什么作用

rand()是表示产生随机数的一种函数,多应用于循环语句当中进行判断。

比如说n=rand();

switch(n)

{case1.......

case2......}

这些都是都可能被执行的,因为数字是随机的。

(8)C语言线性同余法格式扩展阅读:

注意

rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种了,为基准以某个递推公式推算出来的一系数,

当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) ,

功能是初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,可以产生可以预见的随机序列。

参考资料来源:rand函数-网络

㈨ (C语言)线性同余产生随机数的问题。 线性同余随机数发生器是按Xn+1 = (aXn+c)%m

这题你可以直接全部算就行了,要记录下每一次算出来的结果,如果算出来的结果是已经产生过的,那就证明陷入循环了,不能产生所以的0~m-1的数,如果全部找到都还没有算出重复的,那就说明可以产生所有数

㈩ C语言中的rand()函数怎么用

rand()

rand()函数用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。

rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)。

在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同。

rand()函数需要的头文件是:<stdlib.h>

rand()函数原型:int rand(void);

使用rand()函数产生1-100以内的随机整数:int number1 = rand() % 100+1。

srand()

srand()函数需要的头文件仍然是:<stdlib.h>

srand()函数原型:void srand (usigned int seed);

srand()用来设置rand()产生随机数时的随机数种子。参数seed是整数,通常可以利用time(0)或getpid(0)的返回值作为seed。

使用rand()和srand()产生1-100以内的随机整数:

srand(time(0));

int number1 = rand() % 100+1。