题目:输入某年某月某日,判断这一天是这一年的第几天? 书中代码:
[C] 纯文本查看 复制代码 #include "stdio.h"
main()
{
int day, month, year, sum, leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d", &year, &month, &day);
switch(month) /*先计算某月以前月份的总天数*/
{
case 1:sum = 0;break;
case 2:sum = 31;break;
case 3:sum = 59;break;
case 4:sum = 90;break;
case 5:sum = 120;break;
case 6:sum = 151;break;
case 7:sum = 181;break;
case 8:sum = 212;break;
case 9:sum = 243;break;
case 10:sum = 273;break;
case 11:sum = 304;break;
case 12:sum = 334;break;
default:printf("data error");break;
}
sum = sum + day; /*再加上某天的天数*/
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) /*判断是不是闰年*/
leap = 1;
else
leap = 0;
if(leap == 1 && month > 2) /*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);
getch();
}
我写的代码:
[C++] 纯文本查看 复制代码 #include <iostream>
int main()
{
int iYear, iMonth, iDay, iDaySum;
std::cout << "请输入年月日:例如 2000 12 12" << std::endl;
std::cin >> iYear >> iMonth >> iDay;
// 判断是不是闰年
if(iYear % 400 == 0 || (iYear % 4 == 0 && iYear % 100 != 0))
iDaySum = 1;
else
iDaySum = 0;
switch(iMonth)
{
case 1: // 1 月无需考虑闰年因素,重新赋值即可
if(iDay > 0 && iDay <= 31) // 增加 IDay 数据是否合法,避免结果出现错误
{
iDaySum = iDay;
goto resultok;
}
else
goto resultno;
case 2: // 2 月无需考虑闰年因素,加 1 月天数重新赋值
if(iDaySum = 1)
{
if(iDay > 0 && iDay <= 29)
{
iDaySum = iDay + 31;
goto resultok;
}
else
goto resultno;
}
else
{
if(iDay > 0 && iDay <= 28)
{
iDaySum = iDay + 31;
goto resultok;
}
else
goto resultno;
}
case 3: // 考虑闰年因素,将已赋值 iDaySum 累加 1、2 月天数
if(iDay > 0 && iDay <= 31)
{
iDaySum += iDay + 31 + 28;
goto resultok;
}
else
goto resultno;
case 4: // 累加 1 - 3 月天数
if(iDay > 0 && iDay <= 30)
{
iDaySum += iDay + 31 + 28 + 31;
goto resultok;
}
else
goto resultno;
case 5: // 累加 1 - 4 月天数
if(iDay > 0 && iDay <= 31)
{
iDaySum += iDay + 31 + 28 + 31 + 30;
goto resultok;
}
else
goto resultno;
case 6: // 累加 1 - 5 月天数
if(iDay > 0 && iDay <= 30)
{
iDaySum += iDay + 31 + 28 + 31 + 30 + 31;
goto resultok;
}
else
goto resultno;
case 7: // 累加 1 - 6 月天数
if(iDay > 0 && iDay <= 31)
{
iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30;
goto resultok;
}
else
goto resultno;
case 8: // 累加 1 - 7 月天数
if(iDay > 0 && iDay <= 31)
{
iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31;
goto resultok;
}
else
goto resultno;
case 9: // 累加 1 - 8 月天数
if(iDay > 0 && iDay <= 30)
{
iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
goto resultok;
}
else
goto resultno;
case 10: // 累加 1 - 9 月天数
if(iDay > 0 && iDay <= 31)
{
iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
goto resultok;
}
else
goto resultno;
case 11: // 累加 1 - 10 月天数
if(iDay > 0 && iDay <= 30)
{
iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
goto resultok;
}
else
goto resultno;
case 12: // 累加 1 - 11 月天数
if(iDay > 0 && iDay <= 31)
{
iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
goto resultok;
}
else
goto resultno;
default:
goto resultno1;
}
resultok:
std::cout << iYear << " 年 " << iMonth << " 月 " << iDay << " 日是这一年的第 "
<< iDaySum << " 天。" << std::endl;
return 0;
resultno:
std::cout << "日数据输入错误。" << std::endl;
return 0;
resultno1:
std::cout << "月份数据输入错误。" << std::endl;
return 0;
}
|