Online Compiler C

#include <stdio.h> int main() { int n = 10, c = 1, d = 1; int a[10]; int min, max; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } min = a[0]; for (int i = 0; i < n; i++) { if (a[i] < min) { min = a[i]; c = i + 1; } } max = a[0]; for (int p = 0; p < n; p++) { if (a[p] > max) { max = a[p]; d = p + 1; } } printf("%d %d %d %d", d, max, c, min); return 0; }
这段代码的功能是:读取10个整数,找出其中的最大值和最小值,并记录它们第一次出现的位置(从1开始计数),最后按顺序输出最大值的位置、最大值、最小值的位置、最小值。

你的代码逻辑基本正确,但有一个潜在问题需要注意。

- 变量c和d分别记录最小值和最大值的位置,但初始值都设为1。如果数组的第一个元素恰好就是最小值或最大值,这个初始值是正确的。但如果第一个元素不是最值,c和d会在循环中被正确更新。不过,如果数组所有元素都相等,c和d会保持为1,这表示第一个元素的位置,逻辑上没问题。但更常见的做法是初始化为0或1,并确保循环中正确更新。

- 你的代码中,当找到新的最小值时,c被更新为i+1(位置从1开始),这没问题。但注意,如果数组中有多个相同的最小值,你只记录了第一个出现的位置,因为只有严格小于才会更新。这是合理的,但需要确认题目是否要求记录第一次出现的位置。如果要求记录最后一次出现的位置,则需要修改条件。