您的位置:首页 > 编程语言 > C语言/C++

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

2018-03-15 09:24 267 查看
/*
* 文件名:三个数排序.c
* 功能描述:
*     任意输入三个整数,对其进行排序
*/
#include <stdio.h>
#include <stdlib.h>

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语言 整数排序