【C语言习题】输入某年某月某日,判断这一天是这一年的第几天(用数组+switch语句编程)

题目内容输入某年某月某日,判断这一天是这一年的第几天?

输入样例:2021  12  10

输出样例:2021年12月10日是这一年的第344天!

输入样例:2020  12  10

输出样例:2020年12月10日是这一年的第345天!

个人解法如下:(数组与switch语句都有用到)

#define _CRT_SECURE_NO_WARNINGS //防报错
#include 
#include 

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

本人拙作,请大佬们点评。

你可能感兴趣的:(C语言习题,c语言)