第一步:找规律

用C语言打印杨辉三角_数组

数字规律:

直观看出三角形的两边都是 1每一行的数的个数等于该行行数。(从第三行开始)被两边的 1 包围着的数据中,每个数等于它上一行前一列的数和上一行本列数之和

“三角形”效果:

打印出三角形效果就要在每行开始先打印空格,依次为3、2、1、0,行号依次增加空格依次减少。每一行的相邻两个数字之间有一个空格。

用C语言打印杨辉三角_完美代码_02

思考:

数字规律和三角形效果都与行数有关,用二维数组操作。三角形的腰都是1,中间数据需要用到上一行的数据。所以整个代码分三步进行。第一步打印所有的1,第二步打印中间数据,第三步加空格以形成三角形效果。

第二步:代码实现(打印10行杨辉三角)

1、打印所有的1

#include<stdio.h>
int main()
{ 
	int i = 0, j = 0;
	int arr[10][10] = { 0 };//用10行10列的数组装数字并初始化为空
	for (i = 0; i < 10; i++)
	{
		arr[i][0] = 1;//每行首元素设为1
		arr[i][i] = 1;//每行最后一个元素设为1
	}
	for(i = 0; i < 10; i++)//打印出来看效果
	{
		for (j = 0; j <= i; j++)//j<=i是因为每行元素个数和行数相等
		{
			printf("%d", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

用C语言打印杨辉三角_完美代码_03

2、打印中间数据

#include<stdio.h>
int main()
{ 
	int i = 0, j = 0;
	int arr[10][10] = { 0 };//用10行10列的数组装数字并初始化为空
	for (i = 0; i < 10; i++)
	{
		arr[i][0] = 1;//每行首元素设为1
		arr[i][i] = 1;//每行最后一个元素设为1
		for (j = 0; j < i; j++) //j<=i是因为每行元素个数和行数相等
		{
			if (i > 1 && j > 0)//观察发现从第三行第二列开始,才有中间数据
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//打印中间数据。原理见数字规律。
			}
		}
	}
	for(i = 0; i < 10; i++)//打印出来看效果
	{
		for (j = 0; j <= i; j++)//j<=i是因为每行元素个数和行数相等
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");//打印一行后换行
	}
	return 0;
}

用C语言打印杨辉三角_数据_04

3、加空格以形成三角形效果

#include<stdio.h>
int main()
{ 
	int i = 0, j = 0;
	int arr[10][10] = { 0 };//用10行10列的数组装数字并初始化为空
	for (i = 0; i < 10; i++)//按行从左至右设置数组元素
	{
		j = 10 - i;//
		while (--j)//第一行开始先打印9个空格,行号增加1,空格就减少1个
		{
			printf(" ");//一个空格
		}
		arr[i][0] = 1;//数组每行首元素设为1
		arr[i][i] = 1;//数组每行最后一个元素设为1
		for (j = 0; j <= i; j++) //j<=i是因为每行元素个数和行数相等
		{
			if (i > 1 && j > 0)//观察发现从第三行第二列开始,才有中间数据
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//打印中间数据。原理见数字规律。
			}
			printf("%d ", arr[i][j]);//每一行相邻两个元素之间有一个空格。赋值完一行后直接打印。
		}
		printf("\n");//打印一行后换行
	}
	return 0;
}

用C语言打印杨辉三角_完美代码_05

第三步:优化三角形效果

#include<stdio.h>
int main()
{ 
	int i = 0, j = 0;
	int arr[10][10] = { 0 };//用10行10列的数组装数字并初始化为空
	for (i = 0; i < 10; i++)//按行从左至右设置数组元素
	{
		j = 10 - i;//
		while (--j)//第一行开始先打印9个空格,行号增加1,空格就减少1个
		{
			printf("   ");//因为最大数为3位数,所以三个空格打印出来更加美观。每一行相邻两个元素之间有3个空格,这样更加美观。
		}
		arr[i][0] = 1;//数组每行首元素设为1
		arr[i][i] = 1;//数组每行最后一个元素设为1
		for (j = 0; j <= i; j++) //j<=i是因为每行元素个数和行数相等
		{
			if (i > 1 && j > 0)//观察发现从第三行第二列开始,才有中间数据
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//打印中间数据。原理见数字规律。
			}
			printf("%3d   ", arr[i][j]);//每一行相邻两个元素之间有3个空格,这样更加美观。赋值完一行后直接打印。
		}
		printf("\n");//打印一行后换行
	}
	return 0;
}

用C语言打印杨辉三角_完美代码_06