【C语言】四种方式使用C语言输出杨辉三角前10行

杨辉三角第一列和对角线为1,其他的计算公式为
a[i][j]=a[i-1][j-1]+a[i-1][j]

实现杨辉三角输出有多种方式,本文提供其中的四种实现方式。

方式一

#include "stdio.h"
int main()
{
    int a[10][10]= {0};
    int i,j;
    for(i=0; i<10; i++)
    {
        a[i][i]=1;
        a[i][0]=1;
        for(j=1; j<=i; j++)
        {
            a[i][j]=a[i-1][j-1]+a[i-1][j];
        }
    }
    for(i=0; i<10; i++)
    {
        for(j=0; j<=i; j++)
            printf("%d ",a[i][j]);
        printf("\n\r");
    }

}

方式二

#include "stdio.h"
int main()
{
    int i,j,a[11][11]= {0,1};
    for(i=1; i<=10; i++)
    {
        for(j=1; j<=i; j++)
        {
            a[i][j]=a[i-1][j-1]+a[i-1][j];
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}

方式三

#include "stdio.h"
int main()
{
    int a[10][10],i,j;
    for(i=0; i<10; i++)
        a[i][i]=a[i][0]=1;
    for(i=2; i<10; i++)
        for(j=1; j<i; j++)
            a[i][j]=a[i-1][j-1]+a[i-1][j];
    for(i=0; i<10; i++)
    {
        for(j=0; j<=i; j++)
            printf("%d ",a[i][j]);
        printf("\n\r");
    }
}

前三中未对输出进行居中对齐,输出结果为:
在这里插入图片描述

方式四

#include "stdio.h"

#define NUM 20
void printblank(int n)
{
    int i;
    for(i=0; i<n; i++)
        printf(" ");
}
int main()
{
    int i,j,a[NUM][NUM];
    for(i=0; i<NUM; i++)
    {
        printblank(4*(NUM-i));
        for(j=0; j<=i; j++)
        {
            if(i==j || j==0)
                a[i][j]=1;
            else
                a[i][j]=a[i-1][j-1]+a[i-1][j];
            printf("%-8d",a[i][j]);
        }
        printf("\n\n\n");
    }
}

方式四,对输出结果进行了对齐,输出效果
在这里插入图片描述

<think>好的,用户现在让我用C语言编写输出杨辉三角10。首先,我需要回忆一下杨辉三角的结构。杨辉三角的每一开始和结束都是1,中间的数等于它上面两个数之和。例如,第三是1 2 1,第四是1 3 3 1,依此类推。 用户之问过关于阶乘的问题,现在转向了杨辉三角,可能需要一些关于数组和循环的应用。我需要确保代码逻辑清晰,能够正确生成每一的数值。同时,用户可能希望代码有注释,便于理解。 首先,杨辉三角可以用二维数组来存储,每一的元素数量等于号。例如,第1有1个元素,第2有2个,直到第1010个。不过,考虑到内存和效率,或许可以用一维数组来优化,每次覆盖的数据。不过对于10来说,二维数组更直观,容易理解。 接下来,需要确定生成每个元素的规则。对于第i第j个元素(i从0开始),如果j是第一个或者最后一个,就是1;否则,等于上一的第j-1和第j个元素之和。例如,第三(i=2)的中间元素是上一的两个1相加得到2。 然后,考虑输出的格式,使得数字居中排列。杨辉三角每一的数字需要适当对齐,通常在打印时在数字之间添加空格,并在面添加适当的空格来形成金字塔形状。例如,第n面需要添加(总数 - 当数)的空格,这样看起来更整齐。 需要处理的问题包括数组的索引是否正确,避免越界;输出格式是否美观,特别是当数字位数不同时,如何保持对齐。例如,较大的数字如10中的某些数可能有三位数,这时候可能需要更宽的空格间隔。 另外,用户可能需要代码的可读性,所以变量命名要清晰,比如用rows表示总数,使用二维数组arr来存储每个元素。同时,添加注释解释关键步骤,如生成杨辉三角的循环和打印格式的控制。 测试一下代码是否正确,比如输出是否符合预期。例如,第5应该是1 4 6 4 1,检查是否正确生成。同时,确认当rows为10时,能够正确输出10,没有数组越界或计算错误。 最后,考虑是否需要动态输入数,但用户明确要求10,所以可以直接在代码中固定rows为10,简化代码。不过也可以让用户输入,但根据用户问题,可能固定更合适。 总结步骤: 1. 定义一个二维数组存储杨辉三角的每个元素。 2. 使用双重循环填充数组,外层循环控制数,内层循环处理每的元素。 3. 对于每的首尾元素赋值为1,中间元素由上一的两个元素相加。 4. 打印时,控制面的空格和元素之间的间隔,使其呈现金字塔形状。 5. 确保代码正确,处理边界情况,如第一和第二的特殊情况。</think>#### 一、杨辉三角规律 杨辉三角具有以下特性: 1. 每首尾数字为 **1** 2. 中间数字为 **上一相邻两数之和** 3. 第 $n$ 有 $n$ 个数字 --- #### 二、C语言实现代码(带注释) ```c #include <stdio.h> int main() { int rows = 10; // 要输出数 int arr[10][10]; // 二维数组存储数值 // 生成杨辉三角数据 for (int i = 0; i < rows; i++) { // 每首尾置1 arr[i][0] = 1; arr[i][i] = 1; // 计算中间元素(从第3开始) for (int j = 1; j < i; j++) { arr[i][j] = arr[i-1][j-1] + arr[i-1][j]; } } // 打印杨辉三角 for (int i = 0; i < rows; i++) { // 打印置空格(实现居中对齐) for (int space = 0; space < rows - i; space++) { printf(" "); } // 打印当数字 for (int j = 0; j <= i; j++) { printf("%4d", arr[i][j]); } printf("\n"); } return 0; } ``` --- #### 三、关键代码解析 1. **数据生成部分** - 外层循环 `i` 控制数 - 内层循环 `j` 计算中间元素:`arr[i][j] = arr[i-1][j-1] + arr[i-1][j]` 2. **打印格式控制** - 置空格数量 `rows - i` 实现居中对齐 - `%4d` 保证数字间距均匀,适应多位数显示 --- #### 四、输出效果示例 ``` 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 ``` --- #### 五、时间复杂度与优化 - **时间复杂度**:$O(n^2)$ - **优化方向**:可改用一维数组滚动计算,节省内存空间
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值