首先是比较三个数大小,有大到小排列输入的三个数
先给代码:
#include <iostream>
using namespace std;
int main()
{
int a,b,c,*p1,*p2,*p3;
cin>>a>>b>>c;
p1=&a;p2=&b;p3=&c;//将abc的地址给p1p2p3,以用于后来指针的交换
void huan(int *,int *,int *);//*后也可加上变量,声明定义的函数huan()
huan(p1,p2,p3);//调用该函数
cout<<a<<" "<<b<<" "<<c<<endl;//直接输出abc即可,
//因为之前用指针交换排序abc的值(*p1,*p2,*p3的值)
return 0;
}
void huan(int *q1,int *q2,int *q3)
{
void swap(int *,int *);//同上
if(*q1<*q2) swap(q1,q2);
if(*q1<*q3) swap(q1,q3);
if(*q2<*q3) swap(q2,q3);//涵盖所有情况——12,13,23
//如代入539——>953,先看第一个数第二个数谁大,换成第一个数大,再看一三,这样就换成了一定是第一个数大,然后看23.
}
void swap(int *k1,int *k2)
{
int temp;
temp=*k2;*k2=*k1;*k1=temp;//交换两个指针
}
代码中注释较为详细,也可复制到软件中查看
注意:调用函数时不可写为huan(*p1,*p2,*p3)否则返回形参时将为**q1,**q2,**q3.
其次是比较三个数距三者平均值距离大小,返回原值。
仍然先给代码:
#include <iostream>
using namespace std;
void swap(int *q1,int *q2)//交换函数
{
int temp;
temp=*q2;*q2=*q1;*q1=temp;
}
int main()
{
int a,b,c,*p1,*p2,*p3;
cin>>a>>b>>c;
p1=&a;p2=&b;p3=&c;//送出地址
int a_,b_,c_,aver;
aver=(a+b+c)/3;
a_=abs(aver-a);//将距离赋给a_(abs函数取绝对值)
b_=abs(aver-b);
c_=abs(aver-c);
if(a_<b_)swap(p1,p2);
if(a_<c_)swap(p1,p3);
if(b_<c_)swap(p2,p3);
cout<<a<<" "<<b<<" "<<c<<endl;
}
在这里值得说明的是像第一个一样直接定义两个函数,而是将比较函数放在主函数中
原因是需要比较的是距离的绝对值,而交换的应该是原值的指针变量所指向的值(原值)
所以如果单独定义一个函数所需要额外定义的变量名就太多了,不采用。
以上就是全部内容了,感谢阅览,请多指教。