C++指针函数方法从小到大排序

1.题目

//题目
//5、用指针的方法实现。编写一个函数,将三个整数按由小到大的顺序排序
//数据的输入输出在主函数中实现
//(即:通过指针作为函数参数,在函数中排序后,变化的数据能直接反映到主函数中)

2.错误输出*1

#include<iostream>
#include<stdio.h>
using namespace std;

void minMax(int * a1, int *a2, int *a3)
{
	int temp;
	if (*a1> *a2)
	{
		if (*a1 > *a3)
		{
			temp = *a1;
			*a1 = *a3;
			*a3 = temp;
		}
		else
		{
			temp = *a3;
			*a3 = *a1;
			*a1 = temp;
		}
	}
	else
	{
		if (*a2 > *a3)
		{
			temp = *a2;
			*a2 = *a3;
			*a3 = temp;
		}
		else
		{
			temp = *a3;
			*a3 = *a2;
			*a2 = temp;
		}
	}
}

int main()
{
	int a = 0, b = 0, c = 0;
	int *a1 = 0, *a2 = 0, *a3 = 0;
	cout << "请输入第一个整数:" << endl;
	cin >> a;
	cout << "请输入第二个整数:" << endl;
	cin >> b;
	cout << "请输入第三个整数:" << endl;
	cin >> c;
	a1 = &a;
	a2 = &b;
	a3 = &c;
	minMax(a1, a2, a3);
	cout << a << "<" << b << "<" << c << endl;
	printf("%d %d %d ", a, b, c);
	system("pause");
	return 0;
}

错误案例1输出结果截图

从输出结果可以看出,无法比较大小,主函数里的语句逻辑是没有问题的,那么问题就只能出在函数语句逻辑里面

分析:

a1>a2时,应该交换a1,a2的位置,找一个中间人我们定义好的temp,作为转接

交换的逻辑,跟之前的冒泡排序一样

a1>a3时,交换a1,a3的位置

a2>a3时,交换a2,a3的位置

以上三种,囊括了所有可能的结果,用排列组合方式可以判断三个数有3种组合方式

于是,换一种书写方法,较为清晰一些

全是If

//5、用指针的方法实现。编写一个函数,将三个整数按由小到大的顺序排序
//数据的输入输出在主函数中实现
//(即:通过指针作为函数参数,在函数中排序后,变化的数据能直接反映到主函数中)

#include<iostream>
#include<stdio.h>
using namespace std;

void minMax(int * a1, int *a2, int *a3)
{
	int temp;
	if (*a1 > *a2)
	{
		temp = *a2;
		*a2 = *a1;
		*a1 = temp;
	}
	else if(*a1>*a3)
	{
		temp = *a3;
		*a3 = *a1;
		*a1 = temp;
	}
	else if (*a2 > *a3)
	{
		temp = *a2;
		*a2 = *a3;
		*a3 = temp;
	}
}

int main()
{
	int a = 0, b = 0, c = 0;
	int *a1 = 0, *a2 = 0, *a3 = 0;
	cout << "请输入第一个整数:" << endl;
	cin >> a;
	cout << "请输入第二个整数:" << endl;
	cin >> b;
	cout << "请输入第三个整数:" << endl;
	cin >> c;
	a1 = &a;
	a2 = &b;
	a3 = &c;
	minMax(a1, a2, a3);
	cout << a << "<" << b << "<" << c << endl;
	printf("%d %d %d ", a, b, c);
	system("pause");
	return 0;
}

 我们都知道,if语句在执行其他选项时,用else if,或者else

看下执行结果

仍然不能比较出结果,所以,现在问题出在哪儿?

 

if,if,if

if ;else if;else if

逻辑原理真的一样么?

改一下试试,把else if全部换为同一个选择条件等级的if

​
//5、用指针的方法实现。编写一个函数,将三个整数按由小到大的顺序排序
//数据的输入输出在主函数中实现
//(即:通过指针作为函数参数,在函数中排序后,变化的数据能直接反映到主函数中)

#include<iostream>
#include<stdio.h>
using namespace std;

void minMax(int * a1, int *a2, int *a3)
{
	int temp;
	if (*a1 > *a2)
	{
		temp = *a2;
		*a2 = *a1;
		*a1 = temp;
	}
	if(*a1>*a3)
	{
		temp = *a3;
		*a3 = *a1;
		*a1 = temp;
	}
	if (*a2 > *a3)
	{
		temp = *a2;
		*a2 = *a3;
		*a3 = temp;
	}
}

int main()
{
	int a = 0, b = 0, c = 0;
	int *a1 = 0, *a2 = 0, *a3 = 0;
	cout << "请输入第一个整数:" << endl;
	cin >> a;
	cout << "请输入第二个整数:" << endl;
	cin >> b;
	cout << "请输入第三个整数:" << endl;
	cin >> c;
	a1 = &a;
	a2 = &b;
	a3 = &c;
	minMax(a1, a2, a3);
	cout << a << "<" << b << "<" << c << endl;
	printf("%d %d %d ", a, b, c);
	system("pause");
	return 0;
}

​

可以进行比较

所以,小小的else if和if竟然相差这么多,原理,在我的理解看来就是,else if就像是不满足if的条件编译器选择的第二条路,如果不是同样的三岔路口的话,用户输入的数字,因为输入的先后会得到不同的备用选项 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值