解题思路:

我的解题思路比较简单,具体实现方法为:

1.创建一个数组,用于输入10个整数,之后将这10个整数进行排序,并储存进另一个数组里。

2.此时另一个数组里的第一项为最小值,最后一项为最大值,这样就找到了最大、最小值。

3.之后将最大、最小值赋值给变量min,max,然后在原数组里进行交换。

注意事项:

第3点交换时有一个坑,代码里我写了注释。


参考代码:

#include"stdio.h"

//定义全局变量
int a[10],n=0;
  
//因为自定义函数定义在main函数后面,所以要声明一下函数  
void input();
void calculate(int m[]);
void output(int m[]);
  
int main(){
    input();
    calculate(a);
    output(a);
    return 0;
}
  
//输入 
void input(){
    for(int i=0;i<10;i++){
    scanf("%d",&a[i]);
    ++n;//统计循环次数,下面冒泡排序会用到 
    }
}
  
//计算 
void calculate(int m[]){
    int x[10],y,z,min,max;
      //将a[]复制出一个副本,用于冒泡排序找出最大、最小值 
    for(int i = 0; i < n; ++i){ 
        x[i] = m[i];
    }
    //冒泡排序 
    for(int i=0;i<n-1;++i){
        for(int j=0;j<n-i-1;++j){
        	if(x[j]>x[j+1]){
                y=x[j+1];
                x[j+1]=x[j];
                x[j]=y;
            }
        }
    }
         
    //将最大、最小值赋给max、min 
    min=x[0];max=x[9];
      
     //找最小数并交换位置 
    for(int i=0;i<n;++i){
        if(m[i]==min){
            z=m[0];
            m[0]=m[i];
            m[i]=z;
            break; //找到最小值后交换位置并退出循环 ,下同 
        }
    }
    //找最大数并交换位置
    for(int i=0;i<n;++i){
        if(m[i]==max){
            z=m[9];
            m[9]=m[i];
            m[i]=z;
            break;
        }
    }
/*
    为什么用双循环而不是合并成一个循环?
    这里有个坑, 合并成一个循环的话,会导致只能交换最小值或最大值。
    举一个简单的例子
    如果代码这样写:
    for(int i=0;i<n;++i){
        if(m[i]==max){
            z=m[9];
            m[9]=m[i];
            m[i]=z;
            break;
        }else if(m[i]==min){
            z=m[0];
            m[0]=m[i];
            m[i]=z;
            break;
        }
    }
      
    那么此时执行代码会出现:
    输入:9 2 3 4 10 5 6 7 8 1
    输出:9 2 3 4 1 5 6 7 8 10
    (交换最大值还是交换最小值,取决于你最先进行的判断)
    可见,这里只交换了最大值,并没有交换最小值。 
*/ 
  
}
  
//输出 
void output(int m[]){
    for(int i = 0; i < 10; ++i){
    printf("%d ", m[i]);
    }
}


最后,我也是个初学者,解释可能有误,欢迎大佬指出错误!

点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

H2430821055 2月前 回复TA
如果有哪里看不懂,欢迎私信提问!