02-Fortran基础--Fortran操作符与控制结构

02-Fortran基础--Fortran操作符与控制结构

  • 0 引言
  • 1 操作符
    • 1.1 数学运算符
    • 1.2 逻辑运算符
    • 1.3 关系运算符
  • 2 控制流程
    • 2.1 条件结构
    • 2.2 循环结构
    • 2.3 分支结构


0 引言

  运算符和控制流程对编程语言是必须的,Fortran的操作符和控制流程涉及到各种数学运算符、逻辑运算符以及控制结构。下面是Fortran的运算符和控制流程的基础内容。

1 操作符

1.1 数学运算符

  • + 加法
  • - 减法
  • * 乘法
  • / 除法
  • ** 幂运算
a = 10
b = 5
c = a + b     ! c = 15
d = a * b     ! d = 50
e = a ** 2    ! e = 100

1.2 逻辑运算符

  • .and. 逻辑与
  • .or. 逻辑或
  • .not. 逻辑非
logical :: p, q, r
p = .true.
q = .false.
r = p .and. q   ! r = .false.

1.3 关系运算符

关系运算符名称写法1写法2
等于==.eq.
不等于/=.ne.
小于<.lt.
小于等于<=.le.
大于>.gt.
大于等于>=.ge.
integer(4) :: x, y
x = 10
y = 5
if (x > y) thencontinue ! 执行操作
end if
if(x .le. y)then ! 判断条件等价于 if(x<=y)thencontinue ! continue关键字表示继续执行,理解为占位;
end if

2 控制流程

2.1 条件结构

IF-THEN:根据条件执行不同的操作。

! 条件判断语句的一般形式
if (condition) then! 执行操作
end if

示例:

	program test2real(8) :: xcall RANDOM_SEED() ! 随机种子call RANDOM_NUMBER(x) ! 生成[0-1]的随机数赋值给xif(x > 0.5)then ! 判断随机数是否大于0.5print *,'x>',0.5elseprint *,'x<=',0.5endifend program

2.2 循环结构

  Fortran 中的循环结构主要包括 DO 循环和 DO WHILE 循环。

2.2.1 DO循环
  DO:执行指定次数的循环。

do index = start, end, step! 循环体
end do

其中:

index 是循环控制变量,它在每次循环迭代时递增或递减。
start 是循环控制变量的初始值。
end 是循环控制变量的结束值。循环将一直执行,直到 index 达到或超过 end。
step 是循环控制变量的步长。如果 step 为正值,则 index 在每次迭代时递增;如果 step 为负值,则 index 在每次迭代时递减。

  在循环体中,你可以执行任意操作,包括数学计算、逻辑判断、数组操作等。例如:

示例

PROGRAM LoopExampleIMPLICIT NONEINTEGER :: i! 打印从110的偶数DO i = 2, 10, 2PRINT *, iEND DOEND PROGRAM LoopExample

  在上面的例子中,循环控制变量 i 的初始值为2,结束值为10,步长为2。因此,循环将从2开始,每次递增2,直到达到或超过10。在循环体中,PRINT * 语句用于打印循环变量 i 的值,从而打印出从2到10的所有偶数。

2.2.1 DO WHILE循环
  DO WHILE 循环用于在满足条件时重复执行一段代码,其一般形式如下:

DO WHILE (condition)! 执行的代码
END DO

  condition 是一个逻辑表达式,当其为真时循环继续执行,为假时循环结束。

示例:

PROGRAM DoWhileExampleIMPLICIT NONEINTEGER(4) :: countcount = 0DO WHILE (count < 5)count = count + 1PRINT *, "循环次数:", countEND DO
END PROGRAM DoWhileExample

  在这个示例中,当 count 小于 5 时,循环继续执行,每次增加 count 的值,并打印出循环次数。当 count 达到 5 时,循环结束。

  这些是 Fortran 中常用的循环结构,它们可以帮助你重复执行特定的代码块,实现各种算法和任务。

2.3 分支结构

  Fortran 中的分支结构通常有 IF 语句和 SELECT CASE 语句两种形式。

2.3.1 IF 语句
  IF 语句用于根据条件执行不同的代码块。它的一般形式如下:

IF (condition) THEN! 如果条件为真,则执行此处的代码
ELSEIF (condition2) THEN! 如果上一个条件为假且条件2为真,则执行此处的代码
ELSE! 如果所有条件都为假,则执行此处的代码
END IF

  其中,condition、condition2 等是逻辑表达式,可以是关系运算、逻辑运算的组合,用于判断是否执行相应的代码块。

示例:

PROGRAM IfExampleIMPLICIT NONEINTEGER :: xx = 10IF (x > 0) THENPRINT *, "x 是正数"ELSEIF (x < 0) THENPRINT *, "x 是负数"ELSEPRINT *, "x 是零"END IFEND PROGRAM IfExample

  在这个示例中,根据 x 的值,打印出不同的消息。

2.3.2 SELECT CASE 语句
  SELECT CASE 语句用于根据表达式的值选择执行不同的代码块。它的一般形式如下:

SELECT CASE (expression)CASE (value1)! 如果表达式的值等于 value1,则执行此处的代码CASE (value2)! 如果表达式的值等于 value2,则执行此处的代码CASE DEFAULT! 如果表达式的值与所有值都不匹配,则执行此处的代码
END SELECT

示例:

PROGRAM SelectCaseExampleIMPLICIT NONEINTEGER :: dayday = 3SELECT CASE (day)CASE (1)PRINT *, "星期一"CASE (2)PRINT *, "星期二"CASE (3)PRINT *, "星期三"CASE DEFAULTPRINT *, "未知"END SELECTEND PROGRAM SelectCaseExample

  在这个示例中,根据 day 的值,打印出相应的星期几。希望这些示例能够帮助你理解 Fortran 中的分支结构。

  通过控制结构,可以实现根据不同条件执行不同的代码块、重复执行一段代码、选择不同的执行路径、以及控制循环的流程。这些控制结构在Fortran编程中起着至关重要的作用,帮助程序实现复杂的逻辑和算法

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

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

相关文章

一文了解栈

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、栈是什么&#xff1f;二、栈的实现思路1.顺序表实现2.单链表实现3.双向链表实现 三、接口函数的实现1.栈的定义2.栈的初始化3.栈的销毁4.入栈5.出栈6.返回栈…

调用nvprof报错: No kernels were profiled. No API activities were profiled.

调用nvprof报错 1 nvprof介绍 nvprof 是 NVIDIA 提供的一款用于分析 CUDA 应用程序性能的命令行性能分析器。CUDA 是一种并行计算平台和编程模型&#xff0c;允许开发人员利用 NVIDIA GPU 进行通用处理。 nvprof 帮助开发人员分析其 CUDA 应用程序的性能&#xff0c;提供各种…

C++继承 - 下

目录 1. 继承和友元 2. 继承与静态成员 3. 菱形继承以及菱形虚拟继承 3.1. 单继承 3.2. 多继承 3.3. 菱形继承 3.4. 菱形虚拟继承 3.5. 菱形继承的底层细节 3.6. 菱形虚拟继承的底层细节 3.7. 虚拟继承 4. 继承的总结 5. 相关继承练习题 5.1. 如何定义一个无法被继…

【Vue3】Ref与Reactive

3.1【ref 创建&#xff1a;基本类型的响应式数据】 作用&#xff1a;定义响应式变量。语法&#xff1a;let xxx ref(初始值)。返回值&#xff1a;一个RefImpl的实例对象&#xff0c;简称ref对象或ref&#xff0c;ref对象的value属性是响应式的。注意点&#xff1a; JS中操作数…

Windows环境编译 VVenC 源码生成 Visual Studio 工程

VVenC介绍 Fraunhofer通用视频编码器(VVenC)的开发是为了提供一种公开可用的、快速和有效的VVC编码器实现。VVenC软件基于VTM&#xff0c;其优化包括软件重新设计以减轻性能瓶颈、广泛的SIMD优化、改进的编码器搜索算法和基本的多线程支持以利用并行。此外&#xff0c;VVenC支…

git commit 提交报错pre-commit hook failed (add --no-verify to bypass) 解决方法,亲测有效

问题截图 今天在执行 git commit 命令时报错&#xff1a;pre-commit hook failed (add --no-verify to bypass) 解决 参考文章&#xff1a;git commit报错&#xff1a;pre-commit hook failed的解决方法 具体原理什么的就不解释了&#xff0c;可以看看上面的参考文章 解决方…

TXT文本高效批量编辑,支持批量将每个单号间的空白行进行删除掉,文本内容管理更方便

TXT文本是一种常用的存储快递单号的数据格式。然而&#xff0c;当TXT文本中存在大量的空白行时&#xff0c;不仅浪费了存储空间&#xff0c;还可能导致批量编辑和查询变得低效。为了解决这一问题&#xff0c;我们推出了高效的TXT文本批量编辑功能&#xff0c;支持批量删除单号间…

PTQ4SAM、Mamba-Attention、AniTalker、IceFormer、U-DiTs、CogDPM

本文首发于公众号&#xff1a;机器感知 PTQ4SAM、Mamba-Attention、AniTalker、IceFormer、U-DiTs、CogDPM PTQ4SAM: Post-Training Quantization for Segment Anything Segment Anything Model (SAM) has achieved impressive performance in many computer vision tasks. Ho…

Day 24 数据库管理及数据类型

数据库管理及数据类型 一&#xff1a;数据类型 1.数值类型 整数类型 ​ 整数类型&#xff1a;TINYINT SMALLINT MEDIUMINT INT BIGINT ​ 作用&#xff1a;用于存储用户的年龄、游戏的Level、经验值等 浮点数类型 ​ 浮点数类型&#xff1a;FLOAT DOUBLE ​ 作用&#xf…

Docker镜像仓库-在私有镜像仓库推送或拉取镜像

推送镜像到私有仓库&#xff0c;要先让镜像打包 前缀为私有仓库地址的名字&#xff1a; 这里也是打包成功了:docker images 可以查看到 push推送镜像到镜像仓库: docker push 192.168.221.129:8080/nginx:1.0推送成功后在主机访问镜像仓库可以看到 这里已经有个镜像了。而且可…

CyberDemo解读

CyberDemo: Augmenting Simulated Human Demonstration for Real-World Dexterous Manipulation解读 摘要1. 简介2. Related Work2.1 Data for Learning Robot Manipulation2.2 机器人的预训练视觉表征2.3 Sim2Real Transfer 3. CyberDemo3.1 收集人体遥操作数据3.2 在模拟器中…

工程绘图神器:Origin 2021软件安装与图像demo水印问题解决

目录 引言 正文 01-Origin软件简介 02-Origin软件安装 03-Origin软件复制图像带有水印问题解决 引言 注&#xff1a;本篇软件安装内容引用了微信公众号“软件管家”里的Origin 2021安装教程和…

张大哥笔记:自媒体人10种赚钱方法

很多人都在做自媒体&#xff0c;比如平台广告分成、广告收入、公关宣传、品牌植入、演讲、会员制、出书、线下活动。那么本文介绍了自媒体人10种赚钱方法&#xff0c;供大家参考&#xff1a; 1、打造个人IP 什么是个人IP&#xff1f;在百度百科上是这样解释的&#xff1a;指个…

京东生产环境十万并发秒杀系统三高架构

文章目录 三高——高并发、高可用、高可扩展用数据库乐观锁解决超卖阿里巴巴&#xff1a;为了提升数据库性能&#xff0c;对数据库的源码级别做了改造——在DB内部实现内存队列&#xff0c;一次性接收很多的请求&#xff0c;一次性更新。京东&#xff1a;redis&#xff0c;mq&a…

无线通信基础

这里写目录标题 通信概述什么是无线通信无线通信电磁波 通信概述 什么是无线通信 无线通信 : 是指利用电磁波信号可以在自由空间中传播的特性进行信息交换的一种通信方式 无线通信的关键技术包括调制技术、解调技术、信道编码技术、信号处理技术、天线技术等。这些技术的不断…

医药垃圾分类管理系统|基于SSM医药垃圾分类管理系统的系统设计与实现(源码+数据库+文档)

医药垃圾分类管理系统 目录 基于SSM医药垃圾分类管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统登录模块 2管理员模块实现 3用户模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博…

《十九》Qt Http协议及实战

前言 本篇文章来给大家讲解QT中的Http协议&#xff0c;Http协议主要用于网络中数据的请求和响应&#xff0c;那么这篇文章将给大家讲解一下这个协议。 一、HTTP概述 HTTP&#xff08;超文本传输协议&#xff09;是互联网上应用最为广泛的协议之一&#xff0c;它定义了客户端…

LM4562NA 直插DIP8双运放 音频hifi运算放大器

LM4562NA是一款高性能音频运算放大器&#xff0c;其应用领域主要集中在音频和声音处理方面&#xff0c;包括但不限于&#xff1a; 1. 专业录音设备&#xff1a;在录音棚、广播电台和电视台等专业环境中&#xff0c;用于信号放大和处理&#xff0c;确保高质量的声音录制和传输…

北邮22级信通院DSP:实验三(1):FFT变换、IFFT变换(附每步8点变换蝶形图)保姆级讲解+用C++程序实现复数域的FFT变换和IFFT变换

北邮22信通一枚~ 跟随课程进度更新北邮信通院DSP的笔记、代码和文章&#xff0c;欢迎关注~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院DSP_青山入墨雨如画的博客-CSDN博客 目录 一、预备知识 1.1 FFT算法 1.2.1由DFT到FFT 1.2.2 基2时域抽选算法 …

并发编程之阻塞队列BlockingQueue实战及其原理分析

1. 阻塞队列介绍 1.1 队列 是限定在一端进行插入&#xff0c;另一端进行删除的特殊线性表。 先进先出(FIFO)线性表。 允许出队的一端称为队头&#xff0c;允许入队的一端称为队尾。