单精度浮点型运算有关问题?

单精度浮点型运算问题???

#include <stdio.h>
struct Student
{
unsigned int mun;
char name[20];
float score[3];
};
int main()
{
struct Student stu[1];
void input(struct Student *p, int n);
void fun(struct Student *p, int n);
input(stu, 1);
fun(stu, 1);
return 0;
}
void input(struct Student *p, int n)
{
for (int i = 0; i < n; i++, p++)
{
printf("请输入第%d个学生的学号、姓名、3门课程的成绩:",i+1);
scanf("%u %s %f %f %f", &p->mun, p->name, &p->score[0], &p->score[1], &p->score[2]);
}
}
void fun(struct Student *p,int n)
{
float zongfen=0, zuigao=0,zuigaot=0;
struct Student *zuigaofen=NULL;
for (int i = 0; i < n; i++, p++)
{
zuigao = 0;
for (int j = 0; j < 3; j++)
{
zongfen += p->score[i];
zuigao += p->score[i];
}
if (zuigao > zuigaot)
{
zuigaot = zuigao;
zuigaofen = p;
}
}
printf("总平均成绩为:%.2lf\n", zongfen / (n * 3));
printf("最高分的学生数据:\n学号:%u 姓名:%s 3门课的成绩:%.2f %.2f %.2f 平均分数:%.2lf\n", zuigaofen->mun, zuigaofen->name, zuigaofen->score[0], zuigaofen->score[1], zuigaofen->score[2],zuigaot/3.0);
}

单精度浮点型运算有关问题?
问下大家 我用调试看见的明明p->score[2]的值是103
为什么zongfent就加不到303呢?而是300??
最后的结果显然达不到预期的效果(101),请问这是怎么回事呢?
------解决方案--------------------
循环变量张冠李戴了
for (j = 0; j < 3; j++)
{
zongfen += p->score[i];
zuigao += p->score[i];
}
 显然应改为
for (j = 0; j < 3; j++)
{
zongfen += p->score[j];
zuigao += p->score[j];
}