解题思路: 使用带返回值的宏    


注意事项:   1⃣️注意审题!保留三位小数!宏中的类型是否定义准确了!

                  2⃣️由于编写宏的时候编译器不会检查你的语法错误,所以我们一定要细心再细心地检查我们所定义的参数类型是否正确,是否正确添加分号等等,出现多个表达式的时候,建议使用反斜杠\分行。
参考代码:

                                            #include <stdio.h>

                                            #include <math.h>

                                            #define S(a,b,c) \

                                            ({float S_;\

                                            S_=( a + b + c ) / 2 ; S_;})

                                            #define A(s,a,b,c) ({float A_;\

                                            A_ =sqrt( s * ( s - a ) * ( s - b ) * ( s - c ) ); A_;})

                                            int main(){

                                                float a,b,c,s,area;

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

                                                s = S(a, b, c);

                                                area = A(s, a, b, c);

                                                printf("%.3f",area);

                                                return 0;

                                            }

                                            

点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

Allen 4年前 回复TA
提个醒,{}可以作为返回值
例如下面一个例子:

#include <stdio.h>
#define func(a) ({a=a+5; a;})
int main(void)
{
//int i;
//int a = (i=5, ++i);
int a=0;
int b = func(a);
printf("a=%d/n", a);
printf("b=%d/n", b);
return 0;
}

那么

输出:

a=5

b=5

引自https://www.cnblogs.com/jkred369/p/7155788.html