C语言实现日期转换问题(要求考虑闰年的问题)

按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题):
/* 函数功能:  对给定的某年某月某日,计算它是这一年的第几天
函数参数:  整型变量year、month、day,分别代表年、月、日          
函数返回值:这一年的第几天 */
int  DayofYear(int year, int month, int day);
/* 函数功能:    对给定的某一年的第几天,计算它是这一年的第几月第几日
函数入口参数:整型变量year,存储年
                 整型变量yearDay,存储这一年的第几天
函数出口参数:整型指针pMonth,指向存储这一年第几月的整型变量
                 整型指针pDay,指向存储第几日的整型变量
函数返回值:  无 */
void  MonthDay(int year, int yearDay, int *pMonth, int *pDay);
输出如下菜单,用switch语句实现根据用户输入的选择执行相应的操作。
1. year/month/day -> yearDay
2. yearDay -> year/month/day
3. Exit
Please enter your choice:
输入提示信息:
"Please enter year, month, day:"
"Please enter year, yearDay:"
输入格式:
"%d,%d,%d"
"%d,%d"
输出提示信息和格式:
"yearDay = %d
"
"month = %d, day = %d
"
 1 #include    <stdio.h>
 2 #include    <stdlib.h>
 3 int  DayofYear(int year, int month, int day);
 4 void  MonthDay(int year, int yearDay, int *pMonth, int *pDay);
 5 void  Menu(void);
 6 int dayTab[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},                           {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
 7 int main()
 8 {                                
 9     int    year, month, day, yearDay;
10     char   c;
11     Menu();             /* 调用Menu函数显示一个固定式菜单 */
12     c = getchar();      /* 输入选择 */
13     switch (c)          /* 判断选择的是何种操作 */
14     {                                
15     case '1':
16         printf("Please enter year, month, day:");
17         scanf("%d,%d,%d", &year, &month, &day);
18         yearDay = DayofYear(year, month, day);
19         printf("yearDay = %d
", yearDay);
20         break;
21     case '2':
22         printf("Please enter year, yearDay:");
23         scanf("%d,%d", &year, &yearDay);
24         MonthDay(year, yearDay, &month, &day);
25         printf("month = %d,day = %d
", month, day);
26         break;
27     case '3':
28         exit(0);   /* 退出程序的运行 */
29     default:
30         printf("Input error!");
31     }
32     return 0;
33 }                                
34 /* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */
35 int  DayofYear(int year, int month, int day)
36 {                                
37     int  i, leap;
38     /* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
39     否则leap值为0,用第0行dayTab[0][i]计算 */
40     leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
41     for (i = 1; i < month; i++)
42     {                                
43         day = day + dayTab[leap][i];
44     }
45     return day;         /* 返回计算出的day的值 */
46 }                                
47 /* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 */
48 void  MonthDay(int year, int yearDay, int *pMonth, int *pDay)
49 {                                
50     int  i, leap;
51     leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
52     for (i = 1; yearDay > dayTab[leap][i]; i++)
53     {                                
54         yearDay = yearDay - dayTab[leap][i];
55     }
56     *pMonth = i;        /* 将计算出的月份值赋值给pMonth所指向的变量 */
57     *pDay = yearDay;   /* 将计算出的日号赋值给pDay所指向的变量 */
58 }                                
59 /* 函数功能:显示菜单 */
60 void  Menu(void)
61 {                                
62     printf("1. year/month/day -> yearDay
");
63     printf("2. yearDay -> year/month/day
");
64     printf("3. Exit
");
65     printf("Please enter your choice:");
66 }                               
方法一


  1 #include<stdio.h>
  2 int  DayofYear(int year, int month, int day);
  3 void  MonthDay(int year, int yearDay, int *pMonth, int *pDay);
  4 main()
  5 {
  6     int n,year, yearDay, month, day,Month, Day;
  7     do
  8     {
  9         printf("1. year/month/day -> yearDay
");
 10         printf("2. yearDay -> year/month/day
");
 11         printf("3. Exit
");
 12         printf("Please enter your choice:");
 13         scanf("%d", &n);
 14         switch (n)
 15         {
 16         case 1:
 17         {
 18             yearDay = DayofYear(year, month, day);
 19             printf("yearDay = %d
", yearDay);
 20             break;
 21         }
 22         case 2:
 23         {
 24             MonthDay(year, yearDay, &Month, &Day);
 25             break;
 26         }
 27         }
 28     }while(n!=3);
 29 }
 30 int  DayofYear(int year, int month, int day)
 31 {
 32     int yearDay = 0, i;
 33     int days[12];
 34     printf("Please enter year, month, day:");
 35     scanf("%d,%d,%d", &year, &month, &day);
 36     if ((year % 4 == 0&&year%100!=0)||(year%100==0&&year%400==0))
 37     {
 38         days[0]=31;
 39         days[1]=29;
 40         days[2]=31;
 41         days[3]=30;
 42         days[4]=31;
 43         days[5]=30;
 44         days[6]=31;
 45         days[7]=31;
 46         days[8]=30;
 47         days[9]=31;
 48         days[10]=30;
 49         days[11]=31;
 50     }
 51     else
 52     {
 53         days[0]=31;
 54         days[1]=28;
 55         days[2]=31;
 56         days[3]=30;
 57         days[4]=31;
 58         days[5]=30;
 59         days[6]=31;
 60         days[7]=31;
 61         days[8]=30;
 62         days[9]=31;
 63         days[10]=30;
 64         days[11]=31;
 65     }
 66     for (i = 0; i < month - 1; i++)
 67     {
 68         yearDay += days[i];
 69     }
 70     yearDay += day;
 71     return yearDay;
 72 }
 73 void  MonthDay(int year, int yearDay, int *pMonth, int *pDay)
 74 {
 75     int month = 0, day;
 76     int days[12];
 77     printf("Please enter year, yearDay:");
 78     scanf("%d,%d", &year, &yearDay);
 79     if ((year % 4 == 0&&year%100!=0)||(year%100==0&&year%400==0))
 80     {
 81         days[0]=31;
 82         days[1]=29;
 83         days[2]=31;
 84         days[3]=30;
 85         days[4]=31;
 86         days[5]=30;
 87         days[6]=31;
 88         days[7]=31;
 89         days[8]=30;
 90         days[9]=31;
 91         days[10]=30;
 92         days[11]=31;
 93     }
 94     else
 95     {
 96         days[0]=31;
 97         days[1]=28;
 98         days[2]=31;
 99         days[3]=30;
100         days[4]=31;
101         days[5]=30;
102         days[6]=31;
103         days[7]=31;
104         days[8]=30;
105         days[9]=31;
106         days[10]=30;
107         days[11]=31;
108     }
109     do
110     {
111         yearDay -= days[month];
112         month++;
113     }
114     while (yearDay >= days[month]);
115     day = yearDay;
116     printf("month = %d, day = %d
", month+1, day);
117 }
方法二
 
原文地址:https://www.cnblogs.com/20201212ycy/p/14774857.html