乔宽 发表于 2019-6-3 21:02:23

数组,课后作业。

写一个生命计算器,要求用户输入生日,显示他在这个世界上活了多少天?
{
        long count = 0;//count用来存放一共活了多少天
        int year1,year2;//year1是你生日年份,year2是你今天的年份
        int month1,month2;
        int day1,day2;
        int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
        printf("请输入你的生日(如1998-05-02):");
        scanf("%d-%d-%d",&year1,&month1,&day1);
        printf("请输入今天的日子(如2015-02-06):");
        scanf("%d-%d-%d",&year2,&month2,&day2);
        while(year1<=year2){
                days=(year1%400 == 0||(year1%400 == 0&&year1%100 != 0))?29:28;
                while(month1 <= 12){
                        while(day1 <= days)
                        {
                       
                        if(year1 == year2&&month1 == month2&&day1 == day2)
                        {
                                goto FINISH;//跳出多层循环才被迫用goto语句
                        }
                        day1++;
                        count++;
                }
                day1=0;
                month1++;
        }
        month1= 0;
        year1++;
}
FINISH:printf("你在这个世界上总共生存了%d天\n",count);
return 0;
}
其中while(day1 <= days)
这一句不太了解。还有day1++;
                        count++;
                }
                day1=0;
                month1++;
        }
        month1= 0;
        year1++;
}
这一层也不太了解。



bin554385863 发表于 2019-6-3 22:00:21

把这个代码先放一边别管,自己写一段实现的代码,相互比较一下

我叫MD 发表于 2019-6-3 22:15:51

本帖最后由 我叫MD 于 2019-6-3 22:20 编辑

1问:其中while(day1 <= days)

答:其实你既然明白了前面的while(year1<=year2)和 while(month1 <= 12),其实就不难理解你说的这个了;
其中day1是你生日的那天,而days)是你生日那个月份一共有多少天(month1 - 1   是因为days数组下标是从0索引的,所以 -1),比如你生日那天是3月14日,那么3月应该有31天,所以14 肯定的 <= 31了


2问: 这一句不太了解。还有day1++;
                        count++;
                }
                day1=0;
                month1++;
      }
      month1= 0;
      year1++;
}
这一层也不太了解。

答:这理解起来很简单,但是我表达可能不清楚,你先试着看下,我尽量说清楚

        day1++;      //因为你之前已经判断过这个月一共多少天了(就是上一问),所以day1开始自增,当大于这个月份的天数后
                               //开始跳出循环

        count++;
}
day1 = 0;      //day1重新赋值为0,开始加下一月的天数,当大于下月的天数后,又跳出循环
month1++;      //月数自增一,当月数大于12后,跳出循环
                }
                month1 = 0;//月数重新赋值为0,利用循环开始计算这一年的天数(其实和上面的day1 = 0异曲同工)
                year1++;   //年数自增,直到if(year1 == year2&&month1 == month2&&day1 == day2)相等时,跳出循环,天数就计算好了
}

//其实这个循环就是天数一直自增来计算的
   

自己试着理解下看看,不行就亲自写个年份和月份,按着代码逻辑走一下,一下子通了,你理解了也就这样了
页: [1]
查看完整版本: 数组,课后作业。