萬年曆即:隻要給定一個特定的年份,就能把一整年的月曆顯示出來,月曆包括日期和星期
思路:
第一年的1月1日一定是周一,是以要知道所求的那一年1月1日是周幾,就求在那一年之前一共過去了多少天,上一年最後一天的星期+1就是這一年的星期。
那求一共過去了多少天,就得分平年和閏年,平年隻有365天,閏年是366天
閏年是指 能被4整除但是不能被100整除的年或者是能被400整除的年。
求星期,就拿天數對7取模,如果說過去了7天,則第一天是周一,那麼今天就是7%7+1,還是周一
#include<stdio.h>
int fun(int i)
{
int s;
if(i%4==0&&i%100!=0||i%400==0)
s=366;
else s=365;
return s;
}
void main()
{
int i,j,n,k,m,sum,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("請輸入要查詢的年份:");
scanf("%d",&n);
printf("\n\n\n%8d年的月曆為\n\n\n",n);
printf("=================================================================================================\n\n\n\n");
for(i=1;i<n;i++)
sum+=fun(i); //計算今年之前一共過去了多少天
m=sum%7+1;//計算今年的第一天是周幾
if(fun(n)==366)
a[1]=29; //如果是閏年,2月就是29天
for(i=0;i<12;i++)
{
printf("%10d月\n",i+1);
printf("*********************************************************\n");
printf("Sun Mon Tue Wed Thu Fri Sat\n");
for(k=0;k<m;k++)
printf(" "); //确定每月的第一天是星期幾,比如說是星期三,星期日星期一星期二那裡 就全是空格
for(j=1;j<=a[i];j++)
{
printf("%-4d",j); //輸出每個月的日期
m++;
if(m%7==0)
printf("\n"); //一周是7天,是以日期每七天換一次行
}
m=m%7; //計算下一個月的第一天是周幾
printf("\n\n");
}
}
運作結果:
心得:做做小項目真的是件讓人開心呢的事情,學以緻用!
問題:怎樣讓兩個月、三個月、甚至六個月輸入在同一行呢?