// ex_ch10_12.c
#include <stdio.h>
#define SIZE 5
#define NUMBER 3
#define VERY_LOW -1000

void question_user(double dest[][SIZE]);
double row_average(double arr[], int n);
double max_value(double arr[][SIZE]);

int main(void)
{
	double user[NUMBER][SIZE];
	double averages[NUMBER];
	int i;

	question_user(user);

	for (i = 0; i < NUMBER; i++)
	{
		averages[i] = row_average(user[i], SIZE);
		printf("Average of row %d: %.2f\n", 
		       i + 1, averages[i]);
	}

	printf("Average of all %.2f\n", row_average(averages, NUMBER));
	printf("Maximum of all %.2f\n", max_value(user));
	
	return 0;
}

void question_user(double dest[][SIZE])
{
	int r, c;
	
	printf("Enter five float values\n");
	for (r = 0; r < NUMBER; r++)
	{
		printf("Entering row %d: ", r + 1);
		for (c = 0; c < SIZE; c++)
			/* %lf scans as double, %f scans as float */
			while (scanf("%lf", &dest[r][c]) != 1)
			{
				// warn the user
				printf("Enter a float value.\n");
				// flush the remaining input
				scanf("%*s");
			}
		
	}
}

double row_average(double arr[], int n)
{
	int i;
	double sum = 0.0;
	
	for (i = 0; i < n; i++)
		sum += arr[i];
	
	return sum / n;
}

double max_value(double arr[][SIZE])
{
	int max = VERY_LOW;
	int r, c;
	
	for (r = 0; r < NUMBER; r++)
		for (c = 0; c < SIZE; c++)
		{
			if (arr[r][c] > max)
				max = arr[r][c];
		}

	return max;
}
