C语言学习笔记20260606- 求月份天数三种写法

C语言学习笔记20260606- 求月份天数三种写法

一、知识点总结:闰年判断规则

闰年条件(满足其一即为闰年):

  1. 能被4整除,但不能被100整除

  2. 能被400整除

闰年2月29天,平年2月28天


二、实现方法

方法一:基础if判断法(最易懂、新手推荐)

思路:

  1. 定义数组存储平年12个月的天数

  2. 默认读取数组天数

  3. 如果是闰年并且是2月,天数+1

c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int year, month, day;
	//平年每月天数
	int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

	printf("请输入年份和月份:\n");
	scanf("%d%d", &year, &month);

	//基础合法性判断
	if (month < 1 || month > 12)
	{
		printf("月份输入错误!\n");
		return 0;
	}

	day = days[month - 1];

	//闰年二月单独加一天
	if (((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) && month == 2)
	{
		day += 1;
	}

	printf("%d年%d月共有%d天\n", year, month, day);
	return 0;
}

方法二:二维数组法

思路:

  1. 建立二维数组:第0行存平年、第1行存闰年

  2. 通过闰年结果(0或1)直接选择对应行

c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int year, month;
	//二维数组:[0]平年 [1]闰年
	int days[2][12] = {
		{31,28,31,30,31,30,31,31,30,31,30,31},
		{31,29,31,30,31,30,31,31,30,31,30,31}
	};

	printf("请输入年份和月份:\n");
	scanf("%d%d", &year, &month);

	if (month < 1 || month > 12)
	{
		printf("月份输入错误!\n");
		return 0;
	}

	//闰年为1,平年为0
	int is_leap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

	//直接取值
	printf("%d年%d月共有%d天\n", year, month, days[is_leap][month - 1]);
	return 0;
}

方法三:函数封装法

思路:

  1. 将闰年判断单独封装函数

  2. 将获取天数单独封装函数

  3. 主函数只负责输入输出,结构清晰

c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//判断闰年
int IsLeapYear(int y)
{
	return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

//获取当月天数
int GetMonthDays(int y, int m)
{
	int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (m == 2 && IsLeapYear(y))
	{
		return 29;  //闰年二月是29天
	}
	return days[m - 1];
}

int main()
{
	int year, month;
	printf("请输入年份和月份:\n");
	scanf("%d%d", &year, &month);

	if (month < 1 || month > 12)
	{
		printf("月份输入错误!\n");
		return 0;
	}

	int day = GetMonthDays(year, month);
	printf("%d年%d月共有%d天\n", year, month, day);
	return 0;
}

三、 运行结果

相关推荐
dadaobusi7 小时前
学习: PCIe 6.0 的 L0p
学习
燕落南枝8 小时前
CSS 学习:类型选择器与 AI 注释实战
css·人工智能·学习
Swilderrr13 小时前
论文精读:《Directory-Aware Query and Maintenance in Vector Databases》
笔记·学习
kkkkkkkkkk_Z13 小时前
新手自学嵌入式 | 学习日记:LCD显示原理、PWM控制、电容触摸屏(GT9147)驱动开发与项目实战
驱动开发·学习
SatanII13 小时前
K8s 存储与配置管理|Volume、ConfigMap、Secret 核心笔记
笔记·rpc·kubernetes
LXT71214 小时前
每日英语一读|为什么夏天的雷雨,总爱在傍晚出现?
深度学习·学习
知识分享小能手14 小时前
C学习教程,从入门到精通,C语言文件 — 完整知识点详解(14)
c语言·网络·学习
羊羊一洋14 小时前
ROM&RAM
c语言·stm32·学习
I'mChloe15 小时前
飞牛NAS部署flatnotes实战:Docker、8080端口、Markdown笔记与固定地址访问
笔记·docker·容器
库玛西15 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法