快捷搜索:  汽车  科技

用c语言打印星号正三角图形(C语言实现打印星号组成的菱形)

用c语言打印星号正三角图形(C语言实现打印星号组成的菱形)2、后五行由星号组成,且星号数量由多到少规律变化。1、前五行由星号组成,且星号数量由少到多规律变化。说来惭愧,看来这是我对for循环没有熟练掌握所导致的。我们先来看一看这道题。大家可以仔细观察一下,这个菱形的组成方式有什么特别的地方。

昨天看到一道题目,“用C语言实现打印星号组成的菱形”,要求用for嵌套循环来完成。

乍一看还蛮简单的,这与我们之前遇到的龟兔赛跑等题目相比,未免也忒简单了些。

但事实证明,我想错了。

我在做这道题目的时候竟然卡壳了。

说来惭愧,看来这是我对for循环没有熟练掌握所导致的。

题目分析

我们先来看一看这道题。

用c语言打印星号正三角图形(C语言实现打印星号组成的菱形)(1)

大家可以仔细观察一下,这个菱形的组成方式有什么特别的地方。

1、前五行由星号组成,且星号数量由少到多规律变化。

2、后五行由星号组成,且星号数量由多到少规律变化。

3、该星号组成是有空格间隙的,每一行的第一个星号,如果摆在同一行来比较,第二行都会比第一行多出一个空格。

那么,在明白这两点之后,这道题目其实也就好理解了。

先写一个for循环代表行数,因为前五行和后五行有着明显区别,所以要分开来。

先来看后五行,相对来说这个比较好理解一些。

对后五行来说,第一行是由五个星号组成,且第一个星号前面的空格间隙最少,或者说不存在空格间隙。

注意:总共是九行,但我觉得分为前五行和后五行会帮助我们梳理逻辑更加清晰。

用c语言打印星号正三角图形(C语言实现打印星号组成的菱形)(2)

那么第一个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"); } }结果测试

用c语言打印星号正三角图形(C语言实现打印星号组成的菱形)(3)

额外思考

大家仔细想一想,分情况讨论使用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"); } }

用c语言打印星号正三角图形(C语言实现打印星号组成的菱形)(4)

可以发现,代码量减少了。

总结

总的来说,这段时间需要好好反思一下自己,没有专注于提升技术,连这么简单的题目都不会做,实在是不应该了。

猜您喜欢: