Online Compiler 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=0; d=0; for(i=0;i<10;i++) { if(a<arr[i]){ a=arr[i]; c=1+i; } if(b>arr[i]){ b=arr[i]; d=1+i; } } printf("%d %d %d %d\n",c,a,b,d); return 0; }
这段代码的功能是:读入10个整数,找出其中的最大值和最小值,并记录它们的位置(从1开始计数),最后输出最大值的位置、最大值、最小值、最小值的位置。

代码整体逻辑正确,但有一个细节需要注意。

- 变量c和d分别记录最大值和最小值的位置,初始化为0。但如果在循环中最大值或最小值出现在数组的第一个元素(索引0),那么c或d会被更新为1,这是正确的。但如果最大值或最小值出现在后续位置,c和d也会被正确更新。不过,当数组所有元素都相等时,c和d会保持为0,但此时最大值和最小值都是arr[0],位置应该是1。你的代码中c和d初始为0,会导致输出位置为0,这可能不符合预期。

- 另外,变量c和d的更新方式:c=1+i,d=1+i,这是将索引转换为从1开始的位置。但注意,如果最大值或最小值多次出现,你的代码会记录最后一次出现的位置,因为每次遇到相等或更大的值都会更新。这可能是你想要的,也可能不是,取决于题目要求。