问题:
编写程序,使之所给的年份和月份,按照万年历的算法获知该年该月的天数,并输出结果。要求程序能反复运行,直至键入的年份和月份分别为2100年和12月为止。
分析:
程序要求输入年份月份,输出该月的天数,应主要考虑闰年,闰年的2月有29天,非闰年的2月只有28天。按通常历法,每四年有一个闰年,那么每400年就有100个闰年,但这种算法有误差积累,年数多了就不准。所谓万年历是指使用一万年都能保持准确的历法,根据万年历的算法,每400年只能有97个闰年,不妨假设程序中的年份取1701年至2100年。可规定:在这400年中,凡能被4整除而不能被100整除的年份(有100-4=96),加上能被400整除的年份(1个,即2000年),均为闰年,其余都是非闰年。
1 #include<stdio.h> 2 int main() 3 { 4 int years,months,days; 5 printf("请输入年份和相应的月份:"); 6 scanf("%d,%d",&years,&months); 7 switch(months) 8 { 9 case 1: 10 case 3: 11 case 5: 12 case 7: 13 case 8: 14 case 10: 15 case 12: 16 days=31; 17 break; 18 case 4: 19 case 6: 20 case 9: 21 case 11: 22 days=30; 23 break; 24 case 2: 25 if((years%4==0&&years%100!=0)||(years%400==0)) 26 days=29; 27 else 28 days=28; 29 } 30 printf("\n%d年%d月有%d天!\n",years,months,days); 31 } 32 33 /*#include<stdio.h> 34 int main(){ 35 int year,month,days; 36 do{ 37 do{ 38 printf("请输入您想查询的年份和月份:"); 39 scanf("%d %d",&year,&month); 40 }while(!((year>=1701&&year<=2100)&&(month>=1&&month<=12))); 41 if(!(year==2100&&month==12)){ 42 switch(month) 43 { 44 case 1: 45 case 3: 46 case 5: 47 case 7: 48 case 8: 49 case 10: 50 case 12: 51 days=31; 52 break; 53 case 4: 54 case 6: 55 case 9: 56 case 11: 57 days=30; 58 break; 59 case 2: 60 if(year%4==0&&year%100!=0||year%400==0)//判断是否为闰年 61 days=29; 62 else 63 days=28; 64 } 65 printf("\n%d的%d月有%d天\n\n",year,month,days); 66 } 67 }while(!(year==2100&&month==12)); 68 return 0; 69 }*/