shell學習之突發奇想 ^_^ 打印9*9乘法表

國慶放假到今天,《linux命令行和高級shell編程》初步學習到了第十章。基本上一些簡單的流程控制腳本我能夠編寫出來。今天偶然突發奇想,想把 9*9的乘法表打出來。思考了半天,終於有告終果。可是還不夠成熟。而後到羣裏問了幾位朋友,他們的想法讓我領悟了很多,在此貼出來,僅供參考和學習。linux

要求:打印9*9乘法表。shell

個人方法編程

C式for循環嵌套C式子for循環;bash

C式子for循環裏面嵌套if語句;編輯器

break控制循環;ide

[root@Jason64-17 ~]# cat pro99.sh
#!/bin/bash
#program
#  this program shows your 9 * 9 = ?
#history
#10/04/13   lisp    first   release
#QQ:1031239088
for ((i=1; i<10; i++))
do
  for ((j=1; j<=10; j++))
  do
    if [ $i -lt $j ]
    then
      break
    fi
    pro=$[$i * $j]
    echo -ne "$i*$j=$pro\t"
  done
  echo -e "\n"
done


也可用continue來控制循環學習


[root@Jason64-17 ~]# cat pro99.sh
#!/bin/bash
#program
#  this program shows your 9 * 9 = ?
#history
#10/04/13   lisp    first   release
#QQ:1031239088
for ((i=1; i<10; i++))
do
  for ((j=1; j<=10; j++))
  do
    if [ $i -lt $j ]
    then
    #  break
       continue
    fi
    pro=$[$i * $j]
    echo -ne "$i*$j=$pro\t"
  done
  echo -e "\n"
done


兩個的輸出結果都同樣,以下:this


[root@Jason64-17 ~]# sh pro99.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
[root@Jason64-17 ~]#


【PS:編輯器的緣由,每行中間都有一行空行隔開呢。這裏沒顯示出來】spa

一網友的解法,他用的是C語言命令行

#include<stdio.h>
int main()
{
int i,j;
for (i=1;i<=9;i++){
   for(j=1;j<=i;j++){
   printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
system("pause");
return 0;
}


輸出結果爲

175103354.jpg

看了他的代碼,我發現他比我代碼好。

好的地方就是他直接把變量i用在了C式子for的迭代循環當中

而後我也作了一下改進。

[root@Jason64-17 ~]# cat pro99.sh
#!/bin/bash
#program
#  this program shows your 9 * 9 = ?
#history
#10/04/13   lisp    first   release
#QQ:1031239088
for ((i=1; i<10; i++))
do
  for ((j=1; j<=$i; j++))
  do
    pro=$[$i * $j]
    echo -ne "$i*$j=$pro\t"
  done
  echo -e "\n"
done


[root@Jason64-17 ~]# sh pro99.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
[root@Jason64-17 ~]#


這樣看起來代碼就很是的簡化,並且邏輯比第一次的還要清晰。
頓時深感程序的博大精深~~~ 哈哈 -_-


----------------------------------------------------------------------------------------

不過我在網上看到有網友是這麼寫的。

[root@Jason64-17 ~]# cat wnet.sh
#!/bin/bash
for i in `seq 1 9`
do
 for n in `seq 1 9`
 do
 echo -ne " $n*$i=$(($i*$n))"
  if [ $n -ge $i ]
  then
   echo -e '\n'
  break
 fi
 done
 echo
done


這種for循環是利用的bash裏面的for循環,用一個變量依次從變量集合裏面讀取變量的值;

而後利用if條件語句經過break來控制循環的執行。

可是要提示的是:break和continue兩個循環控制命令。

break能夠跳出單循環;能夠跳出外循環;能夠跳出內循環。

continue也能夠提早中止循環內的命令,注意不是終止循環!

二者都有其利用的地方,因此在用的時候必定要注意會不會執行某些循環的外部或者內部命令,而這些偏偏不是你想要的!

必定要注意:視狀況而定它的位置。

……

……

就這麼多吧,有什麼之後再慢慢補充 ^_^

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

相關文章
相關標籤/搜索