在C语言中如何用标准宏定义实现计算两个参数中的最小值

如题所述

可以通过三目运算符(? :)实现,这样定义,#define MIN(x,y) ((x)<(y)?(x):(y)),测试代码如下,
//程序功能实现,计算两个数的最小值
#include <stdio.h>
#define MIN(x,y) ((x)<(y)?(x):(y))
int main(int argc, char *argv[])
{
int x=10,y=15;
printf("MIN(%d,%d)=%d\n",x,y,MIN(x,y));
return 0;
}

需要注意的是,宏定义是原样替换,需要保证替换后的准确性,例如,
#define MIN(x,y) (x<y?x:y),这样定义后,宏表达式则可能出现问题,不是想要的结果,比如下面的例子,可以看出区别,编译器不同结果可能不同。
#include <stdio.h>
#define MIN1(x,y) (x<y?x:y)
#define MIN2(x,y) ((x)<(y)?(x):(y))
int main(int argc, char *argv[])
{
int x=10,y=15;
printf("MIN1(%d,%d)=%d\n",x,y,MIN1(x+=2,y));//输出MIN1(24,15)=24
x=10;
printf("MIN2(%d,%d)=%d\n",x,y,MIN2(x+=2,y));//输出MIN2(14,15)=14
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-22
#define MIN(a,b) (a>b?b:a)本回答被提问者采纳
第2个回答  2012-03-26
#define MIN(A, B) ((A) <= (B) ? (A) : (B))
第3个回答  2015-06-01
#define MIN(a,b) (a>b?b:a)

这个是最简介的哦!
第4个回答  2015-07-06
宏定义就是强制替换
#define min(a,b) (a<b?a:b)

在C语言中如何用标准宏定义实现计算两个参数中的最小值?
定义最小(x, y) (x < y?X:y),在这个定义之后,宏表达式可能看起来是一个问题,而不是期望的结果,例如下面的例子,它可以区分出不同,而编译器可能有不同的结果。包括< stdio, h >。定义MIN1 (x, y) (x < y?X,y)定义MIN2 (x, y) ((x) (y)?(x):(y))Int main(Int argc...

在C语言中如何用标准宏定义实现计算两个参数中的最小值
printf("MIN2(%d,%d)=%d\\n",x,y,MIN2(x+=2,y));\/\/输出MIN2(14,15)=14 return 0;}

用C语言编写程序,比较两数大小,并输出最小值?
float b = MIN(1.0, 2.0);

c语言编程:输入两个正整数,求最大公约数和最小公倍数
printf("它们的最小公约数为:%d\\n",p\/n);return 0;} 方法二、\/\/穷举法解两个数的最大公约数和最小公倍数 void exp(int num1,int num2){ int x,y,i;x=num1;y=num2;int max=0;\/\/最大公约数 for(i=1;i<=num1;i++)if(num1%i==0&&num2%i==0)max=i;System.out.println(...

c语言 求一组数a中的最大最小值
有两种方法:1.#incude<stdio.h> define N 10\/\/通过改变宏定义,改变数组元素的个数 void main(){int a[N]={1,5,9,6,3,4,7,8,2,10},i,j,min,max;max=min=a[0];for(i=0;i<N;i++){if(max<a[i])max=a[i];if (a[i]<min)min=a[i];} printf("%d,%d\\n",max...

C语言#define的用法(2)
2、意识到这个表达式将使一个16 位机的整形数溢出,因此要用到长整形符号 L ,告诉编译器这个常数是长整形数。3、如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的`起点。面试:写一个“标准”宏MIN ,这个宏输入两个参数并返回较小的一个 define MIN(A,B) ((...

大学搞懂这8个C语言问题你也能进大厂
2、写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个 #define MIN(a,b) ((a)<=(b)?(a):(b)) 考察点:1.标识#define在宏中应用的基本知识。这是很重要的。因为在 嵌入(inline)操作符 变为标准C的一部分之前宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码...

C语言编程:键盘输入10个数,用函数实现计算数据中最大值、最小值,并返 ...
在主函数中声明一个具有10个int型元素的数组存放键盘输入的数据,声明变量ml记录最大值位置、ms记录最小值位置。自定义一个函数void Input_Max_Min(int *p,int *pl,int *ps)来完成题设要求,其中p是数组首指针,pl是最大值位置(下标)变量指针,ps是最小值位置(下标)变量指针。在主函数中输出结果...

C语言中的宏定义怎么用?
C语言中的宏定义用法分为两种。1、不带参数的宏定义比较简单,就是用一个指定的标识符来代表一个字符串。它的一般形式为“#define 标识符 字符串”,例如#define E 2.718281828459。这种方法使用户能以一个简单的名字代替一个长的字符串。2、带参数的宏定义不是仅仅进行简单的字符串替换,还要进行...

怎样在单片机中用C语言编写一个2位数码管显示0到99。管脚接线图如下...
\/\/8字段定义 \/\/先进行宏定义,然后进行查表,输出就OK了 unsigned int i ;defineSEGA0x04 defineSEGB0x08 defineSEGC0x10 defineSEGD0x80 defineSEGE0x20 defineSEGF0x02 defineSEGG0x01\/\/ defineSEGDP0x40\/\/ defineNSEGG0x7f\/\/无解 defineNUM_0SEGA + SEGB + SEGC + SEGD + SEGE + SEGF...

相似回答