c语言随机数生成函数和时间函数
c语言是编程常用的语言之一。c语言随机数生成函数和时间函数是如何生成的呢?下面是整理的c语言随机数生成函数和时间函数,仅供参考,希望能够帮助到大家。
一 随机数生成函数(rand,srand)
1)首先,随机数在stdlib.h定义了一个RAND_MAX的宏#define RAND_MAX 0x7fff,也就是不调用srand,只进行rand的话,返回一个[0,32767]的数(闭区间)。
2)随机数种子
void srand(unsigned seed);
如果在rand()前没有调用它,会自动调用一次srand(1)一次。但seed就成了定值,每次运行程序时,产生的随机数都会相同(这个值在[seed,0x32767]之间)。
例如:
#include
#include
int main()
{
int i,j;
i = rand();
j = rand();
printf("%d %d ",i,j);
return 0;
}
这个程序每次结果都是:14 18767
所以一般用一个变量作为seed,一般用到目前为止流逝的时间。
即srand((unsigned int)time(NULL));
3)随机数范围
rand()返回一个0~RAND_MAX的随机数,一般这个不是你想得到的数据范围,需要进行调整,比较常用的是'%'和'/'操作,如果需要一个0~100的'随机数那么就rand()0好了,很容易理解。如果你需要一个浮点数,可以考虑用除法,注意运算时的数据转换操作,rand()返回的是整数,RAND_MAX也是整数,如果你想得到一个0到1的浮点数,你这样写rand()/RAND_MAX你就大错特错了,这样的结果是0,原因仔细想想也很简答,基本的C语言运算数据类型提升问题,小数部分的尾巴取整的时候舍掉了,解决方法也很简单rand()/(RAND_MAX-0.0),一个产生指定范围随机数的函数大概是这样的:
srand((unsigned int)time(0));
double randval(double low, double high)
{
double val;
val = ((double)(rand()/(RAND_MAX-0.0))*(high - low)) + low;
return(val);
}
c语言中的时间函数:
#include
time_t time(time_t *t);
返回:成功饭后1970年1月1日到现在的所经历的秒数,若t为非空指针,此函数也将返回值存放在t所指向的内存中,失败返回(time_t -1)值,错误在errno中。
例如:
#include
#include
int main()
{
int seconds = time(NULL);
printf("%d ",seconds);
return 0;
}
这个返回的是秒数而不是正常日期,所以有下面的函数。
#include
char* ctime(const time_t *timep);
返回值:返回正常日期格式的字符串。
这个函数是将timep中存放的time_t类型的变量转换成真实世界的使用的日期表达,然后以字符串形式返回,例如::Wed Jun 30 21:48:09 1999
#include
#include
#include
int main()
{
time_t tm;
tm = time(0);
char *s;
s = ctime(&tm);
printf("%s ",s);
}
拓展:C语言基本算法
1.交换(两量交换借助第三者)
例1、任意读入两个整数,将二者的值交换后输出。
main()
{int a,b,t;
scanf("%d%d",&a,&b);
printf("%d,%d ",a,b);
t=a; a=b; b=t;
printf("%d,%d ",a,b);}
【解析】程序中加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。
假设输入的值分别为3、7,则第一行输出为3,7;第二行输出为7,3。
其中t为中间变量,起到“空杯子”的作用。
注意:三句赋值语句赋值号左右的各量之间的关系!
【应用】
例2、任意读入三个整数,然后按从小到大的顺序输出。
main()
{int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b){ t=a; a=b; b=t; }
if(a>c){ t=a; a=c; c=t; }
if(b>c) { t=b; b=c; c=t; }
printf("%d,%d,%d ",a,b,c);}
2.累加
累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为0。
例1、求1+2+3+……+100的和。
main()
{int i,s;
s=0; i=1;
while(i<=100)
{s=s+i;
i=i+1;
}
printf("1+2+3+...+100=%d ",s);}
【解析】程序中加粗部分为累加式的典型形式,赋值号左右都出现的变量称为累加器,其中“i = i + 1”为特殊的累加式,每次累加的值为1,这样的累加器又称为计数器。
3.累乘
累乘算法的要领是形如“s=s*A”的累乘式,此式必须出现在循环中才能被反复执行,从而实现累乘功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为1。
例1、求10!
[分析]10!=1×2×3×……×10
main()
{int i; long c;
c=1; i=1;
while(i<=10)
{c=c*i;
i=i+1;
}
printf("1*2*3*...*10=%ld ",c);}
转载请注明出处学文网 » c语言随机数生成函数和时间函数