11.重写程序清单10.7的程序rain,main()中的主要功能改为由函数来执行。
# include <stdio.h>
# define MONTHS 12 //一年的月份数
# define YEARS 5 // 降水量数据的年数
void rain_year_total(float rain[][MONTHS], int years);//每年总降水量
void rain_mean_year(float rain[][MONTHS], int years);//每年平均降水量
void rain_mean_month(float rain[][MONTHS], int years);//每月平均降水量
int main(void)
{
//把数组初始化为2000年到2004年的降水量数据
float rain[YEARS][MONTHS] = {
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
{9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
{7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
{7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2},
};
rain_year_total(rain, YEARS);
rain_mean_year(rain, YEARS);
rain_mean_month(rain, YEARS);
printf("\n");
return 0;
}
void rain_year_total(float rain[][MONTHS], int years)
{
int year, month;
float subtot;
printf(" YEAR RAINFALL (inches) \n");
for(year = 0; year < years; year++)
{
for(month = 0, subtot = 0; month < MONTHS; month++)
subtot += *(rain[year] + month);
printf("%5d %15.1f\n", 200 + year, subtot);
}
}
void rain_mean_year(float rain[][MONTHS], int years)
{
int year, month;
float subtot, total;
for(year = 0, total = 0; year < years; year++)
{
for(month = 0, subtot = 0; month < MONTHS; month++)
subtot += *(rain[year] + month);
printf("%5d %15.1f\n", 200 + year, subtot);
total += subtot;
}
printf("\nThe yearly average is %.1f inches.\n\n", total/years);
}
void rain_mean_month(float rain[][MONTHS], int years)
{
int year, month;
float subtot;
printf("MONTHLY AVERAGES: \n\n");
printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
printf(" Nov Dec\n");
for(month = 0; month < MONTHS; month++)
{ //这几年每月总降水量
for(year = 0, subtot = 0; year < years; year++)
subtot += *(*(rain + year) + month); //*(*(rain + year) + month 表示第year+1行第month+1列
printf("%4.1f ", subtot/years);
}
}