解题思路:
宏定义的本质只是替换,类似内联函数。所以实际上有无参数,对预处理器和编译器来讲,都是一样的,所谓参数只是增强人类观感和提高易读性。
参考代码即可看到,实际上,只需要是宏定义 ||字符序列|| 中所用到的参数,在 ||标识符|| 之前出现,对于编译器来讲,就是一个符合规则的宏定义。否则的话,就出现了在声明之前调用变量的情况。
可以试一试把宏定义全部替换成目标字符序列,再看一看代码有什么不一样。
参考代码中未有参数,主函数中仅声明了a,b,c作为三边。
参考代码:
#include<math.h>
#include <stdio.h>
#define S (a+b+c)*0.5
//将 S (大写) 定义为 (a+b+c)*0.5
#define area sqrt(S*(S-a)*(S-b)*(S-c))
//将 area 定义为 sqrt(S*(S-a)*(S-b)*(S-c)) 因为先定义S,所以这里可以直接使用,且主函数亦无须考虑S
int main(void){
float a,b,c;
scanf("%f%f%f",&a,&b,&c);
printf("%.3f",area);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复