天天看點

C語言小項目: 萬年曆的編寫

萬年曆即:隻要給定一個特定的年份,就能把一整年的月曆顯示出來,月曆包括日期和星期

思路:

第一年的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");
  }
}
           

運作結果:

C語言小項目: 萬年曆的編寫

心得:做做小項目真的是件讓人開心呢的事情,學以緻用!

問題:怎樣讓兩個月、三個月、甚至六個月輸入在同一行呢?

繼續閱讀