题目简介
杨辉三角,是二项式系数在三角形中的一种几何排列,今天我们通过在屏幕上打印杨辉三角来复习和详解杨辉三角所涉及C语言的相关知识。
代码一览
#include<stdio.h>
void print_pascal_triangle(int n) {
int arr[20][20] = { 0 };
int i = 0;
int j = 0;
//初始化它的外壳
for (i = 0; i <n; i++)
{
arr[i][0] = 1;//每行的第一列肯定都是 1
arr[i][i] = 1;//每行的最后一列肯定都是 1
}
//第三行开始才有我们需要修改的数,所以 i=3开始。
for (i = 3; i <= n; i++)
{
//行数确定了开始确定列,
//是每行数组里的第二个元素下标为 1的开始
//到每行最后一个元素之前
for (j = 1; j < i - 1; j++)
{ // 它加的数是它头顶上的一个数和这个数前面的一个
arr[i - 1][j] = arr[i - 1 - 1][j] + arr[i - 1 - 1][j - 1];
}//i-1的原因是第三行,但数组元素里面下标是2
}
//打印数组里的元素
//n 行 打印 n个数
for (i = 0; i <n; i++)//代表行数
{
//修饰 空格 程序
for (j = 0; j < n - i; j++)
printf(" ");
for (j = 0; j <= i; j++)//代表列数
{
printf("%5d ", arr[i][j]);//多个空格
}
printf("\n");//每打印好一行就换行
}
}
int main()
{
printf("请输入杨辉三角的行数(1~20)>:");
int input = 0;//接受行数
scanf("%d", &input);
print_pascal_triangle(input);
return 0;
}
主函数详解
首先通过输入我们要实现的行数,注意我们在稍后的规定的二维数组的大小为【20】【20】;
主函数主要是实现需要打印杨辉三角的行数的输入以及函数print_pascal_triangle的传值;
核心代码的实现
首先规定了数组的大小以及初始化的实现;
int arr[20][20] = { 0 };
int i = 0;
int j = 0;
第一部分-外包装
我们发现杨辉三角的其实前两行都是1,并且首位都是1;故我们这样规定
//初始化它的外壳
for (i = 0; i <n; i++)
{
arr[i][0] = 1;//每行的第一列肯定都是 1
arr[i][i] = 1;//每行的最后一列肯定都是 1
}
第一行代表二维数组的每一行第一列都为1;
第二行代表二维数组的最后一行第一列都为1,我们可以观察到,杨辉三角中末尾数字1,如为第三行,则在第三行第三列,若为第四行,则在第四行第四列;
第二部分-内在
for (i = 3; i <= n; i++)
{
//行数确定了开始确定列,
//是每行数组里的第二个元素下标为 1的开始
//到每行最后一个元素之前
for (j = 1; j < i - 1; j++)
{ // 它加的数是它头顶上的一个数和这个数前面的一个
arr[i - 1][j] = arr[i - 1 - 1][j] + arr[i - 1 - 1][j - 1];
}//i-1的原因是第三行,但数组元素里面下标是2
}
i=3,因为第三行开始中间的数字才发生变化
arr[i - 1][j] = arr[i - 1 - 1][j] + arr[i - 1 - 1][j - 1];
看这张图
可以清晰的看到:我们以第四行第一个3为例来讲;
其实3的坐标为[3,1],因为数组的首元素为0,则上面表达式其实就是
arr[3][1] = arr[2][1] + arr[2][0]; 则说明这个3先是有上面一行1(2,0),2(2,1)构成
打印就不在这里赘述了;