|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
键盘上按照年月日的格式输入年份、月和日期,运行程序以后,判断这一天是这一年的第几天。
输入描述
标准输入,输入三个整数,即年、月、日(都是正数),以空格间隔,不保证输入的年份和日期是正确的。
输出描述
标准输出,输出这一天是这一年的第几天,如果日期不合法,输出“data error!”。- #include<stdio.h>
- int main()
- {
- int year,mon,day,days=0;
- scanf("%d%d%d",&year,&mon,&day);
- if(year>9999||year<1000) printf("data error!");
- else
-
- {if(((year%400==0)||(year%4==0&&year%100!=0))&&mon>2)
- days++;
- switch(mon)
- {
- case 1:
- {
- if(day>31) printf("data error!");
- else
- {days=day;printf("%d",days);}
- break;
- }
- case 2:
- {
- if(((year%400==0||(year%4==0&&year%100!=0))&&day>29)||
- ((year%400!=0||(year%4!=0&&year%100==0))&&day>28))
- printf("data error!");
- else
- {days=day+31;printf("%d",days);}
- break;
- }
- case 3:
- {
- if(day>31) printf("data error!");
- else
- {days=day+59;printf("%d",days);}
- break;
- }
- case 4:
- {
- if(day>30) printf("data error!");
- else
- {days=day+90;printf("%d",days);}
- break;
- }
- case 5:
- {
- if(day>31) printf("data error!");
- else
- {days=day+120;printf("%d",days);}
- break;
- }
- case 6:
- {
- if(day>30) printf("data error!");
- else
- {days=day+151;printf("%d",days);}
- break;
- }
- case 7:
- {
- if(day>31) printf("data error!");
- else
- {days=day+181;printf("%d",days);}
- break;
- }
- case 8:
- {
- if(day>31) printf("data error!");
- else
- {days=day+212;printf("%d",days);}
- break;
- }
- case 9:
- {
- if(day>30) printf("data error!");
- else
- {days=day+243;printf("%d",days);}
- break;
- }
- case 10:
- {
- if(day>31) printf("data error!");
- else
- {days=day+273;printf("%d",days);}
- break;
- }
- case 11:
- {
- if(day>30) printf("data error!");
- else
- {days=day+304;printf("%d",days);}
- break;
- }
- case 12:
- {
- if(day>31) printf("data error!");
- else
- {days=day+334;printf("%d",days);}
- break;
- }
- default:printf("data error!");
- }
- }
- }
复制代码
本帖最后由 六翻了 于 2023-10-7 20:20 编辑
之前写的,你看下判断2月到底有几天的部分
找一个确定的闰年作为一个点,再用fabs求绝对值
- struct Date
- {
- int day;
- int month;
- int year;
- };
- int days(int, int, int, int);
- int days(int a, int b, int c, int i)
- {
- while(b--)
- {
- switch(b)
- { case 1: c += 31; break;
- case 3: c += 31; break;
- case 5: c += 31; break;
- case 7: c += 31; break;
- case 8: c += 31; break;
- case 10: c += 31; break;
- case 12: c += 31; break;
- case 4: c += 30; break;
- case 6: c += 30; break;
- case 9: c += 30; break;
- case 11: c += 30; break;
- case 2: break;
- }
- }
- if((b) > 2)
- {
- if(i == 0)
- {
- c += 29;
- }
- else
- {
- c += 28;
- }
- }
- return c;
- }
- int main(void)
- {
- struct Date head;
- int i, sum;
- do
- {
- printf("请输入年月日:");
- scanf("%d-%d-%d", &head.year, &head.month, &head.day);
- i = fabs((head.year) - 2000);
- i = i % 4;
- if(i != 0 && head.day >= 29 && head.month == 2)//非闰年 >= 29天
- {
- printf("错误!该年2月只有28天!!\n");
- }
- else if(i == 0 && head.day > 29 && head.month == 2)//润年 > 29天
- {
- printf("错误!该年2月只有29天!!\n");
- }
- if (head.month == 1 || (head.month>1 && head.month <= 7 && (head.month % 2) == 1) ||
- (head.month>=8 && head.month <= 12 && head.month % 2 == 0) && head.day > 31)
- {
- printf("date error!\n");
- }
- else if((head.month>1 && head.month < 7 && (head.month % 2) == 0) ||
- (head.month>=8 && head.month <= 12 && head.month % 2 == 1) && head.day > 30)
- {
- printf("date error!\n");
- }
- else
- break;
- } while (1);
- sum = days(head.year, head.month, head.day, i);
- printf("该日是本年的第 %d 天\n", sum);
- return 0;
- }
复制代码
|
|