C/C++输出“杨辉三角”,看完保证会!

本文介绍了如何用C++编程语言输出杨辉三角,包括杨辉三角的定义、性质以及程序设计策略,重点讲解了如何利用数组存储数据和根据三角形性质计算元素值。
摘要由CSDN通过智能技术生成

        现在有一个经典的问题,用C/C++输出“杨辉三角”。

1.程序前分析

1.1什么是杨辉三角?

        杨辉三角是二项式系数在三角形中的一种几何排列.1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1.2、第n行的数字个数为n个.3、第n行数字和为2^(n-1).4、每个数字等于上一行的左右两个数字之和.可用此性质写出整个杨辉三角形.5、将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第2n个斐波那契数.将第2n行第2个数,跟第2n+1行第4个数、第2n+2行第6个数……这些数之和是第2n-1个斐波那契数.6、第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推.

1.2程序假定

        已经知道了什么是杨辉三角,我们就可以开始设计程序了。假定我们使用 visual studio 进行程序编写,假定我们需要输出20行的杨辉三角(考虑了输出窗口的大小,实际上20阶也很够用了),输出标准的对齐的杨辉三角。

2.程序设计

        考虑到杨辉三角的性质,我们可以用数组 a[n][n] 来存放数据,再由杨辉三角的性质可知: a[i][j] = a[i - 1][j - 1] + a[i - 1][j] (非边界时成立) & a[i][j] = 1 (位于边界时成立)。我们便据此设计程序。

2.1外围设计

        先写好程序的框架,根据假定的输出20阶杨辉三角,假定输出的行标号为 i 、数据输出量 j 、标准辅助量 k 以及存放数据的数组 a[n][n](后面要用到i、j、k 和 a[n][n])。写好程序框架后填入得初步程序设计:

#include<stdio.h>
#pragma warning (disable:4996)

#define n 20

int main()
{
    int i, j, k;
    int a[n][n];
    for (i = 0; i < n; i++)
    {
        
    }
    return 0;
}

2.2内圈程序设计

2.2.1标准输出设计

        想要达到标准输出,就需要先知道需要输出的阶数(我们假定的n=20),然后输出对应数量的占位空格。分析可知:第 i 行对应的占位次数就是 n-i 次。暂定占位空格的空格数为 3 ,则标准输出程序设计为(参数含义在前面均已说明):

for (k = 0; k < n - 1 - i; k++)
            printf("   ");

2.2.2程序关键部分设计

        接下来就要设计数字量的输出了,在此之前,我们需要得到数字量并存放到数组 a[n][n] 里。由分析可知: 位于边界时有: a[i][j] = 1;位于非边界时有:a[i][j] = a[i - 1][j - 1] + a[i - 1][j] 。我们便据此设计程序(6宽域输出与前面的3空格占位相对应):

for (j = 0; j <= i; j++)
        {
            if (i == 0 || j == 0 || j == i)
                a[i][j] = 1;
            else a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
            printf("%6d", a[i][j]);// 6宽域输出
            }
            printf("\n");

3.最终程序

        如此,我们的程序就设计好了。具体如下:

#include<stdio.h>
#pragma warning (disable:4996)

#define n 20

int main()
{
    int i, j, k;
    int a[n][n];
    for (i = 0; i < n; i++)
    {
        for (k = 0; k < n - 1 - i; k++)
            printf("   ");
        for (j = 0; j <= i; j++)
        {
            if (i == 0 || j == 0 || j == i)
                a[i][j] = 1;
            else a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
            printf("%6d", a[i][j]);
            }
            printf("\n");
        }
    return 0;
}

        程序的运行结果如下:

        各位读者也可以根据自己的需求对程序进行改进。另外,如果有任何疑问,评论区和私信都欢迎你。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值