解题思路:
我的解题思路比较简单,具体实现方法为:
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分
2 人评分
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1266 |
WU-整除问题 (C++代码)浏览:648 |
用筛法求之N内的素数。 (C++代码)浏览:754 |
Cylinder (C语言描述,蓝桥杯)浏览:1279 |
矩阵加法 (C语言代码)浏览:1768 |
1013题解浏览:596 |
小九九 (C语言描述,不看要求真坑爹)浏览:1006 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:592 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1359 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:515 |