要求:将输入的三个数中,从小到大输出
解法:引入第四个“变量”,作为这3个数的中间存储空间进行转换!
说到这边大家可能会觉得为什么要引入这个“变量呢”?
就这么说吧: 比如有三个人 张三、李四、王五,他们三各自有一把iPhone12,但是不同版本,有国行版、美版、港版。(大家都知道他们价格不同)现在要进行对比,然后进行排序,从价格便宜依次排到价格最贵(要求:张三拿的是最便宜的,然后依次是李四、王五)。
第一次: 张三跟王五进行对比(因为不可能三个人进行对比,两两比较大家学过数学都懂),如果没有“第四个人X”,那么这将比不了。因为待会王五把手机给了张三,张三给他弄坏了,或者是跑路了,这对王五没有安全保障,他肯定不乐意!
这时候就需要“第四个人 老王(他们的老师)”出来当中间人了,比如张三是拿“iPhone12 国行版”,但是按要求的话张三是排在第一个,拿在他手上的应该是“美版”。 然后王五拿的是“iPhone12港版”,这时候就需要进行转换了。
为了保证张三的“手机安全”,先是张三把手机交给“老王”,然后王五把手机交给“张三”后,“老王”再把手机交给“王五” ,有了“老王“这个中间人。张三、王五两人的手机都有了安全保障,两人才愿意进行此活动!
第二次:将张三与李四按“第一次”的方法进行交换手机。
第三次:将王五与李四按照“第一次”的方法进行交换手机。
最后结果为:张三手里拿着“iPhone12 美版”,李四手机拿着“iPhone12 港版”,王五手里拿着“iPhone12 国行版”。
代码:
#include<stdio.h>
int main()
{
int a,b,c,temp; //temp作为中间值
printf("请分别输入a,b,c的值:\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a > b)
{
temp = a; //先把a赋值给temp 这样才能实现转换
a = b; //若没有temp这个变量,把a赋值给b,那么b=a,如果再把b赋值给a,
//那么a依旧是原本的a,依旧>b,达不到咱们转换的效果。
b = temp; //最后把temp的值赋给b 达到 a与b两个值互换的结果
}
if(a > c)
{
temp = a;
a = c;
c = temp;
}
if(b > c)
{
temp = b;
b = c;
c = temp;
}
printf("%d,%d,%d\n",a,b,c);
return 0;
}
提升版(指针):
#include<stdio.h>
int main()
{
int one(int * a1,int * a2,int * a3);
int a,b,c, * p1, * p2, * p3;
printf("请任意输入三个整数:\n");
scanf("%d%d%d",&a,&b,&c);
p1 = &a;
p2 = &b;
p3 = &c;
one(p1,p2,p3);
printf("max=%d middle=%d min=%d",a,b,c);
}
int one(int * a1,int * a2,int * a3)
{
int two(int * aq1,int * aq2);
if( * a1 > * a2)
{
two(a1,a2);
}
if(* a1 > * a3)
{
two(a1,a3);
}
if(* a2 > * a3)
{
two(a2,a3);
}
}
int two(int * aq1,int * aq2)
{
int temp;
temp = * aq1;
* aq1 = * aq2;
* aq2 = temp;
}