一起学习Firtran: Fortran中的流程控制与操作符
流程控制语句
在计算机编程中,控制程序流程是算法设计中的一个核心概念,它使得程序能够根据特定条件执行不同的操作或重复执行某段代码。这显著增强了计算机算法相对于简单数学公式的功能和灵活性。
if语句
在单个 if 语句中只有当测试表达式(angle<90.0)为真时,结构内的代码才会执行。
program testimplicit noneinteger :: angle = 80if ( long < 90 ) thenprint *, "angle is less than 90"end ifend program test
if-else语句
在如 if 等结构内缩进代码是一种良好的编程习惯,可以提高代码的可读性。我们可以使用关键字 else 为结构添加一个备选分支。
program testimplicit noneinteger :: ageprint *, "Enter your age:"read *, ageif (age > 18) thenprint *, "You are Old B."else if (age .eq. 18) thenprint *, "You are an adult."elseprint *, "You are a little B."end ifend program test
循环结构do
循环具有一个整数计数器变量,用于跟踪当前正在执行的循环迭代。在此示例中,我们为此计数器变量使用了一个通用名称:do 循环中的 i。
当我们定义循环的开始时,使用计数器变量名后跟等号(=)来指定计数变量的起始值和最终值。
program testimplicit noneinteger :: ido i = 1, 10print *, iend doend program test

带跳步的do循环
我们只需要在循环条件末尾设置跳步的步数即可。
program testimplicit noneinteger :: ido i = 1, 10, 2print *, i ! Print odd numbersend doend program test

条件循环(do while)
可以使用关键字 do while 向循环添加条件。只要给定的条件评估为真,循环就会执行。
program testimplicit noneinteger :: ii = 1do while (i < 11)print *, ii = i + 1end doend program test
循环控制语句(exit 、cycle)
通常情况下,如果满足某个条件,需要停止循环。Fortran 提供了两个可执行语句来处理这种情况。需要注意的是,在嵌套循环中使用时,cycle 和 exit 语句作用于最内层的循环。
exit 用于提前退出循环。它通常包含在 if 语句内。
program testimplicit noneinteger :: ido i = 1, 100if (i > 10) thenexit ! Stop printing numbersend ifprint *, iend doend program test
另一方面,cycle 会跳过循环中剩余的部分,并进入下一个循环周期 。
program testimplicit noneinteger :: ido i = 1, 10if (mod(i, 2) == 0) thencycle ! Don't print even numbersend ifprint *, iend doend program test
嵌套循环控制:标签
在任何编程语言中,嵌套循环都是一个常见的情况。嵌套循环指的是存在于另一个循环内的循环。Fortran 允许程序员为每个循环添加标签或名称。如果为循环添加了标签,则有两个潜在的好处:
- 可以提高代码的可读性(当命名有意义时)。
- 可以使用带标签的
exit和cycle,从而实现对循环的精细控制。
program testimplicit noneinteger :: i, jinteger :: sum_limit = 15logical :: found = .false.! 外层循环,带有标签outer_loopouter_loop: do i = 1, 10! 内层循环,带有标签inner_loopinner_loop: do j = 1, 10if (i + j > sum_limit) then! 如果和超过了限制,跳出内层循环的当前迭代cycle inner_loopend ifprint *, 'i =', i, 'j =', j, 'sum =', i + j! 如果需要在特定的和后想要退出所有循环if (i + j == 10) then! 设置标志变量表示已找到found = .true.! 退出外层循环exit outer_loopend ifend do inner_loopend do outer_loop! 根据是否找到特定的和,打印相应的消息if (found) thenprint *, 'Found a pair (i, j) whose sum is 10.'elseprint *, 'Did not find any pair (i, j) whose sum is 10.'end ifend program test

可并行化循环(do concurrent)
do concurrent 循环用于明确指定循环内部没有相互依赖关系;这告诉编译器可以使用并行化/SIMD 来加速循环的执行,并更清晰地传达程序员的意图。更具体地说,这意味着任何给定的循环迭代都不依赖于其他循环迭代的先前执行。同时,任何可能发生的状态变化都必须仅在每个循环内部发生。这些要求对可以放在循环体内的内容施加了限制。
简单地用 do concurrent 替换一个循环并不能保证并行执行。上述解释并没有详细说明编写正确 do concurrent 循环所需满足的所有要求。编译器也可以自行决定如何优化(例如,对于执行简单计算且迭代次数较少的循环,如以下示例),这意味着它们可能不会优化循环。通常,需要编译器标志来激活循环的可能并行化。
program testimplicit noneinteger :: iinteger, parameter :: n = 1000real, dimension(n) :: a, b, c! 初始化数组a和ba = 1.0b = 2.0do concurrent (i = 1:n)c(i) = a(i) + b(i)end do! 打印数组的前10个元素以验证结果print *, 'First 10 elements of array c:'do i = 1, 10print *, c(i)end doend program test

操作符
编程中,逻辑表达式用于评估和比较值,以确定条件是否为真。构建逻辑表达式时,可以使用关系运算符和逻辑运算符。
关系运算符
关系运算符用于比较两个值,并返回一个布尔结果(真或假)。
| 操作符 | 选择 | 描述 |
|---|---|---|
|
|
| 测试两个操作数是否相等 |
|
|
| 测试两个操作数是否不相等 |
|
|
| 测试左操作数是否严格大于右操作数 |
|
|
| 测试左操作数是否严格小于右操作数 |
|
|
| 测试左操作数是否大于或等于右操作数 |
|
|
| 测试左操作数是否小于或等于右操作数 |
program testimplicit noneinteger :: iinteger :: jprint *, "Enter First Integers"read *, iprint *, "Enter Second Integers"read *, jif (i .eq. j) thenprint *, "i = j"else if (i .ne. j) thenprint *, "i != j"if (i .gt. j) thenprint *, "i > j"else if (i .lt. j) thenprint *, "i < j"end ifend ifif (i .ge. j) thenprint *, "i >= j"end ifif (i .le. j) thenprint *, "i <= j"end ifend program test

逻辑运算符
逻辑运算符用于组合或反转布尔表达式,从而构建更复杂的条件。
| 操作符 | 描述 |
|---|---|
|
| 如果左右操作数都为 TRUE,则为 TRUE |
|
| 如果左侧或右侧为 TRUE 或者两个操作数都为 TRUE,则为 TRUE |
|
| 如果右操作数为 FALSE,则为 TRUE |
|
| 如果左操作数与右操作数具有相同的逻辑值,则为 TRUE |
|
| 如果左操作数与右操作数具有相反的逻辑值,则为 TRUE |
program testimplicit nonelogical :: a, blogical :: r_and, r_or, r_not, r_eqv, r_neqv! 初始化逻辑变量a = .true.b = .false.! 使用 .and. 操作符r_and = a .and. bprint *, 'a .and. b = ', r_and! 使用 .or. 操作符r_or = a .or. bprint *, 'a .or. b = ', r_or! 使用 .not. 操作符r_not = .not. aprint *, '.not. a = ', r_not! 使用 .eqv. 操作符(等价于)r_eqv = a .eqv. bprint *, 'a .eqv. b = ', r_eqv! 使用 .neqv. 操作符(不等价于)r_neqv = a .neqv. bprint *, 'a .neqv. b = ', r_neqv! 额外的示例,展示当 a 和 b 相同时的情况a = .true.b = .true.r_and = a .and. bprint *, 'When both a and b are true, a .and. b = ', r_andr_or = a .or. bprint *, 'When both a and b are true, a .or. b = ', r_orr_eqv = a .eqv. bprint *, 'When both a and b are true, a .eqv. b = ', r_eqvr_neqv = a .neqv. bprint *, 'When both a and b are true, a .neqv. b = ', r_neqvend program test

相关文章:
一起学习Firtran: Fortran中的流程控制与操作符
流程控制语句 在计算机编程中,控制程序流程是算法设计中的一个核心概念,它使得程序能够根据特定条件执行不同的操作或重复执行某段代码。这显著增强了计算机算法相对于简单数学公式的功能和灵活性。 if语句 在单个 if 语句中只有当测试表达式࿰…...
Sonic:开源Go语言开发的高性能博客平台
Sonic:一个用Go语言开发的高性能博客平台 简介 Sonic,一个以其速度如声速般快速而命名的博客平台,是一个用Go语言开发的高性能博客系统。正如其名字所暗示的,Sonic旨在提供一个简单而强大的博客解决方案。这个项目受到了Halo项目…...
SpringBoot教程(十四) SpringBoot之集成Redis
SpringBoot教程(十四) | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 (举例讲解)2.4 项目中使用之工具类封装 (正式用这个)2.5 序列化 &…...
RSI和CCI指标组合:如何评估需求供应区?昂首资本实战指南
在市场分析中,分笔成交点数量提供了一个有价值的视角,帮助我们识别需求和供应区。通过这些数据,我们可以假设供需区域的参数与主要振荡器中的区域参数类似。以RSI和CCI为例,这些指标不仅能够反映市场的超买和超卖情况,…...
PTPVT 插值说明
文章目录 PTPVT 插值说明 PTPVT 插值说明PVT Hermite插值PVT 三次多项式插值PT 插值Sin轨迹测试结果PVT Hermite插值结果PVT 三次多项式插值结果PT 插值结果 用户轨迹测试结果PVT Hermite插值结果PT 插值结果 PTPVT 插值说明 PT模式: 位置-时间路径插值算法。 PVT模…...
Spring MVC和servlet
1.Spring MVC是Spring框架的一个扩展 2.Spring MVC工作流程 1、用户发送请求至前端控制器DispatcherServlet。 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及…...
java下载文件流,不生成中间文件。
java下载文件流,不生成中间文件。 代码设计:代码实现 代码设计: 从前端获取的数据经过后端加工后,生成文件流,并返回前端,(不生成中间文件,注意内存,记得关闭流…...
计算机专业考研 408 学科学习方法
计算机专业考研 408 学科涵盖数据结构、计算机组成原理、操作系统和计算机网络四门核心课程,内容多且难度大。但只要掌握科学的学习方法,便能化繁为简,稳步提升。以下为大家详细介绍 408 学科的学习方法。 一、基础夯实阶段:全面…...
mapper文件的解释
<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.ruoyi.system.mapper.Jianai…...
常见协议的高危软件漏洞信息
HTTP 协议 协议 | 软件 | 漏洞编号 | 漏洞描述 Apache Log4j CVE-2021-45105 | Apache Log4j拒绝服务攻击漏洞 XWiki Platform CVE-2023-26477 | XWiki Platform存在安全漏洞,该漏洞源于可以通过URL请求参数结合其他参数注入任意脚本宏 Microsoft Windows CVE-20…...
Mediatek Android13 ROM定制
目录 1、系统签名 2、默认关闭WIFI 3、默认关闭Bluetooth 4、默认关闭NFC 5、移除物理键盘支持 6、禁止 ANR、崩溃等的对话框显示 7、修改默认壁纸 8、取消USB PTP MTP MIDI等支持 9、设置Screen Lock默认为None 10、设置Data&time自动 11、设置特定时区 12、设…...
RedisInsight:企业级 Redis 管理与分析工具
1 介绍 RedisInsight 是一款专为企业级用户设计的 Redis 管理与分析工具,旨在简化 Redis 数据库的管理和优化操作。通过直观的图形化界面和强大的功能集,RedisInsight 提供了全面的监控、诊断、性能优化以及数据管理能力,帮助企业和开发团队更高效地管理和运维 Redis 实例。…...
c# 快捷键模块
文章目录 命名空间和类类成员静态成员 静态方法GenerateHotkeyIdWndProcGetWindowHandleAndSourceRegisterUnregister 静态方法(外部调用)RegisterHotKey 和 UnRegisterHotKey 委托HotKeyCallbackHandler 枚举HotkeyModifiers 应用示例 using System; us…...
【笔记】增值税计算笔记
增值税计算笔记 设 进价为 α \alpha α元 出价为 α τ \alpha\tau ατ元 增值税率为 r r r ∵ { 进 项 税 α 1 r r 销 项 税 α τ 1 r r 增 值 税 销 项 税 − 进 项 税 ∴ 增 值 税 α ( τ − 1 ) r 1 r \because \left\{ \begin{aligned}进项税 &\frac{…...
请解释 JavaScript 中的闭包,以及它的优缺点和常见使用场景?
闭包(Closure)是什么? 闭包是JavaScript中的一个重要概念,指的是一个函数能够记住并访问它的词法作用域,即使这个函数在其词法作用域之外执行。 换句话说,闭包使得函数可以“记住”它被创建时的环境。 闭…...
SpringBoot 集成 Caffeine 实现本地缓存
目录 1、Caffeine 简介 1.1、Caffeine 简介1.2、对比 Guava cache 的性能主要优化项1.3、常见的缓存淘汰算法1.4、SpringBoot 集成 Caffeine 两种方式 2、SpringBoot 集成 Caffeine 方式一 2.1、缓存加载策略 2.1.1、手动加载2.1.2、自动加载【Loading Cache】2.1.3、异步加载…...
druid连接池参数配置
最近发现生产环境经常有数据库连接超时的问题,排查发现是druid连接池参数设置不合理导致 总结问题如下: 为了防止僵尸连接,k8s ipvs做了连接超时限制,如果TCP连接闲置超过900s(15分钟),客户端再尝试通过这个连接去发起…...
【OceanBase】通过 OceanBase 的向量检索技术构建图搜图应用
文章目录 一、向量检索概述1.1 关键概念① 非结构化数据② 向量③ 向量嵌入(Embedding)④ 向量相似性检索 1.2 应用场景 二、向量检索核心功能三、图搜图架构四、操作步骤4.1 使用 Docker 部署 OceanBase 数据库4.2 测试OceanBase数据库连通性4.3 开启数据库向量检索功能4.4 克…...
Linux 安装运行gatk的教程
1.下载安装 wget https://github.com/broadinstitute/gatk/releases/download/4.1.8.1/gatk-4.1.8.1.zip2.解压 unzip *.zip3.查看 gatk --help 如下显示表示安装成功: 注意:仅限在该包所在位置的路径下能使用...
什么是unit l2 norm
1. L2 Norm 定义 L2 norm(或称欧几里得范数)是用来衡量一个向量的“长度”或“大小”的一种方式。在 n 维空间中,给定一个向量V(V1,V2,…,Vn),其 L2 norm 定义为: 也可以理解为该向量与原点之间的欧几里得距离。 2…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
