#include <stdio.h>
int main() {
int arr[7]={0};
//int count=0;这样就错了
while(scanf("%d %d %d %d %d %d %d",&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6])!=EOF)
{
int count=0;//注意放在大循环里面初始化,不然影响后面输出结果
int max=arr[0];
int min=arr[0];
for(int i=0;i<7;i++)
{
if(max<arr[i])
max=arr[i];
if(min>arr[i])
min=arr[i];
}//判断最高最低分
int sum=0;
for(int i=0;i<7;i++)
{
if(arr[i]>min&&arr[i]<max)//去除最高分和最低分
{
sum+=arr[i];
count++;//计算有几个有效数据
}
}
if(count==0)
printf("%d",arr[0]);//如果数据全部一样,打印第一个数据
else
printf("%.2f\n",(float)sum/count);//强制类型转换
}
return 0;
}
以上是题目代码
想比于直接用加和除以5.0的代码
# include <stdio.h>
int main(void) {
int arr[7] = {0};
while (scanf("%d %d %d %d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3],
&arr[4], &arr[5], &arr[6]) != EOF) {
int min = arr[0];
int max = arr[0];
for (int i = 0; i < 7; i++) { // 遍历数组
if (arr[i] > max) // 最高分
max = arr[i];
if (arr[i] < min) // 最低分
min = arr[i];
}
int sum = 0;
for (int i = 0; i < 7; i++) { // 遍历数组
if (arr[i] < max && arr[i] > min)
sum += arr[i];
}
printf("%.2f\n",(float) sum / 5);
}
}
代码优化了出现多个最大最小值的情况,
例如:
以及当输入数据全是相同一个数时出现的bug
同时在优化代码的同时,将count初始化放在了while循环外面,当多组输入时,count的值在第二组输入时发生改变,以至于结果错误。
所以养成好的编程习惯,有助于减少代码的bug。
以上是我对于这题的理解与消化。