#3703. 9 月 18 日代码理解

9 月 18 日代码理解

01 #include <bits/stdc++.h>
02 using namespace std;
03
04 typedef struct {
05     double x;
06     double y;
07 } Point;
08
09 Point point init(double x, double y) {
10     Point p;
11     p.x = x;
12     p.y = y;
13     return p;
14 }
15
16 Point point sub(Point a, Point b) {
17     Point p;
18     p.x = a.x - b.X;
19     p.y = a.y - b.y;
20    return p;
21 }
22
23 double cross(Point a, Point b){
24     return a.x * b.y - a.y * b.x;
25 }
26
27 double polygonArea (const vector<Point> v) {
28     double area = cross(v.back(),v.front());
29     for (size ti = 0; i < v.size() - 1; ++i) {
30         area += cross(v[i],v[i+1]);
31     }
32     return area;
33 }
34
35 void solve(int n) {
36     vector<Point> pts(n);
37     for (int i =0; i < n; ++i) {
38         double a, b;
39         cin >> a >> b;
40         pts[i] = point init(a, b);
41     }
42     double area = polygonArea(pts) / 2;
43     cout << fixed << setprecision(1) << fabs(area)<< "\n";
44 }
45
46 int main() {
47     while(true) {
48         int n;
49         cin >> n;
50         if (n == 0) break;
51         solve(n);
52     }
53     return 0;
54 }

判断题

  1. 将第 4242 行改为 double area = polygonArea(pts) >> 1;,程序正常运行。{{ select(1) }}
  • ×
  1. 无论点是按逆时针方向还是按顺时针方向给出,程序都可以计算出正确的结果。{{ select(2) }}
  • ×
  1. 程序可以处理凹多边形而不需要任何修改。{{ select(3) }}
  • ×
  1. polygonArea 的返回值始终为正。{{ select(4) }}
  • ×

选择题

  1. cross 函数的计算结果用于表示{{ select(5) }}
  • 两个点的欧几里得距离
  • 连接两点的直线的斜率
  • 两个向量的点积
  • 两个向量的又积
  1. 对于下面的输入,程序输出是?
  • 3
    1 1
    0 0
    1 0
    

{{ select(6) }}

  • 1.01.0
  • 0.50.5
  • 0.00.0
  • 0.60.6