这段代码麻烦解释下C++

来源:百度知道 编辑:UC知道 时间:2024/05/30 03:37:24
#include <iostream>
using namespace std;
void main()
{
const int n=10;
int a[n][n];
int i,j;
for (i=0;i<n;i++)
{
for (j=0;j<=i;j++)
{
if (j==0||j==i)
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];//这里是如何相加的?a[i-1][j-1]+a[i-1] 数组是如何相加的?他又是如何得到一个值的?好茫然
}
cout<<a[i][j]<<"\t";
}
cout<<"\n\n";
}
}
他是怎么输出的数字的 麻烦解释清楚点哦 。关键是 没有初始化的二维数组 ,每次的来的值是如何计算出来的。
谢谢大家了 我明白了 主要是我是在一个一个的算 不是直接看结果 我一直在脑海中一个一个的向下计算。我忘记数组是从0开始的了 所以一直没想通 而且我算到 这一步的时候 a[i][j]=a[i-1][j-1]+a[i-1][j]; 一直不知道 a[i-1][j-1] 是咋回事,后来看到这位大侠的知道了。其实他就是上面的值上面的元素已经被算出来了 相当于 在进入这个表达式的时候 我们已经计算到 i=2 j=1 的时候了 也就是已经知道了以下这些书
1
1 1
1 //因为 C++中是不可能存在 一行一列的元素的 所以这里我们必须看做是 a[2][1]={1,1}
我们可以通过表达式 的值a[1][0] a[1][1] 。但是为题也随之来了
如下
最后一个问题 ,
为什么
void main()
{
in

关键在于两重循环里
if(j==0 || j==i)
{
a[i][j]=1; //此句就是所用到的所有值的初始化
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];//当j!=0 or j!=i时j-1一定等于0且i-1
//一定等于i
}
其实是一个塔形的数组,值为上一层的相邻两个值的和。

a[2][1]={1,1}就是二行一例的二维数组,在C++中使用时下标都是从0开始的,由于只有一例,所以你的a[1][1]后面那个[1]已经超出了数组的范围了,所以会报错。你可以试试a[0][0],a[1][0],都是有值的

if (j==0||j==i)
这里就算是个初始化。 虽然不是整个初始化了, 但是 a[0]这一行都初始化成1了

a[i][j]=a[i-1][j-1]+a[i-1][j]; 看清楚 这不是数组相加,而是二维数组里的两个元素相加

看了半天感觉你是根本没搞清楚语法, a[2][1]是啥意思? 不是个2行1列的数组, 而是二维数组a的第二行第一列的那个数据

好好看语法书去吧, 语法都搞不清的话就算有人给你解释问题你也还是弄不懂

if (j==0||j==i)
{
a[i][j]=1;
}

注意,这里有初始化值,这句的意思就是,每一行的第一列的值是1,同时行数和列数相同的值是1
同时for (j=0;j<=i;j++)
并不是j<=n,所以,是可以计算的。
其实是一个塔形的数组,值为上一层的相邻两个值的和。

回答你补充的问题:
你的声明有问题
int a[2][1]={1,1}; 这个声明的结果是
a[0][0] = 1
a[0][1] = null
a[1][0] = 1
a[1][1] = null
所以,只有a[0][0]和a