天天看点

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语言小项目: 万年历的编写

心得:做做小项目真的是件让人开心呢的事情,学以致用!

问题:怎样让两个月、三个月、甚至六个月输入在同一行呢?

继续阅读