It is to do with the way you are calling these three functions from main().
Code:
openFile(table); // You read the data in this func.
average (table, &avg); // You perform the averages calculation
report(table, avg); // You print out the report on screen
You have evaluated three averages, each time storing the data in double avg. So the first time you evaluate the average, avg is equal to a number. But you overwrite that value with the next iteration of the loop.
The reason that you have the same data three times is that you are trashing the data stored in avg each time you evaluate avg. You then pass the final value that was evaluated to report().
To fix this program you could do one of a couple of things. Have the average function only evaluate the average of one line of data every time. Then loop between average(); and report(); i.e. you print out the data to screen every time you evaluate one line of data.
or perhaps make avg an array. Store the results in a different element as you loop through your calculations.