这个练习的目的是分配牙垢三角形的n条线。我的想法是使用指针到指针来分配它。然而,当运行过程以这种方式结束:进程结束于
代码如下:
#include <stdio.h>
#include <stdlib.h>
int somma (int x) {
int sum=0;
for (int i=0; i<=x; i++) {
x=x-i;
sum+=x;
}
return sum;
}
void stampa (int **a, int x) {
*(*(a+0)+0)=1;
for (int j=1; j<x; j++) {
*(*(a+0)+j)=0;
}
for (int i=1; i<x; i++) {
*(*(a+i)+0)=1;
for (int j=1; j<x; j++) {
*(*(a+i)+j)=*(*(a+i-1)+j-1)+*(*(a+i-1)+j);
}
}
for (int i=0; i<x; i++) {
for (int j=0; j<=i; j++ ) {
printf(" %3d", *(*(a+i)+j));
}
printf("\n");
}
}
int main() {
int x, **mat=NULL;
printf("Inserisci x:"); //insert x.
scanf("%d", &x);
int sum=somma(x);
mat=(int**)malloc(sum*sizeof(int*));
if (mat==NULL) {
return 1;
}
stampa(mat, x); //print function.
return 0;
}
2条答案
按热度按时间pbpqsu0x1#
既然您在上面的循环中声明了
int i=0
,*(*(a+i-1)+j)
不等于a[-1]吗?2nc8po8w2#
所以,我用了塔尔塔利亚的三角形,我打开了VS代码,我写了一个算法(现在是晚上,我是个初学者,不要尖叫)。我希望它能帮助你。在代码之前有几个注意事项:
1.我使用方括号和数组算术,但你可以使用你喜欢的符号,它应该工作相同。
1.算法不会是伟大的或最有效的,但它的工作。
1.程序创建一个x*x矩阵(动态地将数组分配给数组),然后将正确的数字放在正确的位置。
tartaglia
函数只分配所需的数字,但为了更容易地编码,您可以只填充整个矩阵。1.矩阵可以被认为是在你的头向右倾斜后看三角形,所以第一行基本上对应于三角形的右边;然而,
stampa
函数打印的是实际的行,因此它对角地遍历矩阵。这是一个基本的程序,所以你有一个工作的基础。删除无用的,并根据需要修改它。
如有疑问,请随时提出。