在屏幕上显示杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…
1.问题分析与算法设计
杨辉三角形的数,正是(x+y)的N次方幂展开式中各项的系数。本题作为程序设计中具有代表性的题目,求解的方法很多,这里仅给出一种。
从杨辉三角形的特点出发,可以总结出:
a.第N行有N+1个值(设起始行为第0行);
b.对于第N行的第J个值:(N>=2)
当J=1或J=N+1时: 其值为1
当J!=1且J!=N+1时: 其值为第N-1行的第J-1个值与第N-1行第J个值之和;
将这些特点提炼成数学公式可表示为
当x=1或x=N+1时,c(x,y) = 1
其它条件下 c(x,y) = c(x-1,y-1)+c(x-1,y)
本程序就是根据以上递归的数学表达式编制的。
2.程序说明与注释
#include <stdio.h>
int c(int x,int y);
void main()
{
int i,j,n=13;
printf("N=");
while(n>12)
{
scanf("%d",&n); //控制输入正确的值以保证屏幕显示的图形正确
}
for(i=0;i<n;i++) //控制输出N行
{
for(j=0;j<12-i;j++)printf(" "); //控制输出第i行前面的空格
for(j=1;j<i+2;j++) printf("%6d",c(i,j));//输出第i行的第j个值
printf("\n");
}
}
int c(int x,int y) //求杨辉三角形中的第x行 第y列的值
{
int z;
if((y==1)||(y==x+1))return(1); //若为第x行的第1列或第x+1列,则输出1
z = c(x-1,y-1) + c(x-1,y); //否则,其值为第1行中第y-1列与第y列之和
return z;
}