用指针比较三个数大小及比较三个数距平均数的距离(输出原数)

首先是比较三个数大小,有大到小排列输入的三个数

先给代码:

#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;
}

在这里值得说明的是像第一个一样直接定义两个函数,而是将比较函数放在主函数中

原因是需要比较的是距离的绝对值,而交换的应该是原值的指针变量所指向的值(原值)

所以如果单独定义一个函数所需要额外定义的变量名就太多了,不采用。

以上就是全部内容了,感谢阅览,请多指教。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值