#include
#include
void main()
{
char ans;
do{
int year,month;//月份和年份
int days = 0;//月份总天数
int sum = 0;//天数总和
int first;//月份第一天
int month_sum[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
printf("请输入年份:");
scanf("%d",&year);
printf("请输入月份:");
scanf("%d",&month);
do
{
if(month < 1 || month > 12)
{
printf("输入错误。请重新输入:");
scanf("%d",&month);
}
else
{
break;
}
}while(1);
//判断离1990-1-1多少天。
for(int i = 1900; i < year; i++)
{
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{
sum += 366;
}
else
{
sum += 365;
}
}
//判断当年是不是闰年
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
month_sum[1] = 29;
}
//将月份总天数和年份总天数加起来
for(i = 1; i < month; i++)
{
sum += month_sum[i-1 ];
}
sum += 1;
//算出月份的第一天
first = sum % 7;
//输入格式
printf("%d年%d月\n",year,month);
printf("\n------------------------------------------------------\n");
printf("日 一 二 三 四 五 六\n");
switch(first)
{
case 0:
break;
case 1:
printf(" ");
break;
case 2:
printf(" ");
break;
case 3:
printf(" ");
break;
case 4:
printf(" ");
break;
case 5:
printf(" ");
break;
case 6:
printf(" ");
break;
}
for(i = 1; i <= month_sum[month-1]; i++)
{
printf("%d",i);
if((first+i) % 7 == 0)
{
printf("\n");
}
else
{
printf("\t");
}
}
printf("\n");
printf("继续?(y):");
fflush(stdin);
ans = getchar();
system("cls");
if(ans != 'Y' && ans != 'y')
{
break;
}
}while(1);
}
刚刚做好的,望采纳,可以实现循环输入。
另:每月的第一天是距1900年的总天数除以7的余数来决定的,
提交回答
我实验过 还是直接用2楼得到的比较好