以这样一道题为例: 小蓝给学生们组织了一场考试,卷面总分为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;
}