一.要求
输入年月日,计算出这一天是本年第几天,例如:输入:1982 3 4,输出:63
这是一个大部分C语言初学者都会遇到的问题,实现起来很容易,同时解决方法也有很多,以下分享博主想到的巧妙的方法
二.思路
计算 a 年 b 月 c 日是该年的第几天,可以将 b 月之前的所有月份日期加上 c ,即可得出天数,可以用switch()来实现。 而switch()有一个特点,case决定入口,break决定出口,当没有break的时候,程序会从入口开始,按顺序将后面所有case中的语句执行,直到遇到break或者全部执行结束, 那么可以利用这一特点,将月份倒序排放,加入计算12月11日,那么从case 12进入,不加break,按顺序执行case 1~case 12,将1~11月份的天数加起来,最后打印输出的时候,将1~11的天数和12月11日中的11日相加,即可得出结果。
—————————希望这个方法能为你解决这个问题打开一个新的思路!——————————
—————————你的点赞、收藏、评论和关注是对博主最大的支持!(*^▽^*)————————
#define _CRT_SECURE_NO_WARNINGS 0
#include<stdio.h>
int main()
{
int year = 0, month = 0, day = 0; //年月日
int days = 0;//第几天
scanf("%d %d %d", &year, &month, &day);
//case 决定入口,break 决定出口,如果没有break,会按顺序执行入口开始每条case后的语句,直到遇到break
//计算a月b日在本年的第几天,可以用a-1个月所有的天数之和,加上b日
//结合switch语句的特性,实现以下代码
switch (month)
{
case 12:
days += 30; //下面case中存放的是 month-1 月的天数
case 11:
days += 31;
case 10:
days += 30;
case 9:
days += 31;
case 8:
days += 31;
case 7:
days += 30;
case 6:
days += 31;
case 5:
days += 30;
case 4:
days += 31;
case 3:
{ if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))//闰年2月29天
days += 29;
else //平年2月28天
days += 28;
}
case 2:
days += 31;
case 1:
days += 0;
default:
printf("输入错误!");
}
printf("%d", days + day);
return 0;
}