|
3
26th October 15:40
External User
|
Determine low/high array values
Here's an example of how to structure your code
so that tracking down things should be much easier.
(Note: I wrote the 'main()' function *first*, then
when back and wrote functions to satisfy it.)
I think it's largely due to this up-front intentional
'separation of labor' that I got correct output first try. :-)
#include <stdio.h>
#include <stdlib.h>
#define N 5
enum which {LOW, HIGH};
int sum(int *data, size_t items)
{
int result = 0;
size_t i = 0;
for(i = 0; i < items; ++i)
result += data[i];
return result;
}
int avg(int *data, size_t items)
{
return sum(data, items) / items;
}
int bound(int *data, size_t items, enum which hilo)
{
int item = *data;
size_t i = 0;
for(i = 0; i < items; ++i)
switch(hilo)
{
case LOW:
if(data[i] < item)
item = data[i];
break; case HIGH:
if(data[i] > item)
item = data[i];
break;
default:
break;
}
return item;
}
void stats(int (*data)[N], size_t items)
{
size_t i = 0;
for(i = 0; i < items; ++i)
{
printf("%d. total == %d\n", i + 1, sum(data[i], N));
printf("%d. average == %d\n", i + 1, avg(data[i], N));
putchar('\n');
}
for(i = 0; i < items; ++i)
{
printf("%d. average == %d\n", i + 1, avg(data[i], N));
printf("%d. low == %d\n", i + 1, bound(data[i], N, LOW));
printf("%d. high == %d\n", i + 1, bound(data[i], N, HIGH));
putchar('\n');
}
}
int main(void)
{
int grades[N][N] =
{
{51, 52, 53, 54, 55},
{61, 62, 63, 64, 65},
{71, 72, 73, 74, 75},
{81, 82, 83, 84, 85},
{91, 92, 93, 94, 95},
};
stats(grades, N);
return 0;
}
Output:
1. total == 265
1. average == 53
2. total == 315
2. average == 63
3. total == 365
3. average == 73
4. total == 415
4. average == 83
5. total == 465
5. average == 93
1. average == 53
1. low == 51
1. high == 55
2. average == 63
2. low == 61
2. high == 65
3. average == 73
3. low == 71
3. high == 75
4. average == 83
4. low == 81
4. high == 85
5. average == 93
5. low == 91
5. high == 95
HTH,
-Mike
|