C语言之最大与最小元素对调

题目描述输入n个整数,并存放在一维数组中,找出最大数与最小数所在的下标位置,并把两者对调,然后输出调整后的n个数。
输入
先输入整数个数n (2<=n<=10000)
然后输入n个整数
输出
调整位置后的n个整数,n个整数之间用一空格隔开。样例输入6 4 3 -3 -1 234 4355样例输出4 3 4355 -1 234 -3

#include <stdio.h>
int main()
{
    int a[10000];
    int i, j, k, tmp, n, max = 0, min = 0;
    scanf("%d", &n);
    for(i=0;i<n;i++)
        scanf("%d", &a[i]);
    for(i=0;i<n;i++) {
        if(max<a[i]) {
    max = a[i];
            j = i;
}
        if(min>a[i]) {
    min = a[i];
            k = i;
}
    }
    tmp = a[j];
    a[j] = a[k];
    a[k] = tmp;
    for(i=0;i<n;i++) {
        printf("%d", a[i]);
        if(i!=n-1)
        printf(" ");
    }
    printf("\n");
    
    return 0;
}

追问

有木有解释呀???_?

追答#include <stdio.h>
int main()
{
    int a[10000];
    int i, j, k, tmp, n, max = 0, min = 0;//j,k分别作为最大与最小值的下标
    //max,mix分别记录当前最大值与最小值
    scanf("%d", &n);//接受个数n
    for(i=0;i<n;i++)//接受n个值
        scanf("%d", &a[i]);
    for(i=0;i<n;i++) {
        if(max<a[i]) {//如果当前的值比记录的最大值要大,则把当前值作为最大值
            max = a[i];
            j = i;
        }
        if(min>a[i]) {//同上,求最小值
            min = a[i];
            k = i;
        }
    }
    tmp = a[j];//tmp为临时变量,下面三条语句是交换最大值与最小值
    a[j] = a[k];
    a[k] = tmp;
    for(i=0;i<n;i++) {//打印输出
        printf("%d", a[i]);
        if(i!=n-1)
            printf(" ");//打印空格,最后一个数之后不打印
    }
    printf("\n");
     
    return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-27
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
int main(void){
int a[10000],n,i,imax,imin;
printf("Input n(2<=n<=10000)...\nn=");
scanf("%d",&n);
for(imax=imin=i=0;i<n;i++){
scanf("%d",a+i);
if(a[imax]<a[i]) imax=i;
if(a[imin]>a[i]) imin=i;
}
i=a[imax];
a[imax]=a[imin];
a[imin]=i;
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}追问

解释解释呗,,

追答

int main(void){
int a[10000],n,i,imax,imin;
printf("Input n(2a[i]) imin=i;//用imin记录当前最小数的下标
}
i=a[imax];//通过最大数的下标和最小数的下标来交换这两个数
a[imax]=a[imin];
a[imin]=i;
for(i=0;i<n;i++)//打出来看看……
printf("%d ",a[i]);
printf("\n");
return 0;
}

本回答被提问者采纳

C语言程序:数组中最大与第一个数对调,最小与最后一个对调
void swapvar(int s,int t)\/\/交换的过程函数 { int temp;temp=a[s];a[s]=a[t];a[t]=temp;} int main(){ scanf("%d",&n);for (i=0;i<n;i++) scanf("%d",&a[i]);\/\/读入 for (i=maxn=minn=0;i<n;i++)\/\/查找,其中maxn和minn分别表示最大和最小元素在数组中下...

在c语言中如何将数组的最大值与最小值互换位置,求大神解答!!!_百度...
找到最大和最小值的下标,交换,例如:include <stdio.h> main(){ int a[10]={10,2,3,4,5,6,7,8,9,10},n=10;int i1,i2,i;i1=0;for (i=0;i<n;i++)if (a[i]<a[i1]) i1=i;i2=0;for (i=0;i<n;i++)if (a[i]>a[i2]) i2=i;i=a[i1]; a[i1]=a...

C语言 输入10个整数,用函数编程将其中最大数与最小数的位置互换然后输出...
1.找出数组中的最大值和最小值索引位置,然后将其交换即可 include <stdio.h>\/\/ 交换最大、最小值位置void SwapLimVal(int *src, int len){ int max , min, maxlen = 0, minlen = 0; max = min = src[0]; \/\/ 初始化最大、最小值暂时为第一个 for (int i = 1; ...

C语言输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出...
导致最小在a[0] 最大在a[4] 与要求不符.修改方式 就是 m=array[max];array[max]=array[0];array[0]=m;if(min==0) min=max;\/\/如果min已经被换走了,那么把min赋值成被换的位置.m=array[min];array[min]=array[4];array[4]=m;...

C语言编程:输入一维数组的10个元素,并将最小值与第一个数交换,最大值...
include <stdio.h>int main() {int a[10],i,t,imin,imax,n = 10;printf("输入10整数(空格隔开):");for(i = 0; i < n; ++i)scanf("%d",&a[i]);printf("处理前:\\n");for(i = 0; i < n; ++i) printf("%d ",a[i]);printf("\\n");imin = imax = 0;for(i = ...

C语言编程:输入n个数,将最大的与第一个数交换,最小的与最后一个数交换...
include <stdio.h>void swap(int *a, int *b){printf("%d, %d\\n", *a, *b);int t = *a;*a = *b;*b = t;}void max_min(int *p, int n){int l = n;int *max = p, *min = p;while (n--) {min = *p > *min ? min : p;p++;}swap(min, --p);while (l...

...将最大值与第一个元素对调,将最小值与最后一个元素对调
{int a[10];int max=0,min=0,temp=0;int i=0;for(i=0;i<=9;i++)scanf("%d",&a[i]);for(i=1;i<=9;i++){ if (a[i]a[max])max=i;} temp=a[max],a[max]=a[0],a[0]=temp;temp=a[min],a[min]=a[9],a[9]=temp;for(i=0;i<=9;i++)printf("%d ",...

C语言任意输入十个数,交换最大值和最小值然后输出。
void main(){ int a[10],max,min,maxpos=0,minpos=0,i;\/\/此处被改过 int temp;printf("Input ten numbers:\\n");for(i=0;i<10;i++){ scanf("%d",&a[i]);}\/\/改过,添加了} max=min=a[0];\/\/添加一句,初始化max、min for(i=0;i<10;i++)\/\/改 {\/\/改 if(a[i]>max)...

c语言:输入a[10],将最大的元素与第一个元素交换,最小的元素与最后一个...
int min=0;int minindex = 0;int max=0;int maxindex = 0;int i = 0;min = a[0];max = a[0];for (i=0;i<10;i++){ if (a[i]>=max) { max = a[i]; maxindex = i; } if (a[i]<=min) { min = a[i]; minindex = i; }}a[...

用C语言任意输入十个整数,输出其中的最大最小值,最小的数与第一个数交...
这个是什么意图,还要输出么...???如果要输出的话,可以开始定义两个数组,复制一下,然后操作第一个数组,找出最大值和最小值,再和第二个数组的第一个元素,最后一个元素,交换哈!就行了啊,像这样的问题,最好自己做做!PS;我也是新手,有说的不对的建议拍砖!

相似回答