weixin_46147489 2021-01-31 11:28 采纳率: 100%
浏览 137
已结题

在C语言中用二维数组输出直角杨辉三角形,数组的初始化与否为何会影响数组的输出结果?

大神们好!!

问题如题所示。

  • 首先,可以正确输出数组结果的代码如下:
  • #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

  • 写回答

8条回答

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 C/C++程序详细注解
      • ¥30 django项目,配值nginx 和 awsgi ,POST 不起作用,请教!
      • ¥15 数据集形式转换,将下面转换成上面的形式
      • ¥15 pmp项目管理干系人分析
      • ¥15 请问DenseNet图像输入大小是否是固定的?
      • ¥15 template模板的参数问题
      • ¥15 查找处理学生信息问题,含多个文件,显示问题是无法调用其中一个文件
      • ¥15 simulink生成代码后提示告警
      • ¥16 jieba提取高频词,生成文件是空的
      • ¥15 怎么读取服务器中的文件去配置mongo的连接