目录
2.2 编写函数 yang 打印杨辉三角形两条侧边上的 1,并计算中间部分各项的值
1. 分析杨辉三角
如图截取部分杨辉三角,先将杨辉三角分为两部分。一份由三角形两条侧边上的 1所组成 (代码见2.2),另一部份由三角形中间部分各项所组成(代码见2.2)。
不难看出,从第三行开始,三角形第 n 行中的第 k 项值的大小,假设记作(n,k),则此时有(n,k)=(n-1,k-1)+(n-1,k),据此可完成程序代码的编辑。
2. 各段程序代码
2.1 主体部分
int main()
{
int n, p, j, k;
printf("输入需要打印杨辉三角的行数:");
scanf("%d", &p); //设定行数为p行
for (n = 1; n <= p; n++)
{
for (j = 0; j < 30 - 2 * n; j++) //打印各行开头的空格,空格数随行数按规律递减
printf(" ");
for (k = 1; k <= n; k++) //打印各行中的各项
printf("%4d", yang(n, k)); //调用函数yang,为结果更加美观,这里打印格式设置为 %4d
printf("\n"); //每打印完一行后换行
}
return 0;
}
2.2 编写函数 yang 打印杨辉三角形两条侧边上的 1,并计算中间部分各项的值
int yang(int x, int y)
{
int z;
if (y == 1 || y == x) //各行首项和最后一项值为1
z = 1;
else
z = yang(x - 1, y - 1) + yang(x - 1, y);//由上述对杨辉三角的分析可知
return z;
}
3. 完整程序代码及打印结果
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int yang(int x, int y)
{
int z;
if (y == 1 || y == x) //各行首项和最后一项值为1
z = 1;
else
z = yang(x - 1, y - 1) + yang(x - 1, y);//由上述对杨辉三角的分析可知
return z;
}
int main()
{
int n, p, j, k;
printf("输入需要打印杨辉三角的行数:");
scanf("%d", &p); //设定行数为p行
for (n = 1; n <= p; n++)
{
for (j = 0; j < 30 - 2 * n; j++) //打印各行开头的空格,空格数随行数按规律递减
printf(" ");
for (k = 1; k <= n; k++) //打印各行中的各项
printf("%4d", yang(n, k)); //调用函数yang,为结果更加美观,这里打印格式设置为 %4d
printf("\n"); //每打印完一行后换行
}
return 0;
}