测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A46398. 计算两个日期之间的天数计算两个日期间的天数,并在用户输入时检查月份和日期是否有误,有误时要求重新输入。

填空题 较易

题目描述

计算两个日期之间的天数

计算两个日期间的天数,并在用户输入时检查月份和日期是否有误,有误时要求重新输入。

参考答案

#include<stdio.h> #include<stdlib.h> int func1(int flag,int mon); int func2(int mon, int day, int year); int check(int in, int flag); int main() { system("color F0"); int year1,year2,mon1,mon2,day1,day2,flag,i,p,n=0,m=0; void input(int *year,int *mon,int *day); void change(int* x, int* y); while (1) { printf("请输入起始时间:\n"); input(&year1, &mon1, &day1); printf("请输入结束时间:\n"); input(&year2, &mon2, &day2); if ((year1 * 10000 + mon1 * 100 + day1) > (year2 * 10000 + mon2 * 100 + day2)){ change(&year1, &year2); change(&mon1, &mon2); change(&day1, &day2); } p = year2 - year1; i = p; while (p >= 2) { p = p - 1; flag = year1 + p; if ((flag % 4 == 0) && ((flag % 400 == 0) || (flag % 100 != 0))) { n++; } else { m++; } } year1 = ((year1 % 4 == 0) && ((year1 % 400 == 0) || (year1 % 100 != 0))) ? 366 : 365; year2 = ((year2 % 4 == 0) && ((year2 % 400 == 0) || (year2 % 100 != 0))) ? 366 : 365; flag = func2(mon2, day2, year2) - func2(mon1, day1, year1); if (i == 0) printf("日期相差%d天\n\n", flag); else if (i == 1) printf("日期相差%d天\n\n", flag + year1); else printf("日期相差%d天\n\n", flag + year1 + n * 366 + m * 365); } return 0; } void input(int* year, int* mon, int* day) { int flag; printf("年:"); scanf_s("%d", year); printf("月:"); scanf_s("%d", mon); *mon = check(*mon,12); flag = ((*year % 4 == 0) && ((*year % 400 == 0) || (*year % 100 != 0))) ? 1 : 0; flag = func1(flag, *mon); printf("日:"); scanf_s("%d", day); *day = check(*day, flag); } void change(int* x, int* y) { int z; z = *y; *y = *x; *x = z; } int func1(int flag,int mon) { int a, b; a = (mon == 2) ? 1 : 0; b = ((mon == 1) || (mon == 3) || (mon == 5) || (mon == 7) || (mon == 8) || (mon == 10) || (mon == 12)) ? 1 : 0; switch (a * 4 + b * 2 + flag) { case 0: case 1:return 30; break; case 2: case 3:return 31; break; case 4:return 28; break; case 5:return 29; break; } } int func2(int mon, int day, int year) { int flag,num=0; if (year == 365){ for (flag = 1; flag < mon; flag++) { num = func1(0, flag) + num; } } else{ for (flag = 1; flag < mon; flag++) { num = func1(1, flag) + num; } } return num + day; } int check(int in, int flag) { if ((in <= flag) && (in >= 1)) return in; else{ printf("输入有误,请重新输入:"); scanf_s("%d", &in); return check(in,flag); } }
上一题 下一题