输入年份和月份打印当月日历
Posted 2018jason
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入年份和月份打印当月日历相关的知识,希望对你有一定的参考价值。
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(" %d年%d月 ", year, month); 34 printf("-------------------------- "); 35 printf("日 一 二 三 四 五 六 "); 36 37 //计算1号的星期数 38 firstDateWeek = weekNum(year, month, 1); 39 printBlank(firstDateWeek); //每个月日历前的空白 40 41 //开始打印日期 42 for (i = 1; i <= days; i++) { 43 printf("%d ", i); 44 dateWeek = weekNum(year, month, i); 45 if (dateWeek == 6) { 46 printf(" "); 47 } 48 } 49 50 printf(" "); 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(" "); 82 } 83 }
以上是关于输入年份和月份打印当月日历的主要内容,如果未能解决你的问题,请参考以下文章
JAVA中怎么实现,根据用户输入的年份和月份得到当月第1天(该月1号)
在Java中如何用calendar类输入年和月份打印当月的日历