相信很多最初接触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;
}
多添了三行else(else心说WTF明明我可以休假不用上你硬把我拉出来干嘛),代码的简洁性和易读性是非常重要的,多了三个else,对于这个小程序来讲没什么问题,但是对于一些大型程序来说,简洁有效的代码更利于维护,所以养成良好的代码习惯对我这种小白+菜鸡十分重要。
本人是非计算机专业的在读大学生,对编程有很大的兴趣(我目前专业是被调剂的),也很想去学好编程,这是我的第一篇博客,有错误的地方希望大家能够不吝赐教,但是你要是骂我…我也不能拿你怎么着,只能默默祝你一辈子找不到女朋友吧。最后祝你身体健康。