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

#include <stdio.h> #define n 10 int main() { int arr[n]; int min_a, max_a, min_b, max_b; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } min_a = arr[0]; max_a = arr[0]; min_b = 0; max_b = 0; for (int i = 1; i < n; i++) { if (arr[i] < min_a) { min_a = arr[i]; min_b = i; } if (arr[i] > max_a) { max_a = arr[i]; max_b = i; } } printf("%d %d ", min_b, min_a); printf("%d %d ", max_b, max_a); return 0 }
这段代码的功能是:读取10个整数,找出其中的最小值和最大值,并输出它们的位置(索引)和数值。代码中定义了一个宏 `n` 为10,然后通过循环读取数组,再通过另一个循环遍历数组找到最小值和最大值及其索引。

代码中存在一个语法错误:最后一行 `return 0` 后面缺少了分号 `;`。

- 注意在C语言中,每条语句结束时都需要加上分号,包括 `return` 语句。检查一下 `return 0` 后面是否缺少了分号。
- 另外,变量 `min_b` 和 `max_b` 的初始值设为0,但如果在循环中从未更新(例如所有元素都相等),它们会保持0,这可能是正确的。但思考一下:如果数组的第一个元素就是最小值或最大值,那么 `min_b` 和 `max_b` 的初始值0是否合理?实际上,因为循环从 `i=1` 开始,第一个元素(索引0)没有被比较,所以 `min_b` 和 `max_b` 的初始值0是正确的,但需要确保当第一个元素就是最小值或最大值时,索引0被正确记录。当前代码中,`min_a` 和 `max_a` 初始化为 `arr[0]`,但 `min_b` 和 `max_b` 初始化为0,这没有问题。不过,如果数组所有元素都相等,循环中不会更新 `min_b` 和 `max_b`,它们会保持0,这也是正确的。