nzr848704474 发表于 2019-11-27 17:59:51

关于数组课后作业的问题

本帖最后由 nzr848704474 于 2019-11-27 18:41 编辑

在生命计算器2.0中,我的代码如下:
#include<stdio.h>

int main()
{
    long count=0,count1=0;//用于一共多少天
    int year1,year2,year3;//Year1是生日,year2是当前日期
    int month1,month2,month3;
    int day1,day2,day3;
    int days[]={31,28,31,30,31,30,31,31,30,31,30,31};

    printf("请输入您的生日:(如1995-04-17)");
    scanf("%d-%d-%d",&year1,&month1,&day1);

    printf("请输入您的生日:(如1995-04-17)");
    scanf("%d-%d-%d",&year2,&month2,&day2);

    year3=year1+80;
    month3=month1;
    day3=day1;

    while(year1<=year2||year1<=year3)
    {
      days=(year1%400==0||(year1%4==0&&year1%100!=0))?29:28;
      while(month1<=12)
      {
            while(day1<=days)
            {

                if(year1==year2&&month1==month2&&day1==day2)

                {
                  count1=count;
                  printf("你在这个世界上活了%d天\n",count);



                }
                if(year1==year3&&month1==month3&&day1==day3)
                {

                  printf("如果你能活到80岁,还剩下%d天\n",count-count1);
                  printf("你已经使用了%%%.2f的生命,珍惜剩下的时间\n",(double)count1/count*100);
                  goto Finish;
                }

                day1++;
                count++;
            }
            day1=1;
            month1++;

      }

   month1=1;
   year1++;

    }


    Finish:printf("%d,%d\n",count,count1);
      return 0;


我的问题是:1.为什么没有goto语句,程序就会出问题?我认为当执行到输出year3的时候已经year1==year3了,循环就不会再继续了,那有goto好像就是直接到,没goto就是一层一层退出循环,所以应该是没区别。
                   2.求解释count和count1的值是怎么变化的。

谢谢大家了。

bin554385863 发表于 2019-11-27 18:17:44

你的代码就是叫白卷

nzr848704474 发表于 2019-11-27 18:42:08

bin554385863 发表于 2019-11-27 18:17
你的代码就是叫白卷

不好意思刚刚弄错了,我已经重提交了

lff 发表于 2019-11-27 19:54:24

1.goto是直接跳转到标签指定位置运行
while确实是一层一层退,但是像你这个没有goto顶多也就退了一层,然后死循环了吧

nzr848704474 发表于 2019-11-27 21:33:12

lff 发表于 2019-11-27 19:54
1.goto是直接跳转到标签指定位置运行
while确实是一层一层退,但是像你这个没有goto顶多也就退了一层, ...

lff 发表于 2019-11-28 10:02:44

nzr848704474 发表于 2019-11-27 21:33


如果没有猜错的话加了goto的执行时间应该短,不加goto的执行时间长
加了goto是满足了if(year1==year3&&month1==month3&&day1==day3) 这个条件之后直接退出
没加goto是满足了if(year1==year3&&month1==month3&&day1==day3) 这个条件之后,又继续执行 while(day1<=days) 这个循环,只是不进到 if(year1==year3&&month1==month3&&day1==day3) 这个条件里,直到不满足while(day1<=days)这个条件,然后一层层退出while,然后程序执行结束

nzr848704474 发表于 2019-11-28 16:41:30

lff 发表于 2019-11-28 10:02
如果没有猜错的话加了goto的执行时间应该短,不加goto的执行时间长
加了goto是满足了if(year1==year ...

谢谢,execution time少了1s多
页: [1]
查看完整版本: 关于数组课后作业的问题