欢迎光临
我们一直在努力

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

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

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

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

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

2. 能被400整除

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


二、实现方法

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

思路:

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

2. 默认读取数组天数

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

#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)直接选择对应行

#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. 主函数只负责输入输出,结构清晰

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

三、 运行结果

赞(0)
未经允许不得转载:171主机测评 » C语言学习笔记20260606- 求月份天数三种写法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址