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

news2024/12/25 0:17:01

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

定义一个函数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.coloradmin.cn/o/948657.html

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

相关文章

【word技巧】word隐藏文字的方法

Word文件中有些内容想要隐藏&#xff0c;该如何隐藏&#xff1f;今天分享几个方法给大家 方法一&#xff1a; 最简单的方法&#xff0c;将字体颜色与背景颜色设置为一致的&#xff0c;这样就达到了隐藏的效果&#xff0c;选中文字再修改颜色就可以恢复字体 方法二&#xff1a…

HCIP-OpenStack组件之网络服务Neutron(ovs、ovn)

1、Linux网络虚拟化基础 Neutron最为核心的工作是对二层物理网络的抽象与管理&#xff0c;物理服务器虚拟化后&#xff0c;虚拟机的网络功能由虚拟网卡&#xff08;vNIC&#xff09;和虚拟交换机&#xff08;vSwitch&#xff09;提供&#xff0c;各个vNIC连接在vSwitch的端口上…

DDD 与 CQRS 才是黄金组合

在日常工作中&#xff0c;你是否也遇到过下面几种情况&#xff1a; 使用一个已有接口进行业务开发&#xff0c;上线后出现严重的性能问题&#xff0c;被老板当众质疑&#xff1a;“你为什么不使用缓存接口&#xff0c;这个接口全部走数据库&#xff0c;这怎么能抗住&#xff01…

前端(十六)——微信小程序语音转文字,文字转语音功能的实现

&#x1f60a;博主&#xff1a;小猫娃来啦 &#x1f60a;文章核心&#xff1a;微信小程序语音转文字&#xff0c;文字转语音功能的实现 文章目录 资源下载链接最关键的问题控制台报错30003语音转文字文字转语音效果图应用场景作用和优势实现思路 资源下载链接 CSDN资源下载&am…

【C51基础实验 LED闪烁】

51单片机项目基础篇 LED闪烁1、硬件电路设计和原理分析2、软件设计2.1、功能实现&#xff1a;LED闪烁2.2、通过 KEIL 软件自带仿真查看延时时间 4、编译结果5、结束语 LED闪烁 前言&#xff1a; 前一篇学会了点亮一颗LED以及驱动原理&#xff0c;那么这篇紧接着就来解锁LED的新…

智慧排水监测系统:创新监测技术保障排水系统安全运行

城市排水系统作为城市基础设施的重要组成部分&#xff0c;其安全运行直接关系到环境卫生、居民生活和城市发展。为了确保排水系统的顺畅运行&#xff0c;传统的监测手段已经不能满足日益复杂的城市排水需求&#xff0c;物联网技术的快速发展为排水系统的监测带来了巨大的便利&a…

正中优配:IPO刹车,再融资转向,A股投融资动态平衡

继8月18日推出“一揽子”方针措施后&#xff0c;证监会近来表态&#xff0c;将充分考虑当时商场局势&#xff0c;对IPO、再融资节奏作出安排&#xff1a;包含阶段性收紧IPO节奏、促进投融资两头的动态平衡&#xff1b;优化再融资监管。 “目前商场资金面偏弱&#xff0c;阶段性…

java八股文面试[多线程]——CAS同步机制

AtomicInteger 源码解析&#xff1a; public class AtomicInteger extends Number implements java.io.Serializable {// 设置使用Unsafe.compareAndSwapInt进行更新private static final Unsafe unsafe Unsafe.getUnsafe();private static final long valueOffset;static {t…

electron win系统通知修改通知标题栏

标题栏的 electron.app.Electron 如何修改&#xff1a; var package require("../package.json"); app.setAppUserModelId(package.description); app.setAppUserModelId 在主进程的app这里修改

git rebase和merge区别

一、概述 merge和rebase 标题上的两个命令&#xff1a;merge和rebase都是用来合并分支的。 这里不解释rebase命令&#xff0c;以及两个命令的原理&#xff0c;详细解释参考这里。 下面的内容主要说的是两者在实际操作中的区别。 1.1 什么是分支 分支就是便于多人在同一项目…

Python中object类的特殊方法

目录标题 前言一、object类的源码二、常用特殊方法解释1.__getattribute__方法2.__setattr__方法3.__delattr__方法4.__dir__方法5.__eq__和__hash__6.__ gt__、__ lt__、__ ge__、__ le__7.__str__和__repr__8.__new__方法9.__sizeof__方法10.__ class__、__ dict__、__ modul…

基于java swing和mysql实现的电影票购票管理系统(源码+数据库+运行指导视频)

一、项目简介 本项目是一套基于java swing和mysql实现的电影票购票管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…

Zabbix配置SNMP trap告警的例子

官方文档&#xff1a;3 SNMP 陷阱 1、安装Trap组件包 yum install -y net-snmp-utils net-snmp-perl net-snmp 2、下载并复制接收Trap脚本 wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.15/zabbix-3.4.15.tar.gzyum -y install tartar z…

计算机毕设 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要…

买断制终身版的思维导图软件,大家有什么推荐?

思维导图是一种强大的工具&#xff0c;可以帮助我们组织思维、整理信息、提高效率。选择一款好用的思维导图软件对于个人和团队来说至关重要。本文将为大家推荐两款可以 闭眼入的终身版思维导图软件&#xff1a; boardmix 博思白板和MindMaster亿图脑图。 01 boardmix博思白板 …

生成动态柱状图【Python思路】

# 1.导包 import json from pyecharts.charts import Bar,Timeline from pyechasts.options import * from pyecharts.globals import ThemeType# 2.打开文件&#xff08;此次数据格式.csv文件&#xff09; f open("D:/data.csv","r",encoding"GB231…

项目开发尺寸像素问题

一般来说 项目开发开始会固定页面尺寸 一般都是1920x1080像素 那这样开发是最简单的我们直接用设计图的像素来开发就行 不用管有什么滚动条 一般浏览器都会有边框什么的 所以会出现滚动条 当我们全屏状态下其实才是我们想要页面结果 如果我们想没有滚动条开发 首先我们要知道…

上传图片不超过2M要怎么缩小?教你几招压缩图片

图片大小是我们在上传图片时经常遇到的问题&#xff0c;很多时候图片过大&#xff0c;导致无法正常上传到社交网络、邮箱或网站等其他地方&#xff0c;而解决这个问题的最直接方式就是将图片缩小。下面就给大家分享几个简单易行的方法&#xff0c;可以轻松将图片大小缩小到2M以…

C++设计模式_02_面向对象设计原则

文章目录 1. 面向对象设计&#xff0c;为什么&#xff1f;2. 重新认识面向对象3. 面向对象设计原则3.1 依赖倒置原则(DIP)3.2 开放封闭原则(OCP )3.3 单一职责原则( SRP )3.4 Liskov 替换原则 ( LSP )3.5 接口隔离原则 ( ISP )3.6 优先使用对象组合&#xff0c;而不是类继承3.7…

C++面向对象编程(2)

目录 一. 问题引入 二. 右值引用 1. lvalue/rvalue/prvalue/xvalue 1.1 表达式与对象的概念 1.2 左值与右值 2. moving semantics 2.1 显示绑定 2.2 Move constructors 2.3 Move assignment operator 2.4 实例分析 // TODO Quiz REF 本章简单介绍下move语义的“来…