| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3072 人关注过本帖
标题:帮一MM写的一个日历小程序
只看楼主 加入收藏
海纳百川
Rank: 1
来 自:湖北荆州
等 级:新手上路
帖 子:186
专家分:5
注 册:2007-10-2
收藏
得分:0 
不错我喜欢我就是要在论坛多看看这编辑一些程序

2008-10-30 21:50
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
[bo][un]风居住的街道[/un] 在 2008-10-30 19:26 的发言:[/bo]

1 首先这程序写得的确不错,编译也没有问题的确,但是编译开-Wall选项是个好习惯,希望LZ能考虑一下~~~

呵呵,我是先编译通过了,运行后有问题再gcc-Wall,再gdb.
你的程序运行不正确。我看不出你从哪一年为起点开始算的。

without further ado, let’s get started
2008-10-31 21:32
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
我按照公元元年一月一日是星期天算的,没有时间限制(如果说有,就是0到2^31-1),以下是运行结果:
Input the year and month like  "2008-10"
:0-1
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
    1    2    3    4    5    6    7
    8    9   10   11   12   13   14
   15   16   17   18   19   20   21
   22   23   24   25   26   27   28
   29   30   31    1    2    3    4
:
2008-11-01 00:28
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
int get_week_of_date(int y, int m, int d)
{
    static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    y -= m < 3;
    return (y + y / 4 - y / 100 + y / 400 + t[m-1] + d) % 7;
}

这个函数源自这里:http://c-faq-chn.
原理我想通了,你自己想想看。
2008-11-01 00:33
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
[bo][un]iFreeBSD[/un] 在 2008-10-31 21:32 的发言:[/bo]

你的程序运行不正确。我看不出你从哪一年为起点开始算的。


你可以看看我程序的运行结果,和Windows显示的结果:
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-11-01 00:37
baoxiang2007
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-10-30
收藏
得分:0 
回复 10# 的帖子
你的是比较简单,但运行出来的结果有些个问题,一个月内不可能出现两个1号
2008-11-02 10:24
baoxiang2007
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-10-30
收藏
得分:0 
回复 14# 的帖子
想问下你那个网页是哪来的啊,是不是有专门的网站有源代码提供?能给我一个吗
2008-11-02 10:28
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
[bo][un]baoxiang2007[/un] 在 2008-11-2 10:24 的发言:[/bo]

你的是比较简单,但运行出来的结果有些个问题,一个月内不可能出现两个1号


我服了你了……难道你看不出来是同时显示了上个月最后一个星期的日期和下个月第一个星期的日期么??这样是为了填充完整的日历表格,很多日历软件都是这么做的,如果不这么做,代码可以更短的!!
2008-11-02 16:58
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
OK,以下是输出和LZ的程序完全相同的程序……

程序代码:
#include <stdio.h>
#include <ctype.h>

int is_leap_year(int y)
{
    return y != 0 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0);
}

int get_week_of_date(int y, int m, int d)
{
    static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    y -= m < 3;
    return (y + y / 4 - y / 100 + y / 400 + t[m-1] + d) % 7;
}

int get_month_days(int y, int m)
{
    if (m == 2)
        return 28 + is_leap_year(y);
    return 30 + ((m <= 7) == (m % 2));
}

void print_calendar(int y, int m)
{
    int week = get_week_of_date(y, m, 1), day;
    int month_day = get_month_days(y, m);

    puts("  Sun  Mon  Tue  Wed  Thu  Fri  Sat");

    if (week != 0)
        printf("%*c", week * 5, ' ');
    for (day = 1; day <= month_day; day++)
    {
        printf("%5d", day);
        if (++week % 7 == 0)
            putchar('\n');
    }
    if (week % 7 != 0)
        putchar('\n');
}

int main(void)
{
    int year, month;
    puts("Input the year and month like  \"2008-10\"");
    while (putchar(':'), scanf("%d-%d", &year, &month) == 2)
    {
        if (year >= 0 && month >= 1 && month <= 12)
            print_calendar(year, month);
        else
            puts("date error");
    }
    return 0;
}



[[it] 本帖最后由 风居住的街道 于 2008-11-3 11:55 编辑 [/it]]
2008-11-02 17:18
ailaopo415
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-11-2
收藏
得分:0 
楼上的代码输入2008-11时,不是为什么会出现串行的现象
2008-11-02 22:51
快速回复:帮一MM写的一个日历小程序
数据加载中...
 
   



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

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