解题思路:


宏定义的本质只是替换,类似内联函数。所以实际上有无参数,对预处理器和编译器来讲,都是一样的,所谓参数只是增强人类观感和提高易读性。

参考代码即可看到,实际上,只需要是宏定义 ||字符序列|| 中所用到的参数,在 ||标识符||  之前出现,对于编译器来讲,就是一个符合规则的宏定义。否则的话,就出现了在声明之前调用变量的情况。


可以试一试把宏定义全部替换成目标字符序列,再看一看代码有什么不一样。


参考代码中未有参数,主函数中仅声明了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分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论