题目1:
思路:
如果我们要打印一个实心正方形,其实就是一个二维数组,i控制行,j控制列,行列不需要控制,arr[i][j]直接打印星号即可。
对于空心正方形,我们只需要控制行和列的条件,当i== 0或i<n-1,j==0或j<n-1条件成立时,我们才打印星号,其他地方打印空格即可。
代码实现如下:
c
#include <stdio.h>
int main()
{
int arr[20][20] = { 0 };
int n = 0;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
//1.打印星号
if ((i == 0) || (i == n - 1) || (j == 0) || (j == n - 1))
{
printf("* ");
}
//2.打印空格
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
题目2:
思路:
通过观察我们发现,当i == j时,打印主对角线的星号,当i + j ==n-1时,打印次对角线的星号,其他地方打印空格即可。
代码实现如下:
c
#include <stdio.h>
int main()
{
int arr[20][20] = { 0 };
int n = 0;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
//1.打印星号
if ((i == j) || (i + j) == n-1)
{
printf("*");
}
//2.打印空格
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
题目3:
思路:我们分为上半部分和下半部分的打印:
c
#include <stdio.h>
int main()
{
int line = 0;
scanf("%d", &line);
//打印上半部分
for (int i = 0; i < line; i++)
{
//1.打印空格
for (int j = 0; j < line - 1 - i; j++)
{
printf(" ");
}
//2.打印星号
for (int j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
//打印下半部分
for (int i = 0; i < line - 1; i++)
{
//1.打印空格
for (int j = 0; j < i + 1; j++)
{
printf(" ");
}
//2.打印星号
for (int j = 0; j < (line - 1 - i) * 2 - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}