练习的目的是分配tartar三角形的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;
}
*(*(a+i-1)+j)
不等于 a[-1] 因为你在上面的循环中声明了 int i=0
吗?
所以,我拿了塔尔塔利亚的三角形,我打开VS Code,我写了一个算法(现在是晚上,我是初学者,不要尖叫)。我希望它可以帮助你。
代码前的几个注释:
tartaglia
函数只分配需要的数字,但为了更简单的代码,您可以填充整个矩阵。stampa
函数打印实际的行,因此它沿对角线遍历矩阵。这是一个有效的基本程序,所以你有一个工作的基础。删除无用的内容并根据需要进行修改。
#include <stdio.h>
#include <stdlib.h>
void tartaglia(int **matrix, int x){
int k=x-1; // I'm initializing only values I'll print, so the number of columns decreases for each row
for (int i=1; i<x-1; i++){
for (int j=1; j<k; j++){
matrix[i][j] = (matrix[i][j-1]) + (matrix[i-1][j]); // sums the two values above in the triangle
}
k--;
}
}
void stampa(int **matrix, int x){
for (int line=0; line<x; line++){ //lines to print (go from 0 to x-1)
int i = line;
int j = 0;
printf("\n");
for (int z=0; z<=line; z++){ // z= numbers in each line
printf("%d ", matrix[i][j]);
i--;
j++;
}
}
}
int main(){
int x;
//prompting input x, will be size of matrix (x*x)
printf("Inserisci x:");
scanf("%d", &x);
//dynamically allocating pointer of pointers
int **matrix = (int**) malloc(x*sizeof(int*));
for (int i=0; i<x; i++){
matrix[i] = (int *) malloc(x*sizeof(int));
for (int j=0; j<x; j++){
matrix[i][j] = 1; // just initializing the whole matrix
}
}
tartaglia(matrix, x); //this function actually puts the values into the matrix
stampa(matrix, x); //this function prints the values
}
如有任何疑问,请随时提出。