C语言打印杨辉三角(C笔记)

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");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西瓜籽@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值