按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题): 输入某年某月某日,计算并输出它是这一年的第几天。 /* 函数功能: 对给定的某年某月某日,计算它是这一年的第几天 函数参数: 整型变量year、month、day,分别代表年、月、日 函数返回值:这一年的第几天 */ int DayofYear(int year, int month, int day); 下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
#include
int DayofYear(int year, int month, int day);
int dayTab[2][13] =
{
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
main()//这里很明显,少个int
{
int year, month, day;
printf("Please enter year, month, day:");
scanf("%d,%d,%d", year, month, day);//少了取址符号&
printf("yearDay = %d\n" DayofYear(year, month, day));
//引号后少了逗号
}
int DayofYear(int year, int month, int day);
{
int i, leap;
leap = year / 4 = 0 & year / 100 != 0 | year / 400 = 0;
//闰年应该是1,而不是0,加个if语句判断
for (i = 0, i < month, i++);
{
day = day - dayTab[leap][i];
//统计的是天数之和,减号改成加号
//注意这个函数要有返回值,返回天数day
}
}
注意: (1)请将修改正确后的完整源程序拷贝粘贴到答题区内。 (2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 (3)当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。 (4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。
#include
int DayofYear(int year, int month, int day);
int dayTab[2][13] =
{
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int main()
{
int year, month, day;
printf("Please enter year, month, day:");
scanf("%d,%d,%d", &year, &month, &day);
printf("yearDay = %d\n", DayofYear(year, month, day));
}
int DayofYear(int year, int month, int day)
{
int i, leap;
if ( (year / 4==0 && year / 100 != 0) ||year / 400==0)
{
leap = 0;
}
else
{
leap = 1;
}
for (i = 0; i < month; i++)
{
day=dayTab[leap][i]+day;
}
return day;
}
注意函数一旦返回一个值便结束,所以不要把return day放在for循环里面