解题思路:解题关键还是在第二个函数——进行处理。
根据题目我们要处理的是找出最大值or最小值,之后按要求交换位置即可;再仔细观察我们不难发现最大值和最小值要求其实差不多,那么我们的问题就变成
找最小值——利用数组,假设第一位为最小值,然后不断比较
保存最小值位置——找到最小值后,用个数记录当前位置;
之后与第一位交换
最大值也是类似
参考代码:
#include<stdio.h> #define n 10 //输入 int in(int a[100]){ int i; for(i=0;i<n;i++){ scanf("%d",a[i]); } return 0; } //主要排序交换函数 int change(int a[100]){ int max,min; int x=0; //记录最大or最小值的位置 int temp,i; min=a[0]; //假设最小值是第一位,之后一个一个比较 for(i=1;i<n;i++){ if(a[i]<min){ min=a[i]; x=i; } } //这里注意应该是确定最小值后交换,避免重复交换 temp=a[0]; //与第一位交换 a[0]=a[x]; a[x]=temp; //从上面可以确定第一位是最小值,所以从第二位开始假设 max=a[1]; for(i=2;i<n;i++){ if(a[i]>max){ max=a[i]; x=i; } } temp=a[9]; //与最后一位交换 a[9]=a[x]; a[x]=temp; return 0; } int out(int a[100]){ int i; for(i=0;i<n;i++){ printf("%d ",a[i]); } return 0; } int main(){ int a[n]; in(a); change(a); out(a); return 0; }
但个人感觉代码有些冗余,而且本人不太会用指针,如有更好的,欢迎讨论
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:821 |
幸运数 (C++代码)浏览:1309 |
1118(求助_已解决)浏览:351 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:569 |
1052题解(链表操作)浏览:782 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:662 |
C二级辅导-统计字符 (C语言代码)浏览:695 |
排序算法(选择,插入,冒泡)浏览:876 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:607 |
简单的a+b (C语言代码)浏览:617 |