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

#include<stdio.h> int main() { int a,b,c,d; int arr[10]; int i; for(i=0;i<10;i++) { scanf("%d",&arr[i]); } a=arr[0]; b=arr[0]; c=1; d=1; for(i=0;i<10;i++) { if(a<arr[i]){ a=arr[i]; c=c+i; } if(b>arr[i]){ b=arr[i]; d=d+i; } } printf("%d %d %d %d",a,b,c,d); return 0; }
这段代码的作用是:读取10个整数存入数组,然后找出数组中的最大值和最小值,并分别记录它们最后一次出现时的索引位置(从0开始计数)。但代码中记录索引的方式有逻辑问题。

- 变量a和b分别用来存储最大值和最小值,初始值都设为数组第一个元素。
- 变量c和d分别用来记录最大值和最小值的索引,但初始值设为1,这会导致索引计算错误。
- 在循环中,每次找到新的最大值或最小值时,代码使用c=c+i和d=d+i来更新索引,这实际上是把当前索引i累加到c或d上,而不是直接赋值。这样c和d最终不是正确的索引值,而是所有满足条件的索引之和。

提示:
- 当找到新的最大值或最小值时,应该直接将当前索引i赋值给c或d,而不是累加。
- 变量c和d的初始值应该设为0(对应第一个元素的索引),而不是1。