显摆一下,自己写的万年历
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
显摆一下,自己写的万年历
请大家多多指教
由于是月历,所以,算法采用每月的第一天是星期几的思路确定1号的位置,然后顺延下来,计算星期的方法采用蔡勒公式。
然后,比较重要的一点:罗马教皇格里高利十三世在1582年组织了一批天文学家,根据哥白尼日心说计算出来的数据,对儒略历作了修改。将1582年10月5日到14日之间的10天宣布撤销,继10月4日之后为10月15日。 所以只能计算1582年之后的月历。
[c]#include<stdio.h>
int Zeller(int y,int m);
int run(int n);
void main()
{
int year,month,i,j,k,n=1,day;
printf("欢迎使用万年历查询工具。\n");
printf("请输入要查询的年份(本程序只支持公元后纪年):\n");
scanf("%d",&year);
printf("请输入月份:\n");
scanf("%d",&month);
i=Zeller(year,month);
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day=31;break;
case 4:
case 6:
case 9:
case 11:
day=30;break;
case 2:day=run(year);
}
printf(" S M T W T F S\n");
for(j=0;j<=5;j++)
{
for(k=0;k<=6;k++)
{
if((j==0)&&(j*4+k)<i)
printf(" ");
else
if(n<=day)
{
printf("%3d",n);
n++;
}
}
printf("\n");
}
}
int Zeller(int y,int m)
{
int w,c,d;
c=y/100;
d=y-c*100;
if(m<=2)
{
d-=1;
m+=12;
}
w=d+d/4+c/4-2*c+26*(m+1)/10;
while(w<0)
{
w+=7;
}
return w%7;
}
int run(int n)
{
if(n%100==0)
{
if(n%400==0)
return 29;
else
return 28;
}
else
{
if(n%4==0)
return 29;
else
return 28;
}
}[/c]
由于是月历,所以,算法采用每月的第一天是星期几的思路确定1号的位置,然后顺延下来,计算星期的方法采用蔡勒公式。
然后,比较重要的一点:罗马教皇格里高利十三世在1582年组织了一批天文学家,根据哥白尼日心说计算出来的数据,对儒略历作了修改。将1582年10月5日到14日之间的10天宣布撤销,继10月4日之后为10月15日。 所以只能计算1582年之后的月历。
[c]#include<stdio.h>
int Zeller(int y,int m);
int run(int n);
void main()
{
int year,month,i,j,k,n=1,day;
printf("欢迎使用万年历查询工具。\n");
printf("请输入要查询的年份(本程序只支持公元后纪年):\n");
scanf("%d",&year);
printf("请输入月份:\n");
scanf("%d",&month);
i=Zeller(year,month);
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day=31;break;
case 4:
case 6:
case 9:
case 11:
day=30;break;
case 2:day=run(year);
}
printf(" S M T W T F S\n");
for(j=0;j<=5;j++)
{
for(k=0;k<=6;k++)
{
if((j==0)&&(j*4+k)<i)
printf(" ");
else
if(n<=day)
{
printf("%3d",n);
n++;
}
}
printf("\n");
}
}
int Zeller(int y,int m)
{
int w,c,d;
c=y/100;
d=y-c*100;
if(m<=2)
{
d-=1;
m+=12;
}
w=d+d/4+c/4-2*c+26*(m+1)/10;
while(w<0)
{
w+=7;
}
return w%7;
}
int run(int n)
{
if(n%100==0)
{
if(n%400==0)
return 29;
else
return 28;
}
else
{
if(n%4==0)
return 29;
else
return 28;
}
}[/c]
浮生七十今三十,从此凄惶未可知
- leeaman
- 帖子: 30702
- 注册时间: 2007-02-02 18:14
- 系统: debian sid
- Ubuntu与Linux
- 帖子: 1211
- 注册时间: 2010-06-09 19:57
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
- leeaman
- 帖子: 30702
- 注册时间: 2007-02-02 18:14
- 系统: debian sid
Re: 显摆一下,自己写的万年历
win下面我用code::blocks,vs太慢了,不顾哦好像南瓜要fortun,老实说,俺不看几天看不明白门道的,南瓜
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
- monk
- 帖子: 19507
- 注册时间: 2010-01-28 10:45
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
Re: 显摆一下,自己写的万年历
是fortran啦。。。其实也不算会精通,C和fortran属于正式入门,AS是选修,python和VB则是自己瞎琢磨的。。。leeaman 写了:win下面我用code::blocks,vs太慢了,不顾哦好像南瓜要fortun,老实说,俺不看几天看不明白门道的,南瓜
浮生七十今三十,从此凄惶未可知
- qy117121
- 论坛版主
- 帖子: 50546
- 注册时间: 2007-12-14 13:40
- 系统: Winbuntu
- 来自: 志虚国乌由市
- 联系:
Re: 显摆一下,自己写的万年历
monk 写了:不务正业的南瓜
渠月 · QY
本人只会灌水,不负责回答问题
无聊可以点一下→ http://u.nu/ubuntu
Ubuntu 20.04 快速设置指南,请配合浏浏览器自动翻译使用
邮箱 chuan@ubuntu.org.cn
本人只会灌水,不负责回答问题
无聊可以点一下→ http://u.nu/ubuntu
Ubuntu 20.04 快速设置指南,请配合浏浏览器自动翻译使用
邮箱 chuan@ubuntu.org.cn
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
- remeber
- 论坛版主
- 帖子: 13030
- 注册时间: 2009-01-06 15:18
- 来自: 人间
Re: 显摆一下,自己写的万年历
码瓜。——《Herry Potter》
“有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系: