当前位置: 首页 > 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…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...