C语言实现动态开辟存储杨辉三角
杨辉三角又称帕斯卡三角,它是一个非常有趣的数学问题。杨辉三角如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
杨辉三角的每个数是它上方两个数的和。实现杨辉三角的一个方法是使用二维数组。然而,如果输入的行数较大,这将导致浪费大量的内存。因此,我们需要动态地分配内存。在这个教程中,我们将学习如何使用 C 语言来实现动态分配内存的杨辉三角。
步骤 1:获取行数
首先,我们需要从用户处获取需要生成杨辉三角的行数。可以使用以下代码实现:
int inputRows() {
int rows;
printf("请输入杨辉三角的行数:");
scanf("%d", &rows);
return rows;
}
这个函数会提示用户输入一个数字,并将其作为结果返回。
步骤 2:动态分配内存
我们可以使用以下代码来动态分配内存:
int **allocateMemory(int rows) {
int **triangle = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
triangle[i] = (int *)malloc((i + 1) * sizeof(int));
}
return triangle;
}
这个函数会使用 malloc()
函数来为杨辉三角分配内存。它首先分配一个大小为 rows * sizeof(int *)
的内存块,用于存储 rows
个指向每一行数组的指针。然后它遍历每一行,为每一行分配大小为 (i + 1) * sizeof(int)
的内存块,其中 i
是当前行数。
步骤 3:填充杨辉三角
现在,我们已经准备好填充杨辉三角了。可以使用以下代码来填充杨辉三角:
void populateTriangle(int **triangle, int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
triangle[i][j] = 1;
} else {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
}
}
}
这个函数会使用两个嵌套的循环来遍历每一行,以及每一行中的每一个元素。如果元素在第一列或最后一列,那么它是 1。否则,它是上一行中相邻两个元素之和。
步骤 4:输出杨辉三角
最后,我们可以使用以下代码来输出杨辉三角:
void printTriangle(int **triangle, int rows) {
printf("杨辉三角如下所示:\n\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j <= i; j++) {
printf("%d ", triangle[i][j]);
}
printf("\n");
}
}
这个函数会打印生成的杨辉三角。
示例
以下是一个使用上述代码生成杨辉三角的示例。
int main() {
int rows = inputRows();
int **triangle = allocateMemory(rows);
populateTriangle(triangle, rows);
printTriangle(triangle, rows);
return 0;
}
输入 5
,可以得到以下输出:
Enter the number of rows: 5
杨辉三角如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
输入 10
,可以得到以下输出:
Enter the number of rows: 10
杨辉三角如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
总结
在本教程中,我们学习了如何使用 C 语言实现动态分配内存的杨辉三角。我们使用 malloc()
函数动态分配内存,然后使用嵌套循环来填充和输出杨辉三角。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现动态开辟存储杨辉三角 - Python技术站