公式型函数:通过一个公式表达式来求得函数返回值的函数。如:z = x > y ? x : y; S = πr^2
可以用带参数宏定义代替该公式型的函数。
(一)带参宏定义的一般形式
#define 宏名(形参列表) 字符串
1.宏名一般用大写字母表示。
2.形参有多个时,各参数间用[英]逗号隔开,形参不分配内存单元,因此不必作类型定义
3.字符串中要用到形参列表中所有的形参。
(二)带参宏调用的一般形式
宏名(实参列表);
1.实参可以是常量、变量、表达式,但必须有具体的值;且实参数量要和形参一一对应。
2.在宏调用时,对实参表达式不作计算,而是直接用实参原样代替形参,然后再计算其构成的
新字符串表达式,即"先原样替换,然后再计算"。
3.因为"先原样替换,然后再计算"的特点,字符串中的形参通常用括号括起来避免出错。
如:#define L(r) 2*PI*r 假如输入的实参是r+2,那替换时就会变成 2*PI*r+2
//带参数的宏定义演示1
用带参数的宏定义求两个数的最大值
#include<stdio.h>
#define MAX(x,y) x>y?x:y
int main()
{
int a, b, c;
printf("请输入两个整数:");
scanf_s("%d%d", &a, &b);
c = MAX(a, b);
printf("最大值为:%d", c);
return 0;
}
//带参数的宏定义演示2
用带参数的宏定义计算圆的周长
#include<stdio.h>
#define PI 3.14
#define L(r) 2*PI*(r)
int main()
{
double r, c;
printf("请输入圆的半径:");
scanf_s("%lf", &r);
c = L(r);
printf("圆的周长为:%.2lf", c);
return 0;
}
//随堂练习7-4
1.用带参数的宏定义求圆的面积
#include<stdio.h>
#define PI 3.14
#define S(r) PI*(r)*(r)
int main()
{
double r, s;
printf("请输入圆的半径:");
scanf_s("%lf", &r);
s = S(r);
printf("圆的面积为:%.2lf", s);
return 0;
}
2.用带参数的宏定义计算自然数之和
#include<stdio.h>
#define S(n) n*(1+n)/2
int main()
{
int a, s;
printf("计算n以内的自然数列之和,请输入n的值:");
scanf_s("%d", &a);
s = S(a);
printf("该自然数列之和为:%d", s);
return 0;
}