| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1095 人关注过本帖
标题:输出结果不正确 请高手帮忙分析下原因
取消只看楼主 加入收藏
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
输出结果不正确 请高手帮忙分析下原因
#include<stdio.h>
main(){
    int i,week=0,m=0,y=0,md=0,yd=0,day=0;
    printf("请输入年份和月份:");
    scanf("%d %d",&y,&m);
    for(i=1990;i<y;i++){
        if(y%4==0 && y%100!=0 || y%400==0){
            yd+=366;
        }else
            yd+=365;
    }

    for(i=1;i<m;i++){
        switch(i){
            case 2:
                if(y%4==0 && y%100!=0 || y%400==0){
                    md+=29;
                }else
                    md+=28;break;
            case 4: case 6: case 9: case 11:
                md+=30;break;
            default :
                md+=31;

        }
     }
     week=(yd+md)%7;
     printf("一\t二\t三\t四\t五\t六\t日\n");

     for(i=1;i<=week;i++){
        printf("\t");
     }
     
     switch(m){
        case 2:
            if(y%4==0 && y%100!=0 || y%400==0){
                day=29;
            }else
                day=28;break;
            case 4: case 6: case 9: case 11:
                day=30;break;
            default :
                day=31;
     }
    for(i=1;i<=day;i++){
        printf("%d\t",i);
        if((week+i)%7==0){
            printf("\n");
        }

    }
     
}
这是打印输出每月的月历,但是输出日期与星期对应不上 ,请大家帮忙看看是什么问题
搜索更多相关主题的帖子: include 原因 
2012-09-21 15:06
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
收藏
得分:0 
回复 3楼 ciinccb
首先谢谢你的回答 ,这个Week是控制每月一号前面有几个占位符的 就好比你要输出2.1号 你得算出1.31号是星期几 然后前面输出几个占位符啊  具体日期输出是在最后输出的
2012-09-21 17:35
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
收藏
得分:0 
回复 4楼 ciinccb
谢谢 ,就是这样做的 但输出结果就是不对啊 不知道怎么回事
2012-09-21 17:39
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
收藏
得分:0 
回复 2楼 qunxingw
谢谢 但你这貌似不行啊 循环终值改成7 那不就成了固定格式输出了
2012-09-21 17:42
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
收藏
得分:0 
以下是引用xtjopt在2012-9-21 17:40:24的发言:

 
额 没装C程序没法测试    首先先测试数据  1990年 1-12月,下测试月份有没有问题,
在年份加上去。
在程序反馈的值中分析找出错误。
楼主你确定每个程序单独都是正确的么。
1990和1991年都是正确的 但是从1992年起输出就不对了 我现在还没分析出来哪出错了
2012-09-21 17:51
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
收藏
得分:0 
以下是引用孤雁1g在2012-9-21 20:06:45的发言:

你错了是由于1990年到1992年(闰年),而如果从公元1年开始到4年(闰年),两段时间是不一样的,这样可以看出,从第三年开始你的程序就不适用了,你是以为1990年第一天跟公元1年第一天都是星期1,自然接下来的月数第一天是星期几也就一样了,但是1990对1,1991对2,1992对3,看到了吧,1992年是闰年,而3年不是闰年,所以从1992年程序就错了。
改成:yd=((y-1)+(y-1)/4-(y-1)/100+(y-1)/400);这样就不会错了!!
是从第三年结果就不对了 ,但是你说的原因我还是没看明白,确定某一天是星期一,间隔N天是星期几不就是N%7吗? 而且润平年我这也有判断啊 还请赐教
2012-09-21 21:59
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
收藏
得分:0 
以下是引用wtw199186在2012-9-22 08:29:13的发言:

for(i=1990;i
其实就是这块出错了
2012-09-24 10:04
快速回复:输出结果不正确 请高手帮忙分析下原因
数据加载中...
 
   



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

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