版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章日期和時(shí)間處理5.1例題:判斷閏年5.2例題:細(xì)菌繁殖5.3例題:日歷問題5.4例題:瑪雅歷5.5例題:時(shí)區(qū)間時(shí)間的轉(zhuǎn)換判斷閏年判斷某年是否是閏年。公歷紀(jì)年法中,能被4整除的大多是閏年,但能被100整除而不能被400整除的年份不是閏年,如1900年是平年,2000年是閏年。輸入:一行,僅含一個(gè)整數(shù)a(0<a<3000)輸出:一行,如果公元a年是閏年輸出Y,否則輸出N?!痉治觥块c年滿足下列條件之一①能被4整除但不能被100整除的年份(如2008)是閏年;②能被400整除的年份(如2000)也是閏年。(而1900不是閏年)#include<stdio.h>void
main(){
intyear;
scanf("%d",&year);if(year%4==0&&year%100!=0||year%400==0)
printf("YES");elseprintf("NO");}P122-125參考代碼分析//閏年子函數(shù)intf(intyear){if(year%4==0&&year%100!=0||year%400==0)return1;elsereturn0;}細(xì)菌繁殖一種細(xì)菌繁殖是每天成倍增長。例如第一天有10個(gè),第二天就變成20個(gè),第三天變成40個(gè),第四天變成80個(gè)……。現(xiàn)在給出第一天的日期和細(xì)菌數(shù)目,求出到某一天時(shí)細(xì)菌的數(shù)目。輸入:第一行一個(gè)整數(shù)n,表示測(cè)試數(shù)據(jù)的數(shù)目。其后n行每行有5個(gè)整數(shù),整數(shù)之間用一個(gè)空格隔開。第一個(gè)數(shù)表示第一天的月份,第二個(gè)數(shù)表示第一天的日期,第三個(gè)數(shù)表示第一天細(xì)菌的數(shù)目,第四個(gè)數(shù)表示要求的那一天的月份,第五個(gè)數(shù)表示要求的那一天的日期。已知第一天和要求的一天在同一年并且該年不是閏年,要求的一天一定在第一天之后。解題思路:1.輸入兩個(gè)日期及第一天的細(xì)菌數(shù);2.求兩個(gè)日期相差的天數(shù),即它們中間間隔的天數(shù)m;
3.用第一天的細(xì)菌數(shù)乘以2m得到x;4.輸出x細(xì)菌繁殖#include<stdio.h>voidmain(){intdays[12]={31,28,31,30,31,30,31,31,30,31,30,31},n;
scanf("%d",&n);for(inti=0;i<n;i++){intmonth_1,day_1,month_2,day_2,num;
scanf("%d%d%d%d%d",&month_1,&day_1,&num,&month_2,&day_2);
intsum=0;
for(intk=month_1;k<month_2;k++)sum+=days[k-1];sum-=day_1;sum+=day_2;longnNum=num;
for(k=0;k<sum;k++)nNum*=2;
printf("%d\n",nNum);}}思考:如最終細(xì)菌數(shù)超過整數(shù)范圍,如何解決?intsum=day_2-day_1;for(intk=month_1;k<month_2;k++)sum+=days[k-1];日歷問題給定從2000年1月1日(星期六)開始逝去的天數(shù),求出這一天是哪年哪月哪日星期幾。輸入:輸入若干行,每行一個(gè)正整數(shù)(測(cè)試樣例),輸入以-1結(jié)束。輸出:對(duì)每個(gè)測(cè)試樣例,輸出一行,該行包含對(duì)應(yīng)日期和星期幾。格式為“YYYY-MM-DDDayofWeek
”問題解答此題為典型的日期處理程序,編程需要特別細(xì)心,日期處理的程序非常容易出錯(cuò)?;舅悸罚? 確定星期幾:用給定的日期對(duì)7取模確定年;閏年366天,否則365天確定月;每個(gè)月長短不同確定日。日歷問題#include<stdio.h>int
type(int);charweek[7][10]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};intyear[2]={365,366};intmonth[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};inttype(intm)//閏年函數(shù){if(m%4!=0||(m%100==0&&m%400!=0))return0;elsereturn1;}日歷問題voidmain(){intdays,dayofweek;
inti=0,j=0;while(scanf("%d",&days)&&days!=-1){dayofweek=days%7;for(i=2000;days>=year[type(i)];i++)//i為年份
days-=year[type(i)];for(j=0;days>=month[type(i)][j];j++)//j+1為月份
days-=month[type(i)][j];printf("%d-%02d-%02d%s\n",i,j+1,days+1,week[dayofweek]);}}日歷問題瑪雅歷Haab日歷:擁有19個(gè)月,在開始的18個(gè)月,一個(gè)月有20天,月份的名字分別是pop,no,zip,zotz,tzec,xul,yoxkin,mol,chen,yax,zac,ceh,mac,kankin,muan,pax,koyab,cumhu.日期用0到19表示,最后一個(gè)月uayet,只有5天。Tzolkin(holly年)歷,一年被分成13個(gè)不同時(shí)期,每個(gè)時(shí)期有20天,每一天用一個(gè)數(shù)字(1~13)和一個(gè)單詞(imix,ik,akbal,kan,chicchan,cimi,manik,lamat,muluk,ok,chuen,eb,ben,ix,mem,cib,caban,eznab,canac,ahau)共20個(gè)。數(shù)字和單詞各自循環(huán)使用。請(qǐng)編程,將Haab日歷轉(zhuǎn)化成Tzolkin歷?,斞艢vHaab歷每年365天,19個(gè)月用0~18表示。前18個(gè)月20天,第19個(gè)月有5天,19個(gè)月的名字用不同字串表示,日期從0開始。通過月份*20+日期+1計(jì)算某個(gè)月的某一天是當(dāng)年的第幾天。Tzolkin歷一年有260天,每個(gè)日期由數(shù)字和字符串組成。數(shù)字從1~13,有20個(gè)不同的字符串,兩個(gè)部分彼此獨(dú)立。對(duì)于一年中某一天,可分別求出數(shù)字和字符串部分,然后組合。解題思路:首先計(jì)算Haab歷表示的日期是世界開始后的第幾天(假設(shè)是k),然后用k除以260得到Tzolkin歷的年份,再用k對(duì)260取模得到m,用m分別對(duì)13和20取模得到d和s,d和Tzolkin歷中第s個(gè)字符串的組合就是要求的日期。注意:如果把世界的第1天用0表示,第260天用259表示,則用k除以260得到Tzolkin歷的年份,m對(duì)13取模后得到0到12的值,這個(gè)值要加1才能用于表示Tzolkin歷的日期,同時(shí)m對(duì)20取模后得到0~19的數(shù)值,分別表示取20個(gè)字符串中的一個(gè)?,斞艢v#include<stdio.h>#include<string.h>constintNAMELEN=10;charmonth1[19][NAMELEN]
//Haab歷月份
={"pop","no","zip","zotz","tzec","xul",
"yoxkin","mol",
"chen",
"yax","zac",
"ceh","mac","kankin","muan","pax",
"koyab","cumhu","uayet"};charmonth2[20][NAMELEN]//Tzolkin歷={"imix","ik","akbal","kan","chicchan","cimi",
"manik","lamat","muluk","ok",
"chuen",
"eb","ben","ix","mem","cib","caban","eznab”,
"canac","ahau"};瑪雅歷voidmain(){int
nCases,i,m;
scanf("%d",&nCases);
printf("%d\n",nCases);for(i=0;i<nCases;i++){intday,year,dates;charmonth[NAMELEN];
scanf("%d.%s%d",&day,month,&year);
for(m=0;m<19;m++)if(!strcmp(month1[m],month))break;
dates=year*365+m*20+day;
printf("%d%s%d\n",1+dates%13,month2[dates%20],dates/260);
}}時(shí)區(qū)時(shí)間的轉(zhuǎn)換輸入:第一行包含了一個(gè)整數(shù)N,表示有N組測(cè)試數(shù)據(jù)。接下來N行,每一行包括一個(gè)時(shí)間和兩個(gè)時(shí)區(qū)的縮寫,用空格隔開。時(shí)間由標(biāo)準(zhǔn)的a.m/p.m給出。Midnight表示晚上12點(diǎn),noon表示中等12點(diǎn)。輸出:輸入行給出的時(shí)間是在第一個(gè)時(shí)區(qū)中的標(biāo)準(zhǔn)時(shí)間,要求輸出這個(gè)時(shí)間在第二個(gè)時(shí)區(qū)中的標(biāo)準(zhǔn)時(shí)間時(shí)區(qū)時(shí)間的轉(zhuǎn)換要求在兩個(gè)時(shí)區(qū)之間進(jìn)行時(shí)間轉(zhuǎn)換。根據(jù)每個(gè)時(shí)區(qū)與格林威治時(shí)間的轉(zhuǎn)換公式可以推算出兩個(gè)時(shí)區(qū)之間的差。輸入時(shí),除一般時(shí)間表示法:時(shí):分a.m/p.m.之外,要特殊處理noon和midnight;在直接通過格林威治時(shí)間進(jìn)行轉(zhuǎn)換后,要判斷是否超過一天或減少了一天的情況;在輸出時(shí)間時(shí),要對(duì)noon和midnight進(jìn)行特殊處理。解決這個(gè)問題的關(guān)鍵是確定兩個(gè)時(shí)區(qū)之間的時(shí)差。因?yàn)闀r(shí)區(qū)是用字符串形式給出的,所以要先將時(shí)區(qū)對(duì)應(yīng)到該時(shí)區(qū)與格林威治時(shí)間的時(shí)差上。有了每個(gè)時(shí)區(qū)與格林威治時(shí)間的時(shí)差,就可以計(jì)算任意兩個(gè)時(shí)區(qū)之間的時(shí)差。時(shí)區(qū)時(shí)間的轉(zhuǎn)換#include<stdio.h>#include<string.h>int
difference(char*zone1,char*zone2){char*zone[32]={"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","AWST"};floattime[32]={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};
inti,j;for(i=0;strcmp(zone[i],zone1);i++);for(j=0;strcmp(zone[j],zone2);j++);return(int)((time[i]-time[j])*60);//返回兩個(gè)時(shí)區(qū)之間的時(shí)差,單位為分鐘}時(shí)區(qū)時(shí)間的轉(zhuǎn)換voidmain(){int
nCases;
scanf("%d",&nCases);for(inti=0;i<nCases;i++){chartime[9];
inthours,minutes;
scanf("%s",time);switch(time[0]){case'n':hours=12;minutes=0;break;//輸入為nooncase'm':hours=0;minutes=0;break;//輸入為midnightdefault:sscanf(time,"%d:%d",&hours,&minutes);hours%=12;scanf("%s",time);if(time[0]=='p')hours+=12;}chartimezone1[5],timezone2[5];
scanf("%s%s",timezone1,timezone2);
int
newTime;
newTime=hours*60+minutes+difference(timezone2,timezone1);if(newTime<0)newTime+=1440;newTime%=1440;switch(newTime){case0:printf("midnight\n");break;case720:printf("noon\n");break;default:hours=newTime/60;minutes=newTime%60;
if(hours==0)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新能源車輛贈(zèng)予及充電設(shè)施安裝合同3篇
- 中國石化2024年度原料進(jìn)口協(xié)議模板版
- 2025年智能工廠車間場(chǎng)地租賃及維護(hù)服務(wù)合同范本4篇
- 二零二五年院落出租與非物質(zhì)文化遺產(chǎn)保護(hù)合同3篇
- 2025版智能門面房租賃服務(wù)合作協(xié)議4篇
- 2025版海外院校代理傭金合同標(biāo)準(zhǔn)范本4篇
- 二零二五版高速公路監(jiān)控系統(tǒng)光纜安裝合同3篇
- 2025年項(xiàng)目經(jīng)理入職及項(xiàng)目團(tuán)隊(duì)激勵(lì)方案合同3篇
- 現(xiàn)代醫(yī)療技術(shù)下的疾病預(yù)防策略
- 二零二五版美團(tuán)騎手薪酬福利及晉升體系合同4篇
- 【采購管理優(yōu)化探究文獻(xiàn)綜述3000字】
- 《大學(xué)生職業(yè)發(fā)展與就業(yè)指導(dǎo)》課程標(biāo)準(zhǔn)
- 第23課《出師表》課件(共56張)
- GB/T 3953-2024電工圓銅線
- 發(fā)電機(jī)停電故障應(yīng)急預(yù)案
- 接電的施工方案
- 幼兒阿拉伯?dāng)?shù)字描紅(0-100)打印版
- 社會(huì)組織等級(jí)評(píng)估報(bào)告模板
- GB/T 12173-2008礦用一般型電氣設(shè)備
- 新媒體研究方法教學(xué)ppt課件(完整版)
- 2020新版?zhèn)€人征信報(bào)告模板
評(píng)論
0/150
提交評(píng)論