C语言中随机函数应用

可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。那么怎么实现C语言中的随机函数呢?

除了random函数,还有一个rand函数,也是一个随机函数,可以产生从0到rand_max的随机数。

#include <stdio.h>
#include <stdlib.h>
int main()
{
int k;
k=rand();
printf("%d\n", k);
return 0;
}

大家可以把以上的代码编译运行一下,发现他的确产生随机数了,但是你会发现,每次运行程序产生的随机数都是一样的,为什么呢?因为随机数取在C语言中采用的是固定序列,所以每次执行所取的是同一个数。

那么如何写一个程序,让它每次运行时产生的随机数都不一样呢? 请看下面的例子:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Ten random numbers from 0 to 99\n\n");
for (i=0; i<10; i++)
printf("%d\n", rand()%100);
return 0;
}

这时运行程序,会发现每次产生的随机数都不一样。

那么为什么第一个程序一样而第二个程序不一样呢?

第二个程序用到了一个新的函数srand,这个函数是给随机数产生一个随机种子(seed),函数原型是srand( (unsigned) time(NULL));

time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。

所以说,要想产生不同的随机数,在使用rand之前需要先调用srand

由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?

从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:

k=rand()%(Y-X+1)+X;

这样,就可以产生你想要的任何范围内的随机数了。

时间: 2024-12-29 11:49:00

C语言中随机函数应用的相关文章

c语言中 基于随机函数的使用详解_C 语言

在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a). 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,

c语言-C语言中如何产生随机数

问题描述 C语言中如何产生随机数 C语言中如何产生两数之间的随机数,具体代码和函数说明...................... 解决方案 int value = rand() % (MAX + 1 - MIN) + MIN; 产生min~max之间的随机数 解决方案二: C语言中如何产生两数之间的随机数,如:产生从min~max之间的数 头函数:include include 实现代码:int rand=min+rand()%(max+1-min): 说明: rand() :该函数随机产生非

C语言中用于产生随机数的函数使用方法总结_C 语言

在UNIX操作系统和window的操作系统上,我们知道有一个函数rand,它就是用来产生随机数的函数API接口,那么它的原理如何实现? 如果约定a1=f(seed),an+1=f(an),那么可以得到一个序列a1,a2,a3..an,那么要制作一个伪随机函数rand,只需要让它每调用一次就返回序列的下一个元素就行.其实就是相当于第1次调用rand返回a1,第2次返回a2,-,第n次返回an,这样每次返回的数值都不一样,也就是相当于随机数了.但是其实不是真正的随机数,真正的随机数是使用物理现象产生

指针-c语言中字符数组初始化问题

问题描述 c语言中字符数组初始化问题 字符数组初始化1: char str[]=""123"";//不报错2: char str[4]; str=""123"";//不能将const char[4] to char[4]字符指针初始化1: char *str=""123"";//不报错2: char *str; str=""123"";//不报错求

c语言中 如何让7/3的结果输出2.3

问题描述 c语言中 如何让7/3的结果输出2.3 c语言中 如何让7/3的结果输出2.3.初学者求教 在线等 解决方案 #include <stdio.h> int main() { printf("%.1f",7/(float)3); } 解决方案二: printf("%.1f", 1.0 * 7 / 3); 解决方案三: printf("%f",((float)7/3)); 解决方案四: printf("%.2f&quo

c语言中怎么把一个大小不确定的二维数组当作参数传入函数中

问题描述 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中,取大神,取大神,取大神 解决方案 用VC++新建一个程序,默认生成的main函数定义如下 int mian(int argc, char* args[]) 这就是一个例子. 解决方案二: 一个表示长度的参数,一个指向二维数组的指针 解决方案三: fun(args[][],int rows,int cols) 解决方案四: void Func(int array[][10]

java ee-请问javaee语言中如何用eclipse判断读取的邮箱的有效性?代码怎么写?

问题描述 请问javaee语言中如何用eclipse判断读取的邮箱的有效性?代码怎么写? 请问javaee语言中如何用eclipse判断读取的邮箱的有效性?代码怎么写? 解决方案 http://blog.sina.com.cn/s/blog_4b5bc011010156bm.html 解决方案二: 直接用正则表达式,,判定是否符合格式要求就行了 解决方案三: 具体怎么做?有没有案列 解决方案四: 不是自己写个正则表达式?

Java语言中字符的处理

山西省网络管理中心任军 ----摘要:本文主要讨论了Java语言中字符的特殊表达形式,尤其是中文信息的表达处理,阐述了字符处理的关键是要将十六位Unicode字符,转换为本地下层平台,也就是运行Java虚拟处理机的平台能够理解的字符形式. ----关键词:Java.字符.8位.16位.Unicode字符集 ----Java是一种编程语言.一个运行系统.一套开发工具和一个应用程序编程界面(API).Java建立在C++的熟悉.有用的特征之上,而取消了C++的复杂的.危险的和多余的元素.它是一个更安

Java语言中链表和双向链表的实现

链表是一种重要的数据结构,在程序设计中占有很重要的地位.C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构.Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点. class Node { Object data; Node next;//指向下一个结点 } 将数据域定义成Object类是因为