【美高梅手机版4858】四个整数的最大公约数,打字与印刷倒序NxN乘法表

By admin in 美高梅手机版4858 on 2019年4月17日

正文所选的例子来自于《Advanced
Bash-scripting Gudie》一书,译者 杨春敏
黄毅

本文所选的例证来自于《Advanced
Bash-scripting Gudie》壹书,译者 杨春敏
黄毅

《Advanced Bash-scripting Guide》学习(十九):多个整数的最大公约数,bashscripting

正文所选的例证来自于《Advanced Bash-scripting Gudie》1书,译者 杨春敏 黄毅

 1 #!/bin/bash
 2  #求两个整数的最大公约数
 3  
 4  E_BADARGS=65
 5  
 6  #如果参数个数不为2,以参数错误退出
 7  if [ $# -ne 2 ]
 8  then
 9      echo "Usage: `basename $0` first-number second-number"
10      exit $E_BADARGS
11  fi
12 
13  #如果参数非整数或参数值为0,以参数错误退出
14  for i in [email protected]
15  do
16      if [ $i=~[0-9]+ ]                                         #"=~"后面表示要跟正则表达式,+在正则表达式中表示前面的内容至少匹配一次
17      then
18         if [ $i -eq 0 ]
19         then
20             echo "Usage: `basename $0` parameter can't be zero"
21             exit $E_BADARGS
22         fi
23      else
24             echo "Usage: `basename $0` parameter must be integer"
25         exit $E_BADARGS
26       fi
27  done
28 
29  #设计一个gcd()函数,利用辗转相除法(欧几里德算法)求最大公约数
30  gcd()
31  {
32      remainder=1
33      dividend=$1
34      divisor=$2
35  
36      until [ $remainder -eq 0 ]
37      do
38          let "remainder=$dividend % $divisor"
39          dividend=$divisor
40          divisor=$remainder
41      done
42  }
43  
44  gcd $1 $2
45  
46  echo "gcd of $1 and $2 is: $devidend"
47  
48  exit 0

在改编那么些本子的时候,笔者的思虑点首要有以下:

  1. 所传的参数是或不是要铲除非整数的景况?

非整数的境况第叁回小编用echo $i | sed ‘/s/^[0-9]*$/”/g’ && echo
$?来解除,要是第一条命令正确执行,$?应该再次回到0,可是大家有越来越好的不贰秘籍,即“=~”后边跟正则的法子

  1. 参数值为0的景况是否要排除在外?

在认清$i为整数的剖断下再嵌套2个论断[ $i -eq 0 ]

  1. 参数个数怎么调整?

[ $# -eq 2 ]或[ $# -ne 2 ]就足以排除空参数或参数个数不为二

  1. 欧几里德算法中对此$一<$二的动静的拍卖?

先看$1>$2的情况

$1=65 $2=15

首先个循环:伍=六五 % 1伍

      dividend=15

      divisor=5

美高梅手机版4858,第二遍巡回 0=一伍%伍

      dividend=5

      divisor=0

脱离循环,gcd=$dividend=5

再看$1<$2的情况 

$1=15 $2=65

第贰回巡回:15=一5 % 6伍

      dividend=65

      divisor=15

其次次巡回:五=65 % 壹五

      dividend=15

      divisor=5

其二次巡回:0=一5 % 5

      dividend=5

      divisor=0

脱离循环,gcd=$dividend=5

可见$壹<$二的意况比$1>$二的景况多了二个循环往复,结果是一样的

    

【美高梅手机版4858】四个整数的最大公约数,打字与印刷倒序NxN乘法表。 

Bash-scripting
Guide》学习(十9):三个整数的最大公约数,bashscripting
本文所选的例证来自于《Advanced Bash-scripting Gudie》一书,
译者…

1.试验要求:

 1 #!/bin/bash
 2  #求两个整数的最大公约数
 3  
 4  E_BADARGS=65
 5  
 6  #如果参数个数不为2,以参数错误退出
 7  if [ $# -ne 2 ]
 8  then
 9      echo "Usage: `basename $0` first-number second-number"
10      exit $E_BADARGS
11  fi
12 
13  #如果参数非整数或参数值为0,以参数错误退出
14  for i in $@
15  do
16      if [ $i=~[0-9]+ ]                                         #"=~"后面表示要跟正则表达式,+在正则表达式中表示前面的内容至少匹配一次
17      then
18         if [ $i -eq 0 ]
19         then
20             echo "Usage: `basename $0` parameter can't be zero"
21             exit $E_BADARGS
22         fi
23      else
24             echo "Usage: `basename $0` parameter must be integer"
25         exit $E_BADARGS
26       fi
27  done
28 
29  #设计一个gcd()函数,利用辗转相除法(欧几里德算法)求最大公约数
30  gcd()
31  {
32      remainder=1
33      dividend=$1
34      divisor=$2
35  
36      until [ $remainder -eq 0 ]
37      do
38          let "remainder=$dividend % $divisor"
39          dividend=$divisor
40          divisor=$remainder
41      done
42  }
43  
44  gcd $1 $2
45  
46  echo "gcd of $1 and $2 is: $devidend"
47  
48  exit 0
 1 #!/bin/bash
 2  #求两个整数的最大公约数
 3  
 4  E_BADARGS=65
 5  
 6  #如果参数个数不为2,以参数错误退出
 7  if [ $# -ne 2 ]
 8  then
 9      echo "Usage: `basename $0` first-number second-number"
10      exit $E_BADARGS
11  fi
12 
13  #如果参数非整数或参数值为0,以参数错误退出
14  for i in $@
15  do
16      if [ $i=~[0-9]+ ]                                         #"=~"后面表示要跟正则表达式,+在正则表达式中表示前面的内容至少匹配一次
17      then
18         if [ $i -eq 0 ]
19         then
20             echo "Usage: `basename $0` parameter can't be zero"
21             exit $E_BADARGS
22         fi
23      else
24             echo "Usage: `basename $0` parameter must be integer"
25         exit $E_BADARGS
26       fi
27  done
28 
29  #设计一个gcd()函数,利用辗转相除法(欧几里德算法)求最大公约数
30  gcd()
31  {
32      remainder=1
33      dividend=$1
34      divisor=$2
35  
36      until [ $remainder -eq 0 ]
37      do
38          let "remainder=$dividend % $divisor"
39          dividend=$divisor
40          divisor=$remainder
41      done
42  }
43  
44  gcd $1 $2
45  
46  echo "gcd of $1 and $2 is: $devidend"
47  
48  exit 0
  • 加以任意八个字符N(N>0),然后打字与印刷NxN的倒序乘法表。

在改编这一个本子的时候,笔者的考虑点首要有以下:

在改编那一个剧本的时候,笔者的思量点主要有以下:

2.化解难点:

1.
所传的参数是否要祛除非整数的情景?

壹.
所传的参数是还是不是要消除非整数的气象?

#/!bin/bash
#

非整数的图景首回小编用echo $i | sed ‘/s/^[0-9]*$/”/g’ && echo
$?来排除,假诺第2条命令正确实行,$?应该重回0,可是大家有越来越好的不2秘籍,即“=~”后边跟正则的方法

非整数的场地第3次笔者用echo $i | sed ‘/s/^[0-9]*$/”/g’ && echo
$?来消除,假设第1条命令正确实践,$?应该再次回到0,不过大家有越来越好的措施,即“=~”前边跟正则的情势

#define function
NxN_fun(){

贰.
参数值为0的境况是不是要免除在外?

二.
参数值为0的情状是否要解除在外?

  local i=$1                    #概念一个局地变量i调节外层循环
  while [ $i -ge 1 ];do
    local j=$i                    #概念八个部分变量j调整内层循环
    while [ $j -ge 1 ];do
      echo -e -n “$i*$j=$[i*j]\t”
      let j–
    done
    echo                    #换行
    let i–
  done
}

在认清$i为整数的判定下再嵌套贰个确定[ $i -eq 0 ]

在认清$i为整数的论断下再嵌套3个剖断[ $i -eq 0 ]

#main
Flag=$(echo “$1” | sed ‘s/[0-9]//g’ | wc -c)        #判断脚本参数是整型照旧字符

  1. 参数个数怎么决定?
  1. 参数个数怎么调节?

if [ ! $# -eq 1
];then                      #看清脚本参数个数
  echo “>_<||| 很尴尬~!!! Usage:$(basename $0) num.”
  exit 5
elif [ ! $Flag -eq 1 ];then                #Flag值不等于一则加以的脚本参数为字符型

[ $# -eq 2 ]或[ $# -ne 2 ]就能够排除空参数或参数个数不为二

[ $# -eq 2 ]或[ $# -ne 2 ]就能够排除空参数或参数个数不为二

  echo “>_<||| 很尴尬~!!!
Usage:$(basename $0) num.”           #表情符号依然挺不错的

4.
欧几里德算法中对于$一<$二的场馆的处理?

四.
欧几Reade算法中对此$壹<$贰的景观的拍卖?

  exit 5

先看$1>$2的情况

先看$1>$2的情况

fi

$1=65 $2=15

$1=65 $2=15

NxN_fun $1
[ $? -eq 0 ]&&echo “打印$1*$一乘法表完毕 (^_^) 嘻嘻”||echo
“函数实践错误,请检查…(b_d) 戴了副近视镜”  #函数推行成功则打印乘法表

率先个巡回:五=陆五 % 一五

先是个巡回:5=六五 % 一5

3.实验结果:

      dividend=15

      dividend=15

美高梅手机版4858 1

      divisor=5

      divisor=5

4.推行思虑?

第2次巡回 0=一伍%5

第三回巡回 0=壹五%5

 
 一.怎么判定脚本所给参数是字符照旧整型,有未有其它的章程?

      dividend=5

      dividend=5

 2.外层while循环参数能或不能够素来给$一,能怎么改,不能怎么?

      divisor=0

      divisor=0

伍.令人安心的代码段是:

脱离循环,gcd=$dividend=五

剥离循环,gcd=$dividend=5

    Flag=$(echo “$1” | sed
‘s/[0-9]//g’ | wc -c)   

再看$1<$2的情况 

再看$1<$2的情况 

 

$1=15 $2=65

$1=15 $2=65

第二回巡回:15=一5 % 6伍

首先次巡回:一⑤=一伍 % 六五

      dividend=65

      dividend=65

      divisor=15

      divisor=15

第贰遍巡回:伍=陆5 % 一5

其次次巡回:伍=陆五 % 一5

      dividend=15

      dividend=15

      divisor=5

      divisor=5

其二次巡回:0=1伍 % 5

其3遍巡回:0=1五 % 5

      dividend=5

      dividend=5

      divisor=0

      divisor=0

剥离循环,gcd=$dividend=5

脱离循环,gcd=$dividend=5

可见$一<$二的场所比$一>$二的动静多了1个循环往复,结果是一致的

可知$一<$二的景况比$壹>$贰的意况多了叁个循环,结果是千篇1律的

    

    

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有