用 C 语言计算多边形的周长

CBeginner
立即练习

简介

在本实验中,你将学习如何用 C 语言计算多边形的周长。本实验涵盖以下步骤:将边长读入数组、对所有边求和以及打印周长。你将创建一个程序,允许用户输入多边形各边的长度,将它们存储在一个数组中,然后通过将所有边长相加来计算周长。

本实验提供了一份详细的分步指南,包括示例代码,以帮助你理解并在 C 语言中实现多边形周长的计算。在实验结束时,你将拥有一个能计算最多 10 条边的多边形周长的可运行程序。

将边长读入数组

在这一步中,你将学习如何在 C 语言中把多边形的边长读入数组,以便计算其周长。我们将创建一个程序,允许用户输入多边形各边的长度,并将它们存储在一个数组中。

首先,在项目目录中创建一个 C 源文件:

cd ~/project
nano polygon_perimeter.c

现在,输入以下代码:

#include <stdio.h>

#define MAX_SIDES 10

int main() {
    float sides[MAX_SIDES];
    int num_sides;

    // 提示用户输入边数
    printf("Enter the number of sides in the polygon (max %d): ", MAX_SIDES);
    scanf("%d", &num_sides);

    // 输入边长
    printf("Enter the lengths of the sides:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Side %d length: ", i + 1);
        scanf("%f", &sides[i]);
    }

    // 打印输入的边长
    printf("\nSide lengths entered:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Side %d: %.2f\n", i + 1, sides[i]);
    }

    return 0;
}

编译程序:

gcc -o polygon_perimeter polygon_perimeter.c

运行程序:

./polygon_perimeter

示例输出:

Enter the number of sides in the polygon (max 10): 4
Enter the lengths of the sides:
Side 1 length: 5.5
Side 2 length: 6.2
Side 3 length: 4.3
Side 4 length: 7.1

Side lengths entered:
Side 1: 5.50
Side 2: 6.20
Side 3: 4.30
Side 4: 7.10

让我们来分析一下代码的关键部分:

  • #define MAX_SIDES 10 设置了边数的最大限制
  • float sides[MAX_SIDES] 创建一个数组来存储边长
  • scanf() 用于读取边数和各条边的长度
  • 使用 for 循环来输入并显示边长

计算所有边长之和

在这一步中,你将修改上一个程序,通过计算多边形所有边长之和来得出其周长。

打开现有文件:

cd ~/project
nano polygon_perimeter.c

用周长计算更新代码:

#include <stdio.h>

#define MAX_SIDES 10

int main() {
    float sides[MAX_SIDES];
    int num_sides;
    float perimeter = 0.0;

    // 提示用户输入边数
    printf("Enter the number of sides in the polygon (max %d): ", MAX_SIDES);
    scanf("%d", &num_sides);

    // 输入边长
    printf("Enter the lengths of the sides:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Side %d length: ", i + 1);
        scanf("%f", &sides[i]);
    }

    // 通过将所有边长相加来计算周长
    for (int i = 0; i < num_sides; i++) {
        perimeter += sides[i];
    }

    // 打印边长和周长
    printf("\nSide lengths entered:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Side %d: %.2f\n", i + 1, sides[i]);
    }

    // 显示计算出的周长
    printf("\nPerimeter of the polygon: %.2f\n", perimeter);

    return 0;
}

编译更新后的程序:

gcc -o polygon_perimeter polygon_perimeter.c

运行程序:

./polygon_perimeter

示例输出:

Enter the number of sides in the polygon (max 10): 4
Enter the lengths of the sides:
Side 1 length: 5.5
Side 2 length: 6.2
Side 3 length: 4.3
Side 4 length: 7.1

Side lengths entered:
Side 1: 5.50
Side 2: 6.20
Side 3: 4.30
Side 4: 7.10

Perimeter of the polygon: 23.10

此步骤中的关键更改:

  • 添加了一个 perimeter 变量来存储边长的总和
  • 引入了一个新的 for 循环,通过将所有边长相加来计算周长
  • 添加了一条打印语句来显示计算出的周长

打印周长

在这最后一步中,你将通过添加格式化输出以及输入验证的错误处理来增强多边形周长计算程序。

打开现有文件:

cd ~/project
nano polygon_perimeter.c

用改进后的输入验证和格式化输出更新代码:

#include <stdio.h>

#define MAX_SIDES 10
#define MIN_SIDES 3

int main() {
    float sides[MAX_SIDES];
    int num_sides;
    float perimeter = 0.0;

    // 通过输入验证提示用户输入边数
    do {
        printf("Enter the number of sides in the polygon (between %d and %d): ",
               MIN_SIDES, MAX_SIDES);
        scanf("%d", &num_sides);

        if (num_sides < MIN_SIDES || num_sides > MAX_SIDES) {
            printf("Invalid number of sides. Please try again.\n");
        }
    } while (num_sides < MIN_SIDES || num_sides > MAX_SIDES);

    // 输入边长并进行验证
    printf("Enter the lengths of the sides:\n");
    for (int i = 0; i < num_sides; i++) {
        float side_length;
        do {
            printf("Side %d length (must be positive): ", i + 1);
            scanf("%f", &side_length);

            if (side_length <= 0) {
                printf("Invalid side length. Please enter a positive value.\n");
            } else {
                sides[i] = side_length;
                break;
            }
        } while (1);
    }

    // 通过将所有边长相加来计算周长
    for (int i = 0; i < num_sides; i++) {
        perimeter += sides[i];
    }

    // 结果的格式化输出
    printf("\n--- 多边形周长计算 --- \n");
    printf("边数:%d\n", num_sides);

    printf("\n边长:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("边 %d: %.2f\n", i + 1, sides[i]);
    }

    printf("\n周长计算:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("%s%.2f", (i > 0)? " + " : "", sides[i]);
    }
    printf(" = %.2f\n", perimeter);

    printf("\n最终周长:%.2f\n", perimeter);

    return 0;
}

编译更新后的程序:

gcc -o polygon_perimeter polygon_perimeter.c

运行程序:

./polygon_perimeter

示例输出:

Enter the number of sides in the polygon (between 3 and 10): 4
Enter the lengths of the sides:
Side 1 length (must be positive): 5.5
Side 2 length (must be positive): 6.2
Side 3 length (must be positive): 4.3
Side 4 length (must be positive): 7.1

--- 多边形周长计算 ---
边数: 4

边长:
边 1: 5.50
边 2: 6.20
边 3: 4.30
边 4: 7.10

周长计算:
5.50 + 6.20 + 4.30 + 7.10 = 23.10

最终周长: 23.10

此步骤中的关键改进:

  • 对边数和边长添加了输入验证
  • 创建了更详细且格式化的输出
  • 包含了逐步的周长计算显示
  • 确保了边数的最小和最大限制

总结

在本实验中,你将学习如何把多边形的边长读入数组,将所有边长相加来计算周长,并打印结果。首先,你将提示用户输入边数和每条边的长度,把边长存储在一个数组中。然后,你将把所有边长相加来计算多边形的周长。最后,你将打印计算出的周长。

关键步骤包括使用 scanf() 读取用户输入,将边长存储在数组中,遍历数组以对边长相加,以及打印最终结果。