当用c语言打印出以下类型的图形,第一眼看下去往往没有任何头绪,甚至用了很复杂的代码才能打印出来。其实想打印出这些图形往往不难,只要清楚其中的规律即可,用对方法后甚至几行代码就可以完成打印要求。
虽然该图形有行、列,很像一个二维数组,但不需要二维数组也可以实现要求。
思路:观察要打印这十个*号的坐标,发现他是有一定的规律的:
红色斜线的横坐标,竖坐标的数值是一样的。蓝色斜线的横坐标,竖坐标的值相加起来都等于4,然而这是一个5行5列的图形,也就是说蓝色斜线的横坐标,竖坐标的值相加等于图形规格(行数/列数-1)的 值。
比如要打印一个a行a列的x形图形,那么只有在行和列相等、行+列等于a-1的情况下才打印*号,其他情况打印空格就行。代码如下:
#include
int main()
{
int a = 0;
scanf("%d", &a);
int i = 0;
for (i = 0; i < a; i++)
{
int j = 0;
for (j = 0; j < a; j++)
{
if (i == j || i + j == a-1)//明白要打印的*坐标后,给出判断语句打印
printf("x");
else
printf(" ");
}
printf("\n");
}
return 0;
}
运行结果:
在明白上述x形的打印后,打印直角三角形同理,从元素的坐标下手,观察他们的特性:
首先这是一个5x5的图形,其次发现空格坐标的行与列加起来的数值最大也不会超过5-1,那么就好办了,我们只需要判断一个条件,只要坐标的行与列的值加起来<总行数/总列数-1的值就打印空格,其他情况打印*号就行。
#include
int main()
{
int a = 0;
scanf("%d", &a);
int i = 0;
for (i = 0; i < a; i++)
{
int j = 0;
for (j = 0; j < a; j++)
{
if (j + i < a - 1)//满足这个条件就打印空格,否则打印*号
printf(" ");
else
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
打印菱形可以分两步走,先打印菱形的上半区,再打印菱形的下半区。确认好上半区的行数a后,下半区的行数为:a-1。这样一来输入要打印的上半区的行数就能确认整个菱形的大小了。
从上图中得出随着行数的不断变化,空格、*号的数量也发生了变化。上半区的第一行空格数是a-1,第二行是a-1-行数变化值,这么一个递减的规律。*号是每行+2的递增规律。
下半区的空格的数量=行数,*号的数量等于(2*(a-行数变化值)-3)。确定好这些条件就可以写出代码:
#include
int main()
{
int a = 0;
scanf("%d", &a);
int i = 0;
int j = 0;
//上半区打印
for (i = 0; i < a; i++)//上半区a行
{
for (j = 0; j < a-1-i; j++)//随着行数增大空格数量不断减少
{
printf(" ");
}
for (j = 0; j < 2 * i + 1; j++)//2 * i + 1表示随着行数增大*号不断增多
{
printf("*");
}
printf("\n");
}
//下半区打印
for (i = 0; i < a - 1; i++)//下半区只有a-1行
{
for (j = 0; j <= i; j++)
{
printf(" ");
}
for (j = 0; j < 2 * (a - i) - 3; j++)// 2 * (a - i) - 3表示随着行数增大*号不断减少
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果:
如果本文对你起到了帮助,希望可以点赞+关注+收藏哦!如果有遗漏的地方欢迎大家在评论区补充~!!
谢谢大家!!