c语言程序设计,求5个学生5门课的平均成绩,求高手指点,谢谢,万分感激

题目是这样的,已知5个学生5门课的成绩,要求输出平均成绩最高的学生的成绩,以及该学生的学号,我们用的是清华版本谭浩强的程序设计,感觉有点难啊,请高手指点一下啊,谢谢啊,书中的答案是这样的:
#include <stdio.h>
void main()
{
int i,j,max_i;
float sum,max=0;
float s[6][6]={{78,82,93,74,65},{91,82,72,67,76},{100,90,85,72,98},{67,89,90,65,78},{77,88,99,45,89},{78,89,76,99,97}};
for(i=0;i<=5;i++)
{sum=0;
for(j=0;j<5;j++)
sum=sum+s[i][j];
s[i][5]=sum/5;}
for..........
这里说明一下啊,省略号是我看明白的地方,我看不明白的地方在于,sum=sum+s[i][j];这个语句的意思是,把第i行,J列的某个数据累加到SUM中,但是,地下的一句s[i][5]=sum/5;怎么是把平局数SUM/5存放到第I行,第J列的位置啊,不是说求平均数码,求高手指点一下啊,万分感激啊最好说详细一下啊,还有,这个循环油内循环,外循环,到底是怎么执行的,说明顺序,求高手详细指点,最好详细一点,写下啊
这里说明一下啊,省略号是我看明白的地方,我看不明白的地方在于,sum=sum+s[i][j];这个语句的意思是,把第i行,J列的某个数据累加到SUM中,但是,地下的一句s[i][5]=sum/5;怎么是把平局数SUM/5存放到第I行,第J列的位置啊,不是说求平均数码,求高手指点一下啊,万分感激啊最好说详细一下啊,还有,这个循环油内循环,外循环,到底是怎么执行的,说明顺序,求高手详细指点,最好详细一点,写下啊。。这里么是把"平局数SUM/5存放到第I行,第J列的位置啊"应该是么是把平局数SUM/5存放到第I行,第5列的位置“,写错了,不好意思

你的数组是6行6列的,s[i][5]是把每一列的平均数放在了该列的最后
你看下你的数组每行按声明的数组应该是6个数据,而在赋初值时只有5个数据,分别为5门成绩
而s[i][5]=sum/5就是把每行5门成绩的平均分算出来然后放在该行的最后
这下明白了吧
补充:
你的这个外循环是控制列的,外循环第循环一次里面的内循环就要循环5次,内循环是控制行的
目的是循环的每一列时再循环5次实现5门成绩相加再算出平均值放到该列的最后追问

谢谢啊,但是只能选一个答案啊,下次一定选你啊,万分感激啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-25
这个程序是先执行for(i=0;i<=5;i++) ,i=0代表第一个学生成绩的第一个,然后设置和为零,执行for(j=0;j<5;j++) sum=sum+s[i][j]:循环5次把第一个学生的成绩总和算出来,s[i][5]=sum/5;是把第一个学生的成绩算出平均分寻在数组的S[0]【5】也就是数组里第一个学生各科成绩的后面。之后i ++变成i=1,执行for(j=0;j<5;j++) sum=sum+s[i][j]:又算成第二个学生的平均成绩存在其成绩的后面。看懂这个程序主要是你要知道二维数组是什么结构,程序里定义的数组float s[6][6] 其实是有7*7个存储单元的。希望你能看懂我在说什么追问

谢谢啊,由于只能选择一个作为最佳答案,嘿嘿,还是感谢你啊,万分的感激啊

第2个回答  2012-02-25
两层for循环的执行顺序:
其实对于两层for循环,可以拆成多个一层的for循环。如上就可以拆成如下的for循环:
for(j=0;j<5;j++)
sum=sum+s[0][j];
s[0][5]=sum/5;
}
for(j=0;j<5;j++)
sum=sum+s[1][j];
s[1][5]=sum/5;
}
......
for(j=0;j<5;j++)
sum=sum+s[5][j];
s[5][5]=sum/5;
}
看明白了吗,每次i都会执行一次内部for循环,只不过每次i的取之不同而已。

再来说说那个数组:
float s[6][6]={{78,82,93,74,65},{91,82,72,67,76},{100,90,85,72,98},{67,89,90,65,78},{77,88,99,45,89},{78,89,76,99,97}};
这是一个二维数组,长度都是6.首先有6个一维数组作为外层数组的元素,这个很明确,如下:
s[0] = {78,82,93,74,65};
s[1] = {91,82,72,67,76};
.....
s[5] = {78,89,76,99,97};
从原始的定义s[6][6]知道,如上数组长度都是6,但明显这些数组只有5个元素,那么就默认第六个元素的值为0.所以如上数组实际应该是这样的:
s[0] = {78,82,93,74,65,0};
s[1] = {91,82,72,67,76,0};
.....
s[5] = {78,89,76,99,97,0};
这样就不难理解了,看这句代码:
sum=sum+s[i][j];
由于j的取值最大为4,也就是说,这样循环下去,sum的值就是s[i]的前五个元素的和。接下来的s[i][5]=sum/5;就不难理解了,这是将前五个数的和取平均值,放在第六个元素里。

就是这么简单。本回答被提问者采纳