二维数组应用——用C语言实现10行等腰杨辉三角

杨辉三角简介

  杨辉三角是中国数学史上的一个伟大成就。它是二项式系数在三角形中的一种几何排列。在欧洲叫被称为帕斯卡三角形。帕斯卡(1623-1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
二维数组应用——用C语言实现10行等腰杨辉三角_第1张图片
  我们把行数定义为n,即第一行为n=1,第二行为n=2,以此类推。我们不难发现如下规律:
  1.每行的第一个数字和最后一个数字为1;
  2.从n=3开始,每个数等于它上方两个数之和,即第(n+1)行的第m个数等于第n行的第(m-1)个数和第m个数之和;
  3.第n行的数字有n项,第m个数和第(n-m+1)个数相等。
  接下来,我们先利用C语言的二维数组的相关知识,试着打印出一个10行直角杨辉三角吧。

10行直角杨辉三角

  我们刚刚已经分析了杨辉三角的相关性质,接下来我们用C语言先来编写一个直角的杨辉三角。代码实现如下:

#include 
#define N 10

int main(void)
{
	int arr[N][N] = { 0 };
	int i = 0;
	for (i = 0; i < N; i++)
	{
		int j = 0;
		for (j = 0; j <= i; j++)
		{
			if ((0 == j) || (i == j))
				arr[i][j] = 1;
			else
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

  输出结果如下:

   1
   1   1
   1   2   1
   1   3   3   1
   1   4   6   4   1
   1   5  10  10   5   1
   1   6  15  20  15   6   1
   1   7  21  35  35  21   7   1
   1   8  28  56  70  56  28   8   1
   1   9  36  84 126 126  84  36   9   1

从直角三角形到等腰三角形的进阶

  我们已经成功写出了直角杨辉三角。接下来,我们来试着在它的基础上修改一下代码,让它能打印出等腰杨辉三角。
  我们之前用C语言写过打印金字塔图形的程序。想要打印出等腰的金字塔图形,就要找出一些规律,通过控制行与列来控制何时打印空格,何时打印星号。实现从直角杨辉三角到等腰杨辉三角的进阶也是同样的道理,我们要试图控制空格的输出,来达到等腰三角形的效果。
  最终用C语言实现如下:

#include 
#define N 10

int main(void)
{
	int arr[N][N] = { 0 };
	int i = 0;
	for (i = 0; i < N; i++)
	{
		int m = 0;
		for (m = 0; m < N - i; m++)
			printf("  ");
		int j = 0;
		for (j = 0; j <= i; j++)
		{
			if ((0 == j) || (i == j))
				arr[i][j] = 1;
			else
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

  输出结果如下:

                       1
                     1   1
                   1   2   1
                 1   3   3   1
               1   4   6   4   1
             1   5  10  10   5   1
           1   6  15  20  15   6   1
         1   7  21  35  35  21   7   1
       1   8  28  56  70  56  28   8   1
     1   9  36  84 126 126  84  36   9   1

写在最后

  以上就是关于用C语言实现等腰杨辉三角的全部内容。如果有什么更好的想法,欢迎大家留言讨论。
  我的邮箱:[email protected]
  参考资料:百度百科【杨辉三角】(链接:link)

你可能感兴趣的:(C语言)