## 题目描述
一个三角形的三边长分别是 a、b、c,那么它的面积为 ,其中 。输入这三个数字,计算三角形的面积,四舍五入精确到1位小数。
## 输入格式
第一行输入三个实数 a,b,c,以空格隔开。
## 输出格式
输出一个实数,表示三角形面积。精确到小数点后1位。
## 样例 #1
### 样例输入 #1
3 4 5
### 样例输出 #1
6.0
## 提示
数据保证能构成三角形,,每个边长输入时不超过2位小数。
解答:
#include<stdio.h>
#include<cmath>
double Change(double x){
double y=floor(x)+round((x-floor(x))*10)/10;
return y;
}
int main(){
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c);
double p=0.5*(a+b+c);
double s=sqrt(p*(p-a)*(p-b)*(p-c));
double ss=Change(s);
printf("%.1lf",ss);
return 0;
}
涉及到<cmath>里的函数
- sqrt(x):返回x的平方根。 如果参数为负,则会发生域错误。
- ceil(x):向上取整,返回不小于x的最小整数值。
- floor(x):向下取整,返回不大于x的最大整数值。
- round(x):返回最接近x的整数值,中间情况从零开始四舍五入。
ceil of 2.3 is 3.0
ceil of -2.3 is -2.0floor of 2.3 is 2.0
floor of -2.3 is -3.0
为了实现题目要求的四舍五入精确到1位小数,写了Change函数
由于笔者一开始用的float,精度不够,有一个测试点没有过,便改用了double
<cmath>其他函数参见: