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;
}

三、 运行结果

相关推荐
路灯上の马陈2 小时前
Java 内部类 学习笔记
笔记·学习
希和20273 小时前
51 单片机入门笔记:江科大课程代码逐行讲解(按键控制 LED 流水灯)
笔记·单片机·mongodb
前进的李工3 小时前
Agent 学习笔记 12:Agent 的工具应该怎么设计
人工智能·笔记·学习·agent·工具调用·skill·工具设计
ever_you_love3 小时前
2026.11.9录屏笔记
笔记
li星野3 小时前
从 DICOM 到声学属性学习记录:HU 值怎么变成密度和声速
学习
希和20273 小时前
51 单片机按键控制 LED:江科大课程代码小白笔记
笔记·单片机·嵌入式硬件
希和20273 小时前
51 单片机 LED 流水灯:从直接法到循环法(江科大课程笔记)
笔记·单片机·mongodb
自信150413057593 小时前
重生之从0开始学习c++之——vector-中篇
c++·学习·算法
架构师伯子明3 小时前
ffmpeg学习4:opencv在音视频领域常用指令
opencv·学习·ffmpeg
Zwawa16 小时前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式