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

//输入某年某月某日,判断这一天是这一年的第几天?
//方法一:switch表示
#include <stdio.h>
main()
{
	int day, month, year,sun,total=0;//分别定义年月日变量
	int a;
	printf("请输入你年,月,日:\n");
	scanf_s("%d,%d,%d", &year, &month, &day);//键入年月日,中间要加“,”
	a = month;		//因为后面计算月份的时间,用了for,月份要存入另一个变量中
	for (month; month > 0; month--)//先算月份之前的时间
	{
		switch (month)
		{
		case 1:sun = 0; break;
		case 2:sun = 31; break;
		case 3:sun = 28; break;
		case 4:sun = 31; break;
		case 5:sun = 30; break;
		case 6:sun = 31; break;
		case 7:sun = 30; break;
		case 8:sun = 31; break;
		case 9:sun = 31; break;
		case 10:sun = 30; break;
		case 11:sun = 31; break;
		case 12:sun = 30; break;
		default:printf("输入错误"); break;
		}
		total = total + sun;//月数天数总和
	}
	total = total + day;//月份的天数加上单独的天数
	if(a>2)
		if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0)//判断闰年
			total=total+1;
	printf("%d年%d月%d日是%d年%d日", year,a,day,year,total);
}

拖延症还是太严重了,在后台一直运行着VS,就是注意力不够集中,无法把思绪集中起来。
1、月份的时间具有延时性,第一个月只计算天数,依次往后,所以case=o;
2、关于时间天数的问题肯定是要判断闰年和平年,而且还要月份大于2月才会受其影响;
3、闰年的表示方法很有趣,要记一下

		if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0)//判断闰年
			total=total-1;

4、当你在某一月输出比月份更高的天数的时候,代码无法判断,依旧继续执行;
这里total=total-1;可以换成total–;
|| :表示或
&&:表示与
!=:表示非

//输入某年某月某日,判断这一天是这一年的第几天?
//方法二:数组表示
#include<stdio.h>
main()
{
	int year, month, day,sun;
	int a[] = {0,0,31,28,31,30,31,30,31,31,30,31,30,31};
	int i,j;
	while(1)
	{
		sun = 0;
	printf("请输入年月日:\n");
	scanf_s("%d,%d,%d", &year, &month, &day);
	j = month;
	if (month > 12)
	{
		printf("输入错误1\n");
		continue;
	}	
	if (day > a[++month])
	{
		printf("输入错误2\n");
		continue;
	}
	for (i = 1; i <= 13; i++)
	{
		sun = sun + a[i];
		if (i == j)
		{ 
			if(month>2)
				if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0)
					sun++;
			sun = sun + day;
			printf("%d年%d月%d日是%d年%d日\n",year,j,day,year,sun);
		}	
	}
	}
}

好多问题呀,脑子转不过来了,尴尬,有小伙伴要沟通交流的可以加QQ呀:1498745547
本来想玩骚一点,然后把自己骚断腰了;
1、在润年输入2020,2,29,系统会直接提示错误2,没有解决掉;
2、想多尝试解决方案,发现自己好弱。

  • 问题很多希望大佬多多指点
  • 自己很菜希望大佬多多指点
  • 有问题是肯定的
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过计算这一天与这一年1月1日之间的天数差来确定这一天是这一年第几天。具体步骤如下: 1. 计算这一年1月1日到这一月的天数总和,记为days。 2. 如果这一年是闰输入的月份大于2月,则需要加上1天。 3. 将输入的月份之前的所有月份的天数加上,记为monthDays。 4. 将输入的日数加上monthDays和days,即为这一天是这一年第几天。 例如,输入20213月15日,则: 1. 1月1日到3月1日的天数为31+28=59天。 2. 2021不是闰,因此不需要加1天。 3. 3月15日之前的所有月份的天数为31天,因此monthDays=31。 4. 这一天是第15天,因此这一天是这一年的第59+31+15=105天。 ### 回答2: 输入某年某月某日,需要先判断一年是否为闰。闰是指能够被4整除但不能被100整除的份,或者是能够被400整除的份,例如2000判断份是否为闰后,再统计这一天是这一年第几天。 具体的方法是,先算出这个月之前所有月份的天数之和,再加上这个月的天数,如果是闰且这个月在2月份之后,还需要再加一天。 举个例子,假设输入的日期是202110月21日,首先需要判断一年是不是闰。2021不是闰,因为不能被4整除。然后将十月之前所有月份的天数加起来,1月31天+2月28天(因为不是闰)+3月31天+4月30天+5月31天+6月30天+7月31天+8月31天+9月30天,总共是273天。再加上这个月的21天,总共是294天。 因此,202110月21日是这一年的第294天。 这个方法在程序中可以用不同的编程语言实现,例如C++、Python等。实现时需要注意输入的日期格式和闰判断的条件。 ### 回答3: 首先需要了解一年中各月份的天数。一年共有365或366天,一般情况下,我们把一年按照365天计算。其中1、3、5、7、8、10、12月为31天,4、6、9、11月为30天,2月不同份天数不同,闰为29天,平为28天。 现在输入年月日,我们需要判断是否为闰(被4整除但不被100整除或被400整除的份为闰),如果是闰,2月就有29天,否则为28天。接着,利用输入年月日,计算出当的前几个月份所包含的天数和当月的天数,即可得到该天是该第几天。 以20223月5日为例,该为平,前两个月份共有31+28=59天,3月5日是第5天,因此3月5日是2022的第64天。 计算公式: 1、判断是否为闰: (1)能被4整除但不能被100整除的份为闰,如2004就是闰,1900不是闰。 (2)能被400整除的份也是闰,如2000是闰。 2、计算天数: 以3月5日为例,2022前两个月份天数之和为31+28=59,3月份天数为5,则总天数为59+5=64。数学表达式为: 前两个月份天数之和+当月天数=总天数 如果12月19日是2000第几天,计算方法如下: 第一步:判断是否为闰。2000能被400整除,是闰。 第二步:根据每个月份的天数计算前11个月份的天数总和,即1-11月的天数之和为:31+29+31+30+31+30+31+31+30+31+30=351。 第三步:加上当月天数,即:351+19=370。 第四步:得出答案:12月19日是2000的第370天。 综上所述,计算某年某月某日是该第几天,需要了解一年中各月份的天数,再判断是否为闰,最后计算前几个月份的天数总和和当月天数即可得出答案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值