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

三、 运行结果

相关推荐
cmes_love1 小时前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
马士兵教育1 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
caimouse2 小时前
Reactos 第 5 章 进程与线程 — 5.8 Windows 的 APC 机制
c语言·windows
lizhihai_992 小时前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
问心无愧05132 小时前
ctf show web入门110
前端·笔记
吃好睡好便好3 小时前
说说科学爬山
学习·生活
道一233 小时前
Windows系统查看端口占用进程的3种实用方法
windows·笔记
lunzi_08263 小时前
【学习笔记】《Python编程 从入门到实践》第8章:函数定义、参数传递与模块导入
笔记·python·学习