此题的解决思路为:三个数a,b,c,将a与b进行比较,若b大于a则交换a和b,把较大的数储存在a中。同理将a与c进行比较,若c大于a则交换a和c,仍然把较大的数储存在a中。然后再比较b和c,把b与c之间较大的数储存在b中。利用for循环语句和if判断语句来实现。最后就能使三个数按照从大到小的顺序输出。
初次设想的具体代码如下:
#include<stdio.h>
int main()
{
int a = 25;
int b = 56;
int c = 98;
int tmp = 0;//定义一个临时变量tmp,用于交换
if (a < b)//首先判断a与b的大小,将较大的数放在a中
{
tmp = a;
a = b;
b = tmp;
}
if (a < c)//再判断a与c的大小,仍然将较大的数放在a中
{
tmp = a;
a = c;
c = tmp;
}
if (b < c)//最后判断b和c,将b和c之间较大的数储存在b中
{
tmp = b;
b = c;
c = tmp;
}
printf("%d %d %d ", a, b, c);
getchar();
return 0;
}
观察上述代码,可以发现每次判断的部分都为交换两个数,所以我们可以考虑将此部分设定为一个函数,方便调用,也可以使整体代码看起来更加轻便。所以进行以下优化。
但我们在设置函数的时候需要注意的是,在给函数传参的时候传递给函数的是两个数在内存中的地址,所以我们在函数中需要使用指针,需要定义一个指针变量x,y,然后在每一次对比交换两个数个过程中,把两个数的地址传递给指针变量x,y,这样就可以很好地调用函数。并且整体的代码就不会冗余。
优化具体代码如下:
#include<stdio.h>
int main()
void Swap (int *x, int *y)//定义一个交换Swap函数,方便使用。用指针变量x,y来接受传递过来的参数
{
int tmp = *x;//交换过程
*x = *y;
*y = tmp;
}
int main()
{
int a = 25;
int b = 56;
int c = 98;
int tmp = 0;
if (a < b)
{
Swap(&a, &b);//调用函数,给Swap函数传递的是a和b的取地址
}
if (a < c)
{
Swap(&a, &c);
}
if (b < c)
{
Swap(&b, &c);
}
printf("%d %d %d ", a, b, c);
getchar();
return 0;
}