使用 for循环嵌套 或 while 循环嵌套 来打印 九九乘法表 !


 

        此链接通往 Bash Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:


目的:

实现 打印 99乘法表:

1*1=1  
1*2=2  2*2=4  
1*3=3  2*3=6  3*3=9  
1*4=4  2*4=8  3*4=12  4*4=16  
1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  


——————————————————————————————————————————————————————————————————————— ——————————————————————————————————————————————————

思路:

使用 两个for循环;
一个 for 循环 做 换行作用;也就是 只 执行 echo " " 命令,
另一个 for 循环:是打印 这个乘法 a * b = c;从乘法表来看:
竖着来看 a是不变的! b 是递增的 !  
横着来看 a是递增的! b 是不变的 !

使用 for 循环嵌套:

★ 执行第一个 for 循环 来实现打印 9 个行:

for((i=1;i<=9;i++));do echo ;done

★ 第二个for 循环 实现的是: a * b =c
root@zhengzelin:~\# for((a=1;a<=9;a++));do let c=1*$a ; echo "1*$a=$c ";done
1*1=1 
1*2=2 
1*3=3 
1*4=4 
1*5=5 
1*6=6 
1*7=7 
1*8=8 
1*9=9 

成功打印出第一列 乘法表! 但是第二列怎么打? 这就将两个for循环套进去!并且将第二个for循环中的 1 换位 $i 保证是变量!

root@zhengzelin:~\# for((i=1;i<=9;i++))do for((a=1;a<=9;a++));do let c=$i*$a ; echo "$i*$a=$c ";done;echo;done
1*1=1 
1*2=2 
1*3=3 
1*4=4 
1*5=5 
1*6=6 
1*7=7 
1*8=8 
1*9=9 

2*1=2 
2*2=4 
2*3=6 
2*4=8 
2*5=10 
2*6=12 
2*7=14 
2*8=16 
2*9=18 

3*1=3 
3*2=6 
3*3=9 
3*4=12 
3*5=15 
3*6=18 
3*7=21 
3*8=24 
3*9=27 

4*1=4 
4*2=8 
4*3=12 
4*4=16 
4*5=20 
4*6=24 
4*7=28 
4*8=32 
4*9=36 

5*1=5 
5*2=10 
5*3=15 
5*4=20 
5*5=25 
5*6=30 
5*7=35 
5*8=40 
5*9=45 

6*1=6 
6*2=12 
6*3=18 
6*4=24 
6*5=30 
6*6=36 
6*7=42 
6*8=48 
6*9=54 

7*1=7 
7*2=14 
7*3=21 
7*4=28 
7*5=35 
7*6=42 
7*7=49 
7*8=56 
7*9=63 

8*1=8 
8*2=16 
8*3=24 
8*4=32 
8*5=40 
8*6=48 
8*7=56 
8*8=64 
8*9=72 

9*1=9 
9*2=18 
9*3=27 
9*4=36 
9*5=45 
9*6=54 
9*7=63 
9*8=72 
9*9=81 


最重要一点,这是因为我没有使用 echo 的-n 选项导致的h后果!当我加了 -n 之后:

root@zhengzelin:~$ for((i=1;i<=9;i++))do for((a=1;a<=9;a++));do let c=$i*$a ; echo -n "$a*$i=$c ";done;echo;done
1*1=1 2*1=2 3*1=3 4*1=4 5*1=5 6*1=6 7*1=7 8*1=8 9*1=9 
1*2=2 2*2=4 3*2=6 4*2=8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18 
1*3=3 2*3=6 3*3=9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27 
1*4=4 2*4=8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

经过排查,可以看出,这是因为,a 的取值范围搞错了!!!

排查原因:都知道 for 的嵌套 先执行 里面for循环的语句,执行完之后在执行 外面for循环的语句!

第一遍:
里面for循环输出的结果是:
1*1=1 2*1=2 3*1=3 4*1=4 5*1=5 6*1=6 7*1=7 8*1=8 9*1=9 
外面 for 循环的执行命令是 echo ,执行结果是 换行!

正确的要求是:第一行只有 1*1=1; 
所以,将 第二个for循环的范围变成: for((a=1;a<=$i;a++)) 即可!
当 i=1 时, a命令的结果执行一个, 当i=2 的时候,也就是第二行,有两个执行结果!

root@zhengzelin:~\# for((i=1;i<=9;i++))do for((a=1;a<=$i;a++));do let c=$i*$a ; echo -n "$a*$i=$c ";done;echo;done
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 


 

使用 while 循环实现:

和上面的 for循环 嵌套 思路一样:


第一步:使用 while 循环 打印 9个 空行:
root@zhengzelin:~\# vim ./while.sh 
#!/bin/bash                                                                                                              
i=1
while [ $i -le 9 ]
do
 echo " "
 let i++
done
root@zhengzelin:~# ./while.sh 









# 成功实现!
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
第二步,实现:打印 九九乘法表 第一列内容!
root@zhengzelin:~\# vim while.sh 
#!/bin/bash
#i=1
#while [ $i -le 9 ]
#do
# echo
# let i++
#done

b=1
while [ $b -le 9 ]
do
let c=1*$b
echo "1*$b=$c"
let b++
done

root@zhengzelin:~# ./while.sh 
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9

成功实现!

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

第三步:将前两个 while 结合在一起!

root@zhengzelin:~\# vim while.sh 
#!/bin/bash
i=1
while [ $i -le 9 ]
do

 b=1
 while [ $b -le $i ]
 do
 let c=$i*$b
 echo -n "$i*$b=$c "
 let b++
 done   
         
echo
let i++
done
# 注意是嵌套哟,并不是两个while循环分开!
root@zhengzelin:~\# ./while.sh 
1*1=1 
2*1=2 2*2=4 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 4*3=12 4*4=16 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 

发现输出错误,改变脚本中 变量的位置:
将 里面 while 循环的输出命令改为: echo -n "$b*$i=$c " (记住 $c 和 " 之间有空格,不然你的输出结果就没空格!)
root@zhengzelin:~# ./while.sh 
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 
发布了99 篇原创文章 · 获赞 72 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ljlfather/article/details/105290418