1. Yes, but if you look at his code...
Code:
```do{
i++;
He's reassigning average by dividing each individual grade by the counter. He should be summing the grades, then dividing that by the counter.

2. Code:
```Code:
0 1 0 0 1 --> total = 2

1  2  3  4  5  --> i = 5       average = 2/5 = 0```
The point here is that it will not work for all possible cases and thus is sloppy code.

3. I don't see how that's possible since the scores are going to be 30, 50, 70, 90, etc., so a running total of scores should always be greater than the number of students.
Well, this was my first thought as well, which is why I pointed out the uninitialized variable. In my experience, uninitialized variables tend to take on astronomically huge values, and therefore the result of the division:
100 (or even 200, assuming you're a maniac brainiac) / (astronomically huge) -> 0.00

is not entirely unexpected.

Besides, AH_Tze (not the original poster I'll admit) has already noticed and mostly corrected (aside from redundancy problems) the problematic average-calculating formula.

4. He's reassigning average by dividing each individual grade by the counter. He should be summing the grades, then dividing that by the counter.
Yes, you are right. I was thinking about how it should be, and not how the poster actually did it. They actually started off with this:

hope.average = hope.average/hope.total;

which will result in 0 everytime when you initialize hope.average with 0--regardless of the integer division problem. That formula for an average is a little disconcerting coming from a teacher.

5. That formula for an average is a little disconcerting coming from a teacher.
Well, back when I was in school, teachers also tought indentation

-Edit-

In fact, I'm fairly certain one of the first things we learned was how to make legible code - indenation and commenting.