输入年份月份以及日期,判断该日期是今年的第几天。附加题
闰年:能被4整除,但是不能被100整除 或者能被400整除
#include <stdio.h>
#define M_1 31
#define M_2 28
#define M_3 31
#define M_4 30
#define M_5 31
#define M_6 30
#define M_7 31
#define M_8 31
#define M_9 30
#define M_10 31
#define M_11 30
#define M_12 31
int main(int argc, const char *argv[])
{
int y=0,m=0,d=0;
int leap=0;
printf("请输入年月日:");
scanf("%d %d %d",&y,&m,&d);
if((y%4==0 && y%100!=0) || y%400==0){
leap=1;
}
if(leap==1 && m==2){
if(d<1 || d>29){
printf("输入日期错误\n");
return -1;
}
}else if(leap==0 && m==2){
if(d<1 || d>28){
printf("输入日期错误\n");
return -1;
}
}
if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12){
if(d<1 || d>31){
printf("输入日期错误\n");
return -1;
}
}
if(m==4 || m==6 || m==9 || m==11){
if(d<1 || d>30)
{
printf("输入日期错误\n");
return -1;
}
}
if(m<1 || m>12){
printf("输入月份有误\n");
return -1;
}
printf("%d/%d/%d\n",y,m,d);
int ds=0;
switch(m){
case 12:
ds+=M_11;
case 11:
ds+=M_10;
case 10:
ds+=M_9;
case 9:
ds+=M_8;
case 8:
ds+=M_7;
case 7:
ds+=M_6;
case 6:
ds+=M_5;
case 5:
ds+=M_4;
case 4:
ds+=M_3;
case 3:
ds+=M_2+leap;
case 2:
ds+=M_1;
case 1:
ds+=d;
break;
}
printf("该日期是当年的第%d天\n",ds);
return 0;
}
运行结果:
请输入年月日:2022 11 2
2022/11/2
该日期是当年的第306天