|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第二题是让我们 写一个生命计算器,要求用户输入生日,显示他在这个世界上活了多少天。源代码如下:
#include <stdio.h>
int main()
{
long count1 = 0, count2; // count用于存放一共活了多少天
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("请输入你的生日(如1988-05-20):");
scanf("%d-%d-%d", &year1, &month1, &day1);
printf("请输入今天的日期(如2016-03-28):");
scanf("%d-%d-%d", &year2, &month2, &day2);
year3 = year1 + 80;
month3 = month1;
day3 = day1;
while (1)
{
days[1] = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0)) ? 29 : 28;
while (month1 <= 12)
{
while (day1 <= days[month1 - 1])
{
if (year1 == year2 && month1 == month2 && day1 == day2)
{
count2 = count1;
printf("你在这个世界上总共生存了%d天\n", count2);
}
if (year1 == year3 && month1 == month3 && day1 == day3)
{
printf("如果能活到80岁,你还剩下%d天\n", count1 - count2);
printf("你已经使用了%.2f\%的生命,请好好珍惜剩下的时间!\n", (double)count2 / count1 * 100);
goto FINISH;
}
day1++;
count1++;
}
day1 = 1;
month1++;
}
month1 = 1;
year1++;
}
FINISH: return 0;
}
对于上面的代码,小白我前面可以看懂,while那里开始有点不清楚了。主要的问题有下面五个:
第一,while (day1 <= days[month1 - 1]) 这个代表什么意思?
第二, if (year1 == year2 && month1 == month2 && day1 == day2) 代表什么?是指出生日期=存活日期吗?不太理解
第三, if (year1 == year3 && month1 == month3 && day1 == day3) 代表什么?是指出生日期等于死亡日期?
第四, day1++; count1++; day1 = 1; month1++; month1 = 1;year1++; 这三组逻辑语言我大概能猜到是什么意思,应该是满足条件后层层递进的意思,但是我不是很理解他们的工作原理,能解释一下吗?
第五,count1是指存活到80岁时的生存天数吗?count2是指截止目前为止的生存天数吗?为什么开头是long count1=0?
小白,真的是小白,希望大神不要笑我的问题很白痴( )因为真的想了很久想不通才问的
你的问题不白痴,我很乐意帮你一一解答。
1. while (day1 <= days[month1 - 1]) 这行代码的意思是:当给定月份的天数大于或等于出生日期时,执行循环。比如说,如果你是5月20日出生的,那么5月的天数就是31天,所以条件满足,会执行下面的代码块。这主要用于模拟一个月中的每一天。
2. if (year1 == year2 && month1 == month2 && day1 == day2) 这行代码的意思是:当输入的当前日期与正在计算的日期(初始为出生日期,然后每次循环递增一天)完全一致时,执行下面的代码块。也就是说,这个代码段被用来确定到当前日期为止,你在世界上生存了多少天。
3. if (year1 == year3 && month1 == month3 && day1 == day3) 这行代码的意思是:当正在计算的日期(即假设你能活到80岁时的日期)与你出生日期完全一致时,执行下面的代码块。这个代码段被用来计算如果你能活到80岁,那么你还剩下多少天。
4. 这些代码段的逻辑是这样的:
· day1++; count1++; :每次循环,日期和总天数都会增加1。也就是说,程序模拟了时间的推移,每天都在增加。
· day1 = 1; month1++; :当一个月的所有日期都被遍历后,日期会重置为1,月份会增加1。这表示进入了新的一个月。
· month1 = 1; year1++; :当一年的所有月份都被遍历后,月份会重置为1,年份会增加1。这表示进入了新的一年。
5. 是的, count1 是指存活到80岁时的生存天数, count2 是指截止目前为止的生存天数。这两个变量在代码开头被初始化为0是因为我们要用它们来计数。在开始计算前,这两个计数器都应该是0。
希望以上的解答能帮到你。学习编程需要时间和耐心,不要急于求成,一步一步来。你的问题都很好,这表示你在积极思考和理解。继续加油!
|
|