版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第五章日期和時間處理5.1例題:判斷閏年5.2例題:細菌繁殖5.3例題:日歷問題5.4例題:瑪雅歷5.5例題:時區(qū)間時間的轉(zhuǎn)換判斷閏年判斷某年是否是閏年。公歷紀年法中,能被4整除的大多是閏年,但能被100整除而不能被400整除的年份不是閏年,如1900年是平年,2000年是閏年。輸入:一行,僅含一個整數(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;}細菌繁殖一種細菌繁殖是每天成倍增長。例如第一天有10個,第二天就變成20個,第三天變成40個,第四天變成80個……。現(xiàn)在給出第一天的日期和細菌數(shù)目,求出到某一天時細菌的數(shù)目。輸入:第一行一個整數(shù)n,表示測試數(shù)據(jù)的數(shù)目。其后n行每行有5個整數(shù),整數(shù)之間用一個空格隔開。第一個數(shù)表示第一天的月份,第二個數(shù)表示第一天的日期,第三個數(shù)表示第一天細菌的數(shù)目,第四個數(shù)表示要求的那一天的月份,第五個數(shù)表示要求的那一天的日期。已知第一天和要求的一天在同一年并且該年不是閏年,要求的一天一定在第一天之后。解題思路:1.輸入兩個日期及第一天的細菌數(shù);2.求兩個日期相差的天數(shù),即它們中間間隔的天數(shù)m;
3.用第一天的細菌數(shù)乘以2m得到x;4.輸出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);}}思考:如最終細菌數(shù)超過整數(shù)范圍,如何解決?intsum=day_2-day_1;for(intk=month_1;k<month_2;k++)sum+=days[k-1];日歷問題給定從2000年1月1日(星期六)開始逝去的天數(shù),求出這一天是哪年哪月哪日星期幾。輸入:輸入若干行,每行一個正整數(shù)(測試樣例),輸入以-1結(jié)束。輸出:對每個測試樣例,輸出一行,該行包含對應日期和星期幾。格式為“YYYY-MM-DDDayofWeek
”問題解答此題為典型的日期處理程序,編程需要特別細心,日期處理的程序非常容易出錯?;舅悸罚? 確定星期幾:用給定的日期對7取模確定年;閏年366天,否則365天確定月;每個月長短不同確定日。日歷問題#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個月,在開始的18個月,一個月有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天,每一天用一個數(shù)字(1~13)和一個單詞(imix,ik,akbal,kan,chicchan,cimi,manik,lamat,muluk,ok,chuen,eb,ben,ix,mem,cib,caban,eznab,canac,ahau)共20個。數(shù)字和單詞各自循環(huán)使用。請編程,將Haab日歷轉(zhuǎn)化成Tzolkin歷?,斞艢vHaab歷每年365天,19個月用0~18表示。前18個月20天,第19個月有5天,19個月的名字用不同字串表示,日期從0開始。通過月份*20+日期+1計算某個月的某一天是當年的第幾天。Tzolkin歷一年有260天,每個日期由數(shù)字和字符串組成。數(shù)字從1~13,有20個不同的字符串,兩個部分彼此獨立。對于一年中某一天,可分別求出數(shù)字和字符串部分,然后組合。解題思路:首先計算Haab歷表示的日期是世界開始后的第幾天(假設是k),然后用k除以260得到Tzolkin歷的年份,再用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取模后得到0~19的數(shù)值,分別表示取20個字符串中的一個。瑪雅歷#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);
}}時區(qū)時間的轉(zhuǎn)換輸入:第一行包含了一個整數(shù)N,表示有N組測試數(shù)據(jù)。接下來N行,每一行包括一個時間和兩個時區(qū)的縮寫,用空格隔開。時間由標準的a.m/p.m給出。Midnight表示晚上12點,noon表示中等12點。輸出:輸入行給出的時間是在第一個時區(qū)中的標準時間,要求輸出這個時間在第二個時區(qū)中的標準時間時區(qū)時間的轉(zhuǎn)換要求在兩個時區(qū)之間進行時間轉(zhuǎn)換。根據(jù)每個時區(qū)與格林威治時間的轉(zhuǎn)換公式可以推算出兩個時區(qū)之間的差。輸入時,除一般時間表示法:時:分a.m/p.m.之外,要特殊處理noon和midnight;在直接通過格林威治時間進行轉(zhuǎn)換后,要判斷是否超過一天或減少了一天的情況;在輸出時間時,要對noon和midnight進行特殊處理。解決這個問題的關(guān)鍵是確定兩個時區(qū)之間的時差。因為時區(qū)是用字符串形式給出的,所以要先將時區(qū)對應到該時區(qū)與格林威治時間的時差上。有了每個時區(qū)與格林威治時間的時差,就可以計算任意兩個時區(qū)之間的時差。時區(qū)時間的轉(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);//返回兩個時區(qū)之間的時差,單位為分鐘}時區(qū)時間的轉(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 娛樂行業(yè)宣傳活動總結(jié)
- 通訊設備行業(yè)安全管理工作總結(jié)
- 二零二五年度航空發(fā)動機機油專業(yè)供應及維修合同3篇
- 個人車輛抵債協(xié)議書(二零二五版)債權(quán)債務解除條款4篇
- 2025版老舊小區(qū)水電改造工程承包協(xié)議書2篇
- 二零二五年度電商小商品購銷合作合同規(guī)范文本3篇
- 二零二五年度進口建筑材料質(zhì)量檢驗合同范本6篇
- 二零二五年度個人住宅裝修工程環(huán)保驗收合同2篇
- 生活服務保安工作總結(jié)
- 裝修設計行業(yè)銷售工作總結(jié)
- 衛(wèi)生專業(yè)技術(shù)資格考試衛(wèi)生檢驗技術(shù)(初級(師)211)專業(yè)知識試題及答案指導
- 0-9任意四位數(shù)手機密碼排列組合全部數(shù)據(jù)列表
- 2023高考語文文言文復習:《說苑》練習題(含答案解析)
- VW-Formel-Q審核提問表(完整版)
- 物業(yè)客服溝通技巧培訓課件
- 工程造價咨詢服務方案(技術(shù)方案)
- 常用藥物作用及副作用課件
- 小學生作文方格紙A4紙直接打印版
- 幼兒阿拉伯數(shù)字描紅(0-100)打印版
- 標桿地產(chǎn)集團 研發(fā)設計 工程管理 品質(zhì)地庫標準研發(fā)成果V1.0
- 2023年1月浙江高考英語聽力試題及答案(含MP3+錄音原文)
評論
0/150
提交評論