用c实现 杨辉三角

先创建一个二维数组

在这里插入图片描述

初始化杨辉三角的基本格式,及图形的最里侧和最外侧都是1这一规律

在这里插入图片描述

基本格式输出结果

在这里插入图片描述

在这里插入图片描述

输出结果

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#define ROW 10
int main()
{
	int arr[ROW][ROW] = { 0 };
	int j = 0;
	int x = 0;
	//初始杨辉三角的基本格式,及图形的最里侧和最外侧都是1这一规律
	for (int i = 0; i < ROW; i++)
	{
		arr[i][0] = 1;
		arr[i][i] = 1;
	}
	//因为前两行都是1没有0,所以跳过前两行
	for (int i = 2; i < ROW; i++)
	{
		j = 0;
		x = 0;
		//用z去确认0的位置
		for (int z = 0; ; z++)
		{
			if (arr[i][z] == 0 && x < 2)
			{
				//j去确认上一行不是0的位置进行相加
				//赋值给本行0的位置
				arr[i][z] = arr[i - 1][j] + arr[i - 1][j + 1];
				j++;
			}
			//因为1是图形的边界,通过x去记录碰到1的次数
			//当x=2时代表触碰到边界从而跳出循环
			else if (x == 2)
				break;
			else
				x++;
		}
	}
	for (int i = 0; i < ROW; i++)
	{;
		for (int j = 0; j < ROW; j++)
		{
			
			if (arr[i][j] != 0)
			{
				printf("%d ", arr[i][j]);
			}

		}
		printf("\n");
	}
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用 x86 汇编语言实现杨辉三角形的例子: ``` section .data n: db 5 ; 行数 space: db ' ', 0 ; 空格字符 crlf: db 0x0D, 0x0A, 0 ; 回车换行字符 section .text global _start _start: mov ecx, [n] ; ecx 寄存器存储行数 mov ebx, 1 ; ebx 寄存器存储当前行的第一个数(1) row_loop: ; 打印空格 mov edx, ecx ; edx 寄存器存储当前行数 dec edx ; 减 1 以获取需要打印的空格数 space_loop: push ecx push ebx push edx mov eax, 4 mov ebx, 1 mov ecx, space mov edx, 1 int 0x80 pop edx pop ebx pop ecx dec edx jnz space_loop ; 打印当前行的数字 mov edx, ecx ; edx 寄存器存储当前行数 mov eax, ebx ; eax 寄存器存储当前数字 num_loop: push ecx push ebx push eax mov eax, 4 mov ebx, 1 mov ecx, eax_str call print_string pop eax inc eax pop ebx pop ecx cmp eax, ebx ; 如果已经到了当前行的最后一个数字,跳出循环 je end_of_row push ecx push ebx push edx mov eax, 4 mov ebx, 1 mov ecx, space mov edx, 1 int 0x80 pop edx pop ebx pop ecx jmp num_loop end_of_row: ; 打印回车换行 push ecx push ebx push crlf mov eax, 4 mov ebx, 1 mov ecx, crlf mov edx, 2 int 0x80 pop ebx pop ecx dec ecx ; 继续下一行 mov ebx, 1 ; 下一行的第一个数字为 1 cmp ecx, 0 ; 如果已经到了最后一行,跳出循环 jne row_loop ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 print_string: push edx mov edx, eax_str_len mov eax, 4 mov ebx, 1 int 0x80 pop edx ret section .data eax_str: db '%d', 0 eax_str_len: equ $-eax_str ``` 该程序首先定义了需要用到的数据和字符串常量,然后进入 `_start` 标签指示的主函数。该函数首先将行数存储到 `ecx` 寄存器中,并将当前行的第一个数字(1)存储到 `ebx` 寄存器中。 接下来,程序进入一个循环,该循环会遍历每一行并打印该行的数字。循环的第一部分会打印一些空格,使得数字在控制台中的位置居中。循环的第二部分会打印当前行的数字,并在数字之间插入一些空格。最后,程序会打印一个回车换行字符,以便将控制台光标移动到下一行。 程序使用 `print_string` 子函数来打印数字字符串。该子函数采用 `eax_str` 和 `eax_str_len` 常量定义的格式字符串和字符串长度,并使用 Linux 内核调用来将字符串打印到控制台上。 最后,程序使用 `int 0x80` 汇编指令来退出程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值