| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 452 人关注过本帖
标题:初来乍到,发个万年历小程序
只看楼主 加入收藏
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:1 
初来乍到,发个万年历小程序
本万年历只可查询本月日历,但也可在main()函数中稍加修改即可查询全年日历
小弟新手,还望各位大侠不吝赐教!
#include <stdio.h>

int rn(int nianfen)/*判断某年是否是闰年*/
{
    return ( ((nianfen % 4 == 0) && (nianfen % 100 != 0)) || (nianfen % 400 == 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 first(int y,int m)/*计算每月第一天是星期几*/
{
    int yuandan,r,sum=0,i;
    yuandan= (y-1+(y-1)/4-(y-1)/100+(y-1)/400 + 1) % 7;/*元旦是星期几*/
    r=rn(y);
    for(i=1;i<m; i++)/*计算这个月的第一天是星期几*/
        sum += yf(i,r);
    return (sum+yuandan) % 7;
}

print(int y,int m)/*打印当月日历*/
{
    int i,fd,tianshu;
    fd=first(y,m);
    tianshu=yf(m,rn(y));/*当月天数*/
    printf("\n\t%d年%d月\n",y,m);
    printf(" 日            六\n");
    for(i=0;i<fd;i++)/*输出一号前空出的星期天数*/
        printf("    ");
    for(i=1;i<=tianshu;i++)
    {
        printf("%3d ",i);
        if((i+fd)%7==0)printf("\n");
    }
    printf("\n");
}

int main()
{
    int pd=0,y,m;
    char pp;
    do
    {
     int x;
    printf("本万年历只可查询每月日历!\n");
    printf("请输入年月(格式:xxxx,xx):");
    scanf("%d,%d",&y,&m);
    print(y,m);
    printf("是否继续?(Y继续,其他退出!)");
    fflush(stdin);/* 清除输入年份时“回车”的缓冲流 */
    scanf("%c",&pp);
    if(pp == 'y' || pp == 'Y')
        pd=0;
    else
        pd=-1;
    printf("\n");
    }while(pd != -1);
    printf("程序成功退出!\n");
    getch();
}

[ 本帖最后由 ggyy4k 于 2010-7-20 09:36 编辑 ]
2010-07-20 09:34
黑之牙
Rank: 2
等 级:论坛游民
帖 子:27
专家分:24
注 册:2009-7-17
收藏
得分:10 
不错不错,改了一下,是能查全年月份的
#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
int rn(int nianfen)/*判断某年是否是闰年*/
{
    return ( ((nianfen % 4 == 0) && (nianfen % 100 != 0)) || (nianfen % 400 == 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 first(int y,int m)/*计算每月第一天是星期几*/
{
    int yuandan,r,sum=0,i;
    yuandan= (y-1+(y-1)/4-(y-1)/100+(y-1)/400 + 1) % 7;/*元旦是星期几*/
    r=rn(y);
    for(i=1;i<m; i++)/*计算这个月的第一天是星期几*/
        sum += yf(i,r);
    return (sum+yuandan) % 7;
}

void print(int y)/*打印当月日历*/
{
    int i,m,fd,tianshu;
    for(m=1;m<=12;m++)
    {
        fd=first(y,m);
        tianshu=yf(m,rn(y));/*当月天数*/
        printf("\n\t%d年%d月\n",y,m);
        printf(" 日            六\n");
        for(i=0;i<fd;i++)/*输出一号前空出的星期天数*/
            printf("    ");
        for(i=1;i<=tianshu;i++)
        {
            printf("%3d ",i);
            if((i+fd)%7==0)printf("\n");
        }
        printf("\n");
    }
}

int main()
{
    int y;
    system("color E");
    printf("请输入年:");
    scanf("%d",&y);
    print(y);
    return 0;
}
2010-07-20 12:15
快速回复:初来乍到,发个万年历小程序
数据加载中...
 
   



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

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