目录
01、实现效果
02、过程步骤
03、代码
#include<stdio.h> int Leap_year[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31 }; int Com_year[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; char Week[7][5] = { "一","二","三","四","五","六","日" }; int year, month, day; //用户输入日期 int User_Scanf() { printf("请输入年-月-日:"); while (scanf("%d-%d-%d", &year, &month, &day) != EOF) { //是否在有效范围内检查 if (year <= 0 || year >= 10000 || month < 0 || month >= 13 || day < 0 || day >= 31) { printf("Error!\n"); continue; } return 0; } } //打印星期 void Print_Week() { printf("********************************************************\n"); printf("\t\t\t万年历\t\t\t\n"); for (int i = 0; i < 7; i++) { printf("%s\t", Week[i]); } printf("\n"); } //判断闰/平年 int is_Leap_Com(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { return 1;//闰年 } else return 0;//平年 } //计算天数 int Count_Day(int year,int month,int day,int Leap_year[],int Com_year[]) { int sum = 0; //计算年天数 if (is_Leap_Com(year) == 1) { sum += 366;//闰年 } else sum += 365;//平年 //计算月天数 if (is_Leap_Com(year) == 1) { for (int i = 1; i <=month; i++) { sum += Leap_year[i];//闰月 } } else { for (int i = 1; i <=month; i++) { sum += Com_year[i];//平月 } } return sum; } //打印日历 void Print_Day(int num, int year, int month) { int result = 0, temp = 0; result = num % 7;//打印空格 for (int i = 0; i < result; i++) { printf("\t"); } temp = 7 - result;//打印除空格外的日历 if (is_Leap_Com(year) == 1) { for (int i = 1; i <=Leap_year[month]; i++) { printf("%d\t", i); if (i == temp || (i - temp) % 7 == 0)//判断是否换行 printf("\n"); } } else { for (int i = 1; i <=Com_year[month]; i++) { printf("%d\t", i); if (i == temp || (i - temp) % 7 == 0) printf("\n"); } } printf("\n"); printf("********************************************************\n"); } int main() { User_Scanf();//用户输入日期 Print_Week();//打印星期 int num=Count_Day(year,month,day, Leap_year, Com_year);计算天数 Print_Day(num,year, month);//打印日历 return 0; }