声明:题目来自某211陈年题库,新手写文,大佬请多指教
题目描述
根据三角形的三条边a,b,c,计算三角形的面积,三角形三条边满足条件:任意两边之和大于第三边,并且任意两边之差小于第三边。
从in.txt读取三角形的三条边,计算输出其面积到out.txt,如果不是三角形的三条边则输出-1。三角形面积S=√[p(p-a)(p-b)(p-c)],其中p为半周长,p=(a+b+c)/2。
三条边的长度为float,面积为float。
如:in.txt
3 4 5
34 54 56
5 67 7
89 78 97
9 8 26
则:out.txt
6
887.676
-1
3275.31
-1
核心思路:1.文件流读取数据 2.利用三角形三边关系判断数据 3.如数据符合关系,则计算出三角形面积;否则返回-1表示数据错误;4.文件流输出面积
思路中的2-3步通过定义一个函数实现:
float fun(float a,float b,float c)//求a,b,c三条边组成三角形面积
{
if(a+b>c&&b+c>a&&a+c>b)//判读三边关系
{
float p=(a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));/*利用海伦公式求解,
sqrt是cmath的成员函数
用于求解算数平方根,也可以用pow()函数代替*/
}
else
return -1;//不符合,返回-1,表示计算未进行
}
再加上文件流部分;
全部代码
#include <fstream>
#include <cmath>
using namespace std;
float fun(float a,float b,float c)//求a, b,c三条边组成三角形面积
{
if(a+b>c&&b+c>a&&a+c>b){
float p=(a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
else
return -1;
}
int main()
{
ifstream inf("in.txt");
ofstream outf("out.txt");
int a,b,c;
while(inf>>a>>b>>c)//判断数据是否读到末尾;若无数据,则判断为False;读取结束
outf<<fun(a,b,c)<<endl;
return 0;
}