C语言 实现 杨辉三角 指针版
时间: 2025-01-14 17:44:42 浏览: 36
### C语言使用指针实现杨辉三角
在C语言中,可以利用指针来动态分配内存并构建杨辉三角。下面是一个完整的示例程序,展示了如何通过指针操作完成这一目标。
#### 定义函数创建和释放二维数组空间
为了更好地管理内存,在此定义两个辅助函数用于申请和释放存储区域:
```c
#include <stdio.h>
#include <stdlib.h>
// 创建指定大小的二维整型数组,并返回指向该数组首地址的指针
int **createArray(int rows){
int **array;
array = (int **)malloc(rows * sizeof(int *));
for(int i=0;i<rows;++i){
*(array+i)=(int*)calloc(i+1,sizeof(int));
}
return array;
}
// 释放之前开辟的空间
void freeArray(int **array,int rows){
for(int i=0; i<rows ; ++i)
free(*(array+i));
free(array);
}
```
这段代码实现了动态分配多行不同长度的一维子数组作为每一层的数据容器[^2]。
#### 主逻辑部分:填充数据到杨辉三角结构体中
接下来编写核心算法,按照规则计算各位置处应填入的具体数值:
```c
void fillPascalTriangle(int **triangle, int n) {
for (int line = 0; line < n; line++) {
// 设置每行的第一个元素为1
triangle[line][0] = 1;
// 计算中间值
for (int i = 1; i <= line / 2; i++)
triangle[line][i] = triangle[line - 1][i - 1] + triangle[line - 1][i];
// 利用对称性质设置另一半
for (int i = (line + 1) / 2; i <= line; i++)
triangle[line][i] = triangle[line][line - i];
}
}
```
这里采用了基于前一行的结果逐层累加的方式生成当前行的内容,并且考虑到杨辉三角具有左右两侧相等的特点进行了优化处理。
#### 打印结果展示给用户查看
最后一步就是把得到的结果呈现出来:
```c
void printPascalTriangle(int **triangle, int n) {
for (int line = 0; line < n; line++) {
// 输出适当数量空格使图形居中显示
for (int space = 0; space < n - line - 1; space++)
printf(" ");
// 显示本行所有项
for (int col = 0; col <= line; col++)
printf("%d ", triangle[line][col]);
printf("\n");
}
}
```
上述方法能够有效地控制输出格式,使得最终效果更加美观整齐。
#### 测试整个流程
现在可以把以上各个模块组合起来测试一下整体功能是否正常工作:
```c
int main(){
const int N = 7; // 设定层数
int **pascals_triangle=createArray(N); // 调用函数建立所需矩阵框架
fillPascalTriangle(pascals_triangle,N); // 对其内部赋值形成帕斯卡金字塔形态
printPascalTriangle(pascals_triangle,N); // 将成果可视化呈献于屏幕之上
freeArray(pascals_triangle,N); // 清理不再使用的资源防止泄露发生
return 0;
}
```
这样就完成了使用指针技术实现出一个简单的杨辉三角形案例。
阅读全文
相关推荐













