伯乐论坛网

搜索
查看: 118|回复: 4

【C语言程序】任意输入3个数,将其从大到小排列输出(或 ...

[复制链接]

1

主题

3

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-11-23 20:23:34 | 显示全部楼层 |阅读模式
看到群里的小伙伴还在问我 输入几个数,让其从大到小排列(或从小到大排列)
诸如此类的问题,作为一个宠粉的群主,当然是帮大家归纳总结一下啦!!(咳咳!所以还不进一下我的学习交流群吗 嘻嘻)
老规矩 废话不多说,直接上代码!!!(希望大家给我点赞收藏一下 靴靴!)
所有的代码都是用的VS2019!
【程序一】输入三个数,让其从大到小排列。

法一:
#include <stdio.h>
int main()
{
    int a, b, c, t;
    scanf_s("%d %d %d", &a, &b, &c);
    if (a < b)
    {
        t = a;
        a = b;
        b = t;
    }
    if (a < c)
    {
        t = a;
        a = c;
        c = t;
    }
    if (b < c)
    {
        t = b;
        b = c;
        c = t;
    }
    printf("%d %d %d", a, b, c);
    return 0;
}

(给小白们解释一下)可以看出代码一共出现了三次if,通过倒数第三行代码
printf("%d %d %d",a,b,c);   可以看出:a,b,c的输出顺序是固定不变的,经过算法排列好后的顺序应当是a值最大,b中间,c最小。
所以 第一个 if 的(a<b)目的就是通过比大小来对a,b进行赋值,由大到小排列,大的值赋给a,小的值赋给b。
第二个 if 的(a<c) ,我们知道C语言是从上到下顺序运行,在经过了第一个if后,无论是最初赋值(键盘输入值)的a大还是b大,此时的a代表的就是在第一个if经过比较得到的较大的那个值,第二个if的作用就是得到三个数中的最大值并将其赋予a,便得到了三个之中的最大值。
同理,第三个if的作用便是得到中间值和最小值并分别将其赋给b和c。
法二:输入三个数,让其从大到小排列
#include <stdio.h>
int main()
{
    int a, b, c, max, min;
    scanf_s("%d %d %d", &a, &b, &c);
    if (a > b)
    {
        max = a;
        min = b;
    }
    else
    {
        max = b;
        min = a;
    }

    if (c < min)
    {
        min = c;
    }
    if (c > max)
    {
        max = c;
    }
    printf("%d %d %d\n", max, a + b + c - max - min, min);

}

法三:输入三个数,让其从大到小排列
#include<stdio.h>
#include<math.h>
int main()
{
        //从键盘输入三个整数x, y和z,按从大到小的顺序输出它们的值。
                int i;
        int x, y, z;
        scanf_s("%d%d%d", &x, &y, &z);
        if (x > y && y > z)
        {
                printf("%d\t%d\t%d\n", x, y, z);
        }
        if (y < z && z < x)
        {
                printf("%d\t%d\t%d\n", x, z, y);

        }

        if (x < y && y < z)
        {
                printf("%d\t%d\t%d\n", z, y, x);
        }
        if (y < z && y < x)
        {
                printf("%d\t%d\t%d\n", z, x, y);

        }

        if (x < y && y > z && z < x)
        {
                printf("%d\t%d\t%d\n", y, x, z);

        }
        if (y > z && z > x)
        {
                printf("%d\t%d\t%d\n", y, z, x);

        }
        return 0;
}

【程序二】输入三个数,让其从小到大排列。

法一:
#include<stdio.h>
int main()
{
    int a, b, c;
    int temp;//临时变量
    scanf_s("%d %d %d", &a, &b, &c);
    if (a > b)
    {
        temp = a;
        a = b;
        b = temp;
    }
    if (a > c)
    {
        temp = a;
        a = c;
        c = temp;
    }
    if (b > c)
    {
        temp = b;
        b = c;
        c = temp;
    }
    printf("从小到大的顺序:%d\t%d\t%d\n", a, b, c);
    return 0;
}

法二:(输入三个数,让其从小到大排列)
#include <stdio.h>
#include <stdlib.h>
void swap(int* x, int* y)
{
    int temp;
    if (*x > *y)
    {
        temp = *x;
        *x = *y;
        *y = temp;
    }
}
void exchange(int* a, int* b, int* c);
int main()//输入3个整数,按从小到大在顺序输出
{
    int a, b, c, * p1, * p2, * p3;
    scanf_s("%d%d%d", &a, &b, &c);
    p1 = &a;
    p2 = &b;
    p3 = &c;
    exchange(p1, p2, p3);
    printf("%d %d %d\n", a, b, c);
    return 0;
}
void exchange(int* a, int* b, int* c)
{
    swap(a, b);
    swap(a, c);
    swap(b, c);
}

法三:(输入三个数,让其从小到大排列)
#include<stdio.h>                                //输入三个数 从小到大排序输出
int main()
{
        int a, b, c, t;
        scanf_s("%d%d%d", &a, &b, &c);
        if (a > b)        //如果a>b  a与b交换值  也就是把大的数放在后面
        {
                t = b;
                b = a;
                a = t;
        }
        if (a > c)        //a再于c比较   保证a最小
        {
                t = c;
                c = a;
                a = t;
        }
        if (b > c)        //两个较大的值再比较,再交换最大值
        {
                t = c;
                c = b;
                b = t;
        }
        printf("%d %d %d\n", a, b, c);
        return 0;
}

今天就给大家带来三个从大到小排列和三个从小到大排列的代码!!!希望对你们有所帮助
有没有体会到编程的乐趣呢!只要掌握了相应的知识,就能够把一个题目玩出花样来!这真的是非常愉悦的体验哦~
恭喜你又学会了一个小知识!!(学会了就赶快行动起来把)
码字不易!都看到这啦 可以给我点赞收藏支持一下 万分感谢
今天就分享到这!!
如果有学习上的问题或者想要更多学习资料,项目源码,视频教学可以点击我的主页,进群,欢迎大家积极讨论!!!
群主是我自己啦! 欢迎大家进群交流!

回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-11-23 20:24:00 | 显示全部楼层
打扰一下,我是按照if a大于b ,if b大于c,if a大于c,这样顺序写的,为啥结果不能按照从小到大输出,
回复

使用道具 举报

1

主题

5

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-11-23 20:24:46 | 显示全部楼层
应该按a大于b a大于c b大于c这个顺序写吧
回复

使用道具 举报

2

主题

6

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-11-23 20:25:29 | 显示全部楼层
经典,看了那么多答案都一样,只有这个解释我才真正理解[可怜][可怜]
回复

使用道具 举报

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-11-23 20:25:39 | 显示全部楼层
如果是浮点型的数呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2013 Comsenz Inc.Powered by Discuz!X3.4
快速回复 返回顶部 返回列表