C语言打印杨辉三角
杨辉三角:每行的开端和结尾都是1,其余位置的每个数都等于它上方两数之和。每行数字左右对称,由1开始逐渐变大。
程序实现1
#include <stdio.h>
#include<stdlib.h>
#define N 31
int main()
{
int i,j,k,n=0;
int a[N][N]; //定义二维数组a[N][N]
while (n<=0 || n>=30) //控制打印的行数不要太大,过大会造成显示不规范
{
printf("请输入要打印的行数(范围1-29行):");
scanf("%d",&n);
}
printf("%d行杨辉三角如下:\n",n);
for (i = 1; i <= n; i++)
{
a[i][1] = a[i][i] = 1; //两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数
}
for (i = 3; i <= n; i++)
{
for (j = 2; j <= i-1; j++)
{
a[i][j] = a[i-1][j-1] + a[i-1][j]; //除两边的数外都等于上两顶数之和
}
}
for (i = 1; i <= n; i++)
{
for (k = 1; k <= n-i; k++)
{
printf(" "); //这一行主要是在输出数之前打上空格占位,让输出的数更美观
}
for (j = 1; j <= i; j++) //j<=i的原因是不输出其它的数,只输出我们想要的数
{
//%6d为指定的输出字段宽度为6,若数据本身长度大于6,则数字全部输出,若数据本身长度小于6,则右补空格
printf("%6d",a[i][j]);
}
printf("\n"); //当一行输出完以后换行继续下一行的输出
}
printf("\n");
system("pause");
}
程序实现2
#include <stdio.h>
#include<stdlib.h>
/*定义阶乘*/
float J(int i)
{
int j;
float k=1;
for (j = 1; j <= i; j++)
{
k=k*j;
}
return k;
}
/*定义组合数*/
float C(int i,int j)
{
float k;
k = J(j)/(J(i) * J(j-i));
return k;
}
int main()
{
int i=0,j,k,n;
//打印杨辉三角
while (i<=0 || i>16)
{
printf("请输入要打印的行数(范围1-16):");
scanf("%d",&i);
}
printf("%d行杨辉三角如下:\n",i);
for (j = 0; j < i; j++)
{
for (k = 1; k <= (i-j); k++)
{
printf(" ");
}
for (n = 0; n <= j; n++)
{
//%4.0f表示整数部分宽度为4,当整数部分宽度大于等于4时,按实际输出;当小于4时向右补空格。小数点部分四舍五入不输出
printf("%4.0f",C(n,j));
}
printf("\n");
}
printf("\n");
system("pause");
}