C语言实现-杨辉三角(详解解析-知识点总结)

文章详细介绍了如何使用C语言编程打印杨辉三角,包括初始化二维数组,设置边界值,以及计算中间元素的逻辑。核心代码在于通过循环结构计算每一行的元素值,利用上一行的元素相加得到当前行的元素。最后,通过打印数组元素展示杨辉三角的形状。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目简介

d2f425bd61f8476097a47e21a70cb130.png

 杨辉三角,是二项式系数在三角形中的一种几何排列,今天我们通过在屏幕上打印杨辉三角来复习和详解杨辉三角所涉及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];

看这张图

d2f425bd61f8476097a47e21a70cb130.png

 可以清晰的看到:我们以第四行第一个3为例来讲;

其实3的坐标为[3,1],因为数组的首元素为0,则上面表达式其实就是

arr[3][1] = arr[2][1] + arr[2][0];  则说明这个3先是有上面一行1(2,0),2(2,1)构成


打印就不在这里赘述了;


 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值