鱼C论坛

 找回密码
 立即注册
查看: 1369|回复: 2

[已解决]数组,课后作业。

[复制链接]
发表于 2019-6-3 21:02:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写一个生命计算器,要求用户输入生日,显示他在这个世界上活了多少天?
{
        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[1]=(year1%400 == 0||(year1%400 == 0&&year1%100 != 0))?29:28;
                while(month1 <= 12){
                        while(day1 <= days[month1 - 1])
                        {
                       
                        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[month1 - 1])
这一句不太了解。还有day1++;
                        count++;
                }
                day1=0;
                month1++;
        }
        month1= 0;
        year1++;
}
这一层也不太了解。



最佳答案
2019-6-3 22:15:51
本帖最后由 我叫MD 于 2019-6-3 22:20 编辑

1问:其中while(day1 <= days[month1 - 1])

答:其实你既然明白了前面的while(year1<=year2)和 while(month1 <= 12),其实就不难理解你说的这个了;
其中day1是你生日的那天,而days[month1 - 1])是你生日那个月份一共有多少天(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)相等时,跳出循环,天数就计算好了
}

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

自己试着理解下看看,不行就亲自写个年份和月份,按着代码逻辑走一下,一下子通了,你理解了也就这样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-3 22:00:21 | 显示全部楼层

回帖奖励 +1 鱼币

把这个代码先放一边别管,自己写一段实现的代码,相互比较一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-3 22:15:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 我叫MD 于 2019-6-3 22:20 编辑

1问:其中while(day1 <= days[month1 - 1])

答:其实你既然明白了前面的while(year1<=year2)和 while(month1 <= 12),其实就不难理解你说的这个了;
其中day1是你生日的那天,而days[month1 - 1])是你生日那个月份一共有多少天(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)相等时,跳出循环,天数就计算好了
}

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

自己试着理解下看看,不行就亲自写个年份和月份,按着代码逻辑走一下,一下子通了,你理解了也就这样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 21:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表