- 前言:第一章我们学习了各种图形的打印例如直角三角形,金字塔,菱形,翻转金字塔,翻转三角形等等。现在让我们一起开始第二章的学习吧(第二章的图形打印略微难一点,各位做好心理准备噢)🌈🌈
- 目录:k形图案打印
箭形打印
反斜线型图案
正斜线型图案
x型图案
空心正方形图案
空心三角形图案
废话不多说让我们开始学习吧!👊👊
第一题,上题
以示例1来进行分析的话,会发现k型由两部分组成,上部分有两层,第一层的字符数有3个空格数为0,第二层的字符数有两个空格有一个。下部分有三层,第一层有一个字符两个空格,第二层有两个字符一个空格,第三层有三个字符0个空格。来直接上代码🎄🎄
#include <stdio.h>
int main()
{
int n = 0;
while(~(scanf("%d",&n)))
{
int i = 0;
for(i=0;i<n;i++)//控制打印总行数//打印上面一部分
{
//打印每一行
int j = 0;
for(j=0;j<n+1-i;j++)
{
printf("* ");
}
for(j=0;j<i;j++)
{
printf(" ");
}
printf("\n");
}
for(i=0;i<n+1;i++)//n=2
{
int j =0;
for(j=0;j<=i;j++)
{
printf("* ");
}
for(j=0;j<n-i;j++)//j<n-i
{
printf(" ");
}
printf("\n");
}
}
return 0;
}
同时要注意一点,我们并不是简单的打印一个k型,当我们把示例中的图形粘贴到代码段中会发现在字符的后面跟有空格,如下图,所以这是一道比较坑人的题目。这一题就这么愉快得结束了
第二题打印箭形图案 🍇
⭐️做题第一步还是先来分析题目,箭形有上下两部分组成。这就说明我们在写代码是要完成箭形图案的打印要进行两部分来写。同时需要注意输出是用“*”而并不是用“* ”(*加空格的模式),要特别强调一点*前面的空格也要打印,不然代码会出错⭐️
#include <stdio.h>
int main()
{
int n = 0;
while(~(scanf("%d",&n)))
{
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++)//n=3,n+1=4,i<n+1,i=0123
{
printf(" ");
}
for(j=0;j<n+1-i;j++)
{
printf("*");
}
printf("\n");
}
}
return 0;
}
在写打印图型的相关题目时要进行分析,这样才不会出错。一步步进行分析,一层层来拆解,把思路理顺这样写出来的代码不会出错。🌠
不知不觉就来到反斜线的图形打印了,一步步分析感觉题目也不会太难🎇
注意点呢也和上题相同,在打印时我们要先来确定要不要打印字符前的空格,将图形放入代码段中会发现这个反斜杠的图案其实是在·正方形中,那就说明我们也要打印空格·💝
如果我们用二维数组的方式来看待这题,那么这道题将会变得特别简单。i表示行,j表示列。在正方形中反斜杠所在的位置 分别是00,11,22,33,44.这说明在这个正方形中反斜杠表示的是i==j.此时代码就会变得简单꒰⑅ᵕ༚ᵕ꒱
#include <stdio.h>
int main()
{
int n = 0;
while(~(scanf("%d",&n)))
{
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;
}
下一题正斜杠图型的打印,。这一题与上题非常相似,那么我们二维的方式来解决。依旧是i表示行j表示列,但这题不再是i==j,那么我们将如何思考呢。🤔🤔
有这个图可以发现03,12,21,30,这几个和会等于3,所以可以得到规律i+j==n-1👈👈
#include <stdio.h>
int main()
{
int n = 0;
while(~(scanf("%d",&n)))
{
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;
}
这里的注意点也同上一题一样。
OK,让我们来到x形图案的打印,这题呢就是把正斜线和反斜线组合起来打印😄
有了前两题的基础 话不多说直接上代码,这里依旧要打印前面的空格依旧用二维的方式
#include <stdio.h>
int main()
{
int n = 0;
while(~(scanf("%d",&n)))
{
int i =0;
for(i=0;i<n;i++)
{
int j = 0;
for(j=0;j<n;j++)
{
if(i==j||i+j==n-1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
也没有很难嘛,让我们一起来迎接倒数第二题打印空心正方形
依旧用二维的方式来解决,i表示行j表示列,这空心正方形中i=0和i=3,j=0和j=3是打印图形。由此我们就可以得到解决的思路,来,上代码
#include <stdio.h>
int main()
{
int n = 0;
while(~(scanf("%d",&n)))
{
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;
}
最后一题啦,能坚持到这的宝子们那小编必须给你点个赞👍👍
最后一题打印空心三角形
这里要小心呢,宝子们这里可有坑呢
这题的空心三角形,字符后面的空格也要打印。所以我们可以用打印正方形的方式来解决这道题
#include <stdio.h>
int main()
{
int n = 0;
while(~(scanf("%d",&n)))
{
int i = 0;
for(i=0;i<n;i++)
{
int j = 0;
for(j=0;j<n;j++)
{
if(j==0||i==n-1||i==j)
{
printf("* ");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
好的,宝子们第二章的内容就到此结束。过两天小编会再出一个番外篇,用于解决在打印图形时可能会遇到的各种问题。敬请期待~
创作不易,还望宝子们可以点点赞😘