C语言

c语言随机数生成函数和时间函数

时间:2024-10-28 22:39:11 C语言 我要投稿
  • 相关推荐

c语言随机数生成函数和时间函数

  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语言随机数生成函数和时间函数】相关文章:

C语言中isalnum()函数和isalpha()函数的对比10-12

C语言函数的递归和调用08-22

c语言数学函数的介绍10-20

C语言函数递归教程09-25

C语言函数的递归调用08-26

C语言函数的参数和返回值09-14

C语言函数参数传递问题10-17

C语言中strpbr()函数的用法07-25

c语言中time函数的用法08-27

如何快速掌握C语言函数08-23