用c语言打印星号正三角图形(C语言实现打印星号组成的菱形)
用c语言打印星号正三角图形(C语言实现打印星号组成的菱形)2、后五行由星号组成,且星号数量由多到少规律变化。1、前五行由星号组成,且星号数量由少到多规律变化。说来惭愧,看来这是我对for循环没有熟练掌握所导致的。我们先来看一看这道题。大家可以仔细观察一下,这个菱形的组成方式有什么特别的地方。
昨天看到一道题目,“用C语言实现打印星号组成的菱形”,要求用for嵌套循环来完成。
乍一看还蛮简单的,这与我们之前遇到的龟兔赛跑等题目相比,未免也忒简单了些。
但事实证明,我想错了。
我在做这道题目的时候竟然卡壳了。
说来惭愧,看来这是我对for循环没有熟练掌握所导致的。
题目分析我们先来看一看这道题。
大家可以仔细观察一下,这个菱形的组成方式有什么特别的地方。
1、前五行由星号组成,且星号数量由少到多规律变化。
2、后五行由星号组成,且星号数量由多到少规律变化。
3、该星号组成是有空格间隙的,每一行的第一个星号,如果摆在同一行来比较,第二行都会比第一行多出一个空格。
那么,在明白这两点之后,这道题目其实也就好理解了。
先写一个for循环代表行数,因为前五行和后五行有着明显区别,所以要分开来。
先来看后五行,相对来说这个比较好理解一些。
对后五行来说,第一行是由五个星号组成,且第一个星号前面的空格间隙最少,或者说不存在空格间隙。
注意:总共是九行,但我觉得分为前五行和后五行会帮助我们梳理逻辑更加清晰。
那么第一个for循环代表行数,第二个for循环代表空格数,第三行则代表打印星号数。
代码实现//由星号组成的菱形
#include<stdio.h>
int main()
{
//前五行的for循环
for(int i=-5;i<0;i )
{
//空格数
for(int j=1;j<=-i;j ){
printf(" ");
}
//星号数
for(int j=-i-4;j<=4 i;j=j 2){
printf("* ");
}
printf("\n");
}
//后五行的for循环
for(int i=0;i<5;i )
{
//空格数
for(int j=1;j<=i;j ){
printf(" ");
}
//星号数
for(int j=i-4;j<=4-i;j=j 2){
printf("* ");
}
printf("\n");
}
}
结果测试
大家仔细想一想,分情况讨论使用for循环是不是太麻烦了些,这两次情况是不是有共同点的时候,仔细观察一下,就可以发现,我们可以把两次情况给结合起来,在对数据i和j进行一定的处理,比方说这里得到的正值可以用绝对值来代替,那不就完美解决这个问题了吗?
那么在C语言当中我们用什么来表示绝对值呢,答案是要引入一个库,也就是math库,然后调用其中的abs取绝对值函数。
//由星号组成的菱形
#include<stdio.h>
#include<math.h>
int main()
{
//九行的for循环
for(int i=-5;i<5;i )
{
//空格数
for(int j=1;j<=abs(i);j ){
printf(" ");
}
//星号数
for(int j=abs(i)-4;j<=4-abs(i);j=j 2){
printf("* ");
}
printf("\n");
}
}
可以发现,代码量减少了。
总结总的来说,这段时间需要好好反思一下自己,没有专注于提升技术,连这么简单的题目都不会做,实在是不应该了。