Online Compiler C

#include <stdio.h> int main() { int n; scanf("%d",&n); int arr[100]; int max,min; scanf("%d",&arr[0]); min=arr[0]; max=arr[0]; for(int i=0;i<n;i++) { if(arr[i]<min) min=arr[i]; if(arr[i]>max) max=arr[i]; } printf("%d",max-min); return 0; }
这段代码的目的是从用户输入中读取 n 个整数,然后找出这些数中的最大值和最小值,最后输出它们的差。

代码存在一个关键问题:在循环读取数组元素之前,只读取了第一个数 `arr[0]`,但循环中并没有继续读取后续的数。因此,`arr[1]` 到 `arr[n-1]` 都是未初始化的垃圾值,导致比较结果错误。

- 提示1:检查循环中是否缺少读取剩余数组元素的步骤。当前循环只进行了比较,但没有用 `scanf` 读取 `arr[1]` 到 `arr[n-1]`。
- 提示2:考虑将读取数组元素和寻找最大最小值合并到同一个循环中,这样可以避免重复遍历。