首先,完整代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[10][10] = { 0 };//暂且用10行10列的二维数组来存放,也可以用变量来增加或者减少,在本次程序中则需要input<10
printf("输想打印的杨辉三角行数:> ");
int input = 0;//用来接受想打印的杨辉三角行数
int j = 0;//用来作用行
int k = 0;//用来做用于列
scanf("%d", &input);
//先构建整体的框架
for (j = 0; j < input; j++)
{
//每行首尾元素都是1,其余元素依旧为零
arr[j][0] = 1;
arr[j][j] = 1;
//前两行元素为1,直接从第三行开始---当然打印依旧要从头打印
}
for ( j = 2; j < input; j++)//控制行数,从第三行开始,但是数组的行下标为2,j = 2
{
for ( k = 1; k < j ; k++)//控制列数,从每行第2个开始,即下标为1开始,所以 k = 1
{
arr[j][k] = arr[j - 1][k - 1] + arr[j - 1][k];//等于它肩上两数之和
}
}
//打印杨辉三角,重复两个for循环即可
for (j = 0; j < input; j++)
{
//此处用来空格修饰,从直角三角形变成金字塔状
for (k = 0; k < input - j; k++)
{
printf(" ");
}
for (k = 0; k <= j; k++)
printf("%3d ", arr[j][k]);//3d用来修饰相邻元素间的距离,不局限于3,合适即可
printf("\n");//处理完一行换行继续
}
return 0;
}
想要入手这个问题,首先需要知道什么是杨辉三角,它的基础逻辑是什么,一张图来了解
![](https://img-blog.csdnimg.cn/img_convert/8e2bf0e49573c40a569613a9c03bedb3.png)
可以采用二维数组来完成杨辉三角的创建,不难看出杨辉三角有首尾元素全为1,其内部元素为上一层相邻两元素之和。
那么我们可以先完成大致框架的构架,内部元素再慢慢填充
//先构建整体的框架
for (j = 0; j < input; j++)
{
//每行首尾元素都是1,其余元素依旧为零
arr[j][0] = 1;
arr[j][j] = 1;
//前两行元素为1,直接从第三行开始---当然打印依旧要从头打印
}
完成框架的搭设以后,便开始了内部的填充,我们从第三层开始入手,前两层就在基础之中完成。在此刻应当注意杨辉三角的层数和二维数组下标间的差异!!!!
for ( j = 2; j < input; j++)//控制行数,从第三行开始,但是数组的行下标为2,j = 2
{
for ( k = 1; k < j ; k++)//控制列数,从每行第2个开始,即下标为1开始,所以 k = 1
{
arr[j][k] = arr[j - 1][k - 1] + arr[j - 1][k];//等于它肩上两数之和
}
}
最后便是打印杨辉三角,用简单的两个for循环即可
//打印杨辉三角,重复两个for循环即可
for (j = 0; j < input; j++)
for (k = 0; k <= j; k++)
{
printf("%3d ", arr[j][k]);//3d用来修饰相邻元素间的距离,不局限于3,合适即可
printf("\n");//处理完一行换行继续
}
这样打印出来效果不是很美观
![](https://img-blog.csdnimg.cn/img_convert/6f4702a800d22eeb0e3aa58959376d1e.png)
可以增加这样一段代码进行修饰
//此处用来空格修饰,从直角三角形变成金字塔状
for (k = 0; k < input - j; k++)
{
printf(" ");
这段代码增加前后的效果演示
![](https://img-blog.csdnimg.cn/img_convert/33e31b1a7269b6b43e4fe0e1184a3eb3.png)