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的条件编译器选择的第二条路,如果不是同样的三岔路口的话,用户输入的数字,因为输入的先后会得到不同的备用选项