头哥网第四关打印日历
// 包含两种I/O库,可以使用任一种输入输出方式 #include#include using namespace std; // 函数printMonth:按要求的格式打印某年某月的日历 // 参数:year-年,month-月 // 返回值:无 void printMonth(int year, int month); // leapYear:判断闰年 // 参数:y-年 // 返回值:1-是闰年,0-不是闰年 int leapYear(int y) { if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0) return 1; return 0; } // 函数whatDay:计算某年某月的1号是星期几 // 参数:year-年,month-月 // 返回值:1到7--星期1到星期日 int whatDay(int year, int month) { // 1年月日是星期一 int w = 1; int i; // 1到year-1都是全年 for(i = 1; i < year; i++) { if(leapYear(i)) w += 366; else w += 365; } switch(month) { case 12: // 加月的 w += 30; case 11: // 加月的 w += 31; case 10: // 加月的 w += 30; case 9: // 加月的 w += 31; case 8: // 加月的 w += 31; case 7: // 加月的 w += 30; case 6: // 加月的 w += 31; case 5: // 加月的 w += 30; case 4: // 加月的 w += 31; case 3: // 加月的 if(leapYear(year)) w += 29; else w += 28; case 2: // 加月的天 w += 31; case 1: // 1月不加了 ; } // 得到-6,其中为星期天 w = w % 7; // 调整星期天 if(w == 0) w = 7; return w; } // 请在下面补充代码,实现函数printMonth //返回一个月有多少天 int month_day(int year, int month) { switch (month) { case 2: if (leapYear(year)) { return 29; } else { return 28; } break; case 4: case 6: case 9: case 11: return 30; break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; break; default: break; } } void printMonth(int year, int month) { int days, day_week; int i = 1; int day = 1; printf(" 一 二 三 四 五 六 日n"); days = month_day(year, month); day_week = whatDay(year, month); if (day_week == 0) { day_week = 7; } while (i < day_week) { printf(" "); i++; } while (day <= days) { printf("%4d", day); day++; i = i % 7; if (i == 0) { printf("n"); } //i = i % 7; i++; } if (i != 0) { printf("n"); } } int main() { // 年、月 int y, m; // 输入年月 cin >> y >> m; // 输出该年月的日历 printMonth(y,m); return 0; }
可以不用我上述的代码来得到某月的第一天是星期几
int month_first_day_week(int year, int month) { int week = 1; for (int i = 1900; i < year; i++) { ++week; // 365 % 7 = 1 if (isleap(i)) { ++week; } } for (int i = 1; i < month; i++) { week += month_day(year, i); } week %= 7; return week; }
这里可以直接得到某年某月的第一天是星期几。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)