关于#c语言#的问题,如何解决?

输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

解答如下

img

 #include <stdio.h>
 #define max 10000
void swap(int t[],int i,int j)
{
    int tem=t[i];
    t[i]=t[j];
    t[j]=tem;
}
int main()
{
    int n;
    printf("输入数组元素个数:");
    scanf("%d",&n);
    int t[n];
    int i;
    printf("输入n个数:\n");
    for(i=0;i<n;i++)//输入数组 
    {
        scanf("%d",&t[i]);
    }
    int maxnum=t[0];
    int maxp=0;
    int minnum=t[0];
    int minp=0;
    for(i=1;i<n;i++)
    {
        if(t[i]>maxnum) 
        {
             maxnum=t[i];
             maxp=i;
        }
        if(t[i]<minnum) 
        {
             minnum=t[i];
             minp=i;
        }
    }
    //最大的与第一个元素交换,最小的与最后一个元素交换
    swap(t,maxp,0);
    swap(t,minp,n-1);
    printf("最大的与第一个元素交换,最小的与最后一个元素交换:\n");
    for(i=0;i<n;i++)//输出数组
    {
        printf("%d ",t[i]);
    } 
    return 0;
}

#include<stdio.h> 
int main() {
    int max, min, temp;
    int max_index = 0, min_index = 0;
    int arr[10];
    int i;
    for(i=0;i<10;i++)
        scanf("%d",&arr[i]);
    max = arr[0];
    min = arr[0];
    for (i = 1;i < 10;i++) {
        if (max < arr[i]) {
            max = arr[i];
            max_index = i;
        }
        if (min > arr[i]) {
            min = arr[i];
            min_index = i;
        }
    }
    printf("max = %d,max_index = %d\n", max, max_index);
    printf("min = %d,min_index = %d\n", min, min_index);
    temp = arr[0];
    arr[0] = max;
    arr[max_index] = temp;
    temp = arr[9];
    arr[9] = min;
    arr[min_index] = temp;
    for (int i = 0;i < 10;i++)
        printf("%5d", arr[i]);

    return 0;
}

img


#include<stdio.h>
int main(){
  int arr[10];
  int i,max,min,maxindex,minindex,temp;
  printf("请输入10个数据:(空格隔开)\n");
  for(i=0;i<10;i++){
    scanf("%d",&arr[i]);//获取数组,10个元素
  }
  printf("交换前:\n");
    for(i=0;i<10;i++){
         printf("  %d",arr[i]);
    }
  max=arr[0];
  min=arr[0];
  for(i=1;i<10;i++){
    if(max<arr[i])
    {max=arr[i];
    maxindex=i;}//记录最大的下标
    if(min>arr[i])
    {min=arr[i];
    minindex=i;}//记录最小的下标
    }

    //最大的与第一个进行交换
    temp=arr[0];
    arr[0]=arr[maxindex];
    arr[maxindex]=temp;

    //最小的与最后一个in进行交换
    temp=arr[9];
    arr[9]=arr[minindex];
    arr[minindex]=temp;
    printf("\n");
    printf("交换后:\n");
    for(i=0;i<10;i++){
         printf("  %d",arr[i]);
    }
    return  0;
  }


img

你好,你可以看下代码,这个题目有点歧义就是第一个元素如果是最小值的话该如何处理,首先第一个元素要与最大值交换,但是它本身是最小值的话还得和最后一个元素交换,如果不考虑这些特殊情况的话下面的代码是可以的,就是输入的话第一个元素不能输入成最小值,最后一个元素不能输入成最大值,有疑问可以@我

#include<stdio.h>

// 想输入数组中元素的个数 修改N即可
#define N 10

int main()
{
    int i;          // 用于循环
    int arr[N];     // 存储数据
    int Max;        // 存储数组最大值
    int Min;        // 存储数组最小值
    int MaxIdx;     // 存储数组中最大值的下标
    int MinIdx;     // 存储数组中最小值的下标
    int t;          // 交换数据存储
    
    // 提示用户入N个数字
    printf("Plese Input %d Mumbers:\n", N);

    // 将用户输入存储到arr数组
    for(i = 0; i < N; i++)
    {
        scanf("%d", &arr[i]);
    }

    // 初始化数据
    Max = arr[0];
    Min = arr[0];
    MaxIdx = 0;
    MinIdx = 0;

    // 查找最大值和最小值以及它们的下标
    for(i = 0; i < N; i++)
    {
        if(arr[i] > Max)
        {
            Max = arr[i];
            MaxIdx = i;
        }

        if(arr[i] < Min)
        {
            Min = arr[i];
            MinIdx = i;
        }
    }

    // 最大值与第一个值交换
    t = arr[0];
    arr[0] = arr[MaxIdx];
    arr[MaxIdx] = t;

    // 最小值与最后一个值交换
    t = arr[N - 1];
    arr[N - 1] = arr[MinIdx];
    arr[MinIdx] = t;    

    // 输出数组
    for(i = 0; i < N; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

分开两次搜索是防止最大最小值正好在头尾位置,发生重复交换


#include<stdio.h>

int main() {
    int max, min;            //记录最值
    int max_index = 0;        //记录最值的下表,并且初始化为0
    int min_index = 0;
    int temp;                //后面交换时用到的变量
    int arr[10] = { 1,2,3,4,5,6,7,850,9,10 };    //假设一个大小为10的数组

    for (int i = 0; i < 10; i++)                //输出变化前的数组
        printf("%d ", arr[i]);
    printf("\n");

    //找最大值在数列中位置,并且将max_index指向最大值位置
    max = arr[0];
    for (int i = 1; i < 10; i++) {
        if (max < arr[i]) {
            max_index = i;
            max = arr[i];
        }
    }
    //最大值和第一位交换
    temp = arr[0];
    arr[0] = arr[max_index];
    arr[max_index] = temp;

    //找最小值在数列中的位置,并且将min_index指向最小值位置
    min = arr[0];
    for (int i = 1; i < 10; i++) {
        if (min > arr[i]) {
            min_index = i;
            min = arr[i];
        }
    }
    //最小值和数组最大一位交换
    temp = arr[9];
    arr[9] = arr[min_index];
    arr[min_index] = temp;

    for (int i = 0; i < 10; i++)
        printf("%d ", arr[i]);
}
int main() {
    int max, min, temp;
    int max_index = 0, min_index = 0;
    int arr[10] = { 5,2,3,4,5,6,7,8,9,6 };
    max = arr[0];
    min = arr[0];
    for (int i = 1;i < 10;i++) {
        if (max < arr[i]) {
            max = arr[i];
            max_index = i;
        }
        if (min > arr[i]) {
            min = arr[i];
            min_index = i;
        }
    }
    printf("max = %d,max_index = %d\n", max, max_index);
    printf("min = %d,min_index = %d\n", min, min_index);
    temp = arr[0];
    arr[0] = max;
    arr[max_index] = temp;
    temp = arr[9];
    arr[9] = min;
    arr[min_index] = temp;
    for (int i = 0;i < 10;i++)
        printf("%5d", arr[i]);

    return 0;
}

#include <stdio.h>
#include <stdlib.h>

/** 交换元素的值 */
void swap(int* array, int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

/** 打印数组 */
void print(int* array, int length)
{
    int i;
    for (i = 0; i < length; i++)
        printf("%d ", array[i]);
}

int main(void)
{
    int size, i, maxIndex, minIdex;    // 从左向右依次为 数组大小、i、最大元素下标、最小元素下标
    int* array;                        // 指向整型变量的指针
    maxIndex = minIdex = 0;            // 初始化元素下标

    // 输入大小
    printf("输入数组元素个数:");
    scanf_s("%d", &size);

    array = (int*)malloc(sizeof(int) * size);    // 动态分配内存
    printf("输入%d个元素:\n", size);
    for (i = 0; i < size; i++)    // 输入元素
    {
        scanf_s("%d", &array[i]);
        if (array[i] > array[maxIndex]) maxIndex = i;    // 如果当前下标元素大于最大下标元素,更新最大下标
        if (array[i] < array[minIdex]) minIdex = i;        // 如果当前下标元素小于最小下标元素,更新最小下标
    }

    // 输出原数组
    printf("原数组:");
    print(array, size);
    putchar('\n');

    // 交换数组指定下标元素
    swap(array, 0, maxIndex);
    swap(array, size - 1, minIdex);

    // 输出新数组
    printf("新数组:");
    print(array, size);
    putchar('\n');

    free(array);    // 释放内存空间

    return 0;
}

img

解答在这,望采纳(详细分析):

#include <stdio.h>
void swap(int t[], int i, int j){ //交换函数 
    int tep = t[i];
    t[i] = t[j];
    t[j] = tep;
}
int main(){
    int n;
    printf("输入数组元素的个数:");
    scanf("%d", &n);
    int t[n];
    int i;
    printf("输入n个数:\n");
    for(i = 0; i < n; i++){//输入数组 
        scanf("%d", &t[i]);
    }
    int mn = t[0]; //存第一个元素 
    int maxp = 0; //最大的那个元素 
    int minnum = t[0]; //存最后一个元素 
    int minp = 0; //最小的那个元素
    //以上这些变量的初始化是因为后续的排序要使用 
    for(i = 1; i < n; i++) {//排序 
        if(t[i] > mn) {
             mn = t[i];
             maxp = i;
        }
        if(t[i] < minnum) {
             minnum = t[i];
             minp = i;
        }
    }
    //最大的与第一个元素交换,最小的与最后一个元素交换
    swap(t, maxp, 0); 
    swap(t, minp, n-1);
    printf("最大的与第一个元素交换,最小的与最后一个元素交换:\n");
    for(i = 0;i < n;i ++){//输出数组
        printf("%d ", t[i]);
    } 
    return 0;
}


 #include <stdio.h>
 #define max 10000
void swap(int t[],int i,int j)
{
    int tem=t[i];
    t[i]=t[j];
    t[j]=tem;
}
int main()
{
    int n;
    printf("输入数组元素个数:");
    scanf("%d",&n);
    int t[n];
    int i;
    printf("输入n个数:\n");
    for(i=0;i<n;i++)//输入数组 
    {
        scanf("%d",&t[i]);
    }
    int maxnum=t[0];
    int maxp=0;
    int minnum=t[0];
    int minp=0;
    for(i=1;i<n;i++)
    {
        if(t[i]>maxnum) 
        {
             maxnum=t[i];
             maxp=i;
        }
        if(t[i]<minnum) 
        {
             minnum=t[i];
             minp=i;
        }
    }
    //最大的与第一个元素交换,最小的与最后一个元素交换
    swap(t,maxp,0);
    swap(t,minp,n-1);
    printf("最大的与第一个元素交换,最小的与最后一个元素交换:\n");
    for(i=0;i<n;i++)//输出数组
    {
        printf("%d ",t[i]);
    } 
    return 0;
}

设定一个空值,遍历和每个数进行比较,找出最大值和最小值放在前后