【C语言】 判断一年当中每个月份有多少天

目录

问题:

解题思路:

代码示例

代码解析


问题:

请输入年份和月份,输出这一年这个月有多少天?

例如:程序中输入2000年2月,那么显示该年该月有29天。

解题思路:

首先在我们解决这个问题之前,我们要考虑到有一种特殊的情况闰年   

那么我们如何去判断这一年是不是闰年呢? 判断是不是闰年的条件满足以下两个就行:

(1)对应年份能被4整除,并且不能被100整除

​​​​​(2)对应年份能被400整除

 解决完了闰年的问题之后,我们就可以解决这个问题了,我们选择不用switch语句来实现,这次我们可以用自定义函数来解决这个问题,大家跟着我往下看。

代码示例

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//是闰年返回1
//不是闰年返回0
int is_leap_year(int y)
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
		return 1;
	else
		return 0;
}


int get_days_of_month(int y, int m)
{
	int mon[] = { 0, 31 ,28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	//对应月份下标  0   1   2   3   4   5   6   7   8   9  10   11 12
	int day = mon[m];
	if (is_leap_year(y) && m == 2)//满足闰年并且是二月份
	{
		day++;
	}
	return day;
}

int main()
{
	int year = 0;
	int month = 0;
	scanf("%d %d", &year, &month);
	int d = get_days_of_month(year, month);
	printf("%d年%d月有%d天", year, month, d);

	return 0;
}

运行结果如下:

代码解析

1. 首先我们定义一个变量year和变量month来表示年和月,这个问题我们需要自定义两个函数来解决,分别是 get_days_of_month 和 is_leap_year ,我们先创建一个变量d来接收 get_days_of_month函数的值

int year = 0;
int month = 0;
scanf("%d %d", &year, &month);
int d = get_days_of_month(year, month);

2.首先我们创建第一个函数 is_leap_year 用来判断这一年是不是闰年,用到上面说的判断闰年的条件,然后是闰年就返回1,不是闰年就返回0,由于我们需要接收这个函数的返回值,所以函数类型定义成int型

int is_leap_year(int y)
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
		return 1;
	else
		return 0;
}

3. 然后我们创建下一个函数 get_days_of_month,因为我们也需要接收这个函数的返回值,所以我们要定义int型,我们在函数内部创建一个叫mon的数组,然后给上值{0, 31 , 28, 31 , 30, 31, 30, 31, 31, 30, 31, 30, 31}, 这时候就有人会问了:奇怪啊,为什么会有个元素0呢?难道一年当中有月份是0天吗。 当然不是,我们用了一个非常巧妙的方法来表示天数对应的月份,就是利用数组的下标来表示月份,因为下标的特性刚好契合了十二个月份。由于数组下标是从0开始的,所以我们就要多加一个元素0来对应这个下标。                

接下来我们定义一个变量day来表示数组里面的值,如果条件满足 is_leap_year函数返回值是1并且月份是二月份,我们就day++,最后再返回此函数的值给调用函数的地方。效果如下:

int get_days_of_month(int y, int m)
{
	int mon[] = { 0, 31 ,28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	//对应月份下标  0   1   2   3   4   5   6   7   8   9  10   11 12
	int day = mon[m];
	//闰年的2月是需要特殊调整 - 29天
	if (is_leap_year(y) && m == 2)//满足闰年并且是二月份
	{
		day++;
	}
	return day;
}

4.最后我们再打印之前接收函数的变量d 的值

printf("%d年%d月有%d天", year, month, d);

看到这里,我相信大家都差不多明白了我们是如何解决这个问题的。

如果本文对你有帮助的话,可以点个免费的赞吗,这将会鼓励我继续创作,有不好的地方欢迎大家前来指正,谢谢!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周星星sakura

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值