




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五章日期和時間處理5.1例題:判斷閏年5.2例題:細菌繁殖5.3例題:日歷問題5.4例題:瑪雅歷5.5例題:時區間時間的轉換判斷閏年判斷某年是否是閏年。公歷紀年法中,能被4整除的大多是閏年,但能被100整除而不能被400整除的年份不是閏年,如1900年是平年,2000年是閏年。輸入:一行,僅含一個整數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參考代碼分析//閏年子函數intf(intyear){if(year%4==0&&year%100!=0||year%400==0)return1;elsereturn0;}細菌繁殖一種細菌繁殖是每天成倍增長。例如第一天有10個,第二天就變成20個,第三天變成40個,第四天變成80個……。現在給出第一天的日期和細菌數目,求出到某一天時細菌的數目。輸入:第一行一個整數n,表示測試數據的數目。其后n行每行有5個整數,整數之間用一個空格隔開。第一個數表示第一天的月份,第二個數表示第一天的日期,第三個數表示第一天細菌的數目,第四個數表示要求的那一天的月份,第五個數表示要求的那一天的日期。已知第一天和要求的一天在同一年并且該年不是閏年,要求的一天一定在第一天之后。解題思路:1.輸入兩個日期及第一天的細菌數;2.求兩個日期相差的天數,即它們中間間隔的天數m;
3.用第一天的細菌數乘以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);}}思考:如最終細菌數超過整數范圍,如何解決?intsum=day_2-day_1;for(intk=month_1;k<month_2;k++)sum+=days[k-1];日歷問題給定從2000年1月1日(星期六)開始逝去的天數,求出這一天是哪年哪月哪日星期幾。輸入:輸入若干行,每行一個正整數(測試樣例),輸入以-1結束。輸出:對每個測試樣例,輸出一行,該行包含對應日期和星期幾。格式為“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)//閏年函數{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天,每一天用一個數字(1~13)和一個單詞(imix,ik,akbal,kan,chicchan,cimi,manik,lamat,muluk,ok,chuen,eb,ben,ix,mem,cib,caban,eznab,canac,ahau)共20個。數字和單詞各自循環使用。請編程,將Haab日歷轉化成Tzolkin歷。瑪雅歷Haab歷每年365天,19個月用0~18表示。前18個月20天,第19個月有5天,19個月的名字用不同字串表示,日期從0開始。通過月份*20+日期+1計算某個月的某一天是當年的第幾天。Tzolkin歷一年有260天,每個日期由數字和字符串組成。數字從1~13,有20個不同的字符串,兩個部分彼此獨立。對于一年中某一天,可分別求出數字和字符串部分,然后組合。解題思路:首先計算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的數值,分別表示取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);
}}時區時間的轉換輸入:第一行包含了一個整數N,表示有N組測試數據。接下來N行,每一行包括一個時間和兩個時區的縮寫,用空格隔開。時間由標準的a.m/p.m給出。Midnight表示晚上12點,noon表示中等12點。輸出:輸入行給出的時間是在第一個時區中的標準時間,要求輸出這個時間在第二個時區中的標準時間時區時間的轉換要求在兩個時區之間進行時間轉換。根據每個時區與格林威治時間的轉換公式可以推算出兩個時區之間的差。輸入時,除一般時間表示法:時:分a.m/p.m.之外,要特殊處理noon和midnight;在直接通過格林威治時間進行轉換后,要判斷是否超過一天或減少了一天的情況;在輸出時間時,要對noon和midnight進行特殊處理。解決這個問題的關鍵是確定兩個時區之間的時差。因為時區是用字符串形式給出的,所以要先將時區對應到該時區與格林威治時間的時差上。有了每個時區與格林威治時間的時差,就可以計算任意兩個時區之間的時差。時區時間的轉換#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);//返回兩個時區之間的時差,單位為分鐘}時區時間的轉換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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司晨會活動策劃方案
- 公司日常團建活動方案
- 公司秋游團建活動方案
- 公司日行萬步策劃方案
- 公司節日策劃活動方案
- 2025年休閑體育管理師考試試卷及答案
- 2025年現代物流管理課程試題及答案
- 2025年手語翻譯人才能力考試試卷及答案
- 2025年技術經濟與管理專業綜合考試試題及答案
- 幼兒園裝修合同
- 滅鼠行業營銷策略方案
- 心臟瓣膜病患者的護理
- 肥料代理合作協議書
- Unit2HealthylifestyleProjectDoahealthsurvey教學設計高中英語人教版選擇性
- 經尿道前列腺電切術后膀胱沖洗的護理-課件
- 2024年中考地理模擬試題(共6套有答案)
- 江蘇省蘇州市2024-2025學年高一歷史下學期期末考試試題含解析
- 安徽省馬鞍山市2024-2025學年高一生物下學期期末考試試題
- 蔬菜農藥殘留檢測合同
- 勞務施工合同協議書范本(2024版)
- 化學-貴州省畢節市2024年畢節市高二年級下學期7月期末聯考試題和答案
評論
0/150
提交評論