按如下函數原型用函數編程解決如下的日期轉換問題(要求考慮閏年的問題): /* 函數功能: 對給定的某年某月某日,計算它是這一年的第幾天 函數參數: 整型變量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 }