C语言 杨辉三角

输出杨辉三角的前10行

让我们来看一下什么叫做杨辉三角,我们可以一步一步简化
在这里插入图片描述

分析:
我把解决这个问题分为了三步:

  1. 赋1
  2. 填空
  3. 输出

首先由题目可知我们需要定义一个10*10的二维数组。

第一步赋1是什么意思呢?

  • 观察图像可以知道,首列和尾列都是1,那我们的第一步操作就是对首列和尾列赋值为1。

第二步填空又是什么意思呢?

  • 假设我们已经完成了首列和尾列的赋值,那么中间是不是空缺的。我们的第二步操作就是填补中间空缺的不部分。

第三步输出是啥咧?

  • 我们完成了前两部操作,我们已经把所需要的值全都存放再数组里了,观察这个数组,它是由空格和数组里的数据组成,所以第三步完成的就是它的输出。

(提示:手机用户可以左划代码部分查看注释)

#include "stdio.h"
void main(){
	int i,j;
	int a[10][10];
	
	//对首列和尾列赋值为 1
	for( i=0; i<10; i++){
		a[i][0]=1;
		a[i][i]=1;
	}
	
	//填补中间空缺的地方
	for( i=2 ;i<10;i++){
		for(j=1 ;j<i ;j++){
				a[i][j]=a[i-1][j]+a[i-1][j-1];
		}		
	}
	//输出
	for(i=0; i<10;i++){
		for(j=18-i*2;j>0;j--){		//空格
			printf(" ");
		}
		
		for(j=0 ;j<=i ; j++){		//数组
			
			printf("%-4d",a[i][j]);	
		}
	printf("\n");					//换行
	}
}

具体解析

一样的,我们一步一步来
1.赋1

for( i=0; i<10; i++){		//用i来控制对数组的赋值i的值是0-9
		a[i][0]=1;			//对数组的首列赋值为1
		a[i][i]=1;			//对我们需要的尾列进行赋值(数组的对角线)
	}

2.填空

for( i=2 ;i<10;i++){			//i控制行数,和数组的行标
		for(j=1 ;j<i ;j++){		//这里j控制填空的个数,数组的列标	
			a[i][j]=a[i-1][j]+a[i-1][j-1];	//这里对空缺部分赋值
		}		
	}

第一个外循环为什么从二开始?因为第一行和第二行的首尾列都是1,已经被我们赋值了,所以我们从第三行第二个开始填空,对应的下标为a[2][1]这里列标由内循环控制,为1,这样我们第三行就已经填补完成,之后内循环让它和i形成一个条件,让它只有在空间的部分进行赋值。
3.输出

for(i=0; i<10;i++){					//i值控制数组的行标和行数
		for(j=18-i*2;j>0;j--){		//输出空格,空格每行减少2个
			printf(" ");
		}
		for(j=0 ;j<=i ; j++){		//输出数组
			printf("%-4d",a[i][j]);	//这里左对齐控制4位十进制,因为图中有126三位,我们空一格	
		}							
	printf("\n");					//换行
	}

看完的同学会不会有种恍然大悟的感觉?
那最后让我们来运行一下这段代码,看看是否和之前我们看的图片一个样子

运行结果

在这里插入图片描述
我们可以看见跟之前看到图片可谓一摸一样,今天的杨辉三角就到此结束,还是那句话一遍看不懂别担心,再看一遍。成长的路上总是枯燥的,没有人可以陪你,只有你自己坚持下去突破瓶颈。

### C语言实现杨辉三角形 以下是使用C语言编写的杨辉三角形程序,该代码能够根据用户的输入数动态生成对应的杨辉三角形: ```c #include<stdio.h> int main() { int rows, coef = 1, space, i, j; // 提示用户输入所需的数 printf("请输入数:"); scanf("%d", &rows); // 外层循环控制数 for (i = 0; i < rows; i++) { // 打印每面的空格 for (space = 1; space <= rows - i; space++) { printf(" "); } // 计算并打印当中的数值 for (j = 0; j <= i; j++) { if (j == 0 || i == 0) { coef = 1; // 当处于边界位置时,系数设为1 } else { coef = coef * (i - j + 1) / j; // 动态计算组合数 } printf("%4d", coef); } // 换操作 printf("\n"); } return 0; } ``` 上述代码通过嵌套循环实现了杨辉三角形的构建过程。外层循环负责逐列出数据,而内层两个循环分别用于处理每一的空白字符以及实际的数据输出[^1]。 #### 关键点解析 - **变量说明** - `rows` 表示用户希望显示的杨辉三角形总数。 - `coef` 是用来存储组合数的结果,在每次迭代过程中更新其值。 - `space`, `i`, 和 `j` 则分别是辅助变量,其中 `space` 控制每置空格数量以保持美观排列;`i` 和 `j` 分别作为外部和内部循环计数器使用。 - **逻辑结构** - 首先提示用户输入期望展示多少杨辉三角形,并读取这个整型参数存入变量 `rows`. - 接下来利用双重for-loop来完成图形绘制工作。第一个for-loop遍历所有的(`i`),第二个则针对特定的一填充相应的数字(`j`)。 - 对于每一个新元素的位置 `(i,j)` ,如果它位于边缘处即满足条件 `if(j==0||i==0)` ,那么直接赋初值给 `coef`; 否则按照公式重新调整它的大小以便得到下一个合适的项[^2]. #### 输出样例 假设用户输入了5,则运结果如下所示: ``` 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值