您的当前位置:首页正文

shell上机实习-课堂练习

来源:好兔宠物网


课堂练习:编写一个shell脚本,求费波纳茨数列的前10项及其总和。

1、定义:费波纳茨数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、„„这个数列从第三项开始,每一项都等于前两项之和。它的通项公式为(其中n=0、1、2、3…)

nn11515 5222、计算方法:

(1) 直接用通项公式求解(需要用到shell的浮点运算) (2) 利用shell的递归函数调用计算

3、预备知识(针对直接通过通项公式求解) 3.1 Linux的bash的浮点预算方式

由于linux的bash本身不具备浮点运算功能,只能对整数进行运算。因此想要在linux的shell中计算如0.5*0.76或者5,则需要用到bc的方式,bc是一个高精度的计算器,在脚本中使用bc的基本格式如下:

variable=$(echo \"OPTIONS; OPERATIONS\" | bc) 3.2 实例分析

(1)实例1,在shell中显示0.5*0.76+5的结果,

# echo \"scale=5;0.5*0.76+sqrt(5)\"| bc 或者

# j=$(echo \"scale=5;0.5*0.76+sqrt(5)\"| bc) #echo $j

分析:其中*表示乘法,开根号用sqrt(n);scale=5表示指定小数位数为5位

234511111(2) 实例2,计算的结果,用shell编程.

22222 编程思路如图2.1或者图2.2

图2.1 方法一 图2.2 方法二

n

1分析:程序中的,n次方,在整形运算的shell中是用(1/2)**$n,n为变量,“**”两个

2

1星号表示幂运算。但是在bc计算器中,用“^”表示幂运算,用(1/2)^$n 来表示。

2在linux中,循环语句和C语言类似,但其中的括号为双括号(( ))

for ((n=1;n<=5;n++)) do ……… done (3)实例3:如何将一个浮点数向上或向下取整 对浮点变量var向下取整为: #echo ${var%.*} 或者

#m=${var%.*} #echo $m

n

图3.1 对浮点数向下取整

对浮点变量进行四舍五入取整,首先对变量var加0.5之后再运算。 #var=$(echo “$var+0.5”|bc) # echo ${var%.*}

图3.2 对浮点数四舍五入取整

4、根据以上的预备知识,利用通项公式求解,编写shell程序,求费波纳茨数列的前10项及其总和

5、要求,将实验程序和结果截图,发送实验报告 学号-姓名.doc。

实验结果发送到ji_sai@nuist.edu.cn

因篇幅问题不能全部显示,请点此查看更多更全内容