c语言简易万年历

学校c++教学已近有了一段时间,很多基础内容都已经学习,老师留了一个实践作业,制作万年历,要求可以打印指定月份日历… 本文将讲简单的讲解一下设计思路,分享一个简易源码(辛辛苦苦写了一百多行,自认为好漂亮,功能很强大的万年历…..被老师说太复杂,看不懂,结构乱,重写…..555..)最终版—-只有简单月份打印….

以下讲解适合编程新手,大牛勿喷…….

c/c++时间函数使用详见  c/c++ time.h那点事

获取当前时间

使用localtime函数可获得当前机器的时间,在函数开始作以下定义:

[php]
struct tm *local;
time_t t;
t=time(NULL);
local=localtime(&t);
[/php]

即可引用以下变量
年份/tm_year ( since 1900)

月份/tm_mon (0 – 11, 0 = January)

日期/tm_mday(1 – 31)

星期/tm_wday (0 – 6, 0 = Sunday)

小时数/tm_hour(0 – 23)

分钟数/tm_min minutes (0 – 59)

秒数/tm_sec seconds (0 – 60, 60 = Leap second)

等等………

样例:
[php]printf("当前时间为  %d:%d:%d         \n",local->tm_hour,local->tm_min,local->tm_sec);[/php]

指定日期是星期几

当然可以用系统的函数直接输出,这里介绍一个较为出名的公式-----基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数+1,m表示月份数,y表示年数。  w为星期数,如星期一 则w=1。
在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

关于输出对齐

输出的是一个整齐的表格,可以先用基姆拉尔森计算公式计算出要打印的月份的第一天是星期几,打印几个间距,(\t 空格 啥的..)

然后开始输出日期,1,2,3,4,--------31 判断输出至星期六就换行继续输出。

判断闰年

这个简单可以整除4且不可以整除100的是闰年,或者可以整除400的是闰年。

以下为c语言源码,dev cpp 下完美运行......

[php]

#include<stdio.h>
#include<stdlib.h>
int leap(int year)                //闰年 .....
{
if((year%4==0&&year%100!=0)||year%400==0)return 1;
else return 0;
}
int week(int year,int month,int day)    //  星期几....
{
if(month==1||month==2){month+=12;year--;}
return (int)(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
}
int num(int year,int month)          // 一个月天数.....
{
int dd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(leap(year))dd[2]=29;
return dd[month];
}
int main(){
int year,month,day,space,i;
printf("=================== 简易万年历(阳历)  ====================\n");
printf("          请输入需要打印的年份,月份:");
scanf("%d %d",&year,&month);
if(month<=12&&month>=1&&year>=0){
space=week(year,month,2);
printf("\t日\t一\t二\t三\t四\t五\t六\n");
for(i=0;i<=space;i++)printf("\t");
for(i=1;i<=num(year,month);i++){
printf("%d\t",i);
if(week(year,month,i+1)==6)printf("\n\t");
}
printf("\n已完成%d年%d月的输出.......",year,month);
}
else{
printf("\n输入错误,结束......\n");
}
return 0;
}

[/php]

6 comments

  1. Reply
    December 6, 2012 at 9:52 pm

    [al抱]

  2. leor Reply
    July 29, 2013 at 1:32 pm

    ….看笔者编程可以猜测笔者是个胖子

    • administrator Reply
      July 30, 2013 at 12:01 pm

      人才啊….这也看得出?我要认识你下….

      • leor Reply
        July 31, 2013 at 3:19 pm

        笔者编程风格可以看出笔者不高

  3. 楠乄木 Reply
    August 24, 2014 at 5:58 am

    .看笔者编程可以猜测笔者眼睛近视

Leave A Comment Cancel reply

Please be polite. We appreciate that. Your email address will not be published and required fields are marked