标题:输入某年某月某日,判断这一天是这一年的第几天?我错在哪里
只看楼主
鱼竿的传说
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-3-15
结帖率:100%
已结贴  问题点数:5 回复次数:7 
输入某年某月某日,判断这一天是这一年的第几天?我错在哪里
如题,也是C经典100例里面的,答案用的是swith语句,我尝试用数组,但输出结果怎么就是随机值呢:

代码如下:

#include<stdio.h>

int main()
{
    int a[12],i;
    int year,month,date,day;

    a[12]={31,28,31,30,31,30,31,31,30,31,30,31};

    printf("Please input year,month,date:\n\n");
    scanf("%d,%d,%d",&year,&month,&date);

    if(month>12||date>31)
        printf("enter error,please try again!\n\n");  /*如果大于31天或者大于12个月,错误*/


    for(i=0;i<month;i++)
    day+=a[i];
   
    if(month>2)                              /*如果是2月以后的月份,就得考虑这一年是闰年否*/
      if(year%4==0&&year%100!=0||year%400==0)
        { day++;
          printf("this year is a leap.\n");
        }
   
    printf(the date is the %d day of the year!",day);
    return 0;
}

我是在gcc里面运行的,编译倒是没有问题,但是运行这个文件的时候,我输入2010,1,1,输出结果为随机值,怎么回事?是我哪里错了?  谢谢!
搜索更多相关主题的帖子: include please 
2012-03-19 22:46
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:3 
错误好多

总有那身价贱的人给作业贴回复完整的代码
2012-03-19 22:55
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
自己先尝试着看编译错误信息

总有那身价贱的人给作业贴回复完整的代码
2012-03-19 22:56
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
得分:3 
程序代码:
#include<stdio.h>
int main()
{
    int day,month,year,a;
    int sum1(int m);
    int sum2(int m);
    while(scanf("%d/%d/%d",&year,&month,&day)!=EOF)
    {
        if(year%10!=0&&year%4==0||year%400==0)/*判断闰年要注意*/
        a=sum1(month);
        else
        a=sum2(month);
        printf("%d\n",a+day);
    }
    return 0;/*这里返回一个值规范编程*/
}
    int sum1(int m)
    {
        int x;
        switch(m-1)
        {
            
             case 0:x=0;break;
             case 1:x=31;break;
             case 2:x=60;break;
             case 3:x=91;break;
             case 4:x=121;break;
             case 5:x=152;break;
             case 6:x=182;break;
             case 7:x=213;break;
             case 8:x=244;break;
             case 9:x=274;break;
             case 10:x=305;break;
             case 11:x=335;break;
             case 12:x=366;break;
        }
        return (x);
    }
    int sum2(int m)
    {
        int x;
        switch(m-1)
        {
           case 0:x=0;break;    
           case 1:x=31;break;
           case 2:x=59;break;
           case 3:x=90;break;
           case 4:x=120;break;
           case 5:x=151;break;
           case 6:x=181;break;
           case 7:x=212;break;
           case 8:x=243;break;
           case 9:x=273;break;
           case 10:x=304;break;
           case 11:x=334;break;
           case 12:x=365;break;
        }
        return (x);
}

编程之路定要走完……
2012-03-19 22:56
鱼竿的传说
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-3-15
得分:0 
回复 3楼 embed_xuel
我把错误的地方找到了,然后改正了,
下面是我的   在语法上应该没问题的代码
#include "stdio.h"
int main()
{
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31},i;
    int day=0,year,month,date;


    printf("Please input year,month,date:\n\n");
    scanf("%d,%d,%d",&year,&month,&date);

    if(month>12||date>31)
        printf("enter error,please try again!\n\n");


    else {
            for(i=0;i<month;i++)
            day+=a[i];
            if(month>2)
              if(year%4==0&&year%100!=0||year%400==0)
                {
                    day++;
                      printf("this year is a leap.\n");
                }
         printf("the date is the %d day of the year!",day);
         }
    return 0;

而且我编译运行发现,它输出的并不是随机数,而是前面几个月的 总天数,比如输入2010,1,1--->31天,输入2010,2,1--->59天,输入2010,3,1---->90,一句话,就是真正的算法没有实现到,或者逻辑错误了,可我怎么都觉得是对的,能指教一下吗?谢谢!
2012-03-20 01:44
鱼竿的传说
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-3-15
得分:0 
回复 4楼 C_戴忠意
谢谢,不过你这个有问题
2012-03-20 01:55
鱼竿的传说
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-3-15
得分:0 
谢谢各位的关注,昨晚一觉睡醒,突然想起了我错误的地方了,然后我把for语句稍加改动就对了

原来的是
for(i=0;i<month;i++)
             day+=a[i];
 现在我改成 for(i=0;i<month-1;i++)
             day+=a[i];
              day=day+date;

自己分析的是:数组下表是从0开始的,但是for循环中第二条语句一旦表明可循环,那么就要执行循环体,如果取1月,那么i<month将为真,就该执行循环体了,所以就会输出31天。至于day=day+date,这条语句纯粹是自己搞忘了因为算法是:前面每个月的总天数+这个月的日期。
 
2012-03-20 10:06
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
怕出错   自己找个OJ测试一下不就行啦

                                         
===========深入<----------------->浅出============
2012-03-20 15:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-363702-1-1.html




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

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