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\n" "month = %d, day = %d\n"
 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\n", 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\n", 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\n");
63     printf("2. yearDay -> year/month/day\n");
64     printf("3. Exit\n");
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\n");
 10         printf("2. yearDay -> year/month/day\n");
 11         printf("3. Exit\n");
 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\n", 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\n", month+1, day);
117 }
方法二

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM