杨辉三角形按我的理解来说就是一个两边都是1,内部的每个数都是其上面两个数的和。所以用C语言实现printf这个三角形最好使用二维数组。a[i][0]=1;a[i][i]=1;就实现了两边都是1。从第2行(第0行,第1行,第二行。。。第i行)依次第1列(第0列,第1列,第2列。。。第j列)a[i][j]=a[i-1][j-1]+a[i-1][j];就实现了三角形内部数组的迭代。然后依次打印第i行的第0列到第j列(j=i)。我的代码是打印到第10行。 具体C代码如下:
#include<stdio.h> int main()
{
int a[10][10]={};
int i;
for(i = 0;i <10;i++)
{
a[i][0] = 1;
a[i][i] = 1; } int j;
for(i = 2;i <10;i++)
{
for(j = 1;j < i;j++)
a[i][j] = a[i – 1][j – 1] + a[i – 1][j]; } for(i = 0;i < 10;i++)
{
for(j = 0;j < i + 1;j++)
printf(“%d “,a[i][j]);
printf(“\n”);
}
}
这段代码是经过很多次修改后的正确打印结果,中间过程遇到过几个问题。我分析了一下,主要考察的是C语言中很重要的迭代思想和对数组下标的理解。1.因为计算机可以很快完成很多次的重复工作,和数学期望的理解差不多,只要找到第N次与第N+1次之间的关系就可以完成迭代。2.数组在开始学习的时候总忘记是从第0行和第0列开始,对for语句来说是i<=n,还是i<n还是i<n+1需要具体问题具体分析。3.一个问题拿来应该对问题具体分析,最好可以画流程图,找到各个数据对应的关系。最后编译出现问题需要对每个流程进行复查,如这一题。我刚开始以为是printf那个for语句有问题,然后再查是填入数组数据那个for语句有问题。