C语言实现简单万年历

  #include

  #include

  int year, month;

  int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };

  int ping[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

  char week[7][10] = { "SUN","MON","TUE","WED","THU","FRI","SAT" };

  bool IsLeap(int year)

  {

  if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) //判断闰年

  {

  return true;

  }

  else

  {

  return false;

  }

  }

  void PrintStar()

  {

  printf(" 万年历

  ");

  printf("****************************************************

  ");

  for (int i = 0; i < 7; i++)

  {

  printf("%s ", week[i]);

  }

  printf("

  ");

  }

  int DaySum(int year, int month)

  {

  int sum = 0;

  for (int i = 1990; i < year; i++)

  {

  if (IsLeap(i))

  {

  sum += 366;

  }

  else

  {

  sum += 365;

  }

  }

  for (int i = 0; i < month - 1; i++)

  {

  if (IsLeap(year))

  {

  sum += run[i];

  }

  else

  {

  sum += ping[i];

  }

  }

  return sum;

  }

  void PrintCal(int sum, int year, int month)

  {

  int nRes, nTmp;

  nRes = sum % 7+1;//前面空几格

  nTmp = 7 - nRes;//从第几格开始打印

  for (int i = 0; i < nRes; i++)

  {

  printf(" ");

  }

  if (IsLeap(year))

  {

  for (int i = 1; i < run[month - 1]+1; i++)

  {

  printf("%d ", i);

  if (nTmp == i || (i - nTmp) % 7 == 0)

  {

  printf("

  ");

  }

  }

  printf("

  ");

  }

  else

  {

  for (int i = 1; i < ping[month - 1]+1; i++)

  {

  printf("%d ", i);

  if (nTmp == i || (i - nTmp) % 7 == 0)

  {

  printf("

  ");

  }

  }

  printf("

  ");

  }

  }

  int main(void)

  {

  while (1)

  {

  scanf_s("%d %d", &year, &month);

  PrintStar();

  PrintCal(DaySum(year, month), year, month);

  printf("****************************************************

  ");

  }

  return 0;

  }