鱼C论坛

 找回密码
 立即注册
查看: 4595|回复: 8

[技术交流] 万年历

[复制链接]
发表于 2011-2-14 02:02:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用C语言写了一个万年历出来,我是新手,请大家多多指教指教。
有什么不足或者语法毛病的可以指出来。
#include<stdio.h>

year_days(int date[3])     /*计算由公元1年到本年的日数*/
{
        int days,a,b;
        a=(date[0]-1)/4+(date[0]-1)/400-(date[0]-1)/100;
        b=date[0]*365;
        days=a+b;
        return days;
}
month_days(int date[3])     /*计算由1月开始到本月的日数*/
{
        if(date[1]==1)return 0;
        if(date[1]==2)return 31;
        if(date[1]==3)return 59;
        if(date[1]==4)return 90;
        if(date[1]==5)return 120;
        if(date[1]==6)return 151;
        if(date[1]==7)return 181;
        if(date[1]==8)return 212;
        if(date[1]==9)return 243;
        if(date[1]==10)return 273;
        if(date[1]==11)return 304;
        if(date[1]==12)return 334;
}

get_days(int date[3])    /*计算总日子数*/
{
        int year_days(int);
        int month_days(int);
        int days;
        days=year_days(date)+month_days(date)+date[2];
        if(date[0]%100!=0&&date[0]%4==0||date[0]%400==0)
                if(date[1]>2)days++;
        return days;
}
get_mondays(int date[3])   /*计算每月的日数*/
{
        if(date[1]==1)return 31;
        if((date[2]%100!=0&&date[2]%4==0||date[2]%400==0)&&date[1]==2)return 29;
        if(date[1]==2)return 28;
        if(date[1]==3)return 31;
        if(date[1]==4)return 30;
        if(date[1]==5)return 31;
        if(date[1]==6)return 30;
        if(date[1]==7)return 31;
        if(date[1]==8)return 31;
        if(date[1]==9)return 30;
        if(date[1]==10)return 31;
        if(date[1]==11)return 30;
        if(date[1]==12)return 31;
}
main()
{
        int get_days(int); /*声明函数*/
        int get_mondays(int);
        int date[3],days,mondays;
        int i;                           
        printf("please Please enter a date\n"); /*输入年月日*/
        printf("year:");
        scanf("%d",&date[0]);
        printf("month:");
        scanf("%d",&date[1]);
        printf("day:");
        scanf("%d",&date[2]);
    days=get_days(date);
        mondays=get_mondays(date);
        printf("          %d/%d/%d\n",date[0],date[1],date[2]);
        printf("=============================\n");
        printf(" sun mon tue wed thu fri sat\n");
        for(i=1;i<=(days-date[2])%7;i++)    /*总日数减去日再除7求余,可以计算出每月开头空了的天数*/
        {        
                printf("    ");
        }
        for(i=1;i<=mondays;i++)
        {   
                if(i<10)printf(" ");
                if(i==date[2])
                        printf("[%d]",i);
                else
                        printf(" %d ",i);
            if((days-date[2]+i)%7==0)
                        printf("\n");
        }
        printf("\n");
        system("pause");
}
未命名.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 13:30:05 | 显示全部楼层
回复 1# xyq038558


    膜拜、源码最好设置回复可见!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 13:31:02 | 显示全部楼层
挺厉害的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-2-14 13:35:30 | 显示全部楼层
回复 3# yuyuhongss


    呵呵,大家彼此交流!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 16:13:30 | 显示全部楼层
嘻嘻,不错哦~最好再来个printf("I love xxx");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-2-14 22:26:11 | 显示全部楼层
回复 5# 小甲鱼


    好的,下次就加上“printf("I Love fishc!")”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 23:10:16 | 显示全部楼层
本帖最后由 nbceshi 于 2011-3-1 23:13 编辑

好像没有考虑闰年
附上我的,嘿嘿
#include <stdio.h>

void main()
{
        int yy, mm, dd, y, i;                        //yy是年,mm是月,dd是日,y是周几,i是计数。
        printf("请输入年份: ");
        scanf("%d", &yy);
        printf("请输入月份: ");
        scanf("%d", &mm);
        if (mm == 2)
        {
                if(yy%4 == 0 && yy%100 != 0 || yy%400 == 0 )
                {        
                        dd = 29;
                }
                else
                {
                        dd = 28;
                }
        }
        else
        {
                dd=30 + mm%2;
        }
        
        switch (mm)
        {
                case 1: i = 6; break;
                case 2: i = 2; break;
                case 3: i = 2; break;
                case 4: i = 5; break;
                case 5: i = 0; break;
                case 6: i = 3; break;
                case 7: i = 5; break;
                case 8: i = 1; break;
                case 9: i = 4; break;
                case 10: i = 6; break;
                case 11: i = 2; break;
                case 12: i = 4; break;
        }
        if((yy%4 == 0 && yy%100 !=0 || yy%400 == 0) && mm <=2)
        {
                i -= 1;
        }
        y = (1.25 * (yy%100)) / 1 + 1 + i;
        y = y%7;
        i = y;

        printf(" 日 一 二 三 四 五 六\n");
        for( ;y > 0; y--)
        {
                printf("   ");
        }
        y = i;
        for(i = 1 ; i <= dd; i++)
        {
                if((i + y - 1)%7 == 0)
                {
                        printf("\n");
                }
                printf("%3d",i);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-11 10:20:09 | 显示全部楼层
特地前来膜拜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-3-15 14:29:39 | 显示全部楼层
不错不错,如果在家点颜色就漂亮了,颜色只需要几句哦!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 22:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表