以这样一道题为例: 小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到100的整数。

请计算这次考试的最高分、最低分和平均分。

输入描述: 输入的第一行包含一个整数n,表示考试人数。接下来n行,每行包含一个0至100的整数,表示一个学生的得分。

输出描述: 输出三行。

第一行包含一个整数,表示最高分。

第二行包含一个整数,表示最低分。

第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。

示例1 输入 复制 7 80 92 56 74 88 99 10 输出 复制 99 10 71.29 我第一遍代码如下:

```int main()
{
     int x,min,max,n;
     double pj,sum;
     scanf("%d", &n);
     scanf("%d", &x);  
     min = max =sum= **0**;
      for(int i=1;i<**=n**;i++)
     { 
        scanf("%d",&x);
         if(max<x)
      {
         max=x;
      }
         if (min>x)
     {
              min=x;
     }
          sum +=x;
     }
     pj=sum/(double)n;
     printf("%d\n%d\n%.2lf",max,min,pj); 
     return 0;
}

``` js

我犯了两个错误 一个是第7行,一个是第8行 关于第7行0的自我反思其实偏移到数组方向,对于数组遍历求最值时,一般也不把max或min的初始值设定为0,而是确定数组已有的一个数。

转换到scanf来说,也就是说我需要提前输入一个x(提前指的在for循环实现重复输入代码之前),并把这个x赋值给min或者max,这就导致而后for循环开始时,循环的次数应减少一个(因为我已经“提前”输入过一次了)具体体现就是,i<n而不是i<=n。 修改之后顺利ac了

{
     int x,min,max,n;
     double pj,sum;
     scanf("%d", &n);
     scanf("%d", &x);  
     min = max =sum= x;
      for(int i=1;i<n;i++)
     { 
        scanf("%d",&x);
         if(max<x)
      {
         max=x;
      }
         if (min>x)
     {
              min=x;
     }
          sum +=x;
     }
     pj=sum/(double)n;
     printf("%d\n%d\n%.2lf",max,min,pj); 
     return 0;
}