#include<stdio.h> int main() { int x,s,y,a[10],i,p,q; while(scanf("%d",&a[0])!=EOF) { for(i=0;i<10;i++) { scanf("%d",a[i]); } p=a[0]; q=a[0]; for(i=0;i<10;i++) { if(p<a[i]) { p=a[i]; } if(q>a[i]) { q=a[i]; } } for(i=0;i<10;i++) { s=s+a[i]; } y=(s-p-q)/8; printf("%d",y); } }这组代码有什么问题
时间: 2023-12-03 07:04:16 浏览: 12
这段代码有几个问题:
1. 在读入数组元素时,应该使用 `&a[i]` 而不是 `a[i]`。
2. 在计算平均数时,变量 `s` 没有初始化,应该将其初始值设为0。
3. 在计算平均数时,应该将 `s` 的值转换为浮点型,否则计算结果会被截断。
4. 在计算平均数时,应该将 `(s-p-q)` 转换为浮点型,否则计算结果会被截断。
5. 在输出平均数时,应该加上换行符,否则输出结果会与提示符在同一行。
下面是修改后的代码:
```c
#include <stdio.h>
int main() {
int x, y, a[10], i, p, q;
while (scanf("%d", &a[0]) != EOF) {
for (i = 1; i < 10; i++) { // 修改1:应该从 a[1] 开始读入
scanf("%d", &a[i]);
}
p = a[0];
q = a[0];
for (i = 0; i < 10; i++) {
if (p < a[i]) {
p = a[i];
}
if (q > a[i]) {
q = a[i];
}
}
int s = 0; // 修改2:需要初始化 s
for (i = 0; i < 10; i++) {
s += a[i];
}
float avg = (float)(s - p - q) / 8; // 修改3、4:需要转换为浮点型
printf("%.2f\n", avg); // 修改5:加上换行符
}
return 0;
}
```