第五章 日期和时间处理.ppt_第1页
第五章 日期和时间处理.ppt_第2页
第五章 日期和时间处理.ppt_第3页
第五章 日期和时间处理.ppt_第4页
第五章 日期和时间处理.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 日期和时间处理,5.1 例题:判断闰年 5.2 例题:细菌繁殖 5.3 例题:日历问题 5.4 例题:玛雅历 5.5 例题:时区间时间的转换,判断闰年,判断某年是否是闰年。公历纪年法中,能被4整除的大多是闰年,但能被100整除而不能被400整除的年份不是闰年,如1900年是平年,2000年是闰年。 输入:一行,仅含一个整数a(0a3000) 输出:一行,如果公元a年是闰年输出Y,否则输出N。 【分析】闰年满足下列条件之一 能被4整除但不能被100整除的年份(如2008)是闰年; 能被400整除的年份(如2000)也是闰年。 (而1900不是闰年),#include void main(

2、 ) int year; scanf(%d, ,P122-125 参考代码分析,/闰年子函数 int f ( int year ) if (year%4=0 ,细菌繁殖,一种细菌繁殖是每天成倍增长。例如第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个。现在给出第一天的日期和细菌数目,求出到某一天时细菌的数目。 输入:第一行一个整数n,表示测试数据的数目。其后n行每行有5个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一

3、年并且该年不是闰年,要求的一天一定在第一天之后。 解题思路: 1. 输入两个日期及第一天的细菌数; 2. 求两个日期相差的天数,即它们中间间隔的天数m; 3. 用第一天的细菌数乘以2m得到x; 4. 输出x,细菌繁殖,#include void main( ) int days12=31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,n; scanf(%d, ,思考:如最终细菌数超过整数范围,如何解决?,int sum = day_2 - day_1; for(int k=month_1; kmonth_2; k+) sum+=daysk-1;,日历问

4、题,给定从2000年1月1日(星期六)开始逝去的天数,求出这一天是哪年哪月哪日星期几。 输入:输入若干行,每行一个正整数(测试样例), 输入以-1结束。 输出:对每个测试样例,输出一行,该行包含对应日期和星期几。格式为 “ YYYY-MM-DD DayofWeek ”,问题解答 此题为典型的日期处理程序,编程需要特别细心,日期处理的程序非常容易出错。 基本思路: 确定星期几:用给定的日期对7取模 确定年;闰年366天,否则365天 确定月;每个月长短不同 确定日。,日历问题,#include int type(int ); char week710=Saturday, Sunday, Mond

5、ay, Tuesday, Wednesday, Thursday, Friday; int year2=365,366; int month212=31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31; int type (int m) /闰年函数 if (m%4!=0 | (m%100=0 ,日历问题,void main() int days, dayofweek; int i = 0, j = 0; while (scanf(%d, ,日历问题,玛雅历,Haab日历:拥有19个月,在开始的18个月,

6、一个月有20天,月份的名字分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu. 日期用0到19表示,最后一个月uayet,只有5天。 Tzolkin(holly年)历,一年被分成13个不同时期,每个时期有20天,每一天用一个数字(113)和一个单词(imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, cab

7、an, eznab, canac, ahau)共20个。数字和单词各自循环使用。 请编程,将Haab日历转化成Tzolkin历。,玛雅历,Haab历每年365天,19个月用018表示。前18个月20天,第19个月有5天,19个月的名字用不同字串表示,日期从0开始。通过月份*20+日期+1计算某个月的某一天是当年的第几天。 Tzolkin历一年有260天,每个日期由数字和字符串组成。数字从113,有20个不同的字符串,两个部分彼此独立。对于一年中某一天,可分别求出数字和字符串部分,然后组合。 解题思路:首先计算Haab历表示的日期是世界开始后的第几天(假设是k),然后用k除以260得到Tzolk

8、in历的年份,再用k对260取模得到m,用m分别对13和20取模得到d和s,d和Tzolkin历中第s个字符串的组合就是要求的日期。 注意:如果把世界的第1天用0表示,第260天用259表示,则用k除以260得到Tzolkin历的年份,m对13取模后得到0到12的值,这个值要加1才能用于表示Tzolkin历的日期,同时m对20取模后得到019的数值,分别表示取20个字符串中的一个。,玛雅历,#include #include const int NAMELEN = 10; char month119NAMELEN / Haab历月份 =pop,no,zip,zotz,tzec,xul, yox

9、kin,mol, chen, yax,zac, ceh,mac,kankin,muan,pax, koyab,cumhu,uayet; char month220NAMELEN / Tzolkin历 =imix,ik,akbal,kan,chicchan,cimi, manik,lamat,muluk, ok, chuen, eb,ben,ix,mem,cib,caban,eznab”, canac,ahau;,玛雅历,void main( ) int nCases, i, m; scanf(%d, ,时区时间的转换,输入:第一行包含了一个整数N,表示有N组测试数据。接下来N行,每一行包括一个

10、时间和两个时区的缩写,用空格隔开。时间由标准的a.m/p.m给出。Midnight表示晚上12点,noon表示中等12点。 输出:输入行给出的时间是在第一个时区中的标准时间,要求输出这个时间在第二个时区中的标准时间,时区时间的转换,要求在两个时区之间进行时间转换。根据每个时区与格林威治时间的转换公式可以推算出两个时区之间的差。输入时,除一般时间表示法:时:分a.m/p.m.之外,要特殊处理noon和midnight;在直接通过格林威治时间进行转换后,要判断是否超过一天或减少了一天的情况;在输出时间时,要对noon和midnight进行特殊处理。 解决这个问题的关键是确定两个时区之间的时差。因为

11、时区是用字符串形式给出的,所以要先将时区对应到该时区与格林威治时间的时差上。有了每个时区与格林威治时间的时差,就可以计算任意两个时区之间的时差。,时区时间的转换,#include #include int difference(char* zone1, char* zone2) char *zone32=UTC, GMT,BST,IST,WET,WEST, CET, CEST,EET,EEST,MSK, MSD,AST, ADT,NST, NDT, EST,EDT,CST,CDT,MST, MDT, PST, PDT, HST,AKST, AKDT, AEST, AEDT,ACST,ACDT,

12、 AWST; float time32=0,0,1,1,0,1,1,2,2,3,3,4,-4,-3,-3.5, -2.5,-5,-4,-6,-5,-7, -6,- 8,-7,-10,-9,-8,10, 11,9.5,10.5,8; int i, j; for (i = 0; strcmp(zonei, zone1); i+); for (j = 0; strcmp(zonej, zone2); j+); return (int)(timei - timej) *60); /返回两个时区之间的时差,单位为分钟 ,时区时间的转换,void main() int nCases; scanf(%d,

13、,switch(newTime) case 0 : printf(midnightn); break; case 720: printf(noonn); break; default : hours = newTime / 60; minutes = newTime % 60; if(hours = 0) printf(12:%02d a.m.n, minutes); else if(hours 12) printf(%d:%02d a.m.n, hours, minutes); else if(hours = 12) printf(12:%02d p.m.n, minutes); else printf(%d:%02d p.m.n, hours%12, minutes); ,时区时间的转换,实验题(九),求天数。输入年份、月份和日期,输出这一日期是该年份的第几天。例如:2003年10月8日是该年的第281天。 输入两个日期(年、月和日),求这两个日期相差的天数 不吉利的日期。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论