C语言 杨辉三角——独立完成

Author:beiyanyunyi
软件工程专业 自信某男
没有那么多人勤奋,只是你自己不行动,畏惧了其他人。
CSDN:weixin_62688213

前言

我们把杨辉三角变换成类似数学坐标系一样的图像。这样就可以拿数组来保存数据。
在这里插入图片描述

一、初始化

1.头文件表示

#define ROW 200
#define COL 200

2.定义一个二维数组

    int a[ROW][COL] ={0};

二、定义需要的行数

    int lands=0;
	printf("打印行数:>");
	scanf("%d",&lands);
	//后面的打印数组,需要从新的一行开始
	printf("\n");

三、设计函数

1.定义每列最后一个和第一个赋值1

主函数

	Start_End(a,lands);

函数

思路
x=1的坐标值均为1。
y=x的坐标,值均为1。
这是一种很巧妙的定义的数组坐标,和我们的高数一样了。
--------------->x
|1(1,1)
|1(2,1)1(2,2)
|1(3,1)2(3,2)1(3,3)
|
y

void Start_End(int a[ROW][COL],int lands)
{
	int y,x; 
	for(y=1;y<=lands;y++)
	{
		for(x=1;x<=y;x++)
		{
			if( x==1 || y==x)
			{
				a[y][x]=1;
			} 
			
		}
	}
}

2.中间的赋值

主函数

	Midlle(a,lands);

函数

第二行和第一行已经在 " 定义每列最后一个和第一个赋值1 " 步骤定义。

我们可以把第二行第一个元素和第二个元素加成第三行第二个元素,第三行,只需要加一次,那么在第四行,两个数未知,在第五行,三个数未知。我们只需要x<y-1这个条件,每行的未知数个数就知道了。
例如
lands=3
y=3,y<=3
x=1且x<3-1(x<2),第三行只能一次求解。

未知的坐标值求法,他的y坐标减1,赋值上一行的y值。x坐标呢??每个未知数都是从x=2开始,那么上一行的一个x不变,另一个x-1,必须这样要求。

void Midlle(int a[ROW][COL],int lands)
{
	int y,x; 
	for(y=3;y<=lands;y++)
	{
		for(x=1;x<y-1;x++)
		{
			a[y][x+1]=a[y-1][x]+a[y-1][x+1];
		}
	}
}

3.打印数组,得到杨辉三角图形

主函数

	print(a,lands) ;

函数

void print(int a[ROW][COL],int lands)
{
	int y,x; 
	for(y=1;y<=lands;y++)
	{
		for(x=1;x<=y;x++)
		{
			printf("%4d ",a[y][x]);
			
		}
		printf("\n");
	}
}

总结

不是三角形啊!怎么弄的??


先赞后看,养成习惯!!! ^ _ ^ ❤️ ❤️ ❤️
代码

#include<stdio.h>
#define ROW 200
#define COL 200

void Start_End(int a[ROW][COL],int lands);
void Midlle(int a[ROW][COL],int lands);
void print(int a[ROW][COL],int lands);

int main()
{
	//初始化 
	int a[ROW][COL] ={0};
	//设置多少行
	int lands=0;
	printf("打印行数:>");
	scanf("%d",&lands);
	
	printf("\n");
	
	//定义每列最后一个和第一个赋值1 
	Start_End(a,lands);
	
	//中间的赋值
	Midlle(a,lands);
	
	//打印数组
	print(a,lands) ;
	
	return 0;
}
void Start_End(int a[ROW][COL],int lands)
{
	int y,x; 
	for(y=1;y<=lands;y++)
	{
		for(x=1;x<=y;x++)
		{
			if( x==1 || y==x)
			{
				a[y][x]=1;
			} 
			
		}
	}
}
void Midlle(int a[ROW][COL],int lands)
{
	int y,x; 
	for(y=3;y<=lands;y++)
	{
		for(x=1;x<y-1;x++)
		{
			a[y][x+1]=a[y-1][x]+a[y-1][x+1];
			
		}
	}
}
void print(int a[ROW][COL],int lands)
{
	int y,x; 
	for(y=1;y<=lands;y++)
	{
		for(x=1;x<=y;x++)
		{
			printf("%4d ",a[y][x]);
			
		}
		printf("\n");
	}
}

码字不易,大家的坚持就是我坚持下的动力,点赞后,不要忘记关注我哦!

如有错误,还请您批评改正 ^ _ ^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值