C语言万年历
很多人都有做过万年历,于是想自己写一个。
万年历是我们日常生活中经常用到的一种非常实用的工具。
由于工作繁忙,人们常常忘记某一天是星期几,想要看看某个月的日历,或者一整年的。我把自己的想法实现如下:
1、任意年份日历的整体输出;
2、任意年任意月日历的单独输出;
3、任意年月日 查询星期几;
4、按任意键 退出;
5、循环查询,直到选择退出;
ps:
以上星期几的推算只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
先来一些运行截图:
输入错误
输出全年的日历
任意年任意月日历的单独输出
**任意年月日 查询星期几 **
退出程序
ok 截图展示完了
双手奉上 全部代码
算法实现还是挺容易的,调整格式,修改代码很累人!
2019年6月22日
重新调整输出格式(当月1日不是星期日的时候对齐问题,月末不是星期6末尾#对齐);
调整查询某月日历时输入方式并对输入月份数值做判断;
调整循环方式;
2020年3月19日
修改星期显示,调整函数位置
修改后代码如下:
/*万年历输出小程序*/
#include "stdio.h"
#include "stdlib.h"
int dateofmonth[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
char *month1[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
char *month2[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
//char *week[7]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
char *week[7]={"sun","mon","tue","wed","thu","fri","sat"};
/*函数声明*/
int pyear(int n);
int xingqi(int year,int month,int data );
void rili(int year,int month_a,int month_b);
void xq();
main()
{
int i,year,month;
printf("*********万年历小程序*********\n\n");
printf("请选择您要执行的操作(0-3)\n");
printf("\n0:退出\n1:查询某年日历\n2:查询某月日历\n3:查询某日星期\n");
printf("\n您选择要执行的操作是: ");
scanf("%d",&i);
printf("\n");
switch(i)
{
case 0: exit(i);break;
case 1: printf("请输入要查询的年份:\n\n");
scanf("%d",&year);
rili(year,1,12);break;
case 2: printf("请输入要查询的年份月份(2019 6):\n\n");
scanf("%4d%2d",&year,&month);
if(month>0&&month<12)rili(year,month,month);
else {printf("\n\n\t输入错误,请重新输入\n\n\n\n\n");
main();
}
break;
case 3: xq();break;
default:
printf("\n\n\t输入错误,请重新输入\n\n\n\n");
main();
}
}
int pyear(int n)
{ if(n%4==0&&n%100!=0||n%400==0)return 1;
else return 0;
}
int xingqi(int year,int month,int data )//返回某年某月某日是星期几
{ int d=0,i,j;
i=pyear(year);
for(j=0;j0)
{for(n=0;n