鱼C论坛

 找回密码
 立即注册
查看: 1147|回复: 3

[已解决]数组

[复制链接]
发表于 2023-10-31 10:11:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
最佳答案
2023-10-31 10:12:35
这段代码的目的是计算每个学生的平均成绩,并找出最高平均成绩对应的学生序号。首先,让我们来解释为什么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语句外是为了确保我们在计算平均分之前已经累加了该学生的所有课程成绩。

希望这样解释清楚了你的疑问。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-31 10:11:21 | 显示全部楼层
在这个程序中,第二个for循环是用来计算每个学生的平均分的。在这个for循环中,sum变量被初始化为0,并且通过累加每个学生的成绩来计算总分。然后,在第二个for循环的外部,通过将总分除以5来计算平均分,并将结果存储在s[ i][5]中。

如果将s[ i][5]=sum/5这句放在第二个for循环内部,那么每次循环都会重新计算平均分并覆盖之前的结果。这样,最后存储在s[ i][5]中的值将是最后一个学生的平均分,而不是每个学生的平均分。

因此,为了正确计算每个学生的平均分并存储在正确的位置,s[ i][5]=sum/5这句需要在第二个for循环的外部。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-31 10:12:35 | 显示全部楼层    本楼为最佳答案   
这段代码的目的是计算每个学生的平均成绩,并找出最高平均成绩对应的学生序号。首先,让我们来解释为什么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语句外是为了确保我们在计算平均分之前已经累加了该学生的所有课程成绩。

希望这样解释清楚了你的疑问。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-10-31 10:25:38 | 显示全部楼层
在你的程序中,第一个for语句在切换学生,第二个for语句在计算每个学生的总成绩,要计算学生的平均分,当然要放在第二个for语句外。你这个算平均分也不应该都除以5吧,第一个和第五个学生只有4门成绩?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 15:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表