编写函数,构造并返回杨辉三角形的前n项。要求用二维指针的方式返回,由于主调程序预知前n行的结构(第一行:{1},第二行:{1,1},第三行:{1,2,1},第四行:{1,3,3,1}……),故函数只需要返回构造的这个二维数组的首地址,二维数组的行数,每行的列数略去不表。 函数接口定义: int** fun (int n);
时间: 2023-12-05 13:05:52 浏览: 37
回答:
杨辉三角形是一个二维数组,可以使用二维指针来表示。函数fun的返回值为int**类型,表示一个二维数组的首地址。
函数fun的实现如下:
```
int** fun(int n) {
int **arr = (int**)malloc(n * sizeof(int*)); //分配n行内存空间
for(int i=0; i<n; i++) {
arr[i] = (int*)malloc((i+1) * sizeof(int)); //分配每行的内存空间
for(int j=0; j<=i; j++) {
if(j==0 || j==i) //第一列和最后一列为1
arr[i][j] = 1;
else //其他元素为上一行同列和前一列之和
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
return arr;
}
```
函数内部的实现使用了动态内存分配,首先分配n行内存空间,然后分配每行的内存空间,最后按照杨辉三角的规律填充数组元素。
在主函数中,可以使用下面的代码来打印杨辉三角形的前n项:
```
int main() {
int n;
scanf("%d", &n); //输入n的值
int **arr = fun(n); //调用fun函数生成二维数组
for(int i=0; i<n; i++) { //打印杨辉三角形的前n项
for(int j=0; j<=i; j++)
printf("%d ", arr[i][j]);
printf("\n");
}
return 0;
}
```