2021-04-03

C语言练习题——当日天数
编程计算某年某月某日当天,是当年的第几天。 说明:1)当年1月1日是第1天;2)每月按月大,月小,闰年等情况,各月天数有不同(31,30,28,29);3)闰年按4年一闰,100年不闰,400年再闰计算。

输入格式:
用空格分隔的三个正整数(表示年,月,日的整数),均是合法的数据。

输出格式:
直接输出年-月-日:整数。表示当日是第几天。年号占4位,不足4位时补前导零,月和日各占2位,不足2位也补前导零。

输入样例1:
2020 3 3
输出样例:
2020-03-03:63
解题思路:这道题是根据自己输入的年月日,来判断当天是当年的第几天,这道题要做出来其实不难,但是我们很容易考虑不全,导致答案只是部分正确,我的思路是利用一个函数根据输入的年份和月份得到之前已经过完月份的总天数,再加上的当天的天数,就可以得出答案了。可以注意下面是我第一次的代码,

#include<stdio.h>
int main()
{ 
    int day(int j,int t);
	int n,k,s,p,y=0;
	scanf("%d %d %d",&n,&s,&k);
	
	for(p=1;p<s;p++)
	{
	y=y+day(p,n);	
	}
	printf("%04d-%02d-%02d:%d",n,s,k,y+k);
 } 
int day(int j,int l)
{
	int t=0;
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
	{
		t=31;
	}
	else
	{
		if(j==4||j==6||j==9||j==11)
		{
			t=30;
		}
		else
		{
			if(l%4==0&&l%400==0&&l%100!=0)
			t=29;
			else
			t=28;
		}
	}
	return(t);
}

是部分正确的,原因是因为我在函数判断闰年的条件语句写错了,这也是我认为这道题最难的地方,一定要注意闰年的判断方法是“闰年按4年一闰,100年不闰,400年再闰计算”这不是一个并列的关系所以我上面写的if(l%4==0&&l%400==0&&l%100!=0)是错误的。我们可以把他理解为年份被四可余,且被一百不可余算是闰年或者直接被400可余算是闰年两个条件,就得到
if(l%400==0||(l%4==0&&l%100!=00)),用这个条件就可以准确判断闰年。
所以正确代码为:

#include<stdio.h>
int main()
{ 
    int day(int j,int t);
	int n,k,s,p,y=0;
	scanf("%d %d %d",&n,&s,&k);
	
	for(p=1;p<s;p++)
	{
	y=y+day(p,n);	
	}
	printf("%04d-%02d-%02d:%d",n,s,k,y+k);
 } 
int day(int j,int l)
{
	int t=0;
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
	{
		t=31;
	}
	else
	{
	if(j!=2)
		{
			t=30;
		}
		else
		{
			if(l%400==0||(l%4==0&&l%100!=00))
			t=29;
			else
			t=28;
		}
	}
	return(t);
}

其他要注意的地方无非就是输出格式,和函数运用,以及条件是否考虑的周全这些问题。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值