前面的代码实现了输入数字,存入了5*5的数组中,代表5个学生5门课的成绩
下面是比大小
//每门科目中的最高和最低分
i=0,j=0;
for(j=0;j<COL;j++){
i=0;//每列遍历后,i的值为最大行,所以需要归零
max=0;//前一列循环后max归零
min=str[i][j];//一列遍历后,下一列遍历之前min赋值为新一列第一行的元素
for(i=0;i<RAW;i++){
if(str[i][j]>max)
max=str[i][j];
if(str[i][j]<min)
min=str[i][j];
}
printf("The best achievement of course%d :%d\n",j+1,max);
printf("The Worst achievement of course%d :%d\n",j+1,min);
}
return 0;
}
算法复杂度上不冗余,你至少得把数组过一遍吧,没问题的。
在写起来的时候可以稍微简化一点,
min=str[i][j]没有必要等于str[i][j],可以等于一个很大的数,比如成绩不超过一百的话呢,就可以写min=100,
这样做的好处是每列遍历后i=0那个归零不需要做。
怎么都得遍历一遍,即使是调用库函数
可以参考排序算法,利用合适的算法解决
我觉得这样写会好些
for(int j=0;j<COL;j++){
float max=str[0][j];
float min=str[0][j];
for(int i=1;i<RAW;i++){
if(str[i][j]>max)
max=str[i][j];
if(str[i][j]<min)
min=str[i][j];
}
printf("The best achievement of course%d :%d\n",j+1,max);
printf("The Worst achievement of course%d :%d\n",j+1,min);
}
return 0;
算法上没有冗余,无论怎样写需要将整个数组遍历一遍。
算法没毛病,题目是找出每列最小值,最大值,由于是找到最高最低分数,最高分数100,最低分数0如果遍历时出现这两个数,是不是就已经找到了,就没必要再继续遍历下去了。