shell小实验详解2——如何用嵌套for循环实现菱形的输出?手把手分析,超详细!!!

问:画一个数字菱形,如图在这里插入图片描述
分析:我们可以看到,整个菱形输出,是由空格和字符输出的,首先将整个菱形以“1”分割形成上下两个三角形,在这里插入图片描述
单看上面的三角形,我们可以看到,假设行数为n,那么每一行输出的数字是2n-1个,而数字左边的空格从上到下是9格到1格,9在第一行,8在第二行,那么数字i就在10-i行,那一行输出数的个数则为2*(10-i)-1=19-2i个。
然后用一个外循环,输出1到9行,再嵌入内循环,在每一行输出特地个数的空格和数字。
代码如下:

#!/bin/bash
for((i=9; i>=1; i-- ))		//从第一行开始,一个外循环写入一行,共9行
do
  for(( m=1; m<=$i; m++ ))	//第一个内循环用于输出空格
  do
    echo -n " "				//输出空格
  done
  for(( n=1; n<=$[19-2*$i]; n++))	//第二个内循环用于输出数字
  do
    echo -n "$i"			//输出数字
  done
  echo ""					//echo 引号内不加东西,默认换行
done


结果
在这里插入图片描述
执行过程:
先进入第一个外循环,开始输出第一行的内容,进入第一个内循环,输出9个空格,然后进入第二个内循环,输出一个数字9,然后输出换行,第一个外循环结束,进入第二个外循环,输出第二行的内容,按上面的流程,直到循环结束。
可以看到上半个已经有了,下半个与上半个比就是一1为对称轴的三角形。

在这里插入图片描述
需要修改的只有打印的行数和初始值,整体代码如下:

#!/bin/bash
for((i=9; i>=1; i-- ))
do
  for(( m=1; m<=$i; m++ ))
  do
    echo -n " "
  done
  for(( n=1; n<=$[19-2*$i]; n++))
  do
  echo -n "$i"
  done
  echo ""
done
for((i=2; i<=9; i++ )) 			//输出2-9行的内容
do
 for(( m=1; m<=$i; m++))
 do
   echo -n " "
 done
 for (( n=1; n<=$[19-2*$i]; n++))
 do
   echo -n "$i"
 done
 echo ""
done

输出菱形的方法很多,关键点就是怎么找到一个能用for循环表示的规律,一行一行的输出空格和字符,这个只是其中的一种,大家可以自行寻找尝试。有想法了可以尝试输出看看,由输出结果针对性的修改。

猜你喜欢

转载自blog.csdn.net/m0_47452405/article/details/108227200