马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么 s[i][5]=sum/5 这句求序号为j的学生各门课的平均分,要在第二个for语句外?
#include <stdio.h>
int main()
{
int i,j,max_i;
float sum,max=0;
float s[5][6]={{78,82,93,65},{91,82,73,76,67},{100,90,85,72,98},
{67,89,90,65,78},{77,88,99.45,89}};//定义二维数组
for(i=0;i<5;i++)
{sum=0;//只能放在for后面,每个同学的平均分算完变为0再计算下一位
for(j=0;j<5;j++)
sum=sum+s[i][j];//累加序号为i的学生各门课程的成绩
s[i][5]=sum/5;//求序号为j的学生各门课的平均分,在第二个for语句外
}
for(i=0;i<5;i++)
if(s[i][5]>max)//逐个将5个学生的平均成绩与max比较
{
max=s[i][5];max_i=i;//如果比max大,就用序号为i的的学生的平均成绩取代max的原值,将i的当前值保存在max_i中
}
printf("stu_order=%d\nmax=%7.2f\n",max_i,max);//输出最高成绩和该考生的序号i
return 0;
}
这段代码的目的是计算每个学生的平均成绩,并找出最高平均成绩对应的学生序号。首先,让我们来解释为什么 s[i][5]=sum/5这句求序号为i的学生各门课的平均分要在第二个for语句外。
在该代码中, s是一个二维数组,表示了5个学生的成绩情况。其中,每一行代表一个学生的各门课程成绩,每一列代表一门课程。最后一列 s[i][5]用于存储每个学生的平均成绩。现在我们来看第一个for循环: for(i=0;i<5;i++){ sum=0; for(j=0;j<5;j++) sum=sum+s[i][j]; s[i][5]=sum/5;}
在这个循环中,外层循环变量 i用于迭代处理每个学生的成绩,而内层循环变量 j用于迭代处理每个学生的每门课成绩。在内层循环中,通过累加每门课成绩,我们计算出了学生 i的总成绩 sum。
现在,你可能会问为什么 s[i][5]=sum/5这句要放在第二个for语句外面。这是因为我们想在内层循环完成后,即计算出学生 i的总成绩之后,再进行平均值的计算。将 s[i][5]=sum/5放在第二个for语句外面是为了保证内层循环处理完毕后, sum的值已经是学生 i的总成绩。
如果将 s[i][5]=sum/5放在内层循环中,每次迭代都会更新 s[i][5]的值,而不是在计算完某个学生的所有课程成绩后再计算平均分。
所以,将 s[i][5]=sum/5放在第二个for语句外是为了确保我们在计算平均分之前已经累加了该学生的所有课程成绩。
希望这样解释清楚了你的疑问。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!
|