题目要求:
输入年份月份,输出该月日历
输入样例:
2023
2
输出样例:
思路:
本题需确定year年month月1日为周几,以及该月共多少天
确定year年month月1号为周几:计算公元1年1月1日到year-1年共多少天 day=zheng(year); 计算有year年1月到month-1月共多少天 yearday=lin(year,month); 总天数total=day+yearday; 周几weekday=total%7.
最后要注意布局合理,达到预期效果
代码块:
#include<stdio.h>
int zheng(int);
int lin(int,int);
void deck(int,int,int,int);
int main()
{
int total,day,yearday,weekday;
int year,month;
printf("输入年份:\n");
scanf("%d",&year);
printf("输入月份:\n");
scanf("%d",&month);
day=zheng(year-1);
yearday=lin(year,month-1);
total=day+yearday;
weekday=total%7;
deck(weekday,year,month,total);
return 0;
}
int zheng(int year)
{
return year*365+year/400+year/4-year/100;
}
int lin(int year,int month)
{
int sum=0;
int i;
for(i=1;i<=month;i++){
switch(i){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
sum=sum+31;break;
case 2:if((year%4==0&&year%100!=0)||year%400==0)
sum=sum+29;
else
sum=sum+28;
break;
default:sum=sum+30;break;
}
}
return sum;
}
void deck(int weekday,int year,int month,int total)
{
printf("\t\t\t%d月\n",month);
printf("一\t二\t三\t四\t五\t六\t日\n");
int i;
for(i=0;i<weekday;i++){
printf("\t");
}
int day;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day=31;break;
case 2:if((year%4==0&&year%100!=0)||year%400==0)
day=29;
else
day=28;
break;
default:day=30;break;
}
for(i=1;i<=day;i++){
printf("%d\t",i);
if((i+total)%7==0)
printf("\n");
}
}