shell程序编程综合设计
问题描述:
shell程序
编写一个显示菜单的shell程序,利用函数实现简单的菜单功能,n的值由键盘输入:
===========================================
** (1)计算1到n的奇数之和; **
** (2)计算1到n的阶乘; **
** (3)计算1到n的所有素数; **
** (4)退出程序。 **
==========================================
Please enter function select and number: 1 1000
要求: 自行设计程序。关于素数计算功能应尽量选用高效算法实现。
说明:可根据以下方法中选择一种实现功能(3):计算1到n的所有素数。
附:几种素数算法
(1)简单算法
最简单的素数判断方法即直观又简单,判断n是否素数,只需要将整数2—n/2做除数,判断是否能整除n,若有某数能整除则判断其不是素数,若所有都不能整除,则判断为素数。将判断素数的功能写成一个函数,假定通过参数传递要判断的数,函数中通过位置参数$1获得.
(2)改进型算法
除2的倍数外,所有能整除奇数的都不可能是偶数,所以可以排除2的倍数,以开始先判断是2的倍数就直接返回1,否则从3开始,每次循环除数加2,这样就减少很多除法运算。
另外,对于较大的数,除数最大无需到n/2,可以到n的平方根,但shell中无法计算平方根,可以有两种解决方法,一种是通过编写C程序获取n的平方根,通过命令参数传递n到C程序中,而C程序返回平方根给shell。另一种方法是通过判断除数和商的大小来决定是否已经判断出素数,即除数大于商时,还不能整除,就已经能确定是素数了。这个算法无需求平方根,但每次循环要多做一次乘法。
可通过实际测试比较几种方法的运行时间,从而得到算法的优劣。
(3)筛法求素数
基本的筛发流程:给出一个从2开始的数表2,3,4,5,6,7,…,n。2是素数,从这个数表中删除2的倍数,剩下的下一个未删除的是下一个素数(3),再删除这个素数的倍数,…,最后余下的就是素数。在用程序实现时需要用到数组,删除一个数,就是将这数改为0,然后输出所有非0元素。
解决方案:
vi zhs3
进入后开始编写shell程序
#计算1到n的奇数之和调用语句代码:
function one(){echo "-----开始计算1到n的奇数之和,请输入你想要计算到哪个数字-----"read numsum=0for((i=1;i<=$num;i++))do if [ $((i%2)) -ne 0 ];thenlet "sum=$sum+$i"fidoneecho "计算结果为$sum"
}
计算1到n的阶乘调用语句代码:
function two(){echo "-----开始计算1到n的阶乘,请输入你想要计算到哪个数字-----"read numsum=1for((i=1;i<=$num;i++))do let "sum=$sum*$i"doneecho "计算结果为$sum"
}
计算1到n的所有素数调用语句代码:
function three(){echo "-----开始计算1到n的所有素数,请输入你想要计算到哪个数字-----"read numdeclare -l a for((i=1;i<=$num;i++))do for((j=1;j<=i;j++))do b=$(( $i%$j ))if [[ $b -eq 0 ]]; thena=$a+1fidoneif [[ $a -eq 2 ]]; thenecho -n $i " "fia=0doneecho
}
循环代码:
while ((flag=1))
doecho "-----请选择你要做的事情------"echo "** (1)计算1到n的奇数之和; **"echo "** (2)计算1到n的阶乘; **"echo "** (3)计算1到n的所有素数; **"echo "** (4)退出程序。 **"read selectedcase $selected in1)one;;2)two;;3)three;;4) echo "正在退出程序..."exit;;esac
done
运行结果:
bash zhs3
shell程序编程综合设计相关推荐
- linux系统编程综合练习-实现一个小型的shell程序(四)
上节中已经对后台作业进行了简单处理,基本上要实现的功能已经完了,下面回过头来,对代码进行一个调整,把写得不好的地方梳理一下,给代码加入适当的注释,这种习惯其实是比较好了,由于在开发的时候时间都比较紧, ...
- 【可视化编程】实验4:C#窗体和控件综合设计(多文本编辑器)
说明:这是武汉理工大学计算机学院[可视化编程C#]课程的第四次实验:多文本编辑器 >>点击查看武汉理工大学计算机专业课程资料汇总 >>点击查看WUTer计算机专业实验汇总 谨记 ...
- 设计一个shell程序,在/userdata目录下建立50个目录,并对每个目录给754权限!
设计一个Shell程序,在/userdata目录下建立50个目录,即user1-user50,并设置每个目录的权限,其中其他用户的权限为:读:文件所有者的权限为:读.写.执行:文件所有者所在组的权限为 ...
- linux编写运行shell程序,Linux的Shell编程运行Shell程序的方法有哪些呢?
用户可以用任何编辑程序来编写Shell程序.因为Shell程序是解释执行的,所以不需要编译成目的程序.按照Shell编程的惯例,以 bash为例,程序的第一行一般为"#!/bin/bash& ...
- linux下shell编程课程设计,Linux下shell编程实例
1. 推断一文件是不是块或字符设备文件.假设是将其复制到 /dev 文件夹下 read -p "input a file:" filename if [ -b $filename ...
- linux脚本程序是什么意思,什么是shell脚本编程?
什么是Shell脚本 示例: #!/bin/sh cd~ mkdirshell_tut cdshell_tut for((i=0;i<10;i++));do touchtest_$i.txt d ...
- java类求圆的面积周长_java编程 1. 设计一个求圆的面积和周长的类,要求:1计算当半径r,JAVA编程题。编写一个应用程序计算圆的周长和面积,设圆的半...
问题标题 java编程 1. 设计一个求圆的面积和周长的类,要求:1计算当半径r,JAVA编程题.编写一个应用程序计算圆的周长和面积,设圆的半 2019-5-23来自ip:15.196.194.53的 ...
- java面向对象的程序编程设计
单核CPU在执行程序的时候,一次只能执行一个命令.这就是说,程序命令在单核CPU上是线性的.操作系统对程序命令进行管理,在不同的情况下把不同的程序命令推给单核CPU处理.操作系统简化了计算机的使用,让 ...
- 提升C语言程序运行效率 马尔可夫,计算机程序编程课程设计报告(马尔可夫链算法生成随机可读文本).doc...
PAGE 1 计算机程序编程课程设计报告 (马尔可夫链算法生成随机可读文本) 引言: 马尔可夫链的数学背景: 马尔可夫链,因安德烈?马尔可夫(A.A.Markov,1856-1922)得名 ,是数学随 ...
最新文章
- PHP脚本执行超时的解决办法
- AI生成中国山水画!普林斯顿姑娘本科毕业作品,骗过70%中国人
- 李飞飞团队最新论文:如何对图像中的实体精准“配对”?(附代码论文)
- 如何下载和离线安装Chrome的CRX扩展文件包
- python转go_如何看待将Python代码转换成Go代码并进一步编译的 Grumpy 项目?
- 用python录入成绩储存程序_用Python创建成绩计算器的程序
- linux lsof/netstat查看进程和端口号相关命令:
- 开发针对特殊租户的Teams机器人
- 再度吐槽,PHP在centos7的安装方式稍不注意可能就打击你的积极性
- 【Shiro】Unsatisfied dependency expressed through method 'securityManager' parameter 3
- Python程序员之面试必回习题
- bvp解算器是什么_中科院孙晓明:算法本身并没有善恶,看你想要的目标是什么...
- 使用Asp.net MVC源代码调试你的应用程序
- 利用Python的PyPDF2库,根据论文标题批量修改pdf的文件名
- 华为数通笔记-数通基本概念
- 分手后如何忘掉你的前任1
- 重庆市谷歌卫星地图下载
- 黑马程序员java学习笔记——正则表达式、反射
- python实现千牛客服自动回复语_淘宝客服自动回复语录(客服自动回复大全)
- 易班APP登录密码加密、sig逆向分析