当前位置: 首页 > news >正文

一起学习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 允许程序员为每个循环添加标签或名称。如果为循环添加了标签,则有两个潜在的好处:

  1. 可以提高代码的可读性(当命名有意义时)。
  2. 可以使用带标签的 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

操作符

编程中,逻辑表达式用于评估和比较值,以确定条件是否为真。构建逻辑表达式时,可以使用关系运算符和逻辑运算符。

关系运算符

关系运算符用于比较两个值,并返回一个布尔结果(真或假)。 

操作符  

选择  

描述

==

.eq.

测试两个操作数是否相等

/=

.ne.

测试两个操作数是否不相等

>

.gt.

测试左操作数是否严格大于右操作数

<

.lt.

测试左操作数是否严格小于右操作数

>=

.ge.

测试左操作数是否大于或等于右操作数

<=

.le.

测试左操作数是否小于或等于右操作数

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

逻辑运算符

逻辑运算符用于组合或反转布尔表达式,从而构建更复杂的条件。

操作符  

描述

.and.

如果左右操作数都为 TRUE,则为 TRUE

.or.

如果左侧或右侧为 TRUE 或者两个操作数都为 TRUE,则为 TRUE

.not.

如果右操作数为 FALSE,则为 TRUE

.eqv.

如果左操作数与右操作数具有相同的逻辑值,则为 TRUE

.neqv.

如果左操作数与右操作数具有相反的逻辑值,则为 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中的流程控制与操作符

流程控制语句 在计算机编程中&#xff0c;控制程序流程是算法设计中的一个核心概念&#xff0c;它使得程序能够根据特定条件执行不同的操作或重复执行某段代码。这显著增强了计算机算法相对于简单数学公式的功能和灵活性。 if语句 在单个 if 语句中只有当测试表达式&#xff0…...

Sonic:开源Go语言开发的高性能博客平台

Sonic&#xff1a;一个用Go语言开发的高性能博客平台 简介 Sonic&#xff0c;一个以其速度如声速般快速而命名的博客平台&#xff0c;是一个用Go语言开发的高性能博客系统。正如其名字所暗示的&#xff0c;Sonic旨在提供一个简单而强大的博客解决方案。这个项目受到了Halo项目…...

SpringBoot教程(十四) SpringBoot之集成Redis

SpringBoot教程&#xff08;十四&#xff09; | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 &#xff08;举例讲解&#xff09;2.4 项目中使用之工具类封装 &#xff08;正式用这个&#xff09;2.5 序列化 &…...

RSI和CCI指标组合:如何评估需求供应区?昂首资本实战指南

在市场分析中&#xff0c;分笔成交点数量提供了一个有价值的视角&#xff0c;帮助我们识别需求和供应区。通过这些数据&#xff0c;我们可以假设供需区域的参数与主要振荡器中的区域参数类似。以RSI和CCI为例&#xff0c;这些指标不仅能够反映市场的超买和超卖情况&#xff0c;…...

PTPVT 插值说明

文章目录 PTPVT 插值说明 PTPVT 插值说明PVT Hermite插值PVT 三次多项式插值PT 插值Sin轨迹测试结果PVT Hermite插值结果PVT 三次多项式插值结果PT 插值结果 用户轨迹测试结果PVT Hermite插值结果PT 插值结果 PTPVT 插值说明 PT模式&#xff1a; 位置-时间路径插值算法。 PVT模…...

Spring MVC和servlet

1.Spring MVC是Spring框架的一个扩展 2.Spring MVC工作流程 1、用户发送请求至前端控制器DispatcherServlet。 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及…...

java下载文件流,不生成中间文件。

java下载文件流&#xff0c;不生成中间文件。 代码设计&#xff1a;代码实现 代码设计&#xff1a; 从前端获取的数据经过后端加工后&#xff0c;生成文件流&#xff0c;并返回前端&#xff0c;&#xff08;不生成中间文件&#xff0c;注意内存&#xff0c;记得关闭流&#xf…...

计算机专业考研 408 学科学习方法

计算机专业考研 408 学科涵盖数据结构、计算机组成原理、操作系统和计算机网络四门核心课程&#xff0c;内容多且难度大。但只要掌握科学的学习方法&#xff0c;便能化繁为简&#xff0c;稳步提升。以下为大家详细介绍 408 学科的学习方法。 一、基础夯实阶段&#xff1a;全面…...

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存在安全漏洞&#xff0c;该漏洞源于可以通过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 静态方法&#xff08;外部调用&#xff09;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 中的闭包,以及它的优缺点和常见使用场景?

闭包&#xff08;Closure&#xff09;是什么&#xff1f; 闭包是JavaScript中的一个重要概念&#xff0c;指的是一个函数能够记住并访问它的词法作用域&#xff0c;即使这个函数在其词法作用域之外执行。 换句话说&#xff0c;闭包使得函数可以“记住”它被创建时的环境。 闭…...

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连接池参数配置

最近发现生产环境经常有数据库连接超时的问题&#xff0c;排查发现是druid连接池参数设置不合理导致 总结问题如下&#xff1a; 为了防止僵尸连接&#xff0c;k8s ipvs做了连接超时限制&#xff0c;如果TCP连接闲置超过900s(15分钟)&#xff0c;客户端再尝试通过这个连接去发起…...

【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 如下显示表示安装成功&#xff1a; 注意&#xff1a;仅限在该包所在位置的路径下能使用...

什么是unit l2 norm

1. L2 Norm 定义 L2 norm&#xff08;或称欧几里得范数&#xff09;是用来衡量一个向量的“长度”或“大小”的一种方式。在 n 维空间中&#xff0c;给定一个向量V(V1,V2,…,Vn)&#xff0c;其 L2 norm 定义为&#xff1a; 也可以理解为该向量与原点之间的欧几里得距离。 2…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 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模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...