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

本文介绍了一种通过C语言实现的日期计算方法,重点展示了如何利用数组和循环来确定输入日期是一年中的第几天。提供了两种实现方式,一种是通过switch语句嵌套的方式,另一种则是采用while循环简化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

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<stdio.h>
#include<stdlib.h>


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值