| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 921 人关注过本帖
标题:没有语法错误,输出却出错(有关输出日历问题)
只看楼主 加入收藏
wwe
Rank: 2
来 自:中国安徽
等 级:论坛游民
帖 子:37
专家分:37
注 册:2009-8-3
结帖率:100%
收藏
 问题点数:0 回复次数:8 
没有语法错误,输出却出错(有关输出日历问题)
main()
{
    int year,month,i,j,a;
    int sum[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    printf("Enter time:");scanf("%d.%d",&year,&month);
    a=(year%100+year%100/4+year/400-2*(year/100)+26*(month+1)/10)%7;
    if((year%4==0&&year%100!=0)||year%400==0) sum[1]=29;
    printf("SUN MON TUE WED THU FRI SAT\n");
    for(j=0;j<a;j++) printf("    ");
    for(i=1;i<=sum[month-1];i++)
     {  
         printf("%-4d",i);
         if((a+i)%7==0) printf("\n");
     }
}
有些月份输出不对,这是怎么回事呀?比如说2009.2  请大家帮忙看一下,谢了!

[ 本帖最后由 wwe 于 2009-12-2 20:48 编辑 ]
搜索更多相关主题的帖子: 输出 日历 语法 
2009-12-02 15:48
wwe
Rank: 2
来 自:中国安徽
等 级:论坛游民
帖 子:37
专家分:37
注 册:2009-8-3
收藏
得分:0 
有谁支支招啥?
2009-12-02 17:03
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
a是什么东西?
2009-12-02 18:31
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
我试了一下你的程序,打出来a竟然是负的。自然会数组越界了。。
你的a是什么东西啊,没看出来。
2009-12-02 18:40
wwe
Rank: 2
来 自:中国安徽
等 级:论坛游民
帖 子:37
专家分:37
注 册:2009-8-3
收藏
得分:0 
a=(year%100+year%100/4+year/400-2*(year/100)+26*(month+1)/10)%7;
这个公式是用来确定某月一日是星期几的,用 a 来实现开始输出时应该空几格,就是这个样子,a 应该不会越界!
2009-12-02 20:05
无心一思
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2009-12-2
收藏
得分:0 
算法问题,逻辑错误!
2009-12-02 20:20
wwe
Rank: 2
来 自:中国安徽
等 级:论坛游民
帖 子:37
专家分:37
注 册:2009-8-3
收藏
得分:0 
我是这样想的:
1 确定某年某月有多少天,这月1日是星期几(代码中 a 就是)。
2 根据 a 进行悬空,从1日开始输出,加上 a 在一起达7个就换行。
3 直到输出一个月全部天数。
按照这个算法写的,但输出出错,我找不到错在哪里!
2009-12-02 20:47
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
换个公式,改成下面这样。

程序代码:
#include <stdio.h>
int main(void)
{
    int year,month,i,j,a;
    int sum[12]={31,28,31,30,31,30,31,31,30,31,30,31};

    printf("Enter time:");
    scanf("%d.%d",&year,&month);

    a=(365L*(year-1)+((year-1)/4-(year-1)/100+(year-1)/400))%7;
    if((year%4==0&&year%100!=0)||year%400==0) sum[1]=29;

    for(i=0;i<month-1;i++)
      a+=sum[i];

    a++;
    a%=7;

    printf("SUN MON TUE WED THU FRI SAT\n");
    for(j=0;j<a;j++)
      {
         printf("    ");
      }
    for(i=1;i<=sum[month-1];i++)
     {
         printf("%-4d",i);
         if((a+i)%7==0) printf("\n");
     }
}


努力—前进—变老—退休—入土
2009-12-02 20:59
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
你考虑下你的a的问题··这样求肯定不行。。你算算a在输入2009.2的时候是多少??  是-3。。。你说错不错??
我试着加了个绝对值。。看上去是可以了。。但连着的月份对不上号··LZ最想想那个a吧··
2009-12-02 21:02
快速回复:没有语法错误,输出却出错(有关输出日历问题)
数据加载中...
 
   



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

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