将10个整数中的最大值与最后一个数交换,最小值与第一个数交换

img


应该输出:1 24 56 78 6 32 36 44 29 98 才对
而不是输出:6 24 56 78 1 32 36 44 29 98

img


我知道我错在哪儿,中间函数修改了下

你的代码整个不对,因为第一个元素正好是最大的,所以碰巧被当作max交换到最后。

#include <stdio.h>

void ru(int* a);
void fun(int* a);
void chu(int* a);

int main() {
    int a[10];

    ru(a);
    fun(a);
    chu(a);

    return 0;
}

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

void fun(int* a) {
    int max = a[0];
    int max_index = 0;
    int min = a[0];
    int min_index = 0;

    for (int i = 1; i < 10; i++) {
        if (a[i] > max) {
            max = a[i];
            max_index = i;
        }
        if (a[i] < min) {
            min = a[i];
            min_index = i;
        }
    }

    int temp = a[max_index];
    a[max_index] = a[9];
    a[9] = temp;

    temp = a[min_index];
    a[min_index] = a[0];
    a[0] = temp;
}

void chu(int* a) {
    for (int i = 0; i < 10; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
}

找最大值 最小值的两个循环不正确,得不到正确的最大或最小的位置。