弟弟1•空心正方形图案

本文详细分析了牛客编程题目中如何使用嵌套循环和if-else结构来打印空心正方形图案,重点讲解了每行打印和换行的控制过程。
摘要由CSDN通过智能技术生成

空心正方形图案

题目(牛客)

牛客

题解

 #include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
                printf("* ");
            else
                printf("  ");
        }
        printf("\n");
    }

    return 0;
}

梓宸

分析(n=4的情况)

 关键
以下黄色标记是能够进入ifelse的原因

进入循环【最上面一行的打印】

i == 0;j == 0
进入if,目前 printf("* "); 执行了1次
i == 0;j == 1
进入if,目前 printf("* "); 执行了2次
i == 0;j == 2
进入if,目前 printf("* "); 了3次
i == 0;j == 3
进入if,目前 printf("* "); 了4次
至此,效果如下:
 i==0

跳出内层循环【换行】

内层循环中j < 4已经全部执行完,跳出内层循环,执行printf(“\n”);
目前是第1次换行
至此,效果如下:
第一次换行

进入循环【第二行的打印】

i == 1;j == 0
进入if , 目前 printf("* "); 执行了1次
至此,效果如下:在这里插入图片描述
能够进入else,是因为 if 全都不满足
i == 1;j == 1
进入else,目前 printf(" "); 执行了1次
至此,效果如下:
在这里插入图片描述

i == 1;j == 2
进入else,目前 printf(" "); 执行了2次
至此,效果如下:
在这里插入图片描述
i == 1;j == 3
进入if , 目前 printf("* "); 执行了2次
【因为j == n-1,即j == 4 - 1 = 3
至此,效果如下:
在这里插入图片描述

跳出内层循环【换行】

内层循环中j < 4已经全部执行完,跳出内层循环,执行printf(“\n”);
目前是第2次换行
至此,效果如下:
在这里插入图片描述

进入循环【第三行的打印】

与第二行的打印相似,只是变成了i == 2,第二行的懂了就不用看这个了
i == 2;j == 0
进入if , 目前 printf("* "); 执行了1次
至此,效果如下:
在这里插入图片描述
能够进入else,是因为 if 全都不满足
i == 2;j == 1
进入else,目前 printf(" "); 执行了1次
至此,效果如下:
在这里插入图片描述
i == 2;j == 2
进入else,目前 printf(" "); 执行了2次
至此,效果如下:
在这里插入图片描述
i == 2;j == 3
进入if , 目前 printf("* "); 执行了2次
【因为j == n-1,即j == 4 - 1 = 3
至此,效果如下:
在这里插入图片描述

跳出内层循环【换行】

内层循环中j < 4已经全部执行完,跳出内层循环,执行printf(“\n”);
目前是第3次换行
至此,效果如下:
在这里插入图片描述

进入循环【最下面一行的打印】

与最上面一行的打印相似,只是变成了i == 3,最上面一行的懂了就不用看这个了
i == 3;j == 0
进入if,目前 printf("* "); 执行了1次
i == 3;j == 1
进入if,目前 printf("* "); 执行了2次
i == 3;j == 2
进入if,目前 printf("* "); 了3次
i == 3;j == 3
进入if,目前 printf("* "); 了4次
至此,效果如下:
在这里插入图片描述

悟了

2种或以上的字符打印or频繁出现的操作⇒选择语句【如if…else
换行+多个循环⇒明确换行在哪几层循环之间

❤️❤️❤️❤️❤️❤️恭喜!恭喜!又收了一名小弟!❤️❤️❤️❤️❤️❤️

  • 18
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值