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

#include <stdio.h> int main() { int a[10]; int min; for(int d=0;d<10;d++){scanf("%d",&a[d]);} min=a[0]; for(int d=1;d<10;d++){if (a[d]<min){min=a[d];}} int e=d+1; int b[10]; int max; for(int i=0;i<10;i++){scanf("%d",&b[i]);} max=a[1]; for(int i=1;i<10;i++){if (b[i]>max){max=b[i];}} int f=i+1; printf("%d""%d""%d""%d",max,f,min,e); return 0; }
这段代码的功能是:读取两个数组(各10个整数),分别找出第一个数组的最小值和第二个数组的最大值,然后输出这四个值(最大值、它的位置、最小值、它的位置)。

代码中存在几个问题:

- 变量 `d` 和 `i` 在循环结束后仍然存在,但它们的值是循环结束时的值(即10),而不是最小值或最大值所在的位置。你试图用 `d+1` 和 `i+1` 来记录位置,但这样得到的是固定值11,而不是真正的最小值或最大值的位置。

- 在找最大值时,`max=a[1]` 初始化错误,应该是 `b[0]`,而且循环从1开始比较,这样会漏掉 `b[0]` 的比较。

- 输出格式 `"%d""%d""%d""%d"` 可以合并为一个字符串 `"%d%d%d%d"`,但这不是主要错误。

- 变量 `e` 和 `f` 的值并不是你期望的最小值和最大值的位置。

- 注意:你只记录了最小值或最大值本身,但没有记录它们出现的位置(下标)。需要在循环中同时更新位置变量。