给出你想知道的年份,便可以计算出该年对应的每个月每个日所对应的星期数,是不是感觉很好玩 ?

  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. long int f(int year,int month)
  4. {
  5. /*f(年,月)=年-1,如月<3;否则,f(年,月)=年*/
  6. if(month<3) return year-1;
  7. else return year;
  8. }
  9. long int g(int month)
  10. {
  11. /*g(月)=月+13,如月<3;否则,g(月)=月+1*/
  12. if(month<3) return month+13;
  13. else return month+1;
  14. }
  15. long int n(int year,int month,int day)
  16. {
  17. /*N=1461*f(年、月)/4+153*g(月)/5+日*/
  18. return 1461L*f(year,month)/4+153L*g(month)/5+day;
  19. }
  20. int w(int year,int month,int day)
  21. {
  22. /*w=(N-621049)%7(0<=w<7)*/
  23. return(int)((n(year,month,day)%7-621049L%7+7)%7);
  24. }
  25. int date[12][6][7];
  26. int day_tbl[ ][12]= {{31,28,31,30,31,30,31,31,30,31,30,31},
  27. {31,29,31,30,31,30,31,31,30,31,30,31}
  28. };
  29. int main()
  30. {
  31. int sw,leap,i,j,k,wd,day;
  32. int year;/*年*/
  33. char title[]="SUN MON TUE WED THU FRI SAT";
  34. //clrscr();
  35. printf("Please input the year whose calendar you want to know: ");/*输入年*/
  36. scanf("%d%*c",&year);/*输入年份值和掠过值后的回车*/
  37. sw=w(year,1,1);
  38. leap=year%4==0&&year%100||year%400==0;/*判闰年*/
  39. for(i=0; i<12; i++)
  40. for(j=0; j<6; j++)
  41. for(k=0; k<7; k++)
  42. date[i][j][k]=0;/*日期表置0*/
  43. for(i=0; i<12; i++) /*一年十二个月*/
  44. for(wd=0,day=1; day<=day_tbl[leap][i]; day++)
  45. {
  46. /*将第i+1月的日期填入日期表*/
  47. date[i][wd][sw]=day;
  48. sw=++sw%7;/*每星期七天,以0至6计数*/
  49. if(sw==0) wd++;/*日期表每七天一行,星期天开始新的一行*/
  50. }
  51. printf("\n|==================The Calendar of Year %d =====================|\n|",year);
  52. for(i=0; i<6; i++)
  53. {
  54. /*先测算第i+1月和第i+7月的最大星期数*/
  55. for(wd=0,k=0; k<7; k++) /*日期表的第六行有日期,则wd!=0*/
  56. wd+=date[i][5][k]+date[i+6][5][k];
  57. wd=wd?6:5;
  58. printf("%2d %s %2d %s |\n|",i+1,title,i+7,title);
  59. for(j=0; j<wd; j++)
  60. {
  61. printf(" ");/*输出四个空白符*/
  62. /*左栏为第i+1月,右栏为第i+7月*/
  63. for(k=0; k<7; k++)
  64. if(date[i][j][k])
  65. printf("%4d",date[i][j][k]);
  66. else printf(" ");
  67. printf(" ");/*输出十个空白符*/
  68. for(k=0; k<7; k++)
  69. if(date[i+6][j][k])
  70. printf("%4d",date[i+6][j][k]);
  71. else printf(" ");
  72. printf(" |\n|");
  73. }
  74. /*scanf("%*c");/*键入回车输出下一个月的日历*/
  75. }
  76. puts("=================================================================|");
  77. puts("\n Press any key to quit...");
  78. getch();
  79. return 0;
  80. }

下面是我测试过的2015年对应的程序运行结果;

C语言实现万年历的更多相关文章

  1. 实例15_C语言绘制万年历

    实例说明:

  2. 「实验课选题详解」用C语言实现万年历

    题目要求 编程实现万年历,要求: 可根据用户输入或系统日期进行初始化,如果用户无输入则显示系统日期所在月份的月历,并突出显示当前日期: 可根据用户输入的日期查询,并显示查询结果所在月份的月历,突出显示 ...

  3. [C语言练习]万年历加强版

    /** * @copyright 2011 Chunhui Wang * * wangchunhui@wangchunhui.cn */ #include<stdio.h> int mai ...

  4. 【实验课选题详解】用C语言实现万年历

    题目要求 编程实现万年历,要求: 可根据用户输入或系统日期进行初始化,如果用户无输入则显示系统日期所在月份的月历,并突出显示当前日期: 可根据用户输入的日期查询,并显示查询结果所在月份的月历,突出显示 ...

  5. C语言可以开发哪些项目?

    C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...

  6. C语言可以开发哪些项目?(转)

    原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言 ...

  7. 17个C语言可以做的小案例项目

    C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中……,这些迷茫也导致了我们在学习的过程 ...

  8. 用C语言开发的19个经典项目,你会第几个?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多 ...

  9. 好你个C语言,原来还有这么多副面孔!

    C语言可以这样比喻,是一门非常强大的内功心法,学会它可以做到一法通万法.这也是它至今不衰的原因.说了这么多C语言的优点,现在来说说它的缺点.C语言最大的优点也是它最大的缺点,拥有强大的力量时应时刻保持 ...

随机推荐

  1. C++ 程序在运行时不显示dos界面

    在程序最开始处加一句: #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) PS: 在VS中 ...

  2. cannot open file "cxcore.lib"

    运行例子程序的时候总是出现连接错误:LINK : fatal error LNK1104: cannot open file "cxcore.lib". 在VC选项里把C:\Pro ...

  3. 使用gogs搭建git私有仓库

    搭建gogs 我的机器环境:centos 7 1.安装git yum install git   2.安装mysql gogs的数据存在mysql中,需要安装一个mysql来存数据,当然也有其他的选择 ...

  4. 判定程序员等级,HashMap就够了

    JDK1.8  HashMap源码分析 用到的符号: ^异运算:两个操作数相同,结果是;两个操作数不同,结果是1. &按位与:两个操作数都是1,结果才是1. 一.HashMap概述 在JDK1 ...

  5. 【Android 应用开发】 Android 各种版本简介 ( Support 支持库版本 | Android Studio 版本 | Gradle 版本 | jcenter 库版本 )

    初学者遇到 Android Studio, 导入工程后, 会出现各种奇葩错误, 如果管理好各个插件, gradle, SDK, SDK Tools, 各种官方依赖库 的版本, 会将错误大大的减少; 这 ...

  6. 自己创建一个android studio在线依赖compile

    我正参加2016CSDN博客之星评选麻烦帮下 奖品我随机送给投票者(写一个随机数抽取) http://blog.csdn.net/vote/candidate.html?username=qfanmi ...

  7. 安卓高级1 -----Xutil3 和Picasso使用

    Xutils3 Xutils由于内部使用httpclient然而在安卓5.0谷歌发现httpclient出现不稳定的情况.于6.0完全弃用,所以作者升级到Xutils3替换原本网络模块 配置环境(St ...

  8. Dynamics CRM2013 6.1.1.1143版本插件注册器的一个bug

    最近在做的项目客户用的是CRM2013sp1版本,所以插件注册器使用的也是与之对应的6.1.1.1143,悲剧的事情也因此而开始. 在插件中注册step时,工具里有个run in user's con ...

  9. tomcat自动运行磁盘任意位置上的项目、使用Maven对tomcat进行自动部署

     对于非Maven的web项目,有时候我们想不时常通过打war包.拷贝war包.启动tomcat来运行项目.这时候我们可以通过以下方式来进行配置: 1.1:创建web工程.工程结构如下: 1.2. ...

  10. Java基本语法-----java进制的转换

    进制: 进制是一种记数方式 ,可以用有限的数字符号代表所有的数值.由特定的数值组成. 1整型的表现形式 1.十进制: 都是以0-9这九个数字组成,不能以0开头. 2.二进制: 由0和1两个数字组成. ...