题目: 有一个班有4个学生,期末考试有5门课进行了考试,老师将这些成绩输入到计算机,计算每个人平均成绩,并查找平均成绩最高的学生,输出他(她)的序号和平均成绩(最小宽度为7,保留2位小数)。
例:
输入:
90 90 90 90 90
89 89 89 89 89
78 68 89 89 77
90 91 91 92 92
输出:
stu_order=3
max= 91.20
我的代码:
#include<stdio.h>
int main (){
int a[4][5];
float max,sum,avg;
int i,j,t;
float b[4];
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
for (i=0;i<4;i++)
{
for(j=0;j<5;j++){
sum=sum+a[i][j];
}
avg=sum/5.0;
b[i]=avg;
}
max=b[0];
for(i=0;i<4;i++)
{
if(max<b[i])
{max=b[i];
t=i;
}
}
printf("stu_order=%d\nmax=%7.2f",t,max);
}
思想感悟:
整体的思路是正确的,但是小细节有问题,导致长时间无法求解。
1.在编写求每一行元素的总值的时候,没有考虑到,sum的值一直 在累加;(最终解决方案:每一次内循环的时候,当取到第一个元素是,令sum的值为0)。
2.没有注意到数据类型
3.在编写程序时候,一直在纠结自己的思路是否有问题,而没有去查看细节,因此"细节决定成败"是非常有道理的.
以下为正确的代码:
#include<stdio.h>
int main (){
int a[4][5];
float max,sum,avg;
int i,j,t;
float b[4];
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
for (i=0;i<4;i++)
{
for(j=0;j<5;j++){
if(j==0) sum=0;
sum=sum+a[i][j];
}
avg=sum/5.0;
b[i]=avg;
}
max=b[0];
for(i=0;i<4;i++)
{
if(max<b[i])
{max=b[i];
t=i;
}
}
printf("stu_order=%d\nmax=%7.2f",t,max);
}