Online Compiler C

#include <stdio.h> int main(){ int n; scanf("%d",&n); int a[100]; for(int i=0;i<n;i++){scanf("%d",&a[i]);} int max=a[0]; int min=a[0]; for(int i=1;i<n;i++){ if(a[i]>max){max=a[i]; if(a[i]<min){min=a[i];} printf("%d\n",max-min); }
这段代码试图读取一组整数,然后找出最大值和最小值,并输出它们的差。但代码中存在逻辑错误,导致结果不正确。

- 在循环中,`if(a[i]>max)` 和 `if(a[i]<min)` 被嵌套在一起,这意味着只有当当前元素大于最大值时,才会检查它是否小于最小值。这会导致最小值永远不会被正确更新,因为只有当元素比当前最大值还大时才会检查最小值,而实际上最小值可能出现在任何位置。
- `printf("%d\n",max-min);` 被放在循环内部,导致每次更新最大值时都会输出一次差值,而不是在循环结束后输出最终结果。

提示:
- 检查条件判断的嵌套结构,确保最大值和最小值的更新是独立的,而不是一个嵌套在另一个里面。
- 思考输出语句应该放在循环内部还是循环结束后,才能得到最终的最大值与最小值的差。