C语言实现三个整数的排序

/*
 * 文件名:三个数排序.c
 * 功能描述:
 *     任意输入三个整数,对其进行排序
*/
#include 
#include 

int main(void)
{
    int a, b, c;

    fprintf(stdout, "请输入三个整数:");

    /* 获取并检查用户输入 */
    while (fscanf(stdin, "%d%d%d", &a, &b, &c) != 3)
    {
        fprintf(stderr, "输入错误!请重新输入:");
        while (fgetc(stdin) != '\n'); /* 去掉多余的非法字符 */
    }

    /* 确保法:从小到大排序 */
    /* 确保 a < b < c */
    fprintf(stdout, "使用\033[33m确保法\e[0m从小到大排序为:");
    if (a > b)
    {
        /* 使用临时变量进行交换 */
    	int temp = a;
    	a = b;
    	b = temp;
    }
    if (a > c)
    {
        /* 使用互补的方法进行交换 */
        /* 该方法存在溢出风险,只适用于较小的整数 */
        a = a + c;
        c = a - c;
        a = a - c;
    }
    if (b > c)
    {
        /* 使用按位异或进行交换 */
        /* 该方法只能用于整数 */
        b = b ^ c;
        c = b ^ c;
        b = b ^ c;
    }
    fprintf(stdout, "%d  %d  %d\n", a, b, c);

    /* 假定法:从大到小进行排序 */
    fprintf(stdout, "使用\033[33m假定法\e[0m从大到排小序为:");
    /* 假定 a 最大 */
    if (a > b && a > c)
    {
        if (b > c)
        {
            fprintf(stdout, "%d  %d  %d\n", a, b, c);
        }
        else
        {
            fprintf(stdout, "%d  %d  %d\n", a, c, b);
        }
    }
    /* 假定 b 最大 */
    else if (b > a && b > c)
    {
        a > c ? fprintf(stdout, "%d  %d  %d\n", b, a, c) : \
		         fprintf(stdout, "%d  %d  %d\n", b, c, a);
    }
    
    /* 假定 c 最大 */
    else 
    {
        a > b ? fprintf(stdout, "%d  %d  %d\n", c, a, b) : \
			      fprintf(stdout, "%d  %d  %d\n", c, b, a);
    }

    return 0;
}

你可能感兴趣的:(C语言)