栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言——输入年、月、日,输出该日期是当年的第几天,其中区分了闰年和平年

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言——输入年、月、日,输出该日期是当年的第几天,其中区分了闰年和平年

主要考察了循环和数组的利用,笔者的代码比较冗余,但是简单易懂,方便初学者阅读与理解。

代码如下:用switch嵌套,更易于理解,当然也有改进的缩减代码在后文

#include
#include
#include

int main() {
	int year,mon,day;
	int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//该数组存放了12个月各自的天数
	
	scanf_s("%d%d%d", &year, &mon, &day);//此处输入年月日
	printf("您输入的日期为:%d年 %d月 %d日n",year, mon, day);

	int total = 0;
	int i;
	for (i = 0; i < mon-1; i++) {  //这个 循环 是为了统计前i个月的 总天数
		total = total + a[i];
	} 

	if (year % 4 == 0 && year % 100 || year % 400 == 0) {  //这个if用来判断 是不是闰年 
		
		total = total + 1;//闰年2月为29天 ,所以要在28天的基础上加 1

		switch (mon)
		{
		case 1: printf("是当年第:%d天", day); break;
		case 2: printf("是当年第: %d天", total + day); break;
		case 3: printf("是当年第: %d天", total + day); break;
		case 4: printf("是当年第: %d天", total + day); break;
		case 5: printf("是当年第: %d天", total + day); break;
		case 6: printf("是当年第: %d天", total + day); break;
		case 7: printf("是当年第: %d天", total + day); break;
		case 8: printf("是当年第: %d天", total + day); break;
		case 9: printf("是当年第: %d天", total + day); break;
		case 10: printf("是当年第: %d天", total + day); break;
		case 11: printf("是当年第: %d天", total + day); break;
		case 12: printf("是当年第: %d天", total + day); break;
		
		default:
			printf("输入有错误");
			break;
		}
	
	}
	else {
		//此处为平年 2月为28天
		switch (mon)
		{
		case 1: printf("是当年第:%d天", day); break;
		case 2: printf("是当年第: %d天", total + day); break;
		case 3: printf("是当年第: %d天", total + day); break;
		case 4: printf("是当年第: %d天", total + day); break;
		case 5: printf("是当年第: %d天", total + day); break;
		case 6: printf("是当年第: %d天", total + day); break;
		case 7: printf("是当年第: %d天", total + day); break;
		case 8: printf("是当年第: %d天", total + day); break;
		case 9: printf("是当年第: %d天", total + day); break;
		case 10: printf("是当年第: %d天", total + day); break;
		case 11: printf("是当年第: %d天", total + day); break;
		case 12: printf("是当年第: %d天", total + day); break;


		default:
			printf("输入有错误");
			break;
		}
	}
}

改进后的代码:使用while循环简单,代码的冗余减少,但不易于理解。

#include
#include


int main() {
	int year, mon, day, total, i;
	int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//该数组存放了12个月各自的天数

	
	
	while (scanf_s("%d%d%d", &year, &mon, &day) != EOF) {

		int total = 0;

		for (i = 0; i < mon - 1; i++) {  //这个 循环 是为了统计前i个月的 总天数
			total = total + a[i];
		}
		total = total + day;
		if (mon > 2) {

			total = total + (year % 4 == 0 && year % 100 || year % 400 == 0);
		}
		printf("您输入的日期为:%d年 %d月 %d日n", year, mon, day);

		printf("%4d-%02d-%02d 是第 %d 天", year, mon, day, total);
	}

}

运行结果:

当输入闰年日期:2020 12 31

当输入平年日期:2021 12 31

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702506.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号