初学C语言之杨辉三角

这已经是我学编程开始的第14次打卡了,很遗憾漏了那么多次,所以更要努力,砥砺前行。话不多说,进入正题:
这次做的题目是打印杨辉三角,下面是我在打代码前搜索的有关杨辉三角的相关知识:

  1. 基本定义:杨辉三角形第n层(顶层称第 0 层,第 1 行,第 n 层即第 n+1 行,此处 n 为包含 0 在内的自然数)正好对应于二项式展开的系数。例如第二层 1 2 1 是幂指数为 2 的二项式展开形式的系数。
  2. 涉及到的性质:
    (1)杨辉三角以正整数构成,数字左右对称,每行由1开始逐渐变大,然后变小,回到1。(1)杨辉三角以正整数构成,数字左右对称,每行由1开始逐渐变大,然后变小,回到1。
    (2)第n行的数字个数为n个。
    (3)除每行最左侧与最右侧的数字以外,每个数字等于它的左上方与右上方两个数字之和(也就是说,n行第k个数字等于第 n-1 行的第 k-1 个数字与第k个数字的和)。

思路:
基本思路我已经写在了代码中,主要的中心思想是每行除了头尾的1以外的数字的计算,存储与输出,每次计算涉及到两行数字,因此我首先想到的是运用数组,因此我在代码里运用的是二维数组。

代码如下:

#include<stdio.h>

int main()
{
	//需要一个行数,需要读入
	int n;   
	//需要一个数组来存储和输出每一行的除了两边的1的中间数字                                
	int num[1000][100]; 							
	
	
	scanf("%d",&n); 
	
	//如果用二维数组的话,就需要两个变量来控制行数和列数 
	//不能倒序输出,因此需要一个变量来从1到n输出每一行数字
	int h; 						 
	for(h=0;h<n+1;h++){
		
		//因为每行的列数都要从头计数,因此把初始化放在行数循环里
		int lie=0;				
		
		//说明每行第一列都是1			 
		num[h][lie]=1;
		printf("%6d", num[h][lie]);	
		lie++;
		
		if(h==0){
			printf("\n");
		}	
		
		//根据杨辉三角的性质:第n行一共有n个数,因此需要一个变量来控制每行数字的个数
		for(;lie<h;lie++){
			num[h][lie] = num[h-1][lie-1] + num[h-1][lie];
			printf("%6d",num[h][lie]);
		}
		
		//输出n行的第n个数
		if(lie==h){
			num[h][lie] = 1;
			printf("%6d\n",num[h][lie]);
		} 
		 
	} 
	return 0;
 } 

笔记:
在写代码的途中出现了错误,编译正确,但是却在运行时程序直接被系统关掉了,求教后才知道出现这种原因的可能是环境有问题或者程序有问题,一般是程序出了错误,逻辑错误。重新整理了思路之后发现,错误出在了二维数组那里,num[1000][1000]改成num[1000][100]就解决了问题,列数的问题,看来不能贪心,一次定义不要太多。

心得:
努力打基础,多打代码,天天向上(好吧,我承认我不太善言语,嗯,就这样)

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/Yao_orange/article/details/83002014
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞