Doy即是day of year,一年中的第几天;
计算doy需区分平年与闰年:平年2月28天,闰年2月29天。
平年闰年的判断依据分为两种:
- 可以被400整除
- 可以被4整除,而不能被100整除
那么根据这两种判断依据可以用c语言编写小程序:
- 方法1:先计算日数,再判断平闰年
#include<stdio.h>
int main()
{
int sum[12]={0,31,59,90,120,151,181,212,243,273,304,334};
int year,month,day,doy; //申请变量,申请存放按月天数总和的数组
printf("请输入 年 月 日!");
scanf("%d %d %d",&year,&month,&day); //输入年 月 日
doy = sum[month-1];
doy = doy + day ; //计算doy
if(year%4==0&&year%100!=0||year%400==0&&month>2) //判断闰年平年,与月份是否大于2
doy++; //月份大于二且为闰年,天数加 1
printf("doy = %d",doy);//输出
return 0;
}
- 方法2: 判断平闰,计算日数
#include<stdio.h>
int main(void)
{
int a[13] = {0,31,28,31,30,31,30,31,30,31,30,31,30},doy,i,year,month,day; //申请一个数组,用于存储每个月的天数,将a[0]存入0以方便计算,申请年月日,day of year的存储空间
printf("请输入 年 月 日\n");
scanf("%d",&year),scanf("%d",&month),scanf("%d",&day); //键盘输入年 月 日
if(year%400==0||year%4==0&&year%100!=0) //判断是否为闰年
a[2] = 29; //闰年二月29天
for(i=0;i<month;i++) //for循环计算day of year ,此时即可理解a[0]为什么是0
doy = doy + a[i];
doy = doy + day; // 加入天数即完成计算
printf("今天是%d的第%d天\n",year,doy); //输出天数
return 0;
}