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


🔥个人主页艾莉丝努力练剑

❄专栏传送门:《C语言》《数据结构与算法》C语言刷题12天IO强训

🍉学习方向:C/C++方向

⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平



前言:上一篇博客又带大家刷了一些相对来说简单的代码题目,本篇文章我们将继续练习下面的题目。刷前提醒:从本文开始会有大量图案打印题,有的题目挖了大坑,大家做的时候要留意,如果做不出来,看了代码演示后要自己多敲几遍,去理解代码的逻辑。

宇宙安全声明:鉴于博主能力有限,本专栏适用于代码小白刷题,大佬们多多包涵(抱拳)!


目录

正文 

一、 翻转金字塔图案

二、菱形图案

三、K形图案

四、箭形图案

五、反斜线形图案

六、正斜线形图案

七、X形图案

八、空心正方形图案

九、空心三角形图案

结尾 


正文 

一、 翻转金字塔图案

BC62 翻转金字塔图案

1、多组输入;

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 < i;j++)
            {
                printf(" ");
            }
            for(j = 0;j < n-i;j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

二、菱形图案

BC63 菱形图案

1、首先把菱形的打印分为上下2个部分;

2、上下分别控制好行数和空格的个数;

3、多组输入。

#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、每一行的打印完,后边还有空格,可能牛客网的题目处理不严谨,在题目中也没提现,怎么都做不 出来,不过选中输出样例,会发现后边有空格。 

#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组)。

#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):

一般的思路——

#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 的时候,打印 * ,其它就打印空格,我们就能把反斜线形图案打印出来了——

#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):

#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):

#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、找出打印*的打印空格的规律,直接按照规律实现就行。

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

//失败案例
#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;
}

 接下来是代码实现:

#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、找出打印*的规律,剩余的打印空格,直接打印就行。

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

//失败案例
#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;
}

可以通过的写法——

#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、找出打印*的规律,然后直接按照要求打印就行。

#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模式

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值