C语言打印杨辉三角
这里先以打印杨辉三角前五行为例,代码运行效果如下:
我在这里的思路是利用二维数组进行打印,首先对杨辉三角里的数据进行观察,不难发现里面的规律:a[i][j] = a[i-1][j] + a[i-1][j-1]
**
- 主函数部分如下
int main()
{
int n = 0;
printf("请输入要打印前几行:>"); //输入要打印前几行的数据
scanf("%d", &n);
yanghuitriangle(n); //调用函数打印杨辉三角
return 0;
}
- yanghuitriangle函数如下
#include <stdio.h>
void yanghuitriangle(int n) //无返回类型
{
int i = 0;
int j = 0;
int data[30][30] = { 1 }; //初始化第一行第一个数据为1
//从第二行开始打印
for (i = 1; i < n; i++)
{
//每一行的第一列数据都是1
data[i][0] = 1;
//从第二列开始打印
for (j = 1; j <= i; j++)
{
data[i][j] = data[i - 1][j] + data[i - 1][j - 1]; //利用发现的数字规律填充各个位置的数据,递推公式
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf("%d ", data[i][j]);
}
printf("\n");
}
}
思路如下:首先创建一个二维数组,i 表示行,j 表示列,首先将第一行第一个数字填好(第二行的数据打印需要用到),之后就从第二行开始打印,由于每一行的第一列数字都为1,所以打印每一行的时候,可以先将第一列的数字初始化为1,之后从第二列开始打印,后面的数据只需要套递推公式就ok了。
注意:建议在打印每一行的数据的时候,将第一个数据初始化为1,否则容易出现越界现象,如下:
void yanghuitriangle(int n) //无返回类型
{
int i = 0;
int j = 0;
int data[30][30] = { 1 }; //初始化第一行第一个数据为1
//从第二行开始打印
for (i = 1; i < n; i++)
{
//每一行的第一列数据都是1
//[i][0] = 1;
//从第一列开始打印
for (j = 0; j <= i; j++)
{
data[i][j] = data[i - 1][j] + data[i - 1][j - 1]; //利用发现的数字规律填充各个位置的数据
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf("%d ", data[i][j]);
}
printf("\n");
}
这里在打印每一行的时候没有将第一个数字初始化为1,而是直接从第一列开始打印,运行结果如下:
这里会发现,出现了越界访问的现象。
感谢阅读,欢迎批评指正。