`

利用静态变量写随机函数

 
阅读更多

 源自:《C Primer Plus》第五版p335

在这个随机函数使用了一个具有内部链接的静态变量。ANSI C程序库提供了rand()函数来产生随机数。有多种产生随机数的算法,ANSI C标准允许C实现使用针对特定机器的最佳算法,不过,ANSI C也提供了一个可移植的标准算法,可以在不同系统中产生随机数。事实上,rand()是一个”伪随机数发生器“,这意味着可以预测数字的实际顺序(计算机不具有自发性),但这些数字在可能的取值范围内均匀分布。

 

s_and_r.cpp程序

 

/*s_and_r -- 包含函数rand1()和srand1()*/
/*		使用ANSI C的可移植算法	*/
static unsigned long int next = 1; //种子
int rand1(void)
{
	//产生伪随机数的魔术般的公式
	next = next * 1103515245 + 12345;
	return (unsigned int) (next/65535) % 32768;
}
void srand1(unsigned int seed)
{
	next = seed;    
}

 

 r_drive1.cpp程序

 

//r_drive1.cpp --测试函数rand1()和srand1()函数
/*与s_and_r.cpp一起编译 */

#include<stdio.h>
//#include<time.h>
extern void srand1(unsigned int x);   //声明外部函数
extern int rand1(void);

int main(void)
{
	int count;
    unsigned int seed;

	printf("enter seed:\n");
	while(scanf("%d",&seed) == 1)
	{
		srand1(seed);     //设置种子
		for(count =0; count < 5;count++)
			printf("%d\n",rand1());    //输入随机数
		printf("next feed(q to quit):\n");
	}
	/*srand1((unsigned int) time(0));   //以系统时间作为种子,每次得到的随机数不一样
    printf("%d\n",rand1());*/
	return 0;
}

 

 运行结果:

 

enter seed:

1

16838

5759

10114

17516

31052

next feed(q to quit):

45

4060

2673

15646

11658

30980

next feed(q to quit):

q

请按任意键继续. . .

 

说明:rand1()函数可得到一个在0到32767范围内的随机数;

 

可以用系统时间来作为种子,则r_drive.cpp可写成如下:

 

//r_drive1.cpp --测试函数rand1()和srand1()函数
/*与s_and_r.cpp一起编译 */

#include<stdio.h>
#include<time.h>     //包含time()函数
extern void srand1(unsigned int x);   //声明外部函数
extern int rand1(void);

int main(void)
{
	
	srand1((unsigned int) time(0));   //以系统时间作为种子,每次得到的随机数不一样
    printf("%d\n",rand1());
	return 0;
} 
 每次运行都会得到以系统时间为种子的随机数。

 

 

0
1
分享到:
评论

相关推荐

    java考试参考题

    #### 一、利用随机函数定义10对(x,y)值,创建Point类实例并排序输出 **知识点1:Point类的设计与实现** 1. **属性设计**: `Point` 类中定义了两个整型变量 `x` 和 `y` 分别表示坐标点的 x 坐标和 y 坐标,以及一个...

    易语言源码实现易语言类静态数据成员的方法.rar

    2. **初始化静态数据成员**:静态数据成员不能在类的构造函数中初始化,而需要在类外单独进行初始化。例如: ```易语言 类名.变量名 = 值 ``` 这里的`值`是静态数据成员的初始值。 3. **访问静态数据成员**:...

    最大度二元约束满足问题粒子群算法.pdf

    总结来说,最大度二元约束满足问题粒子群算法是一种利用变量度数信息优化粒子群优化策略的方法,它通过静态变量排序策略改进了传统PSO的适应度函数,使得算法在解决CSP问题时能够更高效地寻找全局最优解,特别是在...

    2C++函数习题答案[参考].pdf

    13. **全局静态变量**:全局静态变量只在其定义的源文件中可见,生命周期贯穿整个程序,但只在第一次定义时初始化为0。 14. **函数重载**:函数重载用于提供相同功能的不同实现,通过参数类型或数量区分。调用时,...

    华电电力系统自动化调自动化静态状态估计PPT学习教案.pptx

    对于连续型和离散型随机变量,其数学期望分别通过积分和求和来计算,而方差则表示随机变量的波动程度。在状态估计中,这些统计特性用于评估和处理测量数据的不确定性,确保估计结果的稳定性和准确性。 方差和协方差...

    利用子集模拟进行系统和静态可靠性分析,子集模拟优化算法.zip

    本资源包“利用子集模拟进行系统和静态可靠性分析,子集模拟优化算法.zip”包含了与这一主题相关的MATLAB代码,适用于系统可靠性分析和结构优化。以下是关于子集模拟、可靠性分析和MATLAB实现的详细解释。 子集模拟...

    用java编的n多代码

    1. **基础语法**:Java是一种静态类型的语言,每个变量都需要声明其类型。它使用`public`, `private`, `protected`等访问修饰符来控制类和方法的访问权限。例如,`main`方法是Java程序的入口点,其定义格式为`public...

    我写的一些趣味c程序

    静态变量在函数调用结束后仍然保留其值,这在某些特定情况下非常有用,例如在需要跨函数调用保持状态的场景中。 ### 3. 指针与动态内存分配 第三个代码片段涉及指针和动态内存分配,这是C语言中较为高级的主题。...

    自动+手动内存分配软件

    首先,全局/静态存储区是程序执行时存储全局变量和静态变量的区域。这些变量在整个程序执行期间都存在,即使函数调用结束,它们也不会消失。在C语言中,全局变量有初始化和未初始化之分,它们分别存储在不同的内存段...

    C语言程序设计(谭浩强)第三版

     8.5.2用函数指针变量调用函数  8.5.3怎样定义和使用指向函数的指针变量  8.5.4用指向函数的指针作函数参数  8.6返回指针值的函数  8.7指针数组和多重指针  8.7.1什么是指针数组  8.7.2指向指针数据的指针  ...

    C程序设计(第四版)学习辅导【谭浩强】

    8.5.2用函数指针变量调用函数268 8.5.3怎样定义和使用指向函数的指针变量270 8.5.4用指向函数的指针作函数参数272 8.6返回指针值的函数276 8.7指针数组和多重指针279 8.7.1什么是指针数组 279 8.7.2指向指针数据的...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    6.5.1 用函数指针变量调用函数 6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    6.5.1 用函数指针变量调用函数 6.5.2 用指向函数的指针作函数参数 6.6 返回指针值的函数 6.7 指针数组和指向指针的指针 6.7.1 指针数组的概念 6.7.2 指向指针的指针 6.8 有关指针的数据类型和指针运算的小结 6.8.1 ...

    基于PHP的SK动漫伪静态缓存开源php版源码.zip

    【描述】中的"基于PHP的SK动漫伪静态缓存开源php版源码.zip"进一步强调了这个系统是专门为动漫网站设计的,它利用PHP的特性来处理动态内容并将其缓存为静态页面。这可能是通过一种自定义的路由机制或URL重写规则来...

    华电电力系统自动化第16讲调度自动化(2)静态状态估计2022优秀文档.ppt

    在数学基础上,静态状态估计涉及矩阵的微分运算和随机变量的数字特征。矩阵的导数定义了矩阵函数的变化率,这对于建立目标函数和寻找最小值至关重要。随机变量的数字特征,如数学期望、方差和协方差,被用来量化数据...

    APT高级漏洞利用技术

    - **Fuzzing技术**:通过向目标应用输入大量的随机数据,检测应用程序的异常行为。 - **污点分析**:跟踪数据流,检测不安全的数据处理方式。 - **补丁比对技术**:对比不同版本之间的代码差异,寻找可能导致漏洞...

    利用Python进行数据分析 原书第2版_python_数据分析_

    1. Python基础:书中首先介绍了Python的基础语法,包括变量、数据类型(如列表、元组、字典、集合)、流程控制(如if语句、for循环、while循环)以及函数和模块的使用,这些都是进行数据分析的基础。 2. NumPy库:...

    cpp-从静态分析工具和调试器中混淆windowsapis

    3. **代码混淆**:使用各种混淆技术,如控制流扁平化、变量混淆、字符串加密等,使得静态分析工具难以解析函数逻辑。这可以防止反编译器直接看出API调用。 4. **随机化API名称**:为API函数调用创建别名,使得分析...

    华电电力系统自动化第16讲调度自动化2静态状态估计2022优秀文档.ppt

    静态状态估计通过利用量测系统的冗余信息来提高数据的精度,从而降低测点安装的成本。 在数学基础上,涉及到了矩阵的微分运算。矩阵的导数定义和性质被详细阐述,包括函数矩阵的导数、矩阵的乘积规则以及对称矩阵的...

Global site tag (gtag.js) - Google Analytics