PTA预编译中的宏定义:求平行四边形面积

已知平行四边形面积函数的原型如下:

函数原型
double ParaArea(double base, double height);

说明:参数 base 和 height 分别为平行四边形的底和高,函数值为平行四边形的面积。

请在空白处填写适当内容,用带参数的宏替换命令来实现相同的功能。

裁判程序
#include 

__________

int main()

{ double a, b, c;

scanf("%lg%lg", &a, &b);

c = ParaArea(a, b);

printf("%g\n", c);

return 0; }

注:裁判程序有很多,不止一个。

输入样例
2.5 1.4

输出样例
3.5

解题代码很简单:

#define ParaArea(a,b) ((a)*(b)*1.0)

 不过即使这样,这道题仍有可注意之处:

它scanf和printf中用的是%lg和%g,这是啥?

%lg和%g都是C语言中的格式化输出符号,用于输出浮点数。其中,%lg可以自动选择以实数形式输出,或者是以科学计数法输出,而%g则会根据数值的大小自动选择以实数形式输出,或者是以科学计数法输出

在这道题中,%lg和%g的作用是相同的,都是用于读取输入的浮点数。具体来说,%lg可以读取任意类型的浮点数,包括float、double和long double,而%g只能读取float和double类型的浮点数

那么,为什么要加1.0呢?

这是因为在C语言中,除法运算的结果可能是整数,而我们需要将其转换为浮点数。如果我们不乘以1.0,那么结果就会被截断为整数,从而导致精度丢失。

总而言之,这道题确实一开始容易让人摸不着头脑,因为它没太说清楚我们要干什么,在此多谢好友迟暮的代码分享,也希望能帮到更多的人。

你可能感兴趣的:(算法,数据结构,c语言,开发语言,PTA)