| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2305 人关注过本帖
标题:____万年历____
取消只看楼主 加入收藏
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
结帖率:100%
收藏
 问题点数:0 回复次数:4 
____万年历____
网友“追影”写的发给我的。
starwing版主曾提了个输出2009年的日历的问题,我写的时候没用函数,后来网友梁子改进成万年历的时候也没用函数,追影不但用了函数,而且code很简单很清晰很规范,有兴趣的朋友可以看看
————————————————————————————我是分割线——————————————————————————————
#include <stdio.h>

int rn(int nianfen)/*判断某年是否是闰年*/
{
    if( ((nianfen % 4 == 0) && (nianfen % 100 != 0)) || (nianfen % 400 == 0))
        return 1;
    else
        return 0;
}

int yf(int yuefen, int runnian)/*获得当月天数*/
{
    int dyts;
    switch(yuefen)
    {
    case 1: dyts=31;break;
    case 2: dyts=28 + runnian;break;
    case 3: dyts=31;break;
    case 4: dyts=30;break;
    case 5: dyts=31;break;
    case 6: dyts=30;break;
    case 7: dyts=31;break;
    case 8: dyts=31;break;
    case 9: dyts=30;break;
    case 10: dyts=31;break;
    case 11: dyts=30;break;
    case 12: dyts=31;break;
    }
    return dyts;
}

int yuandan(int nian)/*元旦是星期几*/
{
    return (nian-1+(nian-1)/4-(nian-1)/100+(nian-1)/400 + 1) % 7;
}

void prin(int yuefen,int nian)/*输入月份表*/
{
    int i,dyts,xqdw,sun=0,x=0;
    dyts = yf(yuefen,rn(nian));/*获得当月天数*/


        printf("\n\t%d年%d月\n",nian,yuefen);

        printf(" 日            六\n");
        for(i=1; i<yuefen; i++)/*计算这个月的第一天是星期几*/
        {
            sun += yf(i,rn(nian));
        }
        xqdw = (sun+yuandan(nian)) % 7;
        for(i=0; i<xqdw; i++)/*把当月1日的前几天空过去*/
        {
            printf("    ");
            x++;
        }
        for(i=1; i<=dyts; i++)/*输入月份表*/
        {
            printf("%3d",i);
            x++;
            if(x == 7)
            {
                printf("\n");
                x=0;

            }
            else
            {
                printf(" ");
            }


    }
    printf("\n");
}



void gn()
{
    int nian,x=1,i;
    char pd;
    printf("请输入要打印的年份(格式:xxxx):");
    scanf("%d",&nian);
    do
    {
        if(x == 1)/*正常输出*/
        {
            printf("\n\n");
            for(i=1; i<=12; i++)/*输出月份表*/
            {
                prin(i,nian);
            }
        }
        printf("是否继续打印(Y/N)?");
        fflush(stdin);//清除输入年份时“回车”的缓冲流

        scanf("%c",&pd);

        if(pd == 'y' || pd == 'Y')
        {
            x = 1;
            gn();
        }
        else
        {
            if(pd == 'n' || pd == 'N')
            {
                x = 1;
            }
            else
            {
                x = 0;
                printf("选择错误请重新输入:\n");
            }
        }
    }
    while(x != 1);
}

int caidan()/*菜单项*/
{
    int x;
    printf("万年历功能菜单\n1. 打印某年的全年日历\n2. 退出\n");
    printf("请输入您的选择:");
    scanf("%d",&x);
    switch(x)
    {

    case 1:gn();return 0;
    case 2:return -1;
    default:printf("输入错误请重新输入!\n");return 0;
    }
}

int main()
{
    int pd=0;
    do
    {
        printf("\n\n");
        if(pd == 0)
        {
            pd = caidan();
        }
    }
    while(pd != -1);
    printf("程序成功退出!\n");
    return 0;
}
————————————————————————————我是分割线——————————————————————————————
ps:相比我原来的有点小不同,它不是3行4列的格式输出的,现在有兴趣的朋友可以想想玩,怎么在不大改动的情况下实现每3个月换行的功能.
搜索更多相关主题的帖子: 万年历 
2009-11-13 20:34
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 5楼 longlong89
how to do?

我可好玩啦...不信你玩玩^_^
2009-11-14 18:29
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 7楼 longlong89
简化的好,但我觉得原来的更清晰

我可好玩啦...不信你玩玩^_^
2009-11-14 21:05
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
多想
    多动手

我可好玩啦...不信你玩玩^_^
2009-11-14 23:09
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 14楼 StarWing83
哈,你也来了,谢谢

我可好玩啦...不信你玩玩^_^
2009-11-16 13:57
快速回复:____万年历____
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014631 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved