题目: 输入某年某月某日,判断这一天是这一年的第几天

        公历年份是4的倍数的,一般都是闰年(leap year)。但公历年份是整百数的,必须是400的倍数才是闰年。要判断某一年是不是闰年,一般方法是用4或400去除这一年的年份数,如果除得的商是整数而没有余数,那么这一年是闰年;如果有余数,那么这一年是平年。

程序分析:

        先根据输入的月份确定从年初到当前月份之前的总天数,再加上当前月份的天数即可。之后判断年份是否为闰年,若是闰年且输入月份大于3时,需多加一天。

        以2022年3月24日为例,输入月份大于3,则先确定3月之前的总天数,然后再加上24天,即位本年的第几天。

代码实现:

        使用Switch()函数确定当前月份之前的总天数。

        使用if判断是不是闰年,区分年份为整百数时(year % 400 == 0 )或非整百数时(year % 4 == 0 && year % 100 != 0),如下所示:

if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))

源代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int day, month, year, sum=0, leap;            //定义日、月、年、总天数、闰年参数
	printf("请输入年、月、日,格式为:年 月 日\n");
	scanf("%d %d %d", &year, &month, &day);       //输入年,,月,日
	switch (month)                               // 根据月份确定之前月份的总天数
	{
		case 1:sum = 0; break;
		case 2:sum = 31; break;
		case 3:sum = 59; break;
		case 4:sum = 90; break;
		case 5:sum = 120; break;
		case 6:sum = 151; break;
		case 7:sum = 181; break;
		case 8:sum = 212; break;
		case 9:sum = 243; break;
		case 10:sum = 273; break;
		case 11:sum = 304; break;
		case 12:sum = 334; break;
		default:printf("data error"); break;
	}
	sum += day;                          // 加上当前月份的天数
	if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))  // 判断是否为闰年
		leap = 1;
	else 
		leap = 0;

	if (leap == 1 && month > 2)  //若是闰年且月份大于2,总天数应该加一天
		sum++;
	
	printf("这一天是这一年的第 %d 天。\n", sum);
	
	return 0;
}

运行结果:

        输入年份为平年时:

请输入年、月、日,格式为:年 月 日
2022 3 24
这一天是这一年的第 83 天。

        1月份31天,2月份28天,本月24天,共83天。

        输入年份为闰年时:

请输入年、月、日,格式为:年 月 日
2020 3 24
这一天是这一年的第 84 天。

        1月份31天,2月份29天,本月24天,共84天,符合题目要求 。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值