C语言: 定义一个宏,比较a、b的大小,不要用大于、小于和IF运算符

如题所述

代码如下:

#include "stdio.h"

void main()

{

float a, b ,c;

    printf ("请输入三个数,会为你从大到小排列!\n");

    scanf("%f %f %f",&a,&b,&c);

    if(a>b>c){printf("%f,%f,%f",a,b,c);}

    else if(a>c&&c>b){printf("%f,%f,%f",a,c,b);}

    else if(b>a&&a>c){printf("%f,%f,%f",b,a,c);}

    else if(b>c&&c>a){printf("%f,%f,%f",b,c,a);}

    else if(c>b&&b>a){printf("%f,%f,%f",c,b,a);}

    else if(c>a&&a>b){printf("%f,%f,%f",c,a,b);}

//编译器不识别三个连续的符号运算,必须用且(&&)和或(||)he否(!)

}

扩展资料

C语言中宏定义的优点

方便程序的修改

使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将该常量改变时,不用对整个程序进行修改,只修改宏定义的字符串即可,而且当常量比较长时, 可以用较短的有意义的标识符来写程序,这样更方便一些。

相对于==全局变量==两者的区别如下:

1、宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以。

2、宏定义的只是一段字符,在编译的时候被替换到引用的位置。在运行中是没有宏定义的概念的。而变量在运行时要为其分配内存。

3、宏定义不可以被赋值,即其值一旦定义不可修改,而变量在运行过程中可以被修改。

4、宏定义只有在定义所在文件,或引用所在文件的其它文件中使用。 而全局变量可以在工程所有文件中使用,只要再使用前加一个声明就可以了。换句话说,宏定义不需要extern。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-24
通过移位运算来判定整数的正负性。

#include <iostream>
using namespace std;

#define MAX(A,B) (((A)-(B))>>31 ? (B) : (A))

int main()
{
int a = 10, b = 100;
cout << MAX(a, b) << endl;
}本回答被提问者采纳
第2个回答  2011-03-04
#define COMPARE(a, b) ((a==b) ? 0 : ((a>b) ? 1 : -1))
这个宏定义可以计算出以下3种情况:
a=b COMPARE(a, b) = 0;
a>b COMPARE(a, b) = 1;
a<b COMPARE(a, b) = -1;

我看到有人回答用移位的方法来判断符号位,弱弱的问一句,如果a,b不是32位int型怎么办?
第3个回答  2011-03-02
#define min(a,b) (((a)<(b))?(a):(b))

热心网友回答的比较全面。
第4个回答  2011-03-02
#define MAX(a,b) (a>b?a:b)追问

不用 大于和小于,位运算

相似回答