#include <stdio.h> int main() { int i,n,max,min,sum,avg; sum=0; for(i=0;i<5;i++) { scanf("%d",&n); { if(n==0) n=max=min; else { if(max<n) max=n; if(min>n) min=n; } sum=sum+n; } } avg=sum/5; printf("最大值=%d,最小值=%d,avg=%d",max,min,avg);这个程序有什么问题
时间: 2023-07-16 18:15:47 浏览: 222
#include <stdio.h>
这个程序有两个问题:
1. 变量 `max` 和 `min` 需要在循环之前初始化,否则第一个输入的数无法正确地更新 `max` 和 `min`,导致结果错误。
2. 在计算平均值时,变量 `avg` 被声明为整型,使用整数除法会导致结果向下取整,可能会产生精度损失。应该将 `avg` 声明为浮点型,或者在计算平均值时将分子或分母强制转换为浮点型。
以下是修改后的程序:
```
#include <stdio.h>
int main() {
int i, n, max, min, sum;
float avg; // 将 avg 声明为浮点型
sum = 0;
max = min = 0; // 初始化 max 和 min
for (i = 0; i < 5; i++) {
scanf("%d", &n);
if (i == 0) { // 第一个数需要特殊处理
max = min = n;
} else { // 其他数按照题意处理
if (max < n) max = n;
if (min > n) min = n;
}
sum = sum + n;
}
avg = (float) sum / 5; // 强制类型转换为浮点型
printf("最大值=%d, 最小值=%d, 平均值=%.2f", max, min, avg); // 保留两位小数
return 0;
}
```
阅读全文