大神们好!!
问题如题所示。
- 首先,可以正确输出数组结果的代码如下:
-
#include<stdio.h> int main(void) { int m,n; int a[20][20]; //数组初始化 for(m=0;m<20;m++){ for(n=0;n<20;n++){ a[m][n]=0; } } int row; printf("please input row number:"); scanf("%d",&row); //通过输入指定输出的三角形行数 int i,j; //声明行、列下表变量 for(i=0;i<row;i++){ //外循环,控制行 for(j=0;j<=i;j++){ //内循环,控制列,循环条件为元素的列下标小于等于元素的行下标 if(j==0||i==j){ //垂直边和斜边为1的条件 a[i][j]=1; }else{ a[i][j]=a[i-1][j-1]+a[i-1][j];//除了垂直边和斜边的元素 } printf("%4d",a[i][j]); //输出 } printf("\n"); } return 0; }
- 正确的输出结果
-
- 然后我把数组初始化的这一部分代码删掉,只定义二维数组:
-
#include<stdio.h> int main(void) { int row; printf("please input row number:"); scanf("%d",&row); //通过输入指定输出的三角形行数 int i,j; //声明行、列下表变量 int a[i][j]; //定义二维数组 for(i=0;i<row;i++){ //外循环,控制行 for(j=0;j<=i;j++){ //内循环,控制列,循环条件为元素的列下标小于等于元素的行下标 if(j==0||i==j){ //垂直边和斜边为1的条件 a[i][j]=1; }else{ a[i][j]=a[i-1][j-1]+a[i-1][j];//除了垂直边和斜边的元素 } printf("%4d",a[i][j]); //输出 } printf("\n"); } return 0; }
- 然后问题来了! TT:
为何从第4行开始,每行的第3个元素到斜边之间元素都是a[i][j]=a[i+1][j-1]+a[i+1][j]?(正确的应该是a[i][j]=a[i-1][j-1]+a[i][j-1])
本人初学小白,望大神们指点,感激不尽! TT