时间戳和随机数的总结以及显示年月日与时间的函数

来源:互联网 发布:淘宝十大男模 编辑:程序博客网 时间:2024/06/07 06:13
    时间戳是指从1970年1月1日到此刻一共的时间秒数。Windows上C库函数time(NULL),产生随机数函数一般是利用时间戳。
    但是首先应该有个概念:计算机不会产生绝对的随机数,计算机只能产生“伪随机数”,“伪”是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的。
    有关时间戳和随机数的函数:
    time(NULL);   时间戳
    srand(time(NULL));设置随机数种子
    rand();
    注意:srand(a) ,它只是定义了一种规则,当a的值确定时,产生的随机数不会发生变化,因为time(NULL)是每一秒在变化的(概念),这也是利用他做产生随机数的原因之一。
    改进:因为time(NULL)的变化周期是1s,所以当产生随机数的周期<1s时,产生的随机数不会发生变化,可以加变量k---->srand(time(NULL)+k++);
    rand()%n+1:产生的随机数范围是1--n;


附自己写的小程序,初学阶段,有很多可以改进和错误的地方望大家指正!!!
实时显示当前年月日及时间,用到 /  %;
注:平年闰年:能被4整除不能被100整除 || 能被400整除 是闰年,2月29天


#include <stdio.h>

#include <time.h>

{
void my_time();
void my_ymd();
void mt_select();
void mt_pmonth();

void mt_rmonth();


int key;

int month1[12]={31,28,31,30,31,30,31,31,30,31,30,31};  //平年
int month2[12]={31,29,31,30,31,30,31,31,30,31,30,31};  //闰年


int main()
{
my_ymd();
my_time();


return 0;
}


void my_ymd()
{
/*time1是当前时间戳,days是1970年一月一日到现在的天数
tyear是年的周期数(平、平、平、闰,1461天一个周期)
dyear是不足一个周期的天数,t_year是1970+周期*4*/


int time1,days,tyear,dyear;
int t_year;


time1=time(NULL);
days=time1/(24*60*60);   //当前时间戳对一天的总秒数去整,得到总天数
tyear=days/1461;         //总天数对1461取整得到周期数
dyear=days%1461;         //得到不足一个周期的天数
t_year=1970+tyear*4;     //当前年份


if(dyear<365)
{
printf("%d年是平年,当前时间是:%d 年 ",t_year,t_year);

key=1;


mt_select(dyear);
}


if(dyear<365+365)
{
t_year+=1;
dyear-=365;

printf("%d年是平年,当前时间是:%d 年 ",t_year,t_year);

key=1;


mt_select(dyear); //将不足一年的天数作为实参传至mt_select函数中
}

if(dyear<365+365+365)
{
t_year+=2;
dyear-=(365+365);

printf("%d年是平年,当前时间是:%d 年 ",t_year,t_year);

key=1;

mt_select(dyear);
}

else
{
t_year+=3;
dyear-=(365+365+365);

printf("%d年是闰年,当前时间是:%d 年 ",t_year,t_year);

key=0;

mt_select(dyear);
}
}

void mt_select(int m)                  //根据平年和闰年选择计算月份的函数
{
switch(key)
{
case 1:mt_pmonth(m);break;   //m接收的dyear,传至sday1
case 0:mt_rmonth(m);break;
}

}


void mt_pmonth(int sday1)              //计算月份,sday1:平年一年内剩的天数
{
int i,temp,nmonth,nday;


for(i=0;i<12;i++)             //对月份的数组相减,得到月份
{
temp=sday1-month1[i];


sday1=temp;

nmonth=i+1;


if(temp<=0)
{
printf("%d月 ",nmonth);

break;
}
}
nday=temp+month1[i];


printf("%d日\n",nday);
}


void mt_rmonth(int sday2)              //计算月份,sday2:闰年一年内剩的天数
{


int i,temp,nmonth,nday;

for(i=0;i<12;i++)
{
temp=sday2-month1[i];

sday2=temp;

nmonth=i+1;


if(temp<=0)
{
printf("%d月 ",nmonth);


break;
}
}
nday=temp+month2[i];


printf("%d日\n",nday);

}


void my_time()
{
int shi,time1,shi1,shi2;
int fen,fen1,fen2,miao,miao1,miao2;


while(1)    //死循环,使不断的获取当前时间戳
{
time1=time(NULL);

shi=time1%(24*60*60)/(60*60)+8;
shi1=shi/10;
shi2=shi%10;


fen=time1%(24*60*60)%(60*60)/60;
fen1=fen/10;
fen2=fen%10;

miao=time1%(24*60*60)%(60*60)%60;
miao1=miao/10;
miao2=miao%10;


printf("%d%d:%d%d:%d%d\r",shi1,shi2,fen1,fen2,miao1,miao2);
}

printf("\n");
}















阅读全文
0 0
原创粉丝点击