#include
static int year;
static int weekDay;
bool isLeapYear(int y) //判断是否是闰年
{
return(y%4==0&&y%100!=0||y%400==0); //闰年的条件就是年份同时能被4和100整除或
明春 // 者能被400整除
}
long firstDayOfYear(int y) //求出输入的那年第一天是星期几
{
long n;
n=y*365;
for(int i=1;iif(isLeapYear(i))
n+=1;
return n%=7;
}
void printHead(int m) //打印每个月的标题
{
if(m<10)
printf(" %d月 日 一 二 三 四 五 六\n",m);
else
printf(" %d月 日 一 二 三 四 五 六\n",m);
printf(" ");
for(int i=0;iprintf(" ");
}
int daysOfMonth(int m) // 判断每个月有多少天
{
switch(m)
{
激轿耐 case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return 31;
case 4:
case 6:
case 9:
case 11: return 30;
case 2:if(isLeapYear(year))
return 29;
else
return 28;
}
return 0;
}
void printMonth(int m) //打印每月的日历
{
printHead(m);
int days=daysOfMonth(m);
for(int i=1;i<=days;i++)
{
if(i<10)
printf(" %d",i);
else
printf(" %d",i);
weekDay=(weekDay+1)%7;
if(weekDay==0)
{
printf("\n");
printf(" ");
}
}
}
void main() //主程序入口,接收输入的年份,调用函数打印日历
{
int y;
printf("请输入年份:");
scanf("%d",&y);
year=y;
if(year<1)
{
printf("输入年份不能小于1\n");
return;
}
weekDay=(int)firstDayOfYear(year);
printf(" %d年\n",year);
printf(" ========================================\n");
for(int i=1;i<=12;i++)
{
printf("\n");
printMonth(i);
printf("\n");
}
}
可以显示公元1世纪以后的所有年份的日历,第2和第3问其实都包含帆旦在第1问里,程序看懂了自然也就会了(话说为什么不能上传附件?)
浙江浙江浙江