程序设计表示方法--1

题目名称:“三天打鱼两天晒网”

题目内容:某人从2010年1月开始“三天打鱼两天晒网”,请问这个人在以后的某一天是打鱼还是晒网。

算法设计: 

1、输入日期:年月日

2、判断日期是否合法,不合法则输入合法日期,合法继续下一步

3、判断是否为闰年

4、为闰年咋额在总天数加366,否则加365;

5、计算相隔的总天数(需要注意的闰年二月29天,平年28天)

6、用计算出的相隔的总天数对5 取模,若余数为1,2,3,则他在打鱼,否则是在晒网

流程图:

代码:

#include<stdio.h>

int main()
{
	int year,month,day;
	int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //建立一个平年月份天数的数组
	
	printf("请输入年月日(中间用空格分开):\n");
	scanf("%d%d%d",&year,&month,&day);
	//判断输入日期是否合法
	while(year<2010||month<1||month>12||(day>31))
	{
		printf("输入日期不合法,请重新输入\n");
		scanf("%d%d%d",&year,&month,&day);
	}
	//判断是否为闰年
	for(int y=2010;y<year;y++)
	{
		if(y%400==0||(y%4==0&&y%100!=0))
			day+=366;
		else
			day+=365;					
	}
	for(int m=1;m<month;m++)
	{
		day+=a[m];
		if(month==2&&((year%400==0)||(year%4==0&&year%100!=0)))
		{
			day+=1;
		}//如果为闰年二月,则总天数加一
	}


	//判断打鱼还是晒网
	if((day%5==1)||(day%5==2)||(day%5==3))
		printf("这一天这个人在打鱼\n");
	else
		printf("这一天这个人再晒网\n");
	return 0;
}

不过这个代码还存在一定的问题,比如输入2013 2 29时不提示输入日期不合法,

--------------------------分割线---------------------------------------------------------------------------------------------------------------------------------

听了老师的要求后,感觉全部“踩雷”,老师的要求我完美避开,比如:只写一个main函数,比如调试测试做的不符合要求。

下面是我修改后的代码:(这次已经修改了上面的问题)

#include<stdio.h>

int date(int y,int m,int d)     //判断输入日期是否合法
{
	while(y<2010||m<1||m>12||d>31||d<1)
	{
		printf("输入日期不合法,请重新输入\n");
		scanf("%d%d%d",&y,&m,&d);
	}
	if(m==2&&d>28)
	{if((y%400==0)||(y%4==0&&y%100!=0))
		return 0;
	else
		printf("输入日期不合法,请重新输入\n");
		scanf("%d%d%d",&y,&m,&d);
	}
	return 0;
}


void run(int year,int month,int day)//判断是否为闰年
{
	for(int y=2010;y<year;y++)
	{
		if(y%4==0&&y%100!=0)  day+=366;
		else if(y%400==0)  day+=366;
		else  day+=365;					
	}
	for(int m=1;m<month;m++)
	{
		int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //建立一个平年月份天数的数组
		day += a[m];
		if(month==2&&((year%400==0)||(year%4==0&&year%100!=0)))
		{
			day+=1;
		}//如果为闰年二月,则总天数加一

}
}
void judge(int da)					//判断打鱼还是晒网
{
	if((da%5==1)||(da%5==2)||(da%5==3))
		printf("这一天这个人在打鱼\n");
	else
		printf("这一天这个人再晒网\n");
	
}

int main()
{
	int year,month,day;
	printf("请输入年月日(中间用空格分开):\n");
	scanf("%d%d%d",&year,&month,&day);
	date(year,month,day);
	run(year,month,day);
	judge(day);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45915957/article/details/104825850