题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
#include <iostream.h>
int TotalDays( int Year, int Month, int Day ){
int * point, MonthDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //记录12个月每个月的总天数;
int TotalDays = 0;
point = MonthDays;
for ( int i = 1; i < Month; i++ ){
TotalDays += * ( point++ );
}
TotalDays += Day;
if ( (Year % 4 == 0 && Year % 100 != 0 || Year%100 == 0 && Year % 400 == 0) && Month > 2 ) ++TotalDays;
return TotalDays;
}
void main(){
int year, month, day, flag = 1;
while(1) {
cout << "请输入四位年份:" << endl;
cin >> year;
if( year <1900 || year > 3000 ) cout << "输入错误,请输入1900~3000之内的年份!" <<endl;
else break;
}
while(1) {
cout << "请输入月份:" << endl;
cin >> month;
if( month <1 || month > 12 ) cout << "输入错误!" << endl;
else break;
}
while (flag) {
cout << "请输入日期:" << endl;
cin >> day;
switch ( month ){
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 :
if ( day < 1 || day > 31 ) { cout << "输入错误!" << endl; flag = 1;}
else flag = 0;
break;
case 4 :
case 6 :
case 9 :
case 11 :
if ( day < 1 || day > 31 ) { cout << "输入错误!" << endl; flag = 1;}
else flag = 0;
break;
case 2 :
if ( ( year % 4 == 0 && year % 100 != 0 || year%100 == 0 && year % 400 == 0 ) && ( day <1 || day > 29 ) ) { cout << "输入错误!" << endl; flag = 1;}
else if ( !( year % 4 == 0 && year % 100 != 0 || year%100 == 0 && year % 400 == 0 ) && ( day < 1 || day >28 ) ) { cout << "输入错误!" << endl; flag = 1;}
else flag = 0;
break;
default : flag = 0; break;
}
}
cout << month << "月" << day << "日" << "是" << year << "年的第" << TotalDays ( year, month, day) << "天。" <<endl ;
}