问题描述:定义一个结构体变量(包括年月日)计算该日在本年中是第几天?
样例输入:
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就可以了
运行结果展示: