C语言关于输入三个数由大到小依次排列的程序解读【第一夜】

  相信很多最初接触C语言的朋友都曾在输入三个数要求按照由大到小的顺序排列这个简单程序上头疼一下子,因为很多人最初想不到引进一个temp值作为其中间变化量,我脑子笨,刚开始看见temp时惊为天人,感叹人类智慧,后来尴尬的发现貌似其实是自己的哪儿不太对劲儿…当时以为自己已经搞懂了这个小小的程序,然而过了两天我发现,我忘了怎么写了!准确的说,想写这个程序却无从下手,在比大小和排列上脑子是一团乱麻,完全想不出算法该怎么写出来。先把程序列出来。

#include <stdio.h>
int main()
{
    int a,b,c,t;
    scanf("%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,t;
    scanf("%d %d %d",&a,&b,&c);
    if ( a > b );
    else
    {
        t = a;
        a = b;
        b = t;
    }                       
    if( a > c );
    else
    {
        t = a;
        a = c;
        c = t;
    }
    if( b > c );
    else
    {
        t = b;
        b = c;
        c = t; 
    }
    printf("%d %d %d",a,b,c);
    return 0;
}

 多添了三行elseelse心说WTF明明我可以休假不用上你硬把我拉出来干嘛),代码的简洁性和易读性是非常重要的,多了三个else,对于这个小程序来讲没什么问题,但是对于一些大型程序来说,简洁有效的代码更利于维护,所以养成良好的代码习惯对我这种小白+菜鸡十分重要。

本人是非计算机专业的在读大学生,对编程有很大的兴趣(我目前专业是被调剂的),也很想去学好编程,这是我的第一篇博客,有错误的地方希望大家能够不吝赐教,但是你要是骂我…我也不能拿你怎么着,只能默默祝你一辈子找不到女朋友吧。最后祝你身体健康。

    原文作者:huzi670500298
    原文地址: https://blog.csdn.net/huzi670500298/article/details/81394130
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞