计算某一天是这一年中的第几天

问题描述:定义一个结构体变量(包括年月日)计算该日在本年中是第几天?

样例输入
2016 12 31
样例输出
366

#include<stdio.h>
bool isLeapYear(int year);//判断这一年是否是闰年 
int calDay(int year);//计算天数 
struct Day{
	int year;
	int month;
	int sday;
};
int monthDay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool isLeapYear(int year){
	if(year%4==0 && year%100!=0||year%400==0)
		return true;
	return false;
}
int calDay(int y,int m,int d){
	int count=0;
	for(int i=1;i<m;i++){
		count+=monthDay[i];
		if(i==2 && isLeapYear(y))
		count++;
	}
	count+=d;
	return count;
}
int main(){
	Day day={0};
	printf("请输入年,月,日:  ") ;
	scanf("%d %d %d",&day.year,&day.month,&day.sday);
	int n=calDay(day.year,day.month,day.sday); 
	printf("这一天是这一年中的第:%d 天\n",n);
	return 0; 
}

代码分析
首先我们定义了一个结构体变量Day,用来接收用户输入的年月日
然后定义了一个全局变量,数组monthDay,用来存储1月到12月每一个月的天数
其次是两个函数,函数isLeapYear是bool类型的用来判断用户输入的年份是否是闰年,如果是则返回ture,不是则返回false;函数calDay是int类型的,用来计算天数在这个函数里面,我们首先定义了一个整型的变量count,用来存储天数,初始化为0。然后循环遍历月份,从1月到用户输入的那一月的前一个月,然后累加count,判断如果当月是2月并且调用isLeapYear返回true(该年为闰年)时,count在加1,之后循环遍历完,再给count加上用户输入的‘日’,再返回count就可以了
运行结果展示
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40871196/article/details/84745864