C语言练习——打印杨辉三角形

举报
Code_流苏 发表于 2022/04/20 14:49:50 2022/04/20
【摘要】 C语言练习——打印杨辉三角形

C语言练习——打印杨辉三角形

学须志也,才须学也,非学无以广才,非志无以成学。——诸葛亮

🐼本篇内容简介一、问题呈现-->二、源码实现(+详细注释)-->三、输出结果展示

一、概念说明

杨辉三角形

先看个例子,打印的是6行杨辉三角形,来看看它长什么模样?

1.模样

       1
      1  1
     1  2  1
   1  3   3  1
  1  4  6   4  1
1  5  10  10  5  1

看完之后会发现,很熟悉,因为中学期间学过杨辉三角的知识。那么根据上面的图,我们可以得出什么规律?

2.规律

①每行的第一个和最后一个为1

看第三行 1 2 1 第四行 1 3 3 1 可以得出

②中间的元素是左上角的元素与右上角的元素之和。

例如第三行1 2 1 中间元素 2 为左上角1和右上角1之和。

③第n行的数字有n项。

第一行 1 有一项 第二行 1 1 有两项 第三行 1 2 1 有三项…第n行 有n项


当然规律不止这些,有很多,不过以上三个规律足够解决本题了。其它的规律大家如有想法,可以自己探索或者查询一下,此处就不再一一描述了。

了解了一些概念后,下面我们一起来看一下问题吧!

二、问题呈现

1.问题描述

Problem Description

打印10行杨辉三角形

2.输入输出

Input

Output

10行杨辉三角形

3.测试样例

Sample Input

Sample Output

                                1
                             1     1
                          1     2     1
                       1     3     3     1
                    1     4     6     4     1
                 1     5    10    10     5     1
              1     6    15    20    15     6     1
           1     7    21    35    35    21     7     1
        1     8    28    56    70    56    28     8     1
     1     9    36    84   126   126    84    36     9     1

三、源码实现(+详细注释)

1.注释版

//编程及注释:Code_流苏
//定义头文件
#include<stdio.h>
#include<stdlib.h>
//主函数
int main()
{
    //定义三个整型变量i,j,k用于循环实现 
    int i, j, k;
    int a[11][11]; //定义二维数组a[11][11]
    printf("10行杨辉三角如下:\n");
    //杨辉三角 实现 规律①(见概念说明)
    for(i=1;i<=10;i++){
      //两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数
		a[i][1] = a[i][i] = 1;  
	}
    //杨辉三角 实现 规律②(见概念说明)
    for(i=3;i<=10;i++){
		 for(j=2;j<=i-1;j++){
         //除两边的数外都等于上两顶数之和
				a[i][j]=a[i-1][j-1]+a[i-1][j];  
		}
	}
    //界面美化 以及 打印输出        
    for(i=1;i<=10;i++){
        for(k=1;k<=10-i;k++){
			//这一行主要是在输出数之前打上空格占位,让输出的数更美观
            printf("   ");  
		}
        //j<=i的原因是不输出其它的数,只输出我们想要的数
        for(j=1;j<=i;j++){
			printf("%6d",a[i][j]);
		}  
        //当一行输出完以后换行继续下一行的输出
        printf("\n");  
    }
    //整体执行结束后,输出换行,保持整体界面
    printf("\n");
    //返回0,代表程序执行结束
    return 0;
}

2.纯源码版

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int i, j, k, a[11][11];  
    printf("10行杨辉三角如下:\n");
    
    for(i=1;i<=10;i++){
		a[i][1] = a[i][i] = 1;  
	}
    
    for(i=3;i<=10;i++){
		 for(j=2;j<=i-1;j++){
				a[i][j]=a[i-1][j-1]+a[i-1][j]; 
		}
	}
            
    for(i=1;i<=10;i++){
        for(k=1;k<=10-i;k++){
			printf("   ");  
		}
        for(j=1;j<=i;j++){
			printf("%6d",a[i][j]);
		}  
        printf("\n");  
    }
    printf("\n");
    return 0;
}

四、输出结果展示

1.输出结果

10行杨辉三角如下:
                                1
                             1     1
                          1     2     1
                       1     3     3     1
                    1     4     6     4     1
                 1     5    10    10     5     1
              1     6    15    20    15     6     1
           1     7    21    35    35    21     7     1
        1     8    28    56    70    56    28     8     1
     1     9    36    84   126   126    84    36     9     1


--------------------------------
Process exited after 0.2986 seconds with return value 0
请按任意键继续. . 

2.输出结果(图示版)

在这里插入图片描述


ps:这道题的方法本文虽然只写出这一种,但是思路方法其实不止这一种,其它的方法可自行尝试一下,比如借助函数实现等都是可以的。


作者:Code_流苏(一个喜欢古诗词和编程的Coder😊)
★喜欢的话,还请多多点赞与关注! 感谢支持!
C语言100题练习专栏计划持续进行,欢迎评论交流学习!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。