C语言十五弹---打印杨辉三角

C语言实现打印杨辉三角

特点:1.每个数等于它上方两数之和。

2.每行数字左右对称,由1开始逐渐变大。

3.第n行的数字有n项。

在这里插入图片描述

一、打印空格

由图可看出第一行有 n - 1个空格,随着row的增加空格逐渐减少,故此打印空格条件为 打印行数 - row

for (int i = 0; i < 10-row; i++)//空格
{
	printf("  ");
}

二、打印外层1

由图观察可知 外层被1囊括,那么仔细观察便发现,每行初始位置和行列相等时为1。

if ((arr[row][0] = 1) || (row == col))//外部 二者满足一个就需要打印 故使用||
{
	arr[row][col] = 1;
}

三、打印内部

由图可以观察到 下一行数字等于本身上一行位置的前一个位置和后一个位置之和 。那么就只需要找到两个位置然后求和等于本身即可。

	if (row > 1 && col >= 1)//从第二行开始存在中间数据 并满足条件
	{
		arr[row][col] = arr[row - 1][col - 1] + arr[row - 1][col];
	}

总代码

#include <stdio.h>
#define ROW 10//宏定义(命名方法默认全大写) 可以修改杨辉三角层数
#define COL 10
int main()
{
	int arr[ROW][COL] = { 0 };
	int row = 1, col = 1;
	for (row = 0; row < ROW; row++)
	{
		for (int i = 0; i < ROW-row; i++)//空格
		{
			printf("  ");
		}
				
		for (col = 0; col <= row; col++)
		{
			if ((arr[row][0] = 1) || (row == col))//外部
			{
				arr[row][col] = 1;
			}

			if (row > 1 && col >= 1)//从第二行开始存在中间数据 并满足条件
			{
				arr[row][col] = arr[row - 1][col - 1] + arr[row - 1][col];
			}
			printf("%4d", arr[row][col]);//%4d 能够打印一个等边杨辉三角
		}
		printf("\n");
	}
	return 0;
}
  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
顺序循环队列可以用数组来实现,我们可以定义一个数组来表示队列,再定义队首和队尾指针来指示队列的头和尾。在队列为空的时候,队首和队尾指针相等,当队列满时,队尾指针会指向数组的最后一个元素,而队首指针会指向数组的第一个元素。队列的基本操作包括入队和出队。 三角是一个数学上的图形,由于它的特殊性质,它也可以用队列来实现。具体实现方法如下: 1. 定义一个二维数组来存储三角的数值,同时定义一个队列来存储每一行的数值。 2. 首先将第一行的数值入队,然后从队列中取出队首元素,根据它可以计算出下一行的数值。 3. 将下一行的数值入队,重复上述操作,直到计算到第n行为止。 下面是代码实现: ```c #include <stdio.h> #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; // 存储队列元素 int front; // 队首指针 int rear; // 队尾指针 } SqQueue; // 初始化队列 void InitQueue(SqQueue *q) { q->front = q->rear = 0; } // 判断队列是否为空 int QueueEmpty(SqQueue *q) { return q->front == q->rear; } // 入队 int EnQueue(SqQueue *q, int x) { if ((q->rear + 1) % MAXSIZE == q->front) return 0; // 队列已满 q->data[q->rear] = x; q->rear = (q->rear + 1) % MAXSIZE; return 1; } // 出队 int DeQueue(SqQueue *q, int *x) { if (q->front == q->rear) return 0; // 队列为空 *x = q->data[q->front]; q->front = (q->front + 1) % MAXSIZE; return 1; } // 输出三角 void PrintTriangle(int n) { int triangle[MAXSIZE][MAXSIZE]; SqQueue q; InitQueue(&q); // 计算三角的数值 for (int i = 0; i < n; i++) { // 将第一行的数值入队 EnQueue(&q, 1); // 计算当前行的数值 for (int j = 0; j <= i; j++) { if (j == 0 || j == i) triangle[i][j] = 1; else { int x, y; // 取出队首元素和它的下一个元素 DeQueue(&q, &x); DeQueue(&q, &y); triangle[i][j] = x + y; // 将计算得到的数值入队 EnQueue(&q, y); } // 将当前行的数值入队 EnQueue(&q, triangle[i][j]); printf("%d ", triangle[i][j]); } printf("\n"); } } int main() { int n; printf("Please input the number of rows of the triangle: "); scanf("%d", &n); PrintTriangle(n); return 0; } ``` 这个程序可以输出指定行数的三角,例如输入6,输出结果如下: ``` Please input the number of rows of the triangle: 6 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值