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,可以用三目运算符

  1. 先比较x和y的最小值temp,然后和z比较,得出min;
  2. 再比较x和y的最大值temp,然后和z比较,得出max;
  3. 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;
}

事业要悄悄地干,干不成就当没干过