定义10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个对换。

题目:定义10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个对换。
但我这个输出就很诡异,数组除了最后一个变成了32,别的都没变。我觉得没问题啊,可能是低级错误吧。我在备考计算机二级c语言。求解惑。

include <stdio.h>

int main()
{

int a[10]={1,3,4,6,9,8,5,3,4,7};
int i,n=a[0],x=a[0];

for(i=0;i<10;i++)
{
    
    if(a[++i]<n) n=a[++i];
    else if(a[++i]>x) x=a[++i];
    
}
a[0]=n;
a[9]=x;
    for(i=0;i<10;i++)
    printf("%d",a[i]);

}

#include <stdio.h>
int main()
{

    int a[10] = {1, 3, 4, 6, 9, 8, 5, 3, 4, 7};
    int i, min = a[0], max = a[0];
    int min_index = 0, max_index = 0;

    for (i = 0; i < 10; i++)
    {
        if (min > a[i])
        {
            min = a[i];
            min_index = i;
        }
        if (max < a[i])
        {
            max = a[i];
            max_index = i;
        }
    }
    int temp;
    temp = a[0];
    a[min_index] = temp;
    a[0] = min;
    temp=a[9];
    a[max_index]=temp;
    a[9]=max;
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
}

有帮助望采纳


#include<iostream>
using namespace std;
 
/*
 *  用符号常量定义数组长度(const:constant)
 *  
 *  说明:
 *      由于使用 const 语句定义符号常量带有数据类型,以便系统进行类型检查,
 *  同时该语句具有计算初值表达式和赋初值的功能,所以比宏命令(#define)定义符号常量要优越得多,
 *  因此提倡使用 const 语句。
 */
const int arrayLength=10;
 
void main()
{
    void inputNum(int number[],int temp_length);
 
    void outputNum(int number[],int temp_length);
 
    void swap(int number[],int temp_length);
 
    int number[arrayLength];
 
    cout<<"请输入10个整数:"<<endl;
         
    //number为数组地址
    inputNum(number,arrayLength);
 
    swap(number,arrayLength);
 
    outputNum(number,arrayLength);
}
 
/*
 *  输入整数
 */
void inputNum(int number[],int temp_length)
{
    int length=0;
 
    length=temp_length;
     
    for(int i=0;i<length;i++)
    {
        cin>>number[i];
    }
     
}
 
/*
 *  交换
 */
void swap(int number[],int temp_length)
{
    int *max,*min,*pointer,temp,length;
 
    //将数组首地址赋值给指针变量,即指针变量指向数组的第一个元素
    max=min=number;    //因为是右结合,所以这样写;一右而不右,三右赋值右
 
    temp=0;
 
    length=temp_length;
 
    /*
     *  循环变量初始值:数组第2个值的地址;循环条件:数组最后一个值的地址(number+length-1);循环变量增值:地址+1
     */
    for(pointer=number+1;pointer<number+length;pointer++)
    {
        if(*pointer>*max)
        {
            //将大数地址赋给max
            max=pointer;    
        }
        else if(*pointer<*min)
        {
            //将小数地址赋给min
            min=pointer;
        }
    }
 
    //将最小数与第一个数交换
    temp=number[0];
         
    //把指针变量min所指向的值赋值给number数组的第一个值;
    //'*':为指针运算符
    number[0]=*min;
 
    *min=temp;
 
    //将最大数与最后一个数交换
    temp=number[9];
 
    number[9]=*max;
 
    *max=temp;
}
 
 
/*
 *  输出整数
 */
void outputNum(int number[],int temp_length)
{
    int length=0;
 
    length=temp_length;
 
    for(int i=0;i<length;i++)
    {
        cout<<number[i]<<"\t";
    }
}

运行结果
https://pic002.cnblogs.com/images/2012/397707/2012050515103261.jpg

转载: 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。在主函数中输入10个数,调用函数实现对换,并在主函数中输出对换后的结果_return9的博客-CSDN博客 /3、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。在主函数中输入10个数,调用函数实现对换,并在主函数中输出对换后的结果。/#include&lt;stdio.h&gt;int main(){ void input(int *);//定义readin来录入10个整数// int comp(int *);//定义comp来处理10个整数// ... https://blog.csdn.net/return9/article/details/79722547


#include<stdio.h>
int main(){
    void input(int *);//定义readin来录入10个整数//
    int comp(int *);//定义comp来处理10个整数//
    void print(int *);//定义print来输出10个整数//
    int a[10];
    input(a);
    comp(a);
    print(a); 
    }
void input(int *p){
    int i=0;
    printf("please input ten numbers:\n");
    for(i=0;i<10;i++)
    scanf("%d",p++);//注意请勿要将p++误写成*p++或&p++,因为p已经定义成//
    }                      //指针类型了,p本身就已经是指向地址了的,故不必再加*或&,否则出错//
int comp(int *f){
    int i,j=0,k=9,t,r;//用j来记录最小的数的下标,用k来记录最大的数的下标//
    for(i=0;i<10;i++){
        if(*(f+j)<*(f+i)) continue;//找出数组中最小的数//
          j=i;          //这个最小的数的下标用j来记录//
          }
    for(i=8;i>=0;i--){
        if(*(f+k)>*(f+i)) continue; //找出数组中最大的数//
          k=i;         //这个最大的数的下标用k来记录//
         }
    t=*(f+j);*(f+j)=*f;*f=t;      //将最小的数与第一个数对换//
    r=*(f+k);*(f+k)=*(f+9);*(f+9)=r;  //将最大的数与最后一个数对换//
    }
void print(int *u){
    int i;
    printf("the result after comping:\n");
    for(i=0;i<10;i++)
    printf("%d ",*u++);
    printf("\n");
}