基于面积对三角形进行排序的C程序


假设我们有一个包含不同三角形的数组,其中triangles[i] = [ai, bi, ci] 表示第i个三角形的边长。我们需要根据它们的面积对这些三角形进行排序。使用边长计算三角形面积的公式为:p*(p-a)*(p-b)*(p-c)的平方根,其中p = (a+b+c)/2。

因此,如果输入为 (7, 24, 25), (5, 12, 13), (3, 4, 5),则输出将为 (3, 4, 5), (5, 12, 13), (7, 24, 25)

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个包含边长a、b和c的三角形对象。
  • 定义一个名为square()的函数,它将接收一个Triangle类型的参数t。
  • a := t.a
  • b := t.b
  • c := t.c
  • 返回 (a + b + c) * (a + b - c) * (a - b + c) * (-a + b + c)
  • 在主方法中,执行以下操作:
  • 初始化 i := 0,当 i < N 时,更新(i 加 1),执行以下操作:
    • 初始化 j := i + 1,当 j < N 时,更新(j 加 1),执行以下操作:
      • 如果 square(a[i]) > square(a[j]),则
        • 交换 a[i] 和 a[j]

示例

让我们看看下面的实现来更好地理解:

Open Compiler
#include <stdio.h> #define N 3 struct Triangle{ int a, b, c; }; int square(struct Triangle t){ int a = t.a, b = t.b, c = t.c; return (a + b + c)*(a + b - c)*(a - b + c)*(-a + b + c); } void solve(struct Triangle* a){ for (int i = 0; i < N; i++) for (int j = i + 1; j < N; j++) if (square(a[i]) > square(a[j])){ struct Triangle temp = a[i]; a[i] = a[j]; a[j] = temp; } } int main(){ struct Triangle triangles[N] = {{7, 24, 25}, {5, 12, 13}, {3, 4, 5}}; solve(triangles); for (int i = 0; i < N; i++){ printf("(%d, %d, %d)", triangles[i].a, triangles[i].b, triangles[i].c); } }

输入

{{7, 24, 25}, {5, 12, 13}, {3, 4, 5}}

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

(3, 4, 5)
(5, 12, 13)
(7, 24, 25)

更新于: 2021年10月8日

666 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告