为什么万年历c语言,求大佬看下,,为什么这个万年历从2020年开始日期就对不上了?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#define _CRT_SECURE_NO_WARNINGS//宏定义

#include

#include

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值