在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d", &n); int x, y; scanf("%d", &x); int max = x, min = x; for (int i = 0; i < n; i++) { scanf("%d", &y); if (y > max) { max = y; } if (y < min) { min = y; } } int result = max - min; printf("%d", result); return 0; }
这段代码试图读取n个整数,然后输出它们的最大值与最小值的差。但代码中存在一个逻辑错误。

- 代码先读取了第一个数x,然后进入循环读取剩下的n个数。但循环条件`i < n`会导致总共读取n+1个数(包括循环外的x),而题目可能只需要读取n个数。
- 另外,变量y在循环中被重复使用,但第一个数x并没有参与后续的比较,导致最大值和最小值的初始值可能不正确。

- 检查循环次数:循环从i=0到i<n-1,共n次,但前面已经读了一个x,所以总共读了n+1个数。思考一下应该读几个数,以及循环应该执行几次。
- 考虑如何让第一个数x也参与比较:目前max和min初始化为x,但后续循环中y覆盖了x,实际上x没有被比较。想一想如何调整循环结构,使得所有n个数都能被正确处理。