Онлайн компилятор C

#include <stdio.h> int main() { int n; scanf("%d",&n); if(n==0) { printf("%d",n); return 0; } int a[n]; for(int i=0;i<=n-1;i++) { scanf("%d",&a[i]); } int max=a[0]; int min=a[0]; 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; }
这段代码的功能是:先读取一个整数 n,然后读取 n 个整数存入数组,最后计算并输出这 n 个数中最大值与最小值的差。

代码整体逻辑正确,但有一个潜在问题需要注意:

- 当 n 为 0 时,你提前输出了 0 并结束程序,这是合理的。但数组 `int a[n]` 是在 `if(n==0)` 之后定义的,所以当 n 为 0 时不会创建数组,没有问题。

- 你的循环条件 `i<=n-1` 等价于 `i < n`,写法正确,但更常见的写法是 `i < n`,这样更直观。

- 你的代码没有错误,但可以思考一下:如果 n 为负数,程序会怎样?虽然题目可能保证 n 非负,但这是一个值得注意的边界情况。