1、功能要求 :
1)輸入任壹年將顯示出該年的所有月份日期,對應的星期
2)註意閏年情況
其顯示格式要求如下:
1)份:中文英文都可以,
2)下壹行顯示星期,從周日到周六,中英文都可以
3)下壹行開始顯示日期從1號開始,並按其是周幾實際情況與上面的星期數垂直對齊
2、例程:
#include?<stdio.h>?#include<conio.h>?
#include<stdlib.h>?
int?IsLeapYear(int);//聲明頭文件和函數
void?main()?
{?
int?i;?
int?day;?
int?year;?
int?temp;?
int?temp_i;?
long?int?Year_days?=?0;?
int?Year_Start?=?1;?
int?Per_Year_Days;?
int?month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};?//每個月的天數,最後壹個是閏年2月
printf("Please?enter?the?year:?");?
scanf("%d",&year);//輸入年份
while(Year_Start?<?year)?//計算從公元1年1月1日到妳所查詢年份前壹年的天數,是為了以後確定這壹年的第壹天是星期幾
{?
if(?IsLeapYear(?Year_Start?)?)?//確定壹年的天數,閏年為366天,壹般為365天
Per_Year_Days?=?366;?
else?
Per_Year_Days?=?365;?
Year_days?=?Year_days?+?Per_Year_Days;?
Year_Start++;?
}?
for(?temp?=?1;?temp?<=12;?temp++?)//循環輸出每個月的日歷
{?
switch(?temp?)?
{?
case?1:?
printf("?January(%d)\n",year);//如?January(2008)
break;?
case?2:?
printf("?February(%d)\n",year);?
break;?
case?3:?
printf("?March(%d)\n",year);?
break;?
case?4:?
printf("?April(%d)\n",year);?
break;?
case?5:?
printf("?May(%d)\n",year);?
break;?
case?6:?
printf("?June(%d)\n",year);?
break;?
case?7:?
printf("?July(%d)\n",year);?
break;?
case?8:?
printf("?August(%d)\n",year);?
break;?
case?9:?
printf("?September(%d)\n",year);?
break;?
case?10:?
printf("?October(%d)\n",year);?
break;?
case?11:?
printf("?November(%d)\n",year);?
break;?
case?12:?
printf("?December(%d)\n",year);?
break;?
}?
i?=?Year_days?%?7;//計算這個月第壹天是星期幾
printf("Mon?Tue?Wed?Thu?Fri?Sat?Sun\n");?
if(?i?!=?0?)?
for(?temp_i?=?0;?temp_i?<?i;?temp_i++)//第壹天不是星期壹,在前面補空格,本來的空格少了,我加了兩個
printf("");?
day?=?1;?
if(?IsLeapYear(year)?&&?temp?==?2)?//閏年的2月
while(?day?<=?month_day[12]?)?
{?
if(?day?>1?)?
if(?Year_days?%?7?==?0?)?//如果不是1號且昨天是星期天,輸入回車,?換行?
printf("\n");?
if(?day?>=?10?)//如果大於或等於10號則輸出日期並加2個空格,小於10號輸出日期並加3個空格
printf("%d?",day);//開始沒想到這幾行是幹嘛用的,只要壹個輸出就好嘛,後來才想到是用來調整格式的
else//只是他並沒有調整好,我做了下修改,現在很整齊了
printf("%d",day);?
Year_days++;?
day++;?
}?
else?//不是閏年2月的
while?(day?<=?month_day[temp-1])//輸出,同上
{?
if(?day?>?1?)?
if(?Year_days?%?7?==?0?)?
printf("\n");?
if(?day?>=10?)?//理由同上
printf("%d?",day);?
else?
printf("%d",day);?
Year_days++;?
day++;?
}?
printf("\n");?
if(?getch()?==?'q'?)?//輸入q退出程序
exit(0);?
}?
getch();?
}?
int?IsLeapYear(?int?year?)?//判斷是否為閏年
{?
if?((year?%4?==?0)?&&?(year?%?100?!=?0)?||?//年份能被4整除且不能被100整除?或者?能被400整除的為閏年
(year?%?400?==?0)?)?
return?1;?
else?
return?0;?
}