浅宏Initer 2020-12-12 19:28 采纳率: 100%
浏览 26
已采纳

用C语言编写了一个万年历,有点问题(麻烦大佬帮忙看看)

我想达到的效果:输入年月日之后出现当前月的每一天(显示出日及对应的星期几)。

遇到的问题:(输入2019年的日期时显示正确,输入2020年的日期后得到的界面与真实不符)

#include<stdio.h>
int year,month,day;
int run[12]={31,29,31,30,31,30,31,31,30,31,30,31};				/*闰年366天*/
int ping[12]={31,28,31,30,31,30,31,31,30,31,30,31};				/*平年365天*/
char weekday[7][10]={"一","二","三","四","五","六","日"};					/*每周七天*/
void line()
{
	printf("*******************************************************\n");	/*界面分割线*/
}
void printBegin()
{
	int i=0;
	printf("\t\t\t万年历");
	printf("\n");
	line();
	for(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(fourhundred==0)
	{
		return 1;
	}
	else if(four==0&&hundred!=0&&fourhundred!=0)
	{
		return 1;
	}
	else
		return 0;
}
int daySum(int year,int month,int day,int run[],int ping[])			/*函数功能:计算输入年月日距离1900年一共有多少天*/
{
	int i,sum=0;													/*m用于判断输入年份是否为闰年*/
	for(i=1900;i<=year;i++)
	{
		int	m=leap(year);
		if(m==1)
		{
			sum=sum+366;
		}
		else
		{
			sum=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;
	if(leap(year)==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
	{
		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()
{
	int sum;
	printf("请输入年,月,日:");
	scanf("%d%d%d",&year,&month,&day);
	printBegin();
	sum=daySum(year,month,day,run,ping);
	printResult(sum,year,month);
	line();
	return 0;
}

  • 写回答

5条回答 默认 最新

  • 晨曦之光Wing 2020-12-12 21:36
    关注

    两个地方的问题:

    1. daySum函数的第一个for循环的判断条件,应该是i < year,不是i<=year,如果加了等于的话,相当于把输入的年份(2020年)这一年的所有天数都加进来了
    2. daySum函数的第一个for循环的调用leap函数的地方,入参是i,不是year,i才是从1990年递增到2020年(不等于2020年)的那个参数,year是输入的参数(即2020年)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效