思路:写三个函数:输入函数、处理函数、输出函数。利用指针完成关键部分的操作。
编写程序:
#include<stdio.h>
/*输入函数*/
void input(int a[]){
int i;
printf("请输入十个数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
}
/*处理函数*/
void fun0(int a[10]){
int *p,*max,*min,t;
max=min=a; //指针初始化
for(p=a+1;p<a+10;p++) //遍历首元素以外的全部元素
if(*p<*min) //若当前元素的值比当min指向的元素值小
min=p; //让min指向当前元素
//与首元素交换
t=*min;
*min=a[0];
a[0]=t;
for(p=a+1;p<a+10;p++)
if(*p>*max) //若当前元素的值比当max指向的元素值大
max=p; //让max指向当前元素
//与尾元素交换
t=*max;
*max=a[9];
a[9]=t;
}
/*输出函数*/
void output(int a[]){
int *p;
for(p=a;p<a+10;p++)
printf("%d,",*p);
}
int main(){
int a[10];
input(a);
fun0(a);
output(a);
return 0;
}
之所以使用两个循环来完成最大最小数位置的交换,是因为本次我们使用指针来记录了最大最小值,如果使用一个循环当然可以找出最大最小值的位置,然后把它们的值交换到指定位置上去,看上去没有什么问题,但如果有一个最大值就在第一的位置上,我们仍然使用交换,那么先将最小值放到第一个的位置上,此时我们刚才记录最大值的指针没有动,但它却指向了刚刚交换好的最小值了,这样就出现了bug。所以用两个循环依次找出最大最小值切找到后就交换到指定位置上去。
当然用一个循环一次找出最大最小值,只需要在交换值的时候添加一个判断语句(如果最大值在第一的位置上,那么交换后原来指向最大值的指针的值应该是现在指向最小值的指针的值)
即:
if(max==a)max=min;
程序测试截图:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82650.html