c语言判断日期-c语言判断电脑系统时间戳
1.c语言编程有个地方不会?怎么用srand和time函数生产随机数
2.c语言time(0)转换为当前时间问题。
3.C语言编程10年1月1日0时0分0秒,输入N秒,要求打印X年X月X日X时X分X秒.
4.C语言 如何把64位时间戳转换成能看得懂的时间 (只有stdio。h 头文件 C语言自己实现方法。)
5.C语言里面怎样测出程序运算的时间?
c语言编程有个地方不会?怎么用srand和time函数生产随机数
你先要知道,计算机并不能产生真正的随机数。他只是使用你提供的一个初始值,每次对这个值进行一个比较复杂的运算(各种位运算+奇奇怪怪的计算,详情请查阅伪随机算法),意思是计算机的随机数,其实也是可以根据他的随机函数算出来的。。
srand()函数是添加随机数,其实就是设置这个初始值,如果不要这个函数的话,rand()函数生成的序列是固定的。为了保证每次随机值都尽量不同,一般取系统当前时间戳作为随机函数,这样效果较好,于是就有了你看到的代码srand(time(NULL))
rand()函数是取随机值。有了随机之后,每次调用rand函数会生成一个范围在0到MAX_RAND的随机值。MAX_RAND这是个宏,在不同的IDE里面有不同的定义,在我的VS2012里面,他等于0x7fff。
意思是rand()函数每次生成的随机数范围在0到0x7fff之间。
看你的代码应该是要叫人猜计算机生成的随机数,如果这个范围过大,就没什么意思了,我就设你需要的随机数是0到9之间的吧。那么你生成随机数的代码就应该是:
rand()%10;
我不是很清楚你的代码到底要表达什么,我自己随便写了一份参考代码:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int
ReadInt()
{
int
MyRand;
printf("please
guess
a
number,
range(0~9):");
scanf("%d",&MyRand);
return
MyRand;
}
int
main()
{
int
MyRand;
srand(time(NULL));
while(true)
{
int
x=rand()%10;
MyRand=ReadInt();
if(MyRand==x)
{
printf("you
win!\n");
break;
}
else
{
printf("you
guess
wrong!
you
guess:%d
but
the
answer
is:%d
now\nplease
try
again\n",MyRand,x);
}
}
return
0;
}
c语言time(0)转换为当前时间问题。
比如说当前time(0)获得的时间戳是“2013-11-10 18:15:30”的秒数,那么解释如下:
秒:对time(0)取余60的秒数就是当前的秒数,即获得秒数为30秒
分:对time(0)取余3600的秒数就是当前的分钟,此时取余3600结果为:15分钟*60秒+30秒,
若要得到分钟,那么将取余3600的结果除以60即可得出分钟,即获得的分钟数为15
时:对time(0)取余(3600*24),可获得今日零点到当前的秒数,这个秒数化为小时则要除以3600秒
是0时区的小时数,我们北京时间所在的是东8区,所以要加上8个小时(注:比如当前的零时
区时间是19点,加上8个小时就是27,此时想获得北京时间那么就得取余24,此时是北京时
间3点)
希望这么解释能让你明白!
C语言编程10年1月1日0时0分0秒,输入N秒,要求打印X年X月X日X时X分X秒.
#include <stdio.h>
#include <time.h>
void main()
{
time_t time_last;
time_last = time(NULL);
printf("%ld\n",time_last); //得到10年到现在的秒数
unsigned long v;
while(1) //方便测试,一直可以输入
{
scanf("%ld",&v);
v = v+60*60*8; //我们位于东八区
int d = v/(60*60*24)+1; //得到距离10年1月1日到输入秒数的天数
int n = (d+671)/1461; //求中间过了多少个2月29日
int year = (d-n)/365+10; //得到年份
if((d-n)%365 == 0)
{
year = year -1;
}
int m[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //定义月份天数表
if((year%400==0)||(year%4==0&&year%100!=0)) //判断平年闰年
{
m[2] = 29;
}
else
{
m[2] = 28;
}
int i;
int da = d - (d-n)/365*365-n; //减去该年前的前天,得到该年的第几天
int month,day;
for(i=0;i<12;i++)
{
if(da > m[i])
{
da = da - m[i]; //让天数减去每月的天数
}
if(da == 0)
{
month = i+1;
day = m[i+1];
}
if(da <= m[i+1] && da != 0) //如果得到小于或等于该月的天数,则可以确定为哪一天
{
month = i+1;
day = da;
break; //确定之后跳出循环
}
}
printf("%d-%d-%d\n",year,month,day);
int hour,minute,second;
hour = v%(3600*24)/3600;
minute = v%3600/60;
second = v%60;
printf("%d:%d:%d\n",hour,minute,second);
}
}
C语言 如何把64位时间戳转换成能看得懂的时间 (只有stdio。h 头文件 C语言自己实现方法。)
#include?<stdio.h>
typedef?long?long?int?time64;
/*?
将64位时间戳转化为时间数组?
*/?
void?transformToDate(time64?timeStamp?,time64?**dateArry)
{?
time64?low?,high?,mid?,t;?
time64?year?,month?,day?,hour?,minute?,second?,milliSecond;?
time64?daySum[]?=?{0?,31?,59?,90?,120?,151?,181?,212?,243?,273?,304?,334?,365};?
time64?milOfDay?=?24?*?3600?*?1000;?
time64?milOfHour?=?3600?*?1000;?
/*防止超过9999-12-31?23:59:59:999*/?
if(timeStamp?>?3155378599999)?{?
timeStamp?=?3155378599999;?
}?
low?=?1;?
high?=?9999;?
while(low?<=?high)?
{?
mid?=?(low+high)>>1;?
t?=?((mid-1)?*?365?+?(mid-1)/4?-?(mid-1)/100?+?(mid-1)/400)?*?milOfDay;?
if(t?==?timeStamp)?
{?
low?=?mid?+?1;?
break;?
}?
else?if(t?<?timeStamp)?
low?=?mid?+?1;?
else?
high?=?mid?-?1;?
}?
year?=?low-1;?
timeStamp?-=?((year-1)?*?365?+?(year-1)/4?-?(year-1)/100?+?(year-1)/400)?*?milOfDay;?
int?isLeapYear?=?((year&3)?==?0?&&?year%100!=0)?||?year%400?==?0;?
for(month?=?1?;(daySum[month]?+?((isLeapYear?&&?month?>?1)1?:?0))?*?milOfDay?<=?timeStamp?&&?month?<?13?;month?++)?{?
if(isLeapYear?&&?month?>?1)?
++daySum[month];?
}?
timeStamp?-=?daySum[month-1]?*?milOfDay;?
day?=?timeStamp?/?milOfDay;?
timeStamp?-=?day?*?milOfDay;?
hour?=?timeStamp?/?milOfHour;?
timeStamp?-=?hour?*?milOfHour;?
minute?=?timeStamp?/?60000;?
timeStamp?-=?minute?*?60000;?
second?=?timeStamp?/?1000;?
milliSecond?=?timeStamp?%?1000;?
*dateArry[0]?=?year;?
*dateArry[1]?=?month;?
*dateArry[2]?=?day;?
*dateArry[3]?=?hour;?
*dateArry[4]?=?minute;?
*dateArry[5]?=?second;?
*dateArry[6]?=?milliSecond;?
}
//将64位时间戳转化为时间字符串
void?transformToDateString(time64?timeStamp?,char?*dateString)?
{?
time64?year?,month?,day?,hour?,minute?,second?,milliSecond;?
time64?*intp[]?=?{&year?,&month?,&day?,&hour?,&minute?,&second?,&milliSecond?};?
transformToDate(timeStamp?,intp);?
sprintf(dateString?,"%.4I64d-%.2I64d-%.2I64d?%.2I64d:%.2I64d:%.2I64d:%.3I64d"?,?
year?,month?,day+1?,hour?,minute?,second?,milliSecond?);?
}
int?main()
{
time64?time;
char?date[256];
scanf("%lld",&time);
transformToDateString(time,date);
printf("date=?%s\n",date);
return?0;
}
示例运行结果:
63510000999140
date= 2013-07-21 10:56:39:140
C语言里面怎样测出程序运算的时间?
#include <time.h>
#include <stdio.h>
int main()
{
//...
double Times = clock() / (double)(CLOCKS_PER_SEC);
printf("%.2lf\n",Times);
//...
return 0;
}
简单地说,就是使用time.h库中的clock()函数。
具体讲,程序中的clock()函数在time.h中声明,每次调用它,返回程序自开始运行至此经历的时间,单位是(1/CLOCKS_PER_SEC)秒,CLOCKS_PER_SEC是在time.h中声明的一个常数,在Windows环境下,它的值是1000,也就是说若程序执行了1.5s,调用clock()函数会返回1500;在Linux或Unix环境下,它的值是1000000,即此时clock()函数会返回1500000,为了增强程序的可移植性,故通用写法为clock() / (double)(CLOCKS_PER_SEC)。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。