1. 题目
输入三个整数 x、y、z,请把这三个数由小到大输出。
2. 分析
步骤1
:比较x和y,若x>y,则互换x和y的值;现在是x<y;步骤2
:比较x和z,若x>z,则互换x和z的值;现在是x<z;步骤3
:比较y和z,若y>z,则互换y和z的值;现在是y<z;
经过步骤1、2、3,可得出x<y<z。
3. 代码实例
#include <stdio.h>
int main()
{
int x = 0, y = 0, z = 0, t = 0;
printf("\n请输入三个数字:\n");
scanf("%d%d%d",&x,&y,&z);
if ( x > y ) {
// 交换x,y的值,如果不大于,则不交换
t = x;
x = y;
y = t;
}
if ( x > z ) {
// 交换x,z的值,如果不大于,则不交换
t = z;
z = x;
x = t;
}
if ( y > z ) {
// 交换y,z的值,如果不大于,则不交换
t = y;
y = z;
z = t;
}
printf("排序: %d %d %d\n",x,y,z);
}
4. 代码实例2,可以将交换封装成一个函数
// 交换两个变量的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 调用
if ( x > y ) {
// 交换x,y的值,如果不大于,则不交换
swap(x, y);
}
5. 代码实例3,可以用三目运算符
- 先比较x和y的最小值temp,然后和z比较,得出min;
- 再比较x和y的最大值temp,然后和z比较,得出max;
- x+y+z-min-max得出中间值。
#include<stdio.h>
int main(void)
{
int x, y, z, temp, min, max;
printf("请输入三个数字:\n");
scanf("%d%d%d",&x,&y,&z);
temp = x < y ? x : y;
min = temp < z ? temp : z;
temp = x > y ? x : y;
max = temp > z ? temp : z;
printf("排序:");
printf("%d%3d%3d",min, x + y + z - min - max, max);
return 0;
}
事业要悄悄地干,干不成就当没干过
。