思路:写三个函数:输入函数、处理函数、输出函数。利用指针完成关键部分的操作。
编写程序:
#includevoid 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*max) //若当前元素的值比当max指向的元素值大 max=p; //让max指向当前元素 //与尾元素交换 t=*max; *max=a[9]; a[9]=t; } void output(int a[]){ int *p; for(p=a;p
之所以使用两个循环来完成最大最小数位置的交换,是因为本次我们使用指针来记录了最大最小值,如果使用一个循环当然可以找出最大最小值的位置,然后把它们的值交换到指定位置上去,看上去没有什么问题,但如果有一个最大值就在第一的位置上,我们仍然使用交换,那么先将最小值放到第一个的位置上,此时我们刚才记录最大值的指针没有动,但它却指向了刚刚交换好的最小值了,这样就出现了bug。所以用两个循环依次找出最大最小值切找到后就交换到指定位置上去。
当然用一个循环一次找出最大最小值,只需要在交换值的时候添加一个判断语句(如果最大值在第一的位置上,那么交换后原来指向最大值的指针的值应该是现在指向最小值的指针的值)
即:
if(max==a)max=min;
程序测试截图:



