对调最大数与最小数位置

img


我定义了这组数组有10个数
define N=10,但是后面输入进去又不能运行,有人可以写成完整代码吗,麻烦了

img

img

仅供参考,可以的话记得采纳~

#include<stdio.h>
#define N 10
int main()
{
    int maxIdx = 0, minIdx = 0, maxVal, minVal, a[N], i;

    printf("Input 10 Numbers:\n");

    for(i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
    }

    maxVal = a[0];
    minVal = a[0];
    
    for(i = 0; i < N; i++)
    {
        if(a[i] > maxVal)
        {
            maxVal = a[i];
            maxIdx = i;
        }

        if(a[i] < minVal)
        {
            minVal = a[i];
            maxIdx = i;
        }
    }

    i = a[maxIdx];
    a[maxIdx] = a[minIdx];
    a[minIdx] = i;

    for(i = 0; i < N; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}

没看出逻辑有什么问题
你是怎么运行的,截图来看

给你来个清晰的:

img

#include<stdio.h>

// 定义交换函数
void swap(int a[])
{
    int L=0, H = 0; // L代表最小值下标,H代表最大值下标
    int min = a[0]; // 假设最小值是第一个
    int max = a[0]; // 假设最大值也是第一个
    for (int i = 1; i < 10; i++)
    {
        if (a[i] > max) { // 遍历中若有比第一个大的,则更换最大值,更新下标
            max = a[i];
            H = i;
        }
        if (a[i] < min) { // 同上,不过是更换最小值与下标
            min = a[i];
            L = i;
        }
    }
    // 用来交换最大与最小值
    int temp = a[L]; a[L] = a[H]; a[H] = temp;
}
int main()
{
    int a[10];
    printf("input 10 numbers:\n");
    for (int i = 0; i < 10; i++) {
        scanf("%d", &a[i]);
    }
    printf("互换前的数据:");

    for (int i = 0; i < 10; i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n互换后的数据:");
    swap(a);// 调用交换
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", a[i]);
    }
}