zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【输出N行杨辉三角形】两种输出方式(直角三角形型和等腰三角形型)C语言

C语言输出 方式 两种 杨辉三角
2023-09-11 14:18:53 时间

要想用C语言实现杨辉三角形的输出,就首先需要明白杨辉三角形是怎么来的。

首先我们规定每一行第一个和最后数一个为1,那么从第一行开始就只有一个1;第二行就有两个1,从第三行开始就体现出杨辉三角形的特点了,即就是——每一个等于它上方两个数的和。就像下图一样:

 既然明白了杨辉三角形的底层逻辑,要想使用C语言来实现它那么针对这种元素比较多的又比较又规律的首先就要想到使用数组了。

我们使用一个二维数组实现杨辉三角形,如下是一个6×6的矩阵(我们可以用二维数组表示它)

 除了特殊的第一列,从第二行第二列的元素开始,它的值就是它头顶上元素的值加上左上角的值

编写代码:

#include<stdio.h>
#define N  10		//需要显示的行数 
int main(void){
	int i,j;
	int a[N][N]={1};		//定义一个二维数组并将第一个元素置1,其余置0 
	for(i=0,j=0;i<N;i++){
		a[i][j]=1;
	}
	//给数组放置杨辉三角形数 
	for(i=1;i<N;i++){		//从第1行开始到最后一行 
		for(j=1;j<N;j++){	//从第1列开始到最后一列 
			a[i][j]=a[i-1][j-1]+a[i-1][j];	//根据规律计算该元素的值 
		}
	}
	//输出杨辉三角
	for(i=0;i<N;i++){
		for(j=0;j<N;j++)
			if(a[i][j]!=0)printf("%-5d ",a[i][j]);    //-5表示左对齐,输出数据域宽为5
		printf("\n");
	}
	return 0;
} 

运行结果如下(输出了十行)

看完代码可能有人会问:既然你说了要规定每一行第一个和最后数一个为1,你怎么只定义了第一列为1呢。我觉得你可以再看一下本文开头的第二张图,就可以明白每行末尾的1我们是如何定义的了。当然你也可以直接定义。

—————————————以上是第一种输出方式(直三角形型)—————————————

—————————————以下是第二种输出方式(等腰三角形型)————————————

编写代码:

#include<stdio.h>
#define N  10		//需要显示的行数 
int main(void){
	int i,j,k;
	int a[N][N]={1};		//定义一个二维数组并将第一个元素置1,其余置0 
	for(i=0,j=0;i<N;i++){
		a[i][j]=1;
	}
	for(i=1;i<N;i++){
		for(j=1;j<N;j++){
			a[i][j]=a[i-1][j-1]+a[i-1][j];	//根据规律计算该元素的值 
		}
	}
	//输出等腰三角形型杨辉三角
	for(i=0;i<N;i++){
		//控制每行前面空格数 
		for(k=0;k<N-i;k++)
			printf("   ");	
		//元素输出 
		for(j=0;j<N;j++)
			if(a[i][j]!=0)printf("%6d",a[i][j]);	//默认右对齐,域宽为6 
		printf("\n");
	}
	return 0;
} 

其实只需要将第一次的代码中的杨辉三角输出的地方添加控制每行首个元素前的空格就行了。

效果如下:

完~~谢谢!