C语言 输入10个整数,用函数编程将其中最大数与最小数的位置互换然后输出

2024-11-17 05:50:25
推荐回答(4个)
回答1:

1.找出数组中的最大值和最小值索引位置,然后将其交换即可

#include 

// 交换最大、最小值位置
void SwapLimVal(int *src, int len)
{
    int max , min, maxlen = 0, minlen = 0;
    max = min = src[0];   // 初始化最大、最小值暂时为第一个
    for (int i = 1; i < len; i++)
    {
        if (max < src[i])  // 元素如果比最大数的,则重置最大值,及其索引
        {
            max = src[i];
            maxlen = i;
        }
        else if (min > src[i])// 元素如果比最小数的,则重置最小值,及其索引
        {
            min = src[i];
            minlen = i;
        }
    }
    if (maxlen == minlen) // 如果所有值一样,不用交换
        return;
    int tem = src[maxlen]; // 交换最大、最小值
    src[maxlen] = src[minlen];
    src[minlen] = tem;
}

int main()
{
    int a[10];
    printf("intput 10 number : "); // 输入10个整数
    for (int i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    SwapLimVal(a, 10);
    for (int i = 0; i < 10; i++) // 输出交换结果
        printf("%d ", a[i]);
    return 0;
}

回答2:

你程序的错误:

  1.  FindMAx和FindMin逻辑不对,你的意思是要返回最大值与最小值得位置吗,如果是这样,完全没有实现这个功能,无论怎样,返回值都是9,如果你要返回最大最小值,那就不应该return i或者return j ,而应该return max或者return min

  2. Read函数也有问题,你返回一个值是什么意思?有必要吗?

  3. 无论是Read函数,还是FindMax,FindMin函数,对于数组循环遍历时都只进行了9遍,你不是处理10个数吗?

  4.  for(i=0;i<=t;i++);
      printf("%d ",a[i]);
    for(i=t+1;i<=s;i++)

      printf("%d ",a[i]); 

    这几句代码是什么意思? 只是输出数组中的元素的话一个循环就够,没必要拆开啊?

     

  5. 总之,逻辑不清楚,其实这个问题非常的简单,你可以一个函数就写出来,遍历10个数,用maxIndex和minIndex同时记录最大值与最小值得位置,根据得到的maxIndex和minIndex 交换最大值与最小值在数组中的位置,最后只需要输出数组即可

  6. 有什么问题可以追问。

回答3:

#include 
void main()
{
int a[10],i,maxpos,minpos,temp;
for (i=0;i<10;i++)
{
printf("please input number %d:",i+1);
scanf("%d",&a[i]);
printf("\n");
}
maxpos=minpos=0;
for (i=1;i<10;i++)
{
if (a[i]>a[maxpos])
maxpos=i;
if (a[i] minpos=i;
}
temp=a[maxpos];
a[maxpos]=a[minpos];
a[minpos]=temp;
for (i=0;i<10;i++)
printf("%d ",a[i]);
}

回答4:

int Read(int a[])
改成int Read(int a[10]),下面的也是,C数组不支持未知大小的数组,求最大最小值哪里直接返回数组吧,不是还要+1