- 学·问
- 帖子详情
万年历
mooc161031464079970630
发表于2023年11月24日
<p>#include <stdio.h></p><p><br ></p><p>char poem[12][50]={</p><p>"一月一花开,开时月常好",</p><p>"二月二日新雨晴,草芽菜甲一时生",</p><p>"曾记三月春浓,花风烂熳,吹散鸳鸯侣",</p><p>"人间四月芳菲尽,山寺桃花始盛开",</p><p>"小池残暑退,高树早凉归",</p><p>"六月之雨田成溪,七月之旱烟尘飞",</p><p>"七月诗成种田法,庶人章作劝农文",</p><p>"七月诗成种田法,庶人章作劝农文",</p><p>"银烛秋光冷画屏,轻罗小扇扑流萤",</p><p>"三秋多湿雨,十月见黄花",</p><p>"边城十一月,雨雪乱霏霏",</p><p>"幽州思妇十二月,停歌罢笑双蛾摧"</p><p>};</p><p><br ></p><p><br ></p><p>// 判断是否为闰年</p><p><br ></p><p>int isLeapYear(int year) {</p><p><br ></p><p> return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);</p><p><br ></p><p>}</p><p><br ></p><p><br ></p><p><br ></p><p>// 获取某年某月的天数</p><p><br ></p><p>int getDaysInMonth(int year, int month) {</p><p><br ></p><p> int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};</p><p><br ></p><p><br ></p><p><br ></p><p> if (month == 2 && isLeapYear(year)) {</p><p><br ></p><p> return 29;</p><p><br ></p><p> } else {</p><p><br ></p><p> return days[month];</p><p><br ></p><p> }</p><p><br ></p><p>}</p><p><br ></p><p><br ></p><p><br ></p><p>// 获取某年某月第一天是星期几</p><p><br ></p><p>int getFirstDayOfWeek(int year, int month) {</p><p><br ></p><p> // Zeller's Congruence算法,计算某一天是星期几</p><p><br ></p><p> if (month < 3) {</p><p><br ></p><p> month += 12;</p><p><br ></p><p> year--;</p><p><br ></p><p> }</p><p><br ></p><p><br ></p><p><br ></p><p> int h = (1 + (13 * (month + 1)) / 5 + year + year / 4 - year / 100 + year / 400) % 7;</p><p><br ></p><p><br ></p><p><br ></p><p> // 0表示星期六,1表示星期日,2表示星期一,依此类推</p><p><br ></p><p> return (h + 5) % 7;</p><p><br ></p><p>}</p><p><br ></p><p><br ></p><p><br ></p><p>// 打印月历</p><p><br ></p><p>void printCalendar(int year, int month) {</p><p><br ></p><p> int i, j;</p><p><br ></p><p> int daysInMonth = getDaysInMonth(year, month);</p><p><br ></p><p> int firstDayOfWeek = getFirstDayOfWeek(year, month);</p><p><br ></p><p><br ></p><p><br ></p><p> // 打印月份和年份</p><p><br ></p><p> printf(" %d 年 %d 月\n", year, month);</p><p><br ></p><p> printf("日 一 二 三 四 五 六\n");</p><p><br ></p><p><br ></p><p><br ></p><p> // 打印月份的第一行前面的空格</p><p><br ></p><p> for (i = 0; i < firstDayOfWeek; i++) {</p><p><br ></p><p> printf(" ");</p><p><br ></p><p> }</p><p><br ></p><p><br ></p><p><br ></p><p> // 打印日历</p><p><br ></p><p> for (j = 1; j <= daysInMonth; j++) {</p><p><br ></p><p> printf("%2d ", j);</p><p><br ></p><p><br ></p><p><br ></p><p> // 换行</p><p><br ></p><p> if ((j + firstDayOfWeek) % 7 == 0) {</p><p><br ></p><p> printf("\n");</p><p><br ></p><p> }</p><p><br ></p><p> }</p><p><br ></p><p><br ></p><p><br ></p><p> // 打印最后一行的换行</p><p><br ></p><p> if ((daysInMonth + firstDayOfWeek) % 7 != 0) {</p><p><br ></p><p> printf("\n");</p><p><br ></p><p> }</p><p><br ></p><p>}</p><p><br ></p><p><br ></p><p>void f1_month(){</p><p> int i=0; </p><p> int year, month;</p><p><br ></p><p><br ></p><p><br ></p><p> // 输入年份和月份</p><p> </p><p><br ></p><p> printf("请输入年份和月份(以空格分隔): ");</p><p> scanf("%d %d", &year, &month);</p><p> while(month>12||month<0){</p><p> printf("输入月数错误,请重新输入");</p><p> printf("请输入年份和月份(以空格分隔): ");</p><p> scanf("%d %d", &year, &month);</p><p> }</p><p> if(month<=12&&month>0){</p><p> printf("------------------------------");</p><p> printf("%d年%d月",year,month);</p><p> printCalendar(year, month);</p><p> printf("%s",poem[month-1]);</p><p> puts("\n");</p><p> } </p><p>}</p><p><br ></p><p><br ></p><p> // 打印月历</p><p><br ></p><p>void f2_year()</p><p>{</p><p>int i=0; </p><p>int month=0;</p><p>int year;</p><p><br ></p><p><br ></p><p><br ></p><p> // 输入年份和月份</p><p> </p><p><br ></p><p> printf("请输入年: ");</p><p> scanf("%d", &year);</p><p> printf("%d年",year);</p><p> for(month=1;month<13;month++){</p><p> printCalendar(year, month);</p><p> printf("%s",poem[month-1]);</p><p> puts("\n");</p><p> </p><p> }</p><p> </p><p> </p><p> }</p><p>void f3_jijie(){</p><p> ////////////////////////////char jijie[]////////////////////////</p><p> int i=0; </p><p>int month=0;</p><p>int year;</p><p><br ></p><p><br ></p><p><br ></p><p> // 输入年份和月份</p><p> </p><p><br ></p><p> printf("请输入年: ");</p><p> scanf("%d", &year);</p><p> printf("%d年",year);</p><p> for(month=1;month<13;month++){</p><p> printCalendar(year, month); </p><p> printf("%s",poem[month-1]);</p><p> puts("\n");</p><p> if(month%4==0){</p><p> printf("\n\n\n\n");</p><p> }</p><p> </p><p> </p><p> </p><p> }</p><p> </p><p>}</p><p><br ></p><p> </p><p><br ></p><p>int main() {</p><p>//f1_month();</p><p>//f2_year();</p><p>f3_jijie();</p><p> return 0;</p><p><br ></p><p>}</p><p><br ></p>