首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言刷题】第七天:加量加餐继续,代码题训练,熟练IO模式

【C语言刷题】第七天:加量加餐继续,代码题训练,熟练IO模式

作者头像
艾莉丝努力练剑
发布2025-11-13 10:02:02
发布2025-11-13 10:02:02
830
举报
文章被收录于专栏:C / C++C / C++

🔥个人主页艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》C语言刷题12天IO强训 🍉学习方向:C/C++方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平



前言:上一篇博客又带大家刷了一些相对来说简单的代码题目,本篇文章我们将继续练习下面的题目。刷前提醒:从本文开始会有大量图案打印题,有的题目挖了大坑,大家做的时候要留意,如果做不出来,看了代码演示后要自己多敲几遍,去理解代码的逻辑。 宇宙安全声明:鉴于博主能力有限,本专栏适用于代码小白刷题,大佬们多多包涵(抱拳)!

正文

一、 翻转金字塔图案

BC62 翻转金字塔图案

1、多组输入; 2、控制好行数,控制好每一行前面的空格数。

代码语言:javascript
复制
#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 < i;j++)
            {
                printf(" ");
            }
            for(j = 0;j < n-i;j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

二、菱形图案

BC63 菱形图案

1、首先把菱形的打印分为上下2个部分; 2、上下分别控制好行数和空格的个数; 3、多组输入。

代码语言:javascript
复制
#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 - i;j++)
            {
                printf(" ");
            }
            for(j = 0;j <= i;j++)
            {
                printf("* ");
            }
            printf("\n");
        }
        for(i = 0;i < n + 1;i++)
        {
            int j = 0;
            for(j = 0;j < i;j++)
            {
                printf(" ");
            }
            for(j = 0;j <n+1-i;j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

三、K形图案

BC64 K形图案

1、多行输入; 2、图形的打印分为上下2个部分; 3、每一行的打印完,后边还有空格,可能牛客网的题目处理不严谨,在题目中也没提现,怎么都做不 出来,不过选中输出样例,会发现后边有空格。

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int n = 0;
    while(scanf("%d",&n) != EOF)
    {
        int i = 0;
        for(i = n;i >= 0;i--)
        {
            int j = 0;
            for(j = 0;j <= i;j++)
            {
                printf("* ");
            }
            for(j = i;j < n;j++)
            {
                printf(" ");
            }
            printf("\n");
        }
        for(i = 1;i <= n;i++)
        {
            int j = 0;
            for(j = 0;j <= i;j++)
            {
                printf("* ");
            }
            for(j = i;j< n;j++)
            {
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

四、箭形图案

BC65 箭形图案

1、多组输入; 2、 图形分为上下2个部分打印; 3、 每一行前面是空格,后边是*(前面2个空格为1组)。

代码语言:javascript
复制
#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 - i;j++)
            {
                printf("  ");
            }
            for(j = 0;j <= i;j++)
            {
                printf("*");
            }
            printf("\n");
        }
        for(i = 0;i < n + 1;i++)
        {
            int j = 0;
            for(j = 0;j < i;j++)
            {
                printf("  ");
            }
            for(j = 0;j < n + 1 - i;j++)
            {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}

五、反斜线形图案

BC66 反斜线形图案

1、多组输入; 2、控制好每行的打印,前面是空格,后边是*; 3、*的后边还有空格,一行要打印够n和字符的; 4、方法2找出打印*的行号和列号的规律是 i == j

思路(1):

一般的思路——

代码语言:javascript
复制
#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 < i; j++)
            {
                printf(" ");
            }
                printf("* ");
            for(j = 0;j < n;j++)
            {
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

思路(2):

我们发现:i 等于j 的时候,打印 * ,其它就打印空格,我们就能把反斜线形图案打印出来了——

代码语言:javascript
复制
#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;j++)
            {
                if(i == j)
                printf("* ");
                else
                 printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

六、正斜线形图案

BC66 反斜线形图案

1、多组输入; 2、控制好每行的打印,前面是空格,后边是*; 3、*的后边还有空格,一行要打印够n和字符的; 4、方法2找出打印*的行号和列好的规律是i+j == n-1。

写法(1):

代码语言:javascript
复制
#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(" ");
            }
             printf("*");
            for(j = n - i;j < n;j++)
            {
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

写法(2):

代码语言:javascript
复制
#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;j++)
            {
                if(i + j == n-1)
                printf("*");
                else
                printf(" ");
            }
        printf("\n");
        }
    }
    return 0;
}

七、X形图案

BC68 X形图案

1、多组输入; 2、找出打印*的打印空格的规律,直接按照规律实现就行。

博主展示了这么多次可行的代码,也给大家看看博主翻车的代码,大家帮博主看看,博主写的为什么会报错——

代码语言:javascript
复制
//失败案例
#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;j++)
            {
                if(i == j)
                printf("*");
                else
                 printf(" ");
            }
            printf("\n");
        }
            for(i = 0;i < n;i++)
        {
            int j = 0;
            for(j = 0;j < n;j++)
            {
                if(i + j == n - 1)
                printf("*");
                else
                 printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

接下来是代码实现:

代码语言:javascript
复制
#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;j++)
            {
                if(i == j)
                printf("*");
                else if(i + j == n - 1)
                printf("*");
                else
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

八、空心正方形图案

BC69 空心正方形图案

1、多行输入; 2、找出打印*的规律,剩余的打印空格,直接打印就行。

本题博主也展示一下失败案例——

代码语言:javascript
复制
//失败案例
#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;j++)
            {
                for(i = 1;i < n-1;i++)
                {
                    for(j = 1;j < n - 1;j++)
                    {
                        printf(" ");
                    }
                }
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}

可以通过的写法——

代码语言:javascript
复制
#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;j++)
            {
                    if(i == 0 || i == n - 1)
                    printf("* ");
                    else if(j == 0 || j == n - 1)
                    printf("* ");
                    else
                     printf("  ");
            }
            printf("\n");
        }
    }
    return 0;
}

九、空心三角形图案

BC70 空心三角形图案

1、多组输入; 2、找出打印*的规律,然后直接按照要求打印就行。

代码语言:javascript
复制
#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;j++)
         {
            if(i == j || j == 0 || i == n-1)
            printf("* ");
            else
            printf("  ");
         }
         printf("\n");
      }
    }
    return 0;
}

结尾

往期回顾:

【C语言刷题】第六天:继续加量加餐,代码题训练,熟练IO模式

【C语言刷题】第五天:继续加量加餐,代码题训练,熟练IO模式

【C语言刷题】第四天:继续加量加餐,代码题入门,熟练IO模式

【C语言刷题】第三天:继续加量加餐,代码题入门,熟练IO模式

【C语言刷题】第二天:加量加餐,代码入门,熟悉IO模式

【C语言刷题】第一天:简单代码入门,熟悉IO模式

结语:本篇文章带大家刷了九道题目,依旧是成堆的图案题,大家要结合二维数组的图像,认真思考一下,就能想出来。本文到这里就结束了,希望对友友们有所帮助。本文的代码相比起之前的题目,难度上已经有了加深,大家要上手操作,后面的代码题难度上整体是逐渐递增的,博主控制了难度,这样友友们能比较丝滑地上手敲下去。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文
    • 一、 翻转金字塔图案
    • 二、菱形图案
    • 三、K形图案
    • 四、箭形图案
    • 五、反斜线形图案
    • 六、正斜线形图案
    • 七、X形图案
    • 八、空心正方形图案
    • 九、空心三角形图案
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档