牛客网刷题 | BC102 带空格直角三角形图案

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案。

输入描述:

多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。


思路 :

仔细观察题目答案的输出可以发现

每一次打印都是两个空格加上一个空格一个星号

先打印一行的内容 j=0;j<n-1-i;j++ 这是控制打印两个空格的代码

i是0的时候等于没减 i是1的时候减去1 i是2的时候减去2 i是3的时候减去3

(减去空格的个数)

j=0;j<=i;j++  这是控制星号的代码

i是从0进入来的 当i等于1的时候 打印一次 * i等于2的时候打印两次 *

以此类推。


  1. 初始化变量:首先,你需要定义一个变量来存储用户输入的整数,这个整数表示三角形的行数。

  2. 读取用户输入:使用scanf函数读取用户输入的整数,并存储在之前定义的变量中。

  3. 输入验证:验证用户输入的整数是否在题目要求的范围内(2到20)。如果不在这个范围内,可以打印一条错误消息并退出程序。

  4. 外层循环:设置一个for循环,循环的迭代次数等于用户输入的整数。这个循环将控制三角形的行数。

  5. 打印空格:在每行的开始,你需要打印一定数量的空格,以便星号能够正确对齐形成三角形。空格的数量随着行数的增加而减少。可以使用另一个for循环来打印空格,循环的次数为n - i,其中n是三角形的行数,i是当前的行数。

  6. 内层循环:在外层循环内部,设置另一个for循环来打印星号。这个循环的迭代次数等于当前行数i。在每次迭代中,打印一个星号和一个空格。

  7. 换行:在内层循环结束后,使用printf("\n");打印一个换行符,以便开始新的一行。

  8. 循环结束:外层循环继续执行,直到打印完所有行。

  9. 程序结束:当外层循环完成所有迭代后,三角形图案打印完毕,程序可以正常结束。


代码 1 :

/*思路 : 仔细观察题目答案的输出可以发现 
每一次打印都是两个空格加上一个空格一个星号
先打印一行的内容 j=0;j<n-1-i;j++ 这是控制打印两个空格的代码
i是0的时候等于没减 i是1的时候减去1 i是2的时候减去2 i是3的时候减去3
(减去空格的个数)
j=0;j<=i;j++  这是控制星号的代码
i是从0进入来的 当i等于1的时候 打印一次 * i等于2的时候打印两次 * 
以此类推*/

# include <stdio.h>
int main()

{
    int n = 0;
    while(scanf("%d",&n)!=EOF)
    {
        //控制行数
        int i = 0;
        for(i = 0; i<n;i++)

        {
        //控制每行的两个空格 + 一个空格和一颗*
        int j = 0;
        for(j = 0; j<n-1-i;j++)
            {   
                printf("  ");
            }
        for(j = 0; j<=i; j++)
            {
                printf("* ");
            }
        printf("\n");
        }
        
    }
    return 0;
}

#include <stdio.h> // 包含标准输入输出库

int main() // 主函数的开始
{
    int n = 0; // 定义一个整型变量n,用于存储用户输入的行数
    // 使用while循环来处理多组输入直到文件结束符EOF
    while(scanf("%d",&n)!=EOF)
    {
        // 控制行数的循环开始
        int i = 0; // 定义一个整型变量i,用于控制外层循环,从0开始,直到n-1
        for(i = 0; i<n;i++) // 外层循环,i从0到n-1
        {
            // 控制每行空格数量的循环开始
            int j = 0; // 定义一个整型变量j,用于控制内层循环
            // 打印每行前面的空格,空格数量为n-1-i,随着i的增加,空格数量减少
            for(j = 0; j<n-1-i;j++) // 内层循环1,打印空格
            {   
                printf("  "); // 打印两个空格
            }
            // 控制每行星号数量的循环开始
            // 打印星号,星号数量为i+1,随着i的增加,星号数量增加
            for(j = 0; j<=i; j++) // 内层循环2,打印星号和空格
            {
                printf("* "); // 打印一个星号和一个空格
            }
            printf("\n"); // 每行结束后打印换行符,以便开始新一行的打印
        }
    }
    return 0; // 主函数结束,返回0表示程序正常结束
}

 这段代码首先包含了stdio.h头文件,这是进行输入输出操作所必需的。main函数是程序的入口点。程序使用while循环来处理多组输入,直到遇到EOF。

在每次循环中,首先定义并初始化了变量i,它将控制外层for循环的迭代次数,即三角形的行数。

然后,程序有两个嵌套的for循环:第一个内层循环用于打印每行开始的空格,第二个内层循环用于打印星号和每个星号后的空格。

每完成一行的打印后,程序使用printf("\n")来换行,准备打印下一行。

当输入结束时,while循环结束,程序返回0,表示正常退出。

代码 2 :

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n;
    while (scanf("%d",&n)!=EOF){
        for (int i=n;i>0;i--){
            for (int j=1;j<=n;j++)
                j>=i?printf("* "):printf("  ");
            printf("\n");
        }
    }
    return 0;
}

#include<stdio.h> // 包含标准输入输出库
#include<stdlib.h> // 包含标准库,这里用于EOF的宏定义

int main() // 主函数的开始
{
    int n; // 定义一个整型变量n,用于存储用户输入的行数

    // 使用while循环来处理多组输入直到文件结束符EOF
    while (scanf("%d",&n)!=EOF)
    {
        // 外层循环,从n开始递减到1
        for (int i = n; i > 0; i--)
        {
            // 内层循环,从1到n
            for (int j = 1; j <= n; j++)
            {
                // 使用三元运算符进行条件判断
                // 如果j大于等于i,则打印"* "
                // 否则打印"  "
                j >= i ? printf("* ") : printf("  ");
            }
            printf("\n"); // 每行结束后打印换行符,以便开始新一行的打印
        }
    }
    return 0; // 主函数结束,返回0表示程序正常结束
}

代码开始部分包含了两个头文件:stdio.h用于输入输出操作,stdlib.h用于EOF的宏定义。main函数是程序的入口点。

程序使用while循环来处理多组输入,直到遇到EOF。在每次循环中,首先读取用户输入的整数n,这个整数表示三角形的行数。

外层循环使用一个倒序的for循环,从n开始递减到1。内层循环是一个从1到n的顺序for循环。在内层循环中,使用三元运算符(条件运算符)? :来进行条件判断:如果当前的循环变量j大于等于外层循环变量i,则打印一个星号和一个空格"* ",否则打印两个空格" "

每完成一行的打印后,使用printf("\n")来换行,准备打印下一行。当输入结束时,while循环结束,程序返回0,表示正常退出。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值