Online Compiler C

#include <stdio.h> int main() { int n; scanf("%d",&n); int a[n]; for(int i=0;i<=n-1;i++) { scanf("%d",&a[i]); } int max=a[0]; int min=a[1]; if(max<min) {max=a[1] min=a[0]; } if(n==0) printf("%d",n); for(int i=0;i<=n-1;i++) { if(a[i]>max) { max=a[i]; } if(a[i]<min) { min=a[i]; } } int b=max-min; printf("%d\n",b); return 0; }
这段代码的目的是读取一组整数,找出其中的最大值和最小值,然后计算它们的差值并输出。代码整体思路正确,但存在一些细节问题。

- 当数组只有一个元素时,你初始化 `min` 为 `a[1]`,但 `a[1]` 并不存在,这会导致未定义行为。应该考虑数组只有一个元素的情况,或者将 `min` 初始化为 `a[0]` 而不是 `a[1]`。
- 在 `if(max<min)` 这个交换块中,你漏掉了分号,并且交换逻辑可以简化。实际上,如果数组元素个数大于等于2,直接让 `max` 和 `min` 都从 `a[0]` 开始,然后遍历所有元素更新它们会更简洁,也避免了单独处理交换。