代码:
#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也可以
嗯嗯嗯,感谢~