码迷,mamicode.com
首页 > 其他好文 > 详细

输入年份和月份打印当月日历

时间:2020-05-14 15:23:31      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:表示   span   oid   一个   日期转换   空白   判断   fir   std   

 1 /*
 2     QQ:778138708
 3     date:2020-5-14
 4     输入年份和月份,打印当月日历
 5  
 6 */
 7 /*
 8     日期转换为星期的方法
 9     W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7
10     在公式中d表示日期中的日数,m表示月份数,y表示年数
11     把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
12 */
13 #include <stdio.h>
14 int weekNum(int year, int month, int day);
15 int isLeap(int year);
16 void printBlank(int n);
17 int main(void)
18 {
19     int year, month;
20     int leap, days;
21     int i, firstDateWeek, dateWeek;
22     int tab[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
23         {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
24     
25     printf("请输入一个年份(例如:2020):");
26     scanf("%d", &year);
27     printf("请输入一个月份(1-12的数字):");
28     scanf("%d", &month);
29     
30     leap = isLeap(year);
31     days = tab[leap][month];    //每个月的总天数
32     
33     printf("\t\t%d年%d月\n", year, month);
34     printf("--------------------------\n");
35     printf("日\t一\t二\t三\t四\t五\t六\n");
36     
37     //计算1号的星期数
38     firstDateWeek = weekNum(year, month, 1);
39     printBlank(firstDateWeek);      //每个月日历前的空白
40     
41     //开始打印日期
42     for (i = 1; i <= days; i++) {
43         printf("%d\t", i);
44         dateWeek = weekNum(year, month, i);
45         if (dateWeek == 6) {
46             printf("\n");
47         }
48     }
49     
50     printf("\n");
51     
52     return 0;
53 }
54 //日期转换为星期
55 int weekNum(int year, int month, int day)
56 {
57     int week;
58     
59     if (month == 1 || month == 2) {
60         year =year - 1;
61         month = 12 + month;
62     }
63     week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400 + 1) % 7;
64     
65     return week;
66 }
67 //判断闰年
68 int isLeap(int year)
69 {
70     int leap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
71     
72     return leap;
73 }
74 //打印1号之前的空白
75 void printBlank(int n)
76 {
77     int i;
78     
79     for (i = 0; i < n; i++)
80     {
81         printf("\t");
82     }
83 }

 

输入年份和月份打印当月日历

标签:表示   span   oid   一个   日期转换   空白   判断   fir   std   

原文地址:https://www.cnblogs.com/2018jason/p/12888417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!