想利用C语言处理数组,最小值放第一位,最大值放最后一位,为什么一直失败


#include
void Print(int *d)
{
    int i;
    for(i=0;i<10;i++)
    {
        printf("%d",*(d+i));
    }
}

void De(int *b,int c)
{
    int i;int min=b[0];int max=b[9];
    for(i=1;iif(*(b+i)min=*(b+i);
    }
    for(i=1;iif(*(b+i)>max) max=*(b+i);
    }
}

int main()
{
    int i;
    int a[10];
    int *p;
    p=a;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    De(p,10);
    Print(p);
    return 0;
}**@**

数组a[10]没有初始化

#include <stdio.h>

void Print(int *d)
{
    int i;
    for(i = 0; i < 10; i++)
    {
        printf("%d ", *(d + i)); // 添加一个空格便于区分每个元素
    }
    printf("\n"); // 换行便于输出多组测试数据
}

void De(int *b, int c)
{
    int i, temp, min = b[0], max = b[0]; // 初始化最小值和最大值为数组第一个元素
    int min_index = 0, max_index = 0; // 记录最小值和最大值的下标

    for(i = 1; i < c; i++)
    {
        if(*(b + i) < min)
        {
            min = *(b + i);
            min_index = i;
        }
        if(*(b + i) > max)
        {
            max = *(b + i);
            max_index = i;
        }
    }

    // 将最小值放到第一位
    temp = b[0];
    b[0] = min;
    b[min_index] = temp;

    // 将最大值放到最后一位
    temp = b[c - 1];
    b[c - 1] = max;
    b[max_index] = temp;
}

int main()
{
    int i;
    int a[10];
    int *p;
    p = a;

    while(1) // 添加一个循环,可以输入多组测试数据
    {
        printf("请输入10个整数:\n");
        for(i = 0; i < 10; i++)
        {
            scanf("%d", &a[i]);
        }
        De(p, 10);
        printf("处理后的数组:");
        Print(p);
    }

    return 0;
}

你这函数只是在求最大最小值,可根本就没有进行数组元素值的交换啊
而且函数也有问题,如果b[0]恰好是最大值呢?或者b[9]是最小值呢?你连比较都没比较啊

把相关内容改成这样看看

void Print(int d[])

void De(int b[],int c)

    De(a,10);
    Print(a);

修改如下,改动处见注释,供参考:

#include<stdio.h>
void Print(int* d)
{
    int i;
    for (i = 0; i < 10; i++)
    {
        printf(" %d", *(d + i));
    }
}

void De(int* b, int c)
{
    int i, min = 0, max = 0, t;   // 修改
    //int min = b[0]; int max = b[9];
    for (i = 1; i < c; i++)
    {
        if (*(b + i) < *(b + min)) min = i;  //if(*(b + i) < min) min = *(b + i);
                                             //}
                                             //for (i = 1; i < c - 1; i++)
                                             //{
        if (*(b + i) > *(b + max)) max = i; // if(*(b+i)>max) max=*(b+i);
    }
    t = *(b + min); *(b + min) = *b; *b = t; //将最小值放第一位
    if (max == 0) max = min;                //如果最大值在第一位,则已被交换到 min 位置
    t = *(b + max); *(b + max) = *(b + c - 1); *(b + c - 1) = t;//将最大值放最后一位
}

int main()
{
    int i;
    int a[10];
    int* p;
    p = a;
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
    }
    De(p, 10);
    Print(p);
    return 0;
}