C语言实现按月显示的日历

本文实例为大家分享了C语言实现按月显示的日历,供大家参考,具体内容如下

首先显示一下我们最后要出来的效果图:

大概就是这个样子。那么我们先来说说基本的思路:首先计算出当前年的第一天是星期几,再根据当前年是星期几的结果计算出当前月是星期几的结果,最后再按照效果图的样子输出一下就OK了。

我们的基本步骤是:

1、定义输入函数,也就是你要输入的年和月。
2、计算当前年的第一天是星期几。我们需要定义一个基准年,再定义出基准年的第一天是星期几。最后计算出当前年与基准年之间的差值,用最后的结果加上基准年第一天是星期几,结果再%7即可。
3、计算当前月的第一天是星期几。计算出当前年的第一天和当前月的第一天之间的差值,再加上当前年的第一天,用最后的结果%7即可。
4、打印最后的结果。
5、要注意区别平年和闰年,这里我们用一个二维数组来区别。

具体实现代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

/*基本思路:定义一个基准年,然后通过基准年计算出当前年的第一天是星期几(用当前年与基准年之间的差值再加上基准年第一天是星期几,最后的结果%7),通过当前年的第一天计算出当前月的第一天是星期几(计算出当前年的第一天到当前月的第一天差值,再加上当前年的第一天是星期几,最后的结果%7)。最后输出(先空出当前月的第几天个空格然后输出当前月的天数,当当前月的第一天加上相应的天数%7为0时,就换行)。
还要注意闰年平年的区别,在此用一个二维数组区别*/

/*定义月份 用二维数组区分平年闰年*/
int months[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 } };

/*判断是否为闰年函数 是则返回1 否则返回0*/
int is_leap(int year)
{
 return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

/*输入函数*/
void input(int *month, int *year)
{
 printf("year/month:");
 scanf("%d/%d", year, month);
}

/*某一年的第一天是星期几函数*/
int first_day_of_year(int year)
{
 int base_year = 2000;//定义基准年
 int base_first = 6;//基准年的第一天是星期六
 int i = 0;
 int total = 0;//当前年与基准年的差值
 for (i = base_year; i < year; i++)
 {
  total += 365 + is_leap(i);//闰年is_leap为1 平年为0
 }
 total += base_first;
 return total % 7;
}

/*当前月的第一天是星期几*/
int first_day_of_month(int first_day, int year, int month)
{
 int i = 0;
 int total = 0;
 for (i = 1; i < month; i++)
 {
  total += months[is_leap(year)][i];
 }
 total += first_day;
 return total % 7;
}

/*输出函数*/
void output(int first_day, int year, int month)
{
 printf("Sun Mon Tue Wed Thu Fir Sat\n");
 int i = 0;
 for (i = 0; i < first_day; i++)
 {
  printf(" ");//这个月第一天是星期几前面就空几天
 }

 for (i = 1; i <= months[is_leap(year)][month]; i++)
 {
  printf("%3d ", i);
  if ((i + first_day) % 7 == 0)//用于换行
  {
   printf("\n");
  }
 }
 printf("\n");
}

int main()
{
 int month = 0;
 int year = 0;
 input(&month, &year);//输入函数
 int first_day = first_day_of_year(year);
 first_day = first_day_of_month(first_day, year, month);
 output(first_day, year, month);
 system("pause");
 return 0;
}

运行结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • c语言实现一个简单日历

    满足三个需求: 1.输入一个年份,输出是在屏幕上显示该年的日历.假定输入的年份在1940-2040年之间. 2.输入年月,输出该月的日历. 3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日. 最终完善版代码: 复制代码 代码如下: #include<stdio.h> #include <string.h> #include <time.h> #include <math.h> #include <windows.h> int year

  • C语言编写多功能日历

    我分享的第一个代码 希望大家给予我改进的建议 我的3和4的功能是空着的我还没有想好要些啥功能...  第一次上传代码······ ***还有为啥我上传的代码这么就对不齐了,在vc++6.0里就很好啊??比如说有些代码上传上来就成了在其他代码后面了对不齐 不规格了 . #include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> #define H "%d&qu

  • C语言实现按月显示的日历

    本文实例为大家分享了C语言实现按月显示的日历,供大家参考,具体内容如下 首先显示一下我们最后要出来的效果图: 大概就是这个样子.那么我们先来说说基本的思路:首先计算出当前年的第一天是星期几,再根据当前年是星期几的结果计算出当前月是星期几的结果,最后再按照效果图的样子输出一下就OK了. 我们的基本步骤是: 1.定义输入函数,也就是你要输入的年和月. 2.计算当前年的第一天是星期几.我们需要定义一个基准年,再定义出基准年的第一天是星期几.最后计算出当前年与基准年之间的差值,用最后的结果加上基准年第一

  • Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示

    之前写了一篇周和月日历,但感觉体验不是太好,所以有重新做了一遍,加上了动画.还可以自定义显示日历里的内容. 现在贴出项目源码,我现在是放在CSDN里的下载资源,这里哦 现在我上传带了GitHub上了,可以去这里下载哦,如果觉得好的话希望能给个star,谢谢支持 1.总共分为两个组件(父组件calendar.vue) <template> <div class="calendar-box"> <ul class="calendar-head&quo

  • C语言打印某一年的日历

    本文通过实例为大家分享了C语言打印某一年日历的具体代码,供大家参考,具体内容如下 输入一个年份(1970以后的),以 2*6 的格式打印当年的日历. 主要思路:遍历日期,根据日期标记每一行应该打印的内容,存放到一个数组中,然后遍历数组,根据数组的内容逐行打印.代码如下: // 打印日历 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> char month[12][10] = { "January", "Febr

  • 易语言设置月历只显示双月或单月的方法

    滚动月数属性 所属对象:月历   操作系统支持:Windows,数据类型:整数型: 将整数型数据赋值到指定对象的滚动月数属性中 语法:对象.滚动月数 =  整数型 应用对象:月历 例程 说明: 本属性规定在月历中,当按下滚动按钮改变当前显示的月份时,一次跳过的月份的数目. 改变后,每次跳过2个月. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

  • 易语言设置按钮背景显示指定的图片

    图片属性 数据类型:字节集: 本属性指定显示在对象上的图片. 语法:  对象.图片 =  字节集 应用对象: 图片框.按钮.选择框.单选框 例程: 说明: 设置按钮背景显示的图片--将图片常量所指定的图片资源数据赋值给按钮的"图片"属性. 按钮的"图片"属性可以直接在属性面板中设置. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

  • 易语言修改日期框显示附件类型的方法

    附件类型属性 所属对象:日期框   操作系统支持:Windows,数据类型:整数型: 将整数型数据赋值到指定对象的附件类型属性中 语法:对象.附件类型 =  整数型 应用对象:日期框 可供选择的属性值: 0.下拉月历 1.调节器 例程 说明: 本属性用来定义日期框的显示类型.设置日期框的显示类型为附件类型组合框现行选中的项目. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

  • 易语言在指定位置显示弹出式菜单的方法

    弹出菜单方法 英文命令:PopupMenu 操作系统支持:Windows    所属对象:窗口 用于在窗口上的当前鼠标位置或指定坐标位置显示弹出式菜单,如果调用对象为窗口组件,则自动使用其所在的窗口. 语法:  无返回值  窗口组件.弹出菜单 (欲弹出的菜单,[水平显示位置],[垂直显示位置]) 例程 说明 通过"弹出菜单"命令在指定位置弹出菜单,欲弹出的菜单必须已存在.本方法适用于所有组件. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的

  • 易语言使用信息框显示取出项目文本的方法

    取项目文本方法 英文命令:GetItemText 所属对象:组合框 返回指定项目的文本.如果指定项目不存在,将返回空文本. 语法:  文本型  组合框.取项目文本 (项目索引) 例程: 说明: 使用信息框显示取出的项目文本. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

  • c语言中用字符串数组显示菜单的解决方法

    以前写菜单方面东西时往往重复, 发现这个方法还可以, 用一个指针的指针解决遍历问题.代码如下所示: 复制代码 代码如下: #include <stdio.h>static char *menu[] = {  "1 --- push one item./n",  "2 --- pop one item./n",  "3 --- quit./n",  NULL};void Show_menu();int main(){ Show_menu

  • 原生js实现仿window10系统日历效果的实例

    舞动的灵魂版js日历,完全采用js实现,故而实现了与语言无关,jsp.asp.net php asp均可使用.无论你是开发软件,还是网站,均是不可或缺的实用代码. 该日历主要实现了获取当前时间时分秒,年月日星期,动态生成选择年的select,月的select,然后根据你所选中的年月,显示该年月对应的这一个月的日期. 点击上一个月,下一个月按钮,在下拉列表中显示对应的年月. <!DOCTYPE html> <html lang="en"> <head>

随机推荐