空心正方形图案
是目录呐
题目(牛客)
题解
#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的情况)
以下黄色标记是能够进入if 或 else的原因
进入循环【最上面一行的打印】
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次
至此,效果如下:
跳出内层循环【换行】
内层循环中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】
换行+多个循环⇒明确换行在哪几层循环之间
❤️❤️❤️❤️❤️❤️恭喜!恭喜!又收了一名小弟!❤️❤️❤️❤️❤️❤️