输入年,输出一整年的日历
输入年,输出一整年的日历

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<math.h> int Year_return, Month_return, Days_return; //date_after_days()的传出参数 int Left_remain_output_days = 0, Right_remain_output_days = 0; //循环中每月剩余需要的输出的天数,left是1~6月,right是另一边 int days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //每月的天数 //输出普通的表头 void print_head(int year) { printf("|-------------------------------------------------------The Calender of Year %d-------------------------------------------------------|\n",year); } //输出普通的表尾 void print_tail() { printf("|---------------------------------------------------------------------------------------------------------------------------------------|\n"); } //输出每月开始的表头,传入month void print_month_head(int month) { printf("|\t%d\tSun\tMon\tTue\tWed\tThu\tFri\tSat\t%d\tSun\tMon\tTue\tWed\tThu\tFri\tSat\t|\n", month, month + 6); } //return每隔一年要加的天数 int add_days_if_lunar(int year_pointer) { if (year_pointer % 4 == 0 && year_pointer % 100 != 0 || year_pointer % 400 == 0) { return 366; } else return 365; } //获取该日与1970.1.1相隔的天数 int days_between_1970(int year, int month, int day) { int year_pointer = 1970, month_pointer = 1, day_pointer = 1; //计算机系统日期的起始时间 int sum = 0; int days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //每月总天数 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { days_of_month[1] = 29; } while (year - year_pointer > 0) { //隔年加每年的天数 sum += add_days_if_lunar(year_pointer); year_pointer++; } while (month - month_pointer > 0) { //隔月加天数 sum += days_of_month[month_pointer - 1]; month_pointer++; } sum += day; return sum; } //返回星期几 int day_of_week_get(int sum) { //参数:相隔1970.1.1的天数 int day_of_week = 4; //day_of_week初始化为1970.1.1的星期四,最后加相隔天数再%7就是星期几 day_of_week = (sum + day_of_week - 2) % 7 + 1; return day_of_week; } //返回过了passed_days天后的日期 void date_after_days(int year,int month,int day,int passed_days) { int days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //每月总天数 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { days_of_month[1] = 29; } while (passed_days > 0) { day++; passed_days--; if (day > days_of_month[month-1]) { day = 1; month++; } if (month > 12) { month = 1; year++; } } Year_return = year; Month_return = month; Days_return = day; } //输出每行数字的循环 int print_number_line_of_each_side(int year,int month,int day_output_start) { int space_number = day_output_start; //指示空格之后的 1 的个数 //输出开头的空格 while (space_number > 0) { printf(" \t"); space_number--; } int *remain_output_days; if (month <= 6) { //判断是哪一边的remain_days要初始化 remain_output_days = &Left_remain_output_days; } else { remain_output_days = &Right_remain_output_days; } int cursor = 0; //开始循环输出数字 for (cursor = day_output_start - 1 + 2; cursor <= 8; cursor++) { if (*remain_output_days >= 1) { //如果还需要输出日期的数字,就继续输出 if (cursor == 8) { if (month <= 6) { printf(" \t"); } break; } printf("%d \t", days_of_month[month - 1] - *remain_output_days + 1); (*remain_output_days)--; } else { if (!(cursor == 8 && *remain_output_days == 0 && month > 6)) printf(" \t"); //输出每月末的空格 } } return false; } int main(){ int year = 0, sum = 0, start_month = 0; int day_output_start; printf("Please input the year whose calendar you want to know:"); scanf("%d", &year); year = 2004; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { days_of_month[1] = 29; } //输出每年的开始的表头 print_head(year); for (start_month = 1; start_month <= 6; start_month++) { print_month_head(start_month); for (int test = 0; test < 6; test++) { printf("|\t \t"); if (test == 0) { Left_remain_output_days = days_of_month[start_month - 1]; day_output_start = day_of_week_get(days_between_1970(year, start_month, 1)); //获取这个月的第一天的星期几 print_number_line_of_each_side(year, start_month, day_output_start); } else print_number_line_of_each_side(year, start_month, 0); if (test == 0) { Right_remain_output_days = days_of_month[start_month - 1 + 6]; day_output_start = day_of_week_get(days_between_1970(year, start_month + 6, 1)); //获取加6个月后的第一天的星期几 print_number_line_of_each_side(year, start_month + 6, day_output_start); } else print_number_line_of_each_side(year, start_month + 6, 0); printf("|\n"); } } print_tail(); return 0; }

浙公网安备 33010602011771号