数组,课后作业。
写一个生命计算器,要求用户输入生日,显示他在这个世界上活了多少天?{
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++;
}
这一层也不太了解。
把这个代码先放一边别管,自己写一段实现的代码,相互比较一下 本帖最后由 我叫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]