原题链接:[编程入门]宏定义练习之三角形面积
解题思路:
刚开始学的小白,个人把宏定义理解成和函数差不多的东西,这样在定义的时候就可以随意改变参数并且不会出错
注意事项:
看翁恺老师视频的时候老师一再强调
①带参数的宏一定要加括号
②整个值要加括号,参数出现的地方都要加括号
这样就不会被优先级所影响出现一些错误。
比如我们写一个程序来计算(a+b)*5的结果
#include#include#define s(a,b) a+b int main(){ int a = 5; int b = 9; printf("%d",s(a,b)*5); return 0; }
按照理解,这个程序的结果应该是5+9然后*5=70,但是实际编译器输出的结果是
我们可以在编译代码时使用gcc file.c --save-temp,查看生成的file.i文件的最后几行
可以看到实际是把整个宏定义的参数直接带入,而在没有给整个参数值加括号就会导致计算出错。程序并没有把宏所定义的参数自动的看成一个整体
正确代码应该是
#include#include#define s(a,b) ((a)+(b)) int main(){ int a = 5; int b = 9; printf("%d",s(a,b)*5); return 0; }
最后强调
①带参数的宏一定要加括号
②整个值要加括号,参数出现的地方都要加括号
参考代码:(我并没有给所有参数都加括号 。。。这并不符合上面所写的强调,主要是如果全部加括号我就乱了。。大家根据情况自行调节)
#include#include#define S(a,b,c) ((a+b+c)/2) #define area(S,a,b,c) (sqrt(S*(S-a)*(S-b)*(S-c))) int main(){ double a,b,c; scanf("%d %d %d",&a,&b,&c); double s = S(a,b,c); double m = area(s,a,b,c); printf("%.3lf",m); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复