Smatchcube's website 🌍


Exercise 10.12

#include <stdio.h>
#define MONTHS 12    // number of months in a year
#define YEARS   5    // number of years of data

void print_rainfall_per_year(
	int first_year,
	int number_of_years,
	const float [number_of_years][MONTHS]);
float yearly_average(int number_of_years,const float [number_of_years][MONTHS]);
void print_monthly_averages(int number_of_years, const float [number_of_years][MONTHS]);

int main(void)
{
	// initializing rainfall data for 2010 - 2014
	const 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}
		};
	print_rainfall_per_year(2010, YEARS, rain);
	printf("\nThe yearly average is %.1f inches.\n\n",
	       yearly_average(YEARS, rain));
	printf("MONTHLY AVERAGES:\n\n");
	print_monthly_averages(YEARS, rain);

	return 0;
}

void print_rainfall_per_year(
	int first_year,
	int number_of_years,
	const float rain[number_of_years][MONTHS])
// print a table of the rainfall per year beginning from first_year (inclusive)
{
	int year, month;
	float total_year;
	printf(" YEAR     RAINFALL  (inches)\n");
	for (year = 0; year < number_of_years; ++year) {
		// for each year, sum rainfall for each month
		for (month = 0, total_year = 0; month < MONTHS; ++month)
			total_year += *(*(rain + year) + month);
		printf("%5d %15.1f\n", first_year + year, total_year);
	}
}

float yearly_average(int number_of_years,const float rain[number_of_years][MONTHS])
{
	float sum = 0;
	for (int year = 0; year < number_of_years; ++year) {
		for (int month = 0; month < MONTHS; ++month)
			sum += rain[year][month];
	}
	return sum / number_of_years;
}


void print_monthly_averages(int number_of_years, const float rain[number_of_years][MONTHS])
// print a table of the monthly average
{
	int year, month;
	float total_month;
 	printf(" Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec\n");
	for (month = 0; month < MONTHS; ++month) {
		// for each month, sum rainfall over years
		for (year = 0, total_month = 0; year < number_of_years; ++year)
			total_month += *(*(rain + year) + month);
		printf("%4.1f ", total_month/YEARS);
	}
	printf("\n");
}