自 创 日 历 (在代码里有注释讲细节)

简介: 做日历主要是要确定好第一天是星期几,然后算间隔多少天,算出具体这一天是星期几,然后把我们想打印的打印出来,把每个月的第一天定位到该在的地方。
//预处理
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//构造一个二维数组,存放闰平年的月的天数。
int days_in_month[2][13] = { {0,31,28,31,30,31,30,31,31,30,31,30,31}
  ,{0,31,29,31,30,31,30,31,31,30,31,30,31} };
//13是为了第month列刚好对应第几列(数组行和列从0数起)
//判断年份是否为闰年,闰年返回1(真,二维数组第0行),平年返回0(假,二维数组第1行)
int judge_run(int year)
{
  return  ( year % 400 == 0 ) || (year % 100 != 0 && year % 4 == 0);
}
//判断某一天是星期几。(星期日返回7)
int judge_weekday(int year, int month, int day)
{
  int year1 = 1;  //公元1月1号是星期一。
  int jiange_year = year - year1, jiange_days = 0;
  int i;
  for (i = 0; i < jiange_year; i++)
  {
  if (judge_run(i + year1))
    jiange_days += 366;
  else
    jiange_days += 365;
  }
  for (i = 1; i < month; i++) 
  {
  jiange_days += days_in_month[judge_run(year)][i];
  }
  jiange_days += day - 1;//例如第一个月的第二天与第一天隔着一天
  return  year1 + jiange_days % 7;
}
//打印日历
void show(int year, int month)
{
  printf("  | 一  | 二  | 三  | 四  | 五  | 六  | 日  | \n");
  printf("----------------------------------------------\n");
  int n = judge_weekday(year, month, 1);
  int i;
//定位到星期几开始打印日期。
  for (i = 1; i < n; i++)
  {
  printf("      ");
  }
  printf("    ");
//在二维数组中拿到这个月有多少天然后打印
  for (i = 1; i <= days_in_month[judge_run(year)][month]; i++)
  {
  printf("%2d    ", i);
  if (judge_weekday(year, month, i) == 7)//到了星期日打印完后换行
    printf("\n\n    ");
  }
  printf("\n----------------------------------------------\n");
}
int main()
{
  int year = 0, month = 0;
  printf("请输入你要查询的年月份:>");
  scanf("%d%d",&year,&month);
  show(year, month);
  return 0;
}

       做日历主要是要确定好第一天是星期几,然后算间隔多少天,算出具体这一天是星期几,然后把我们想打印的打印出来,把每个月的第一天定位到该在的地方。


目录
相关文章
|
7月前
|
设计模式 算法 前端开发
有什么可以减少注释,但依然能让他人看得懂代码的方法吗?
有什么可以减少注释,但依然能让他人看得懂代码的方法吗?
60 0
|
6月前
|
机器学习/深度学习 算法 计算机视觉
完全让ChatGPT写一个风格迁移的例子,不改动任何代码
完全让ChatGPT写一个风格迁移的例子,不改动任何代码
59 1
|
算法 定位技术
连连看核心算法与基本思想(附全部项目代码链接与代码详细注释)
连连看核心算法与基本思想(附全部项目代码链接与代码详细注释)
437 0
|
7月前
|
Java
注释之背后:代码的解释者与保护者
注释之背后:代码的解释者与保护者
42 0
|
7月前
|
前端开发 算法 JavaScript
【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏
【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏
144 0
EasyX基础内容(和易错的地方)(一)
注意代码里面的文字,是易错点
172 0
EasyX基础内容(和易错的地方)(二)
EasyX基础内容(和易错的地方)
269 0
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
90 0
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
|
Unix Apache C++
给代码写注释时有哪些讲究?
给代码写注释时有哪些讲究?
169 0
给代码写注释时有哪些讲究?
|
前端开发
前端工作总结131-优化项目的代码显示名字
前端工作总结131-优化项目的代码显示名字
105 0
前端工作总结131-优化项目的代码显示名字

热门文章

最新文章

相关实验场景

更多