前言
本章节主要讲解牛客网练习题BC104翻转金字塔图案 — BC109 正斜线形图案
练习题
BC104 翻转金字塔图案
题目要求:
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转金字塔图案。
输入描述:
多组输入,一个整数(2~20),表示翻转金字塔边的长度,即“*”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“”组成的金字塔,每个“”后面有一个空格。
示例1
解答:
代码如下:
#include<stdio.h>
int main()
{
//BC104 翻转金字塔图案
int n = 0;
//多组输入
while (scanf("%d", &n) != EOF)
{
//行的控制
for (int i = 0; i < n; i++)
{
//打印空格
for (int j = 0; j < i; j++)
{
printf(" ");
}
//打印*号
for (int j = 0; j < n - i; j++)
{
printf("* ");
}
//换行
printf("\n");
}
}
return 0;
}
运行结果:
分析:
- 题目要求多组输入,我们使用while循环,当scanf返回值不等于EOF(-1)时,能实现多次输入。
- 行的控制,比如要打印4行,就直接初始化 int i = 0; i < n; i++,就可以完成,打印的行数。
- 看下图,我们需要使用一个for循环打印出空格,那么可以看到空格是上到下循环递增的,所以for循环的表达式是 int j = 0; j < i; j++ 。
- 当我们完成了空格的打印,那么对于* 号的打印就没问题了,我们需要一个for循环来完成,可以看到图形星号是从上到下递减的,那么for循环的表达式为 int j = 0; j < n - i; j++
- 最后打印完一行的图形,需要换行到下一行
BC105 菱形图案
题目要求:
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。
输入描述:
多组输入,一个整数(2~20)。
输出描述:
针对每行输入,输出用“”组成的菱形,每个“”后面有一个空格。
示例1
解答:
代码如下:
#include<stdio.h>
int main()
{
//BC105 菱形图案
int n = 0;
//多组输入
while (scanf("%d", &n) != EOF)
{
//打印上半行
for (int i = 0; i < n + 1; i++)
{
for (int j = 0; j < n - i; j++)
{
printf(" ");
}
for (int j = 0; j <= i; j++)
{
printf("* ");
}
printf("\n");
}
//打印下半行
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
printf(" ");
}
for (int j = 0; j < n - i; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
运行结果:
分析:
- 一样的要求多组输入,使用while循环,当scanf的返回值不等于EOF(-1)时,就能够进行多组的输入 。
上半行打印:
- 先进行打印上半行的图形,如下图,我们可以看到其实就是打印一个三角形。对于行的控制,我们输入2时,输出其实是多了一行,所以我们需要n+1,(int i = 0; i < n + 1; i++) 。
- 对于图形的打印,我们先打印空格,发现空格是依次递减的,我们使用for循环,表达式为,(int j = 0; j < n - i; j++)
- 然后是图形的打印,图形是依次递增的,我们用for循环,表达式为 (int j = 0; j <= i; j++) ,就能够完成上半行的图形打印,每当打印完一行就换行。
下半行打印:
-
下半行的打印其实就是一个倒三角图形,也是一样对于行的控制,for循环,表达式为 (int i = 0; i < n; i++)
-
对于空格的打印,空格是依次递增,依然需要for循环,表达式为(int j = 0; j <= i; j++)
-
对于图形的打印,图形是依次递减的,也是需要for循环,表达为(int j = 0; j < n - i; j++),我们可以看到图形之间是存在空格的,所以在打印时,需要在*后面加一个空格键,最后打印完一行进行换行。
BC106 K形图案
题目要求:
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的K形图案。
输入描述:
多组输入,一个整数(2~20)。
输出描述:
针对每行输入,输出用“”组成的K形,每个“”后面有一个空格。
示例1
解答:
代码如下:
#include<stdio.h>
int main()
{
//BC106 K形图案
int n = 0;
while (scanf("%d", &n) != EOF)
{
//打印上半行
for (int i = 0; i < n + 1; i++)
{
for (int j = 0; j < n - i + 1; j++)
{
printf("* ");
}
printf("\n");
}
//打印下半行
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i + 1; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
运行结果:
分析:
- 一样的要求多组输入,使用while循环,当scanf的返回值不等于EOF(-1)时,就能够进行多组的输入。
打印上半行 :
- 对于行的控制,当我输入2时,输出的是3行,所以需要n+1,for循环表达式为:int i = 0; i < n + 1; i++
- 星号的打印,发现是依次递减的,中间存在空格,所以要加上空格,for循环表达式为: int j = 0; j < n - i + 1; j++
- 每打印完一行,需要换行
打印下半行:
- 行的控制,没问题,输入几,就输出几行
- 图形的打印,也是需要for循环,表达式为:int j = 0; j <= i + 1; j++,每次打印完一行需要进行换行。
BC107 箭形图案
题目要求:
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。
输入描述:
本题多组输入,每行一个整数(2~20)。
输出描述:
针对每行输入,输出用“*”组成的箭形。
示例1
解答:
代码如下:
#include<stdio.h>
int main()
{
//BC107 箭形图案
int n = 0;
while (scanf("%d", &n) != EOF)
{
//打印上半行
for (int i = 0; i < n + 1; i++)
{
for (int j = 0; j < n - i; j++)
{
printf(" ");
}
for (int j = 0; j <= i; j++)
{
printf("*");
}
printf("\n");
}
//打印下半行
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
printf(" ");
}
for (int j = 0; j < n - i; j++)
{
printf("*");
}
printf("\n");
}
}
return 0;
}
运行结果:
分析:
- 一样的要求多组输入,使用while循环,当scanf的返回值不等于EOF(-1)时,就能够进行多组的输入。
打印上半行:
- 行的控制,发现输入5,输出是6行,那么n+1,for循环表达式为:int i = 0; i < n + 1; i++。
- 空格的打印,可以看到是依次递减的,我们用for循环,表达式为:int j = 0; j < n - i; j++ , 注意,这里的空格是2个空格键的距离。
- 星号的打印,可以看到星号是依次递增的,并且星号之间不存在空格,我们使用for循环,表达式为:int j = 0; j <= i; j++ ,
- 最后,每次打印完一行,需要进行换行
打印下半行:
- 行的控制,可以看到输入几行,输出几行,使用for循环,表达式为:int i = 0; i < n; i++ 。
- 空格的打印,空格打印是2个空格键的距离,我们发现是依次递增的,我们使用for循环,表达式:int j = 0; j <= i; j++。
- 星号的打印,星号的打印之间不存在空格,并且,我们发现星号是依次递减的,也是一样使用for循环,表达式为:int j = 0; j < n - i; j++。
- 最后,每次打印完一行,需要进行换行。
BC108 反斜线形图案
题目要求:
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的反斜线形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成反斜线的“*”的数量。
输出描述:
针对每行输入,输出用“*”组成的反斜线。
示例1
解答:
代码如下:
#include<stdio.h>
int main()
{
//BC108 反斜线形图案
int n = 0;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i == j)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
运行结果:
分析:
- 一样的要求多组输入,使用while循环,当scanf的返回值不等于EOF(-1)时,就能够进行多组的输入。
- 行的控制,输入几,输出几行,使用for循环,表达式为:int i = 0; i < n; i++
- 列的控制,需要使用for循环,然后使用 if 判断,我们发现,每次打印进行换行,是依次靠近右边的,那么,表达式:如果 i == j ,打印星号,否则走else,打印空格。
- 每次打印完一行,需要进行换行
BC109 正斜线形图案
题目要求:
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正斜线形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成正斜线的“*”的数量。
输出描述:
针对每行输入,输出用“*”组成的正斜线。
示例1
解答:
代码如下:
#include<stdio.h>
int main()
{
//BC109 正斜线形图案
int n = 0;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (j == n - i - 1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
运行结果:
分析:
- 一样的要求多组输入,使用while循环,当scanf的返回值不等于EOF(-1)时,就能够进行多组的输入。
- 行的控制,输入几,输出几行,使用for循环,表达式为:int i = 0; i < n; i++。
- 图形的打印,需要使用for循环,然后 if 判断,看星号打印的起始点,每次打印换行依次靠近左边,那么,判断表达式为:j == n - i - 1 , 满足打印星号,否则走else,打印空格。
- 每次打印完一行,需要进行换行。
总结
以上就是今天要讲的内容,感谢大家的阅读,希望能够给个大拇哥,感谢老板们~