这个c语言的万年历程序,为什么2020年开始日期就对不上了?

#define _CRT_SECURE_NO_WARNINGS//宏定义
#include<stdio.h>
#include<stdlib.h>
int year, month, day, y;
//闰年和平年2月份天数不同 12个月中个月的天数
int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
int ping[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
char weekday[7][10] = { "一","二","三","四","五","六","日" };
//打印星号
void printStar()
{
printf("****************************************************\n");
}
//打印抬头
void printBegin()
{
printf("\t\t\t万年历\t\t\t\n");
printStar();
for (int i = 0; i < 7; i++)
{
printf("%s\t", weekday[i]);
}
printf("\n");
}
//判断润年和平年
int leap(int year)
{
int four, hundred, fourhundred;
four = year % 4;
hundred = year % 100;
fourhundred = year % 400;
if ((four == 0 && hundred != 0) || (fourhundred == 0))
{
return 1;
}
else
return 0;
}
//1900算输入的year与1900年有多少天
int daySum(int year, int month, int day, int run[], int ping[])
{
//1900 1 1星期一
int i, sum = 0;
for (i = 1900; i <= year; i++)
{
int m = leap(year);//判断输入年份是润年还是平年
if (m == 1)
{
sum += 366;
}
else
{
sum += 365;
}
}
//加上月份的天数 循环加选择
for (i = 0; i < month - 1; i++)
{
if (leap(year) == 1)
{
sum = sum + run[i];
}
else
{
sum = sum + ping[i];
}
}
return sum;
}
//打印日历
void printResult(int sum,int year,int month)
{
int result, temp, i;
result = sum % 7;//前面空余的天数
//把空余的天数用空格表示
for (i = 0; i < result; i++)
{
printf("\t");
}
temp = 7 - result;//从第几格开始打印1号
if (leap(year) == 1)//闰年的时候31天
{
//数组下标从0开始
//但是月份只有从1开始
for (i = 1; i <= run[month-1]; i++)
{
printf("%d\t", i);
if (i == temp || (i - temp) % 7 == 0)
{
printf("\n");
}
}
printf("\n");
}
else//平年的时候30天
{
for (i = 1; i <= ping[month-1]; i++)
{
printf("%d\t", i);
if (i == temp || (i - temp) % 7 == 0)
{
printf("\n");
}
}
printf("\n");
}
}
int main()
{
printf("请输入年 月 日:");
scanf("%d %d %d", &year, &month, &day);
printBegin();
int sum = daySum(year, month, day, run, ping);
printResult(sum, year, month);
printStar();
system("pause"); //防止闪屏
return 0;
}

第1个回答  2020-04-23
OK,什么时候要的呢?