题目内容:输入某年某月某日,判断这一天是这一年的第几天?
输入样例:2021 12 10
输出样例:2021年12月10日是这一年的第344天!
输入样例:2020 12 10
输出样例:2020年12月10日是这一年的第345天!
个人解法如下:(数组与switch语句都有用到)
#define _CRT_SECURE_NO_WARNINGS //防报错
#include <stdio.h>
#include <stdlib.h>
int Days_M(int year, int month) //该函数用于获得当月月份的对应天数
{
int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //默认2月份为平年28天(0号位占位元素为0不影响计算)
if ((year % 100 != 0 && year % 4 == 0) || month % 400 == 2)
days[2] += 1; //闰年2月天数加1天
return days[month];
}
int Days_SUM(int year, int month, int day) //该函数用于获得总天数
{
int SUM = 0;
if (year < 1) //年数报错
return -1;
if (month < 1 || month > 13) //月数报错
return -2;
if (day < 1 || day > Days_M(year, month)) //天数报错
return -3;
for (int i = 0; i < month; i++) //直到当月跳出循环(若int i=1会导致一月也进行一次循环)
SUM += Days_M(year, i); //获得本月以前的所有月份天数之和
return SUM + day; //返回值中加上本月当前天数
}
int main()
{
int year, month, day;
int SUM = 0;
printf("请输入年月日(用空格隔开):\n");
scanf_s("%d %d %d", &year, &month, &day);
SUM = Days_SUM(year, month, day);
switch (SUM)
{
case -1:
printf("年份输入错误");
break;
case -2:
printf("月份输入错误");
break;
case -3:
printf("日子输入错误");
break;
default:
printf("%d年%d月%d日是这一年的第%d天!", year, month, day, SUM);
break;
}
return 0;
}
本人拙作,请大佬们点评。