c++输出杨辉三角形,前10行没问题,超过10行的输出就是全是错的。

 代码:

#include<iostream>
using namespace std;
int main()
{
    int i, j, n;
    cin>>n;
    int a[n][n];
    
    for(i=1;i<=n;i++)
    {
        a[i][1] = 1;
        a[i][i] = 1;
    }
    //每一行第一个和最后一个赋值为1
    for(i=3;i<=n;i++)
    {
        for(j=2;j<=i-1;j++)
        {
            a[i][j] = a[i-1][j-1] + a[i-1][j]; 
        }
    }
    //给其他位置赋值
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=i;j++)
        {
            cout<<a[i][j]<<" "; 
        }
        cout<<endl;
    }
    //输出杨辉三角
} 

10行时:

11行时: 

找不到问题出在哪,请求大神帮助!!! 

数组下标是从0开始的

#include<iostream>
using namespace std;
int main()
{
    int i, j, n;
    cin>>n;
    int a[n][n];
    
    for(i=0;i<n;i++)//每一行第一个和最后一个赋值为1
    {
        a[i][0] = 1;
        a[i][i] = 1;
    }
    
    for(i=2;i<n;i++)//给其他位置赋值
    {
        for(j=1;j<i;j++)
        {
            a[i][j] = a[i-1][j-1] + a[i-1][j]; 
        }
    }
    
    for(i=0;i<n;i++)//输出杨辉三角
    {
        for(j=0;j<=i;j++)
        {
            cout<<a[i][j]<<" "; 
        }
        cout<<endl;
    }
    
} 

的确改成数组改成0开始是对的,但我放弃了每行第一个位置,而且输出10行之前都没问题,就是十行之后就会出错,这个是为什么呢?

我好想知道了什么!!! 

你的做法是数组越界了,比如你定义10个项的数组,那么a[10]就是越界了,它访问到的其实是一个不确定的地址。

在C语言数组越界是允许的,不会报错,但是地址不确定,那么取到的值就不知道是什么,你10行之前都正确,只是刚好取到的值是0,没有影响。10行之后取到的值就不是0,结果就出错了

上面的说法也不是很好,不是地址不确定,是那个地址存储的内容不确定,对我们来说不知道是什么,不一定是0

超过10它就不行了,定义一个数组a[n][n],n<=10,a[n][n]能正确赋值并输出,n>10就不行了

可能跟开发工具有关吧,我这边11也可以

 嗯嗯嗯,感谢~