5. 輸入年份和月份,輸出該月日歷,復(fù)雜問題的分解 /*輸入年份和月份,輸出該月月歷*/ #include <stdio.h> /*聲明函數(shù)GetWeekDay求某年某月某日是星期幾*/ int GetWeekDay(int,int,int); /*聲明函數(shù)GetMonthDays求某年某月共有幾天*/ int GetMonthDays(int,int); /*聲明函數(shù)PrintMonthCalender打印某月日歷*/ int PrintMonthCalender(int,int); /*聲明函數(shù)CheckLeap判斷某年是否是閏年*/ int CheckLeap(int); main() { /*定義變量,startDay為要求月的第一天的星期數(shù), *days為要求月的天數(shù) */ int year,month,startDay,days; printf("input the year and month(YYYY-MM):"); scanf("%d-%d",&year,&month); printf("\n\t\t\t%d-%d\n",year,month); /*引用函數(shù)GetWeekDay求要求月的首天是星期幾*/ startDay=GetWeekDay(year,month,1); /*引用函數(shù)GetMonthDays求要求月有多少天*/ days=GetMonthDays(year,month); PrintMonthCalender(startDay,days); return(0); } /*定義函數(shù)GetWeekDay求某年某月某日是星期幾*/ int GetWeekDay(int year,int month,int day) { /*定義變量,days是從 *weekday是星期數(shù),i是控制月份的變量 */ int days,weekday,i; days=year*365+year/400+year/4-year/100; /*計算從 for(i=12;i>=month;i--) days=days-GetMonthDays(year,i); /*計算從 days=days+day; /*計算該天的星期數(shù)*/ weekday=days%7; return weekday; } /*定義函數(shù)GetMonthDays求某年某月共有幾天*/ int GetMonthDays(int year,int month) { /*對天數(shù)不同的月份分開討論*/ if(month==4||month==6||month==9||month==11) return 30; else { /*單獨對二月的討論*/ if(month==2) { /*對閏年的判斷*/ if(CheckLeap(year)) return 29; else return 28; } else return 31; } } /*定義函數(shù)PrintMonthCalender打印某月日歷*/ int PrintMonthCalender(int startDay,int days) { int num,count; num=-startDay; printf("\nSun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n"); /*控制輸出的天數(shù)*/ while(num<=days) { printf("\n"); /*對一個星期七天的控制*/ for(count=1;count<=7;count++) { num=num+1; /*控制輸出的天數(shù)*/ if(num>=1&&num<=days) printf("%d\t",num); else printf("\t"); } } printf("\n"); } /*定義函數(shù)CheckLeap判斷某年是否是閏年*/ int CheckLeap(int year) { if((year%4==0&&year%100!=0)||(year%400==0)) return 1; else return 0; } 運行效果如圖:
![]() |
|