输入十个数,将其中最小的数与第一个数进行对换,将最大的数与最后一个数进行对换。

输入十个数,将其中最小的数与第一个数进行对换,将最大的数与最后一个数进行对换。写出三个函数:1.输入10个数,2.进行对换处理,3.输出对换后的10个数。


#include<stdio.h>
int swap(int a[]){
    int i,*min,*max,t;
    min=&a[0];
    max=&a[0];
    for(i=1;i<10;i++)
    {
        if(*min>a[i]) {
            t=*min;
            a[i]=*min;
            *min=t;
        }
        if(*max>a[i]) {
            t=*max;
            a[i]=*max;
            *max=t;
        }
    }
    for(i=0;i<10;i++)
    {
        if(*min==a[i]){
         t=a[0];a[0]=a[i];a[i]=t;}
        if(*max==a[i]) {
        t=a[9];a[9]=a[i];a[i]=t;
}
    }
            
}
int prn(int b[]){
    int i;
    for(i=0;i<10;i++)
    printf("%d\t",b[i]);
}
void main()
{
    int i,a[10];
    printf("请输入十个数:");
    for(i=0;i<10;i++)
    {
    scanf("%d",&a[i]);
    }
    swap(a);
    prn(a);
    return;    
}

这是运行结果,程序应该怎么修改呢

img

首先,swap 函数的返回类型定义为 int,但是在函数的末尾没有返回任何值。此外,prn 函数的返回类型也应该是 void,因为它没有返回值。另外,main 函数的返回类型应该是 int 而不是 void,这样可以通过返回一个整数值来指示程序的执行状态。

此外,swap 函数中的逻辑有误。在找到最小值和最大值后,应该交换指针 minmax 指向的元素,而不是将数组元素与 *min*max 交换。另外,交换元素时,应该使用一个额外的变量来临时保存需要交换的元素值。

对于输入的数组 a,找到最小值和最大值的方法也存在问题。首先,初始时应该将 minmax 分别指向数组的第一个元素 a[0]。然后,在遍历数组时,应该将 *min*max 分别与当前元素 a[i] 进行比较,而不是与 a[i] 进行比较。

最后,prn 函数应该在循环结束后添加一个换行符 \n,以便每行输出一个数字。

以下是修正后的代码:

#include <stdio.h>

void swap(int a[]) {
  int i, *min, *max, t;
  min = &a[0];
  max = &a[0];

  for (i = 1; i < 10; i++) {
    if (*min > a[i]) {
      min = &a[i];
    }
    if (*max < a[i]) {
      max = &a[i];
    }
  }

  t = *min;
  *min = a[0];
  a[0] = t;

  t = *max;
  *max = a[9];
  a[9] = t;
}

void prn(int b[]) {
  int i;
  for (i = 0; i < 10; i++) {
    printf("%d\t", b[i]);
  }
  printf("\n");
}

int main() {
  int i, a[10];
  printf("请输入十个数:");
  for (i = 0; i < 10; i++) {
    scanf("%d", &a[i]);
  }
  
  swap(a);
  prn(a);
  
  return 0;
}

最小值 和 第一个数交换, 最大值 和 最后一个数交换, 你把 最大值 和 最小值的索引找到就行了

int swap(int a[]){
    int i, minIndex, maxIndex,t;
    minIndex=0;
    maxIndex=0;
    for(i=1;i<10;i++)
    {
        if(a[minIndex]>a[i]) {
            minIndex = i;
        }
        if(a[maxIndex]<a[i]) {
            maxIndex = i;
        }
    }
    
    // 最小值 和 第一个数交换
    t = a[0];
    a[0] = a[minIndex];
    a[minIndex] = t;
    
    // 最大值 和 最后一个数交换
    t = a[9];
    a[9] = a[maxIndex];
    a[maxIndex] = t;
}

题主代码修改如下,改动处见注释,供参考:

#include<stdio.h>
int swap(int a[]) {
    int i, * min, * max, t;
    min = &a[0];
    max = &a[0];
    for (i = 1; i < 10; i++)
    {
        if (*min > a[i]) {
            min = &a[i];
            //t = *min;   修改
            //a[i] = *min;
            //*min = t;
        }
        if (*max < a[i]) { //if (*max > a[i]) 修改
            max = &a[i];
            //t = *max;    修改
            //a[i] = *max;
            //*max = t;
        }
    }
    //for (i = 0; i < 10; i++) 修改
    //{
    //    if (*min == a[i]) {

    t = a[0]; a[0] = *min; *min = t; //修改
    //    } 修改
    //    if (*max == a[i]) {
    if (max == &a[0])   //修改
        max = min;
    t = a[9]; a[9] = *max; *max = t; //修改
    //    }
    //}
    return 0;  //修改
}
int prn(int b[]) {
    int i;
    for (i = 0; i < 10; i++)
        printf("%d ", b[i]);  // 修改
    return 0; //修改
}
void main()
{
    int i, a[10];
    printf("请输入十个数:");
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
    }
    swap(a);
    prn(a);
    return;
}