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函数生产随机数

c语言判断日期-c语言判断电脑系统时间戳

你先要知道,计算机并不能产生真正的随机数。他只是使用你提供的一个初始值,每次对这个值进行一个比较复杂的运算(各种位运算+奇奇怪怪的计算,详情请查阅伪随机算法),意思是计算机的随机数,其实也是可以根据他的随机函数算出来的。。

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)。