Linux centos7 bash编程——-求质数和

训练项目:使用函数求质数和。

定义一个函数IsPrime(),据此判断一个数是否为质数

由用户输入一个整数,求出比此数大的两个最小质数之和。

一、解决思路:

1.先在键盘上输入一个整数

2.求出比此数大的最小质数

3.再求出比此质数大的另一个最小质数

4.设置计数变量,等于2时退出求质数

5.求两质数和,并输出

二、知识点

1.质数

质数(也称素数),是指除了1和该数本身,不能被任何正整数整除的正整数。判断一个正整数m是否为质数,只要判断m可否被2~根号m之中的任何一个正整数整除,如果m不能被此范围中任何一个正整数整除,m即为质数,否则m为合数。

2.条件判断

判断一个数是否为质数,C语言、Python等高级语言,都有这类训练,是综合运用变量、循环结构、分支语句、函数等知识的典型案例。各有不同,但思路基本一致。

与其他高级编程语言一样,变量与函数是重要概念,只有多练习才能深刻体会。

3.函数

bash中定义函数可加function关键字,也可不加,函数命名要符合规则,最低要求是见名知意,不能用数字、a、b、c等单个字符,不用中文(这是习惯,实际上bash支持中文函数名)。

bash函数传参与Python、C语言不一样,可以考虑标准输入传参,或运行函数时位置传参,而bash代码中用$1接收这个参数

三、源代码

下面是本案例的详细代码,仅供参考。

代码中,引用变量或条件判断写法很多,目的是说明这些方法可行,实际工作中最好选择编写一种格式,不要随意变换格式。

#!/bin/bash

## bash编程_函数学习与应用

## 求质数和

## 先定义一个判断函数IsPrime()

IsPrime(){

  m=$1

  i=2 # 判断一个数一般从2开始检测求余数

  while [ $i -le $m ]

  do

     flag=True #定义flag变量,表示查询的数是质数

     ## 一般对于布尔型变量,仅有正确/错误两个值,可以用1/0表达,也可以用True/False表达。

     j=2

     num1=$(bc <<< "sqrt($m)"+1) # 判断质数时,到此数即可,当录入数小时,不明显,录入数>30明显速度更快

     ## sqrt($m) 求变量$m的平方根 bc 是科学计算器

     ## 当录入数比较小时,num1可以用$m/2代替

     while [ $j -le $num1 ]

     do

        if [ `expr $i % $j` -eq 0 ];then

          flag=False

          break

        fi

        j=`expr $j + 1`

     done

     i=`expr $i + 1`

  done

}

read -p "请录入一个正整数" num

k=$num

sum=0

cnt=0 # 设置计数器,后面仅需要两个质数,需要在循环前设置计数器初始值

while true # 此处应用while循环而不是for循环,主要是我们不明确有多少次循环

## 此处true代表多次循环,无条件。也可以用:或任意一个数代替,大多数人喜欢用while (1)

do

  ((k++))

  # 此处先设置自增1,以保证标准输入是质数时仍要先循环后判断

  IsPrime $k ## 此处用位置变量进行函数传参

  if [ $flag == True ];then

     let cnt+=1

     let sum+=$k

     echo "${k}是质数"  ## 此处打印一下,可查看质数

  fi

  if [ $cnt -eq 2 ];then

     break

  fi

done

echo "比 $num 大的两个最小素数之和为 $sum "

四、效果

小结

bash中定义函数时是否用关键字function由编写者确定。函数传参与C语言、python语言不同,定义函数时也有(){}结构,但()内不能添加参数,只能进行位置传参。

与C语言、python语言不同,只能先定义函数,再使用。函数位置不能随意放置。

bash中的表达式有多种写法:let cnt+=1与((cnt++))功能相同。同样,此表达式也可以写作:

cnt=`expr $cnt + 1`

条件判断test 与[  ]功能相同。而[  ]与[[  ]]略有不同,使用时多加注意。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/63758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 实现动态地图可视化展示

地图可视化分析有许多优点和好处: 1.直观理解:地图可视化使得复杂的数据更易于理解。通过地图可视化,人们可以直观地看到地理位置、地区之间的关系以及空间分布的模式。 2.提高决策效率:地图可视化可以帮助决策者快速理解和解释数据,从而提高决策效率。 3.高效的数据整…

【Pandas 入门-5】Pandas 画图

Pandas 画图 除了结合 matplotlib 与 seaborn 画图外&#xff0c;Pandas 也有自己的画图函数plot&#xff0c;它的语法一般为&#xff1a; DataFrame.plot(xNone,yNone, kindline,subplotsFalse, titleNone)x横坐标数据y纵坐标数据kind默认是线图&#xff0c;还可以是‘bar’…

基于单片机的串行通信发射机设计

一、项目介绍 串行通信是一种常见的数据传输方式&#xff0c;允许将数据以比特流的形式在发送端和接收端之间传输。当前实现基于STC89C52单片机的串行通信发射机&#xff0c;通过红外发射管和接收头实现自定义协议的数据无线传输。 二、系统设计 2.1 单片机选择 在本设计中&…

缓存技术(缓存穿透,缓存雪崩,缓存击穿)

大家好 , 我是苏麟 , 今天聊一聊缓存 . 这里需要一些Redis基础 (可以看相关文章等) 本文章资料来自于 : 黑马程序员 如果想要了解更详细的资料去黑马官网查看 前言:什么是缓存? 缓存,就是数据交换的 缓冲区 (称作Cache [ kʃ ] ),俗称的缓存就是缓冲区内的数据,是存贮数据的…

C语言——多文件编程

多文件编程 把函数声明放在头文件xxx.h中&#xff0c;在主函数中包含相应头文件在头文件对应的xxx.c中实现xxx.h声明的函数 防止头文件重复包含 当一个项目比较大时&#xff0c;往往都是分文件&#xff0c;这时候有可能不小心把同一个头文件 include 多次&#xff0c;或者头…

十六、pikachu之SSRF

文章目录 1、SSRF概述2、SSRF&#xff08;URL&#xff09;3、SSRF&#xff08;file_get_content&#xff09; 1、SSRF概述 SSRF(Server-Side Request Forgery&#xff1a;服务器端请求伪造)&#xff1a;其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能&…

Spring容器及实例化

一、前言 Spring 容器是 Spring 框架的核心部分&#xff0c;它负责管理和组织应用程序中的对象&#xff08;Bean&#xff09;。Spring 容器负责创建、配置和组装这些对象&#xff0c;并且可以在需要时将它们提供给应用程序的其他部分。 Spring 容器提供了两种主要类型的容器&…

matlab绘制局部放大图

ZoomPlot是一个交互式的matlab局部绘图库&#xff0c;其github仓库地址为 https://github.com/iqiukp/ZoomPlot-MATLAB。在使用库之前需要先将库下载到本地&#xff0c;可以直接添加到matlab的库中&#xff0c;也可以放在项目文件中直接使用。 简单使用 其实使用这个库只需要…

【SpringCloud】SpringCloud整合openFeign

文章目录 前言1. 问题分析2. 了解Feign3. 项目整合Feign3.1 引入依赖3.2 添加注解3.3 编写Feign客户端3.4 测试3.5 总结 4. 自定义配置4.1 配置文件方式4.2 Java代码方式 5. Feign使用优化5.1 引入依赖5.2 配置连接池 6. Feign最佳实践6.1 继承方式6.2 抽取方式 前言 微服务远…

MySQL连接池配置及FullGC分析

本文主要讲述MySQL连接池配置不合适时&#xff0c;由于MySQL以虚引用的方式作为线程清理的后备手段&#xff0c;导致JVM年老代随时间缓慢增长&#xff0c;直至FullGC的问题。为了优化数据库连接池配置&#xff0c;使得JVM进行尽量少的FullGC导致服务故障&#xff0c;本文提供了…

解决springboot项目中的groupId、package或路径的混淆问题

对于像我一样喜欢跳跃着学习的聪明人来说&#xff0c;肯定要学springboot&#xff0c;什么sevlet、maven、java基础&#xff0c;都太老土了&#xff0c;用不到就不学。所以古代的聪明人有句话叫“书到用时方恨少”&#xff0c;测试开源项目时&#xff0c;编译总是报错&#xff…

为什么中国软件需要国产化?

国产化是指技术引进项目投产后所生产的产品中&#xff0c;国内生产件的数量占整件产品生产件数量。换句话说&#xff0c;软件国产化的占比&#xff0c;直接影响到技术是否会在某一个时点上被”卡脖子“。 随着国家经济的发展和技术水平的提高&#xff0c;国家整体实力大大增强…

跨足多领域:人脸美颜SDK在医疗、娱乐和安全中的应用案例

随着科技的不断发展&#xff0c;人脸美颜技术不再局限于满足用户的审美需求&#xff0c;而是在医疗、娱乐和安全领域展现出了广泛的应用前景。本文将深入探讨人脸美颜SDK 在这三个领域中的创新应用案例&#xff0c;展示其在不同场景中的独特价值和潜力。 一、医疗领域 1、皮…

2023腾讯全球数字生态大会预约报名入口

报名入口 2023腾讯全球数字生态大会即将开启&#xff0c;点击打开预约报名入口。 主题与介绍 主题 2023腾讯全球数字生态大会将聚焦产业未来发展新趋势&#xff0c;针对云计算、大数据、人工智能、安全、SaaS等核心数字化工具做关键进展发布&#xff0c;并联合生态伙伴推出最…

用Rust打印hello world!

步骤1 桌面新建1个名为 rustDemo 的文件夹&#xff08;文件夹名字随便取&#xff09; 步骤2 打开新建的文件夹&#xff0c;在地址输入栏输入 cmd 按回车键进入命令行窗口 步骤3 打开编译器&#xff0c;按 Ctrl S&#xff0c;保存文件到 rustDemo 文件夹中&#xff0c;保存的…

【git】从一个git仓库迁移到另外一个git仓库

在远端服务器创建一个新的仓库 用界面创建&#xff0c;当然也可以用命令创建 拉去源仓库 git clone --bare git192.168.10.10:java/common.gitgit clone --bare <旧仓库地址>拉去成功以后会出现 进入到文件夹内部 出现下面信息&#xff1a; 推送到新的远端仓库 git …

【IOTE】物联网射频模组和芯片级方案提供商——深圳信驰达科技将精彩亮相IOTE物联网展

►►►强势来袭 Strong Attack 主物联场&#xff0c;相约深圳&#xff1b;2023&#xff0c;共论商机&#xff01;IOTE2023第二十届国际物联网展深圳站将于2023年9月20-22日在深圳国际会展中心(宝安新馆)开展&#xff01;汇聚全球超800家参展企业&#xff0c;呈现更多数字化纷呈…

C# PaddleDetection yolo 印章检测

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using Sdcb.PaddleDetection; using Sdcb.PaddleInference; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq…

【数据结构】 二叉树面试题讲解->贰

文章目录 &#x1f30f;引言&#x1f384;[二叉树遍历](https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId60&&tqId29483&rp1&ru/activity/oj&qru/ta/tsing-kaoyan/question-ranking)&#x1f431;‍&#x1f464;题目描述&#…

1.(python数模)单函数读取常用文件

Python单函数读取常用文件 代码如下&#xff1a; import pandas as pd# 读取数据文件 def readDataFile(readPath): # readPath: 数据文件的地址和文件名try:if (readPath[-4:] ".csv"):dfFile pd.read_csv(readPath, header0, sep",") # 间隔符为逗…