题目要求我们设三个不同直线的二位坐标,怎么设呢?如果使用二位数组,那么就太麻烦了,连输入都要写个循环,我这破脑子,可没功夫想那么多。这一题只需要3个坐标,我们就可以写的简单一点(投机取巧):
double line_1_a = 0, line_1_b = 0, line_1 = 0;
double line_2_a = 0, line_2_b = 0, line_2 = 0;
double line_3_a = 0, line_3_b = 0, line_3 = 0;
line_n代表两点之间的长度,line_n_a/b代表坐标两边的值。
line_n是待会我们要用函数算出来的,肯定是不用输入。那么接下来,就是对坐标的输入:
cin >> line_1_a >> line_1_b;
cin >> line_2_a >> line_2_b;
cin >> line_3_a >> line_3_b;
完了输入,接下来就是对坐标进行运算,最终得出的数就是两点之间的长度。考虑到这一段代码会重用3次,所以写了个函数:
double get_line(double n, double m, double x, double y)
{
double line = 0;
line = sqrt(abs((n - x) * (n - x)) + abs((m - y) * (m - y)));
return line;
}
n,m,x,y是用来表示两个坐标的,n和m代表第一个坐标,x和y代表第二个坐标。坐标输进去了,接下来就是处理坐标。处理坐标的算式细心的同学可能已经在题目中发现了,没错,就是dis什么什么的。至于abs的作用,假如n - x = -1,这就会导致程序出错,使用绝对值函数就可以把-1变成1了。
函数写完了,把函数返回的值输进对应的变量里面,就得到了三角形三边长度,把它们加起来就得到周长了。结果保留两位小数,使用printf("%.2lf", ...);就可以解决了。
当当!大功告成!
代码:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstdio>
using namespace std;
double get_line(double n, double m, double x, double y)
{
double line = 0;
line = sqrt(abs((n - x) * (n - x)) + abs((m - y) * (m - y)));
return line;
}
int main()
{
double line_1_a = 0, line_1_b = 0, line_1 = 0;
double line_2_a = 0, line_2_b = 0, line_2 = 0;
double line_3_a = 0, line_3_b = 0, line_3 = 0;
cin >> line_1_a >> line_1_b;
cin >> line_2_a >> line_2_b;
cin >> line_3_a >> line_3_b;
line_1 = get_line(line_1_a, line_1_b, line_2_a, line_2_b);
line_2 = get_line(line_1_a, line_1_b, line_3_a, line_3_b);
line_3 = get_line(line_2_a, line_2_b, line_3_a, line_3_b);
double sum = line_1 + line_2 + line_3;
printf("%.2lf", sum);
cout << endl;
system("pause");
return 0;
}