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

三、 运行结果

相关推荐
炸膛坦客7 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
世人万千丶8 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
遇乐的果园11 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
遇乐的果园12 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_13 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
可乐奶茶sky13 小时前
AI Agent 学习
人工智能·学习
摇滚侠13 小时前
Java 全栈开发实战教程 课程笔记 29-33
笔记
茯苓gao14 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
程序员Rock14 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机
whyTeaFo14 小时前
GAMES101: Lecture 9: Shading 3(Texture Mapping cont.) ppt笔记
笔记