| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1095 人关注过本帖
标题:输出结果不正确 请高手帮忙分析下原因
只看楼主 加入收藏
非与或
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-9-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:20 
输出结果不正确 请高手帮忙分析下原因
#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
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:1 
把年月天数计算后,改for(i=1;i<=7;i++)试下看。或总计天数处理
WeeK=(yd+md+i)%7

www.qunxingw.wang
2012-09-21 16:53
ciinccb
Rank: 2
等 级:论坛游民
威 望:3
帖 子:10
专家分:36
注 册:2012-9-21
收藏
得分:1 
同学注意啊,如果输入的2月,那么你要算的是2月1号的星期,而不是1月31号的,所以week=(md+yd+1)%7
2012-09-21 16:57
ciinccb
Rank: 2
等 级:论坛游民
威 望:3
帖 子:10
专家分:36
注 册:2012-9-21
收藏
得分:1 
其实你只要算出第一天是星期几就可以了,后面的推过去就行了,定义一个变量,+到7就归〇!
2012-09-21 16:58
非与或
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
xtjopt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:168
注 册:2012-9-12
收藏
得分:1 
以下是引用非与或在2012-9-21 15:06:28的发言:

#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++){                  //1990到y年 只含年的天数总和  赋值给yd
        if(y%4==0 && y%100!=0 || y%400==0){
            yd+=366;
        }else
            yd+=365;
    }

    for(i=1;i<m;i++){                     //求出y年中1月到m月的天数   赋值给md
        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;                      //求余 1990年1月1日 是星期1是吗 楼主
     printf("一\t二\t三\t四\t五\t六\t日\n");

     for(i=1;i<=week;i++){
        printf("\t");                     //打出tab实现空位
     }
     
     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++){                //输出天数,满7换行;
        printf("%d\t",i);
        if((week+i)%7==0){
            printf("\n");
        }

    }
     
}
这是打印输出每月的月历,但是输出日期与星期对应不上 ,请大家帮忙看看是什么问题

额 没装C程序没法测试    首先先测试数据  1990年 1-12月,下测试月份有没有问题,
在年份加上去。
在程序反馈的值中分析找出错误。
楼主你确定每个程序单独都是正确的么。
2012-09-21 17:40
非与或
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
孤雁1g
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2012-9-7
收藏
得分:1 
你错了是由于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);这样就不会错了!!
2012-09-21 20:06
快速回复:输出结果不正确 请高手帮忙分析下原因
数据加载中...
 
   



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

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