概述
文章目录
- 1、嵌套的 for 循环 打印三角形!
- 1.1、使用for嵌套循环 打印正三角形!
- 解释:
- 1.2、使用for嵌套循环 打印倒三角形!
- 1.3、使用 for循环嵌套 打印等腰正三角:
- 2、使用 for 循环嵌套打印菱形:
- 2.1、先输出一个正的等腰三角形:
- 2.2、输出 倒等腰三角形
- 2.3、将 两个三角形 合并成一个 菱形:
此链接通往 Bash Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:
1、嵌套的 for 循环 打印三角形!
本案例来自:https://blog.51cto.com/baidu/1882614
就是很多大佬之前使用C语言打印 倒三角、正三角之类的… 现在使用 for 循环嵌套来实现 打印倒三角,正三角…
1.1、使用for嵌套循环 打印正三角形!
root@zhengzelin:~# cat d.sh
#!/bin/bash
for((i=1;i<=5;i++))
do
for((star=1;star<=$i;star++))
do
echo -n "*"
done
echo
done
root@zhengzelin:~# ./d.sh
*
**
***
****
*****
注意: 这里的 expression2 里面的表达式可以使用位置变量,首先先给一个值赋值为位置变量,下面说:
———————————————————————————————————————————————————————————————————————————————
使用位置变量:
root@zhengzelin:~# cat d.sh
#!/bin/bash
num=$1
for((i=1;i<=$num;i++))
do
for((star=1;star<=$i;star++))
do
echo -n "*"
done
echo
done
root@zhengzelin:~# ./d.sh 5
*
**
***
****
*****
解释:
root@zhengzelin:~# bash -x d.sh (这里只列举前面两次循环!)
+ (( i=1 ))
+ (( i<=5 ))
+ (( star=1 ))
+ (( star<=1 ))
+ echo -n '*'
*+ (( star++ ))
+ (( star<=1 ))
+ echo
# 上面是第一次循环! 可以看出: 先执行的是 echo -n "*" (echo -n 输出 * 不换行),然后执行了一次 echo(输出的是换行)
所以第一次循环结束输出的结果是: *
+ (( i++ ))
+ (( i<=5 ))
+ (( star=1 ))
+ (( star<=2 ))
+ echo -n '*'
*+ (( star++ ))
+ (( star<=2 ))
+ echo -n '*'
*+ (( star++ ))
+ (( star<=2 ))
+ echo
# 上面是第二次循环! 可以看出:先执行一个 echo -n “*” ,然后又执行了一次 echo -n “*”;最好执行了一次 echo(输出的是换行)
所以第二次循环的输出结果就是: **
两行加起来就是:
*
**
....直到循环结束!!!按照上面 expression 的范围:是执行5次!
所以循环结束的结果就是:
root@zhengzelin:~# ./d.sh
*
**
***
****
*****
1.2、使用for嵌套循环 打印倒三角形!
# 这里使用位置变量;因为是倒三角,所以是从大到小,从多到少:使用递减:
root@zhengzelin:~# vim fortest.sh
#!/bin/bash
sum=$1
for((i=$sum;i>=1;i--))
do
for((star=$i;star>=1;star--))
do
echo -n "*"
done
echo
done
解释: 倒三角,上面为n,下面为1:使用递减,最大是 $sum,最少是1。
root@zhengzelin:~# ./c.sh 5
*****
****
***
**
*
# 当 i = sum = 5 的时候,star = 5,就这样递减下去。直到 i = 1、star = 1 结束循环
1.3、使用 for循环嵌套 打印等腰正三角:
一开始输出的正三角是这样的:
root@zhengzelin:~# ./d.sh
*
**
***
****
*****
这里打印的是 直角三角形,那么换一种输出方式: 输出等腰三角形!
要求输出结果如下所示:
* 1个 *
*** 3
***** 5
******* 7
********* 9
嘿,这个三角形看着很舒服;当然要实现这种的输出,最起码要三个 for 循环来嵌套实现吧!
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
那么现在就该决定 这三个 for 循环是如何嵌套的?
根据上面那个三角形,我们大致可以知道都有哪些步骤!
执行顺序是:首先、执行 for 1 循环(作用:打印n个空格)
接着、执行 for 2 循环(在for1 输出空格的基础上,输出 * 号)
最后、执行 for 3 循环 (在 for1 空格 和 for 2 * 号的基础上,for 上实现换行操作!)
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
然后,上篇文章讲了 for 循环嵌套的格式;可以得知,三个 for 的格式为:
for 3 (最后执行.. 实现的作用是空行,so 它的cmd 是 echo 命令)
do
for 1 (第一个执行,作用是 打印 * 前面的空格,就用 ceho -n " " 来实现)
do ( for 1 语句开始...)
echo -n " " (for 1 循环的执行语句,来实现打印空格,具体打印几个空格,还是看 for 1 循环的表达式吧!)
done (for 1 语句结束!)
for 2 (第二个执行..在 for1 打印出 空格的基础上,打印 * ,并且使用 echo -n "*" 取消换行功能...)
do ( for 2 语句开始...)
echo -n "*" ( for 2 的执行语句,具体输出几个 * ,就看 for 2 的条件表达式了)
done ( for 2 语句结束...)
echo (for 3 的语句,作用是 在 for 2 输出的* 号的后面实现换行功能...)
done (for 3 语句执行结束!)
上面也说了,每个for循环的执行语句都已经知道了,现在就差定义 for循环的表达式了!
首先找一下这个的规律:
* 当 i = 1 时,* 为 1;空字符为 4;
*** 当 i = 2 时,* 为 3;空字符为 3;
***** 当 i = 3 时,* 为 5;空字符为 2;
******* 当 i = 4 时,* 为 7;空字符为 1;
********* 当 i = 5 时,* 为 9;空字符为 0;
就像小学时候学的找规律一样:可以得出:
(" *的个数= i * 2 - 1 , 每行 * 前面空的字符个数 = i的最大值 - i)"
来实现一下:
1、首先实现打印 5 个空行;
root@zhengzelin:~# for((i=1;i<=5;i++));do echo ;done
2、实现一下 第一行 打印1 个* ,第二行 打印 3个*...第五行 打印 9个* ....
root@zhengzelin:~# for((i=1;i<=5;i++));do for((star=1;star<=$(( $i * 2 - 1 ));star++));do echo -n "*";done;echo ;done
*
***
*****
*******
*********
解释一下第二个for循环:for((star=1;star<=$(( $i * 2 - 1 ));star++));do echo -n "*";done;
首先 star=1,代表在第一行开始;与第一个for循环中的 i=1相互照应;
然后 表达式2 star<= $(( $i * 2 - 1 )) 这个是上面得到的规律,就是每行执行几次这个命令; 当i=1时,执行一次命令。当 i=2时,执行三次命令!
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
那么就该最后一个步骤了;让他们都每行空开特定的字符!
咱们上面得知了 空字符 = i的取值范围最大值 - $i!
so ;继续套入进去:
root@zhengzelin:~# for((i=1;i<=5;i++));do for((blank=1;blank<=$((5-$i));blank++));do echo -n " ";done ;for((star=1;star<=$(( $i * 2 - 1 ));star++));do echo -n "*";done; echo ;done
*
***
*****
*******
*********
2、使用 for 循环嵌套打印菱形:
输出要求如下:
root@zhengzelin:~# ./g.sh 5
*
***
*****
*******
*********
******* 1 0
***** 2 1
*** 3 2
*
这不就是一个 正的等腰三角形 + 倒等腰三角形 吗?
2.1、先输出一个正的等腰三角形:
#!/bin/bash
sum=$1
for((i=1;i<=$sum;i++))
do
for((blank=1;blank<=$(($sum - $i ));blank++))
do
echo -n " "
done
for((star=1;star<=$(( $i * 2 - 1 ));star++))
do
echo -n "*"
done
echo
done
root@zhengzelin:~# ./e.sh 5
*
***
*****
*******
*********
2.2、输出 倒等腰三角形
root@zhengzelin:~# cat h.sh
#!/bin/bash
sum2=$2
for((a=$(( $sum2 - 1 ));a>=1;a--))
do
for((b=1;b<=$(( $sum2 - $a));b++))
do
echo -n " "
done
for((c=1;c<=$(( $a * 2 -1 ));c++))
do
echo -n "*"
done
echo
done
root@zhengzelin:~# ./h.sh 5
*******
*****
***
*
2.3、将 两个三角形 合并成一个 菱形:
将两个脚本合并在一起即可!
root@zhengzelin:~# cat e.sh
#!/bin/bash
sum=$1
for((i=1;i<=$sum;i++))
do
for((blank=1;blank<=$(($sum - $i ));blank++))
do
echo -n " "
done
for((star=1;star<=$(( $i * 2 - 1 ));star++))
do
echo -n "*"
done
echo
done
sum2=$1
for((a=$(( $sum2 - 1 ));a>=1;a--))
do
for((b=1;b<=$(( $sum2 - $a));b++))
do
echo -n " "
done
for((c=1;c<=$(( $a * 2 -1 ));c++))
do
echo -n "*"
done
echo
done
root@zhengzelin:~# ./e.sh 5
*
***
*****
*******
*********
*******
*****
***
*
for 循环的基础知识:
for 循环 嵌套的基础知识:
最后
以上就是勤恳黑裤为你收集整理的一文教你如何使用 for循环嵌套 ! 并且打印 各种三角形 与 菱形 !的全部内容,希望文章能够帮你解决一文教你如何使用 for循环嵌套 ! 并且打印 各种三角形 与 菱形 !所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复