题目:给出年、月、日,计算该日是该年的第几天?
分析:
用数组列出每个月的天数,即:
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
31 28 31 30 31 30 31 31 30 31 30 31
默认2月是28天,要判断年份是否是闰年,闰年2月29天,则总天数+1
判断是否为闰年:1、能被4整除且不能被100整除;2、被100整除且能被400的整除
#include <stdio.h>
int main ()
{
int year,mon,day,sum,p;
printf("input year month day\n");//键盘输入日期
scanf("%d%d%d",&year,&mon,&day);
sum=getDate(year, mon,day);//计算天数
printf("%d %d %d is the %d day of this year\n",year,mon,day,sum);
return 0;
}
//给出年、月、日,计算该日是该年的第几天?
//判断是否闰年
int flag(int year) {
//判断是否为闰年:1、能被4整除且不能被100整除;2、被100整除且能被400的整除
int run = 0;
if (year%4 == 0) {
if (year/100 != 0) {
run = 1;
}
if (year%100 == 0 && year%400 == 0) {
run = 1;
}
}
return run;
}
int getDate(int year, int month, int day) {
int s = 0;
int a[12] ={31,28,31,30,31,30,31,31,30,31,30,31};
for(int i = 0; i < month - 1; i++) {
s = s + a[i];
}
s = s + day;
int p = flag(year);
if(month>=3&&p==1)//闰年要多一天
s++;
return s;
}
结构体方式实现:
#include<stdio.h>
struct Date
{
int year;
int month;
int day;
} date;
void main()
{
int days =0;
scanf("%d %D %d", &date.year, &date.month, &date.day);
switch (date.month)
{
case 1:
days = date.day;
break;
case 2:
days = date.day + 31;
break;
case 3:
days = date.day + 59; //31 + 28
break;
case 4:
days = date.day + 90; // 59 + 31
break;
case 5:
days = date.day + 120; // 90 + 30
break;
case 6:
days = date.day + 151; // 120 + 31
break;
case 7:
days = date.day + 181;// 151 + 30
break;
case 8:
days = date.day + 212; // 181 + 31
break;
case 9:
days = date.day + 243; // 212 + 31
break;
case 10:
days = date.day + 273; // 243 + 30
break;
case 11:
days = date.day + 304; // 273 + 31
break;
case 12:
days = date.day + 334; // 304 + 30
break;
default:
break;
}
if (date.year % 4 == 0 && (date.year%100 !=0 || (date.year % 100==0 && date.year%400 ==0))&& date.month >= 3) {
days +=1;
}
printf("days=%d", days);
}
执行结果: