Fortran语言基础教程笔记

news2024/10/2 14:18:29

Fortran语言基础教程笔记

下面是一个全面的 Fortran 语言入门教程,适合初学者和有一定编程经验的人士。Fortran(Formula Translation)是一种主要用于科学计算、工程分析和数值模拟的高级编程语言。它最初由 IBM 在 1950 年代开发,至今仍在许多高性能计算领域中广泛使用。

Fortran 简介

Fortran 的主要特点包括:

  • 高效性:特别适合处理大量数据和进行数值计算。
  • 标准化:有多个版本的标准,最新的标准是 Fortran 2018。
  • 现代特性:支持面向对象编程、模块化编程等现代编程特性。
  • 可移植性:编写的代码可以在多种平台上运行。

安装 Fortran 编译器

在 Windows 上安装
  1. 下载并安装 gfortran

    • 访问 GFortran for Windows 下载适用于 Windows 的 gfortran 编译器。
    • 按照说明进行安装。
  2. 验证安装

    • 打开命令提示符,输入以下命令:
      gfortran --version
      
    • 你应该能看到类似 GNU Fortran (GCC) 10.2.0 的版本号。
在 macOS 上安装
  1. 使用 Homebrew 安装 gfortran

    • 如果你还没有安装 Homebrew,可以通过以下命令安装:
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
      
    • 安装 gfortran:
      brew install gcc
      
  2. 验证安装

    • 打开终端,输入以下命令:
      gfortran --version
      
    • 你应该能看到类似 GNU Fortran (GCC) 10.2.0 的版本号。
在 Linux 上安装
  1. 使用包管理器安装 gfortran

    • 对于 Ubuntu/Debian:
      sudo apt-get update
      sudo apt-get install gfortran
      
    • 对于 CentOS/RHEL:
      sudo yum install gcc-gfortran
      
  2. 验证安装

    • 打开终端,输入以下命令:
      gfortran --version
      
    • 你应该能看到类似 GNU Fortran (GCC) 10.2.0 的版本号。

第一个 Fortran 程序

让我们从一个简单的“Hello, World!”程序开始。

  1. 创建文件

    • 使用你喜欢的文本编辑器创建一个名为 hello.f90 的文件,并在其中输入以下内容:
      program hello
          print *, "Hello, World!"
      end program hello
      
  2. 编译和运行程序

    • 打开终端或命令提示符,导航到包含 hello.f90 文件的目录,然后运行以下命令:
      gfortran -o hello hello.f90
      ./hello
      
    • 你应该会看到输出 Hello, World!

基本语法

注释
  • 单行注释使用 ! 符号。
  • 多行注释可以使用 C* 开头的行。
! 这是单行注释
C 这也是单行注释
* 这还是单行注释
变量
  • 变量名区分大小写。
  • 需要声明变量类型。
integer :: i
real :: x
character(len=10) :: name
logical :: is_valid
数据类型
  • 基本类型integer, real, double precision, complex, character, logical 等。
  • 派生类型:用户自定义类型。
type person
    character(len=20) :: name
    integer :: age
end type person

type(person) :: alice
alice%name = 'Alice'
alice%age = 30
字符串
  • 使用 character 类型定义字符串。
  • 支持字符串操作函数。
character(len=20) :: greeting
greeting = 'Hello, World!'
print *, greeting

控制结构

条件语句
  • if 语句
program if_example
    implicit none
    integer :: x
    x = 10

    if (x > 0) then
        print *, 'x is positive'
    elseif (x < 0) then
        print *, 'x is negative'
    else
        print *, 'x is zero'
    endif
end program if_example
  • select case 语句
program select_case_example
    implicit none
    integer :: day
    day = 1

    select case (day)
    case (1)
        print *, 'It is Monday'
    case (2)
        print *, 'It is Tuesday'
    case default
        print *, 'It is another day'
    end select
end program select_case_example
循环
  • do 循环
program do_loop_example
    implicit none
    integer :: i

    do i = 1, 5
        print *, i
    end do
end program do_loop_example
  • while 循环(通过 do while 实现)
program while_loop_example
    implicit none
    integer :: i
    i = 1

    do while (i <= 5)
        print *, i
        i = i + 1
    end do
end program while_loop_example

函数和子程序

定义函数
  • 使用 function 关键字定义函数。
module math_module
    contains
    function add(a, b) result(sum)
        implicit none
        integer, intent(in) :: a, b
        integer :: sum
        sum = a + b
    end function add
end module math_module
调用函数
  • 在主程序中调用函数。
program main
    use math_module
    implicit none
    integer :: result
    result = add(3, 4)
    print *, result
end program main
定义子程序
  • 使用 subroutine 关键字定义子程序。
module math_module
    contains
    subroutine print_sum(a, b)
        implicit none
        integer, intent(in) :: a, b
        print *, 'The sum is', a + b
    end subroutine print_sum
end module math_module
调用子程序
  • 在主程序中调用子程序。
program main
    use math_module
    implicit none
    call print_sum(3, 4)
end program main

数组

创建数组
  • 使用 dimension 属性定义数组。
integer, dimension(5) :: numbers
numbers = [1, 2, 3, 4, 5]
数组操作
  • 初始化:使用 =(/ ... /)
  • 访问元素:使用索引。
integer, dimension(5) :: numbers
numbers = (/ 1, 2, 3, 4, 5 /)

! 访问元素
print *, numbers(1)  ! 输出: 1

! 修改元素
numbers(1) = 10
print *, numbers(1)  ! 输出: 10
数组运算
  • 加法+
  • 减法-
  • 乘法*
  • 除法/
integer, dimension(5) :: a, b, c
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]

c = a + b  ! c = [7, 9, 11, 13, 15]

输入输出

标准输入输出
  • print 语句用于输出。
  • read 语句用于输入。
program io_example
    implicit none
    integer :: number
    real :: value

    print *, 'Enter an integer and a real number:'
    read *, number, value

    print *, 'You entered:', number, value
end program io_example
文件输入输出
  • 使用 open, close, read, write 语句进行文件操作。
program file_io_example
    implicit none
    integer :: unit, i
    real, dimension(5) :: data

    open(newunit=unit, file='data.txt', status='replace')

    data = [1.0, 2.0, 3.0, 4.0, 5.0]
    write(unit, *) data

    close(unit)

    open(newunit=unit, file='data.txt', status='old')
    read(unit, *) data
    close(unit)

    print *, 'Data from file:', data
end program file_io_example

示例项目

为了更好地理解 Fortran 的应用,你可以尝试构建一些简单的项目,例如:

  • 矩阵运算:实现矩阵加法、乘法等操作。
  • 数值积分:使用梯形法则或辛普森法则进行数值积分。
  • 线性方程求解:使用高斯消去法或雅克比迭代法求解线性方程组。
  • 数据拟合:使用最小二乘法进行数据拟合。

教学资源

  • 官方文档:Fortran Wiki 提供了详细的文档和示例。
  • 在线课程:Coursera、Udemy 等平台上有许多关于 Fortran 的在线课程。
  • 社区分享:访问 Stack Overflow 和 GitHub 查看其他用户的作品和分享经验。

总结

以上是 Fortran 语言的一个全面的基础教程,涵盖了从基本语法到高级功能的各个方面。通过这些基础知识,你可以开始编写简单的 Fortran 程序,并进一步探索更复杂的功能和创意。如果你希望深入学习,可以参考上述的教学资源,并通过实际项目来练习 Fortran 技能。

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

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

相关文章

JAVA姓氏头像情侣头像家庭头像签名头像谐音顽埂头像设计小程序头像大全系统小程序源码

姓氏头像到谐音梗&#xff0c;打造你的专属头像大全系统 &#x1f3a8;✨ &#x1f468;‍&#x1f469;‍&#x1f467;‍&#x1f466; 家庭头像&#xff1a;记录温馨瞬间 在这个充满爱的时代&#xff0c;用一张家庭头像来记录你和家人的美好瞬间吧&#xff01;我们的“姓氏…

Linux 进程状态、僵尸进程与孤儿进程

目录 0.前言 1. 进程状态 1.1 定义 1.2 常见进程 2.僵尸进程 2.1 定义 2.2 示例 2.3 僵尸进程的危害与防止方法 3. 孤儿进程 3.1 介绍 3.2 示例 4.小结 &#xff08;图像由AI生成&#xff09; 0.前言 在上一篇文章中&#xff0c;我们介绍了进程的基本概念、进程控制块&#…

Python Flask 和 Django 的区别与适用场景

Flask 和 Django 的异同&#xff08;结合代码解释&#xff09; Flask 和 Django 是两个流行的 Python Web 框架。尽管它们都是用于构建 Web 应用程序的强大工具&#xff0c;但它们的设计哲学、功能和用法有很大的区别。通过代码示例&#xff0c;可以更直观地理解 Flask 和 Dja…

基础岛第1关:书生大模型全链路开源体系

了解书生浦语大模型体系&#xff1a;书生浦语 InternLM2.5 系列模型&#xff1a; 卓越的推理性能&#xff1a;在数学推理方面取得了同量级模型最优精度&#xff0c;超越了 Llama3 和 Gemma2-9B。有效支持百万字超长上下文&#xff1a;模型在 1 百万字长输入中几乎完美地实现长…

一文讲透大语言模型构建流程

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…

用友U8-CRM fillbacksettingedit.php SQL注入复现

0x01 产品描述&#xff1a; 用友U8-CRM是企业利用信息技术&#xff0c;是一项商业策略&#xff0c;它通过依据市场细分组织企业资源、培养以客户为中心的经营行为、执行以客户为中心的业务流程等手段来优化企业的客户满意度和获利能力。 0x02 漏洞描述&#xff1a; 用友 U8 C…

VMware Aria Operations for Logs 8.18 发布,新增功能概览

VMware Aria Operations for Logs 8.18 - 集中式日志管理 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-aria-operations-for-logs/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 集中式日志管理 VMware Aria …

web开发(1)-基础

这是对b站课程的总结&#xff0c;后续可能会继续更 01 前后端分离介绍_哔哩哔哩_bilibili01 前后端分离介绍是Web应用开发-后端基础-基于Springboot框架的第1集视频&#xff0c;该合集共计29集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https://w…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-01

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-01 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-01目录1. Beyond Text-to-Text: An Overview of Multimodal and Generative Artificial Intelligence for Education Using Topi…

第二弹:面向对象编程中的类与对象

文章目录 面向对象编程中的类与对象1. 类与对象的定义1.1 类和对象的概念1.2 类的基本定义 2. 类的封装2.1 类的封装语法2.2 类成员访问权限2.3 struct和class的区别2.4 类封装与成员函数定义分离 3. 类对象的创建与销毁3.1 静态与动态对象的创建3.2 对象的销毁 4. 构造函数和析…

云服务器部署k8s需要什么配置?

云服务器部署k8s需要什么配置&#xff1f;云服务器部署K8s需要至少2核CPU、4GB内存、50GBSSD存储的主节点用于管理集群&#xff0c;工作节点建议至少2核CPU、2GB内存、20GBSSD。还需安装Docker&#xff0c;选择兼容的Kubernetes版本&#xff0c;配置网络插件&#xff0c;以及确…

大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【日常记录】现在遇到的Y7000P亮度无法调节问题,无需改动注册表进行调整的方法。

1、winR 2、输入&#xff1a;services.msc 3、找到下面红框内的服务 4、右键后&#xff0c;点击重启任务&#xff0c;重启任务后&#xff0c;再次按热键即可恢复亮度调节。

XGBOOST算法Python实现(保姆级)

摘要 XGBoost算法&#xff08;eXtreme Gradient Boosting&#xff09;在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、Python实现、敏感性分析和实际应用进行详细说明。 目录 0 绪论 一、材料准备 二、算法原理 三、算法Python实现 3…

西电25考研 VS 24考研专业课大纲变动汇总

01专业课变动 西安电子科技大学专业课学长看到953网络安全基础综合变为 893网络安全基础综合&#xff0c;这是因为工科要求都必须是8开头的专业课&#xff0c;里面参考课本还是没变的&#xff0c;无非就是变了一个名字 对于其他变动专业课也是同理的 02专业课考纲内容变化 对于…

<<迷雾>> 第5章 从逻辑学到逻辑电路(6)--莎士比亚电路 示例电路

info::操作说明 鼠标单击开关切换开合状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch05-17-shakespeare-circuit.txt 原图

【AI人工智能】文心智能体,陪爸妈去旅游,国庆假期不容错过,旅游搭子首选

文章目录 背景创作灵感陪爸妈去旅游简介角色与目标思考路径个性化开场白调优 智能体体验总结和感受 背景 文心智能体平台&#xff0c;开启新一轮活动&#xff0c;超级创造营持续百日活动。 在AI 浪潮席卷的今天&#xff0c;如雨后春笋般丛生的 AI 应用&#xff0c;昭告着时代风…

AI助力CMIP6数据处理技术及在气候变化、生态农业、水文多领域实践应用

查看原文>>>AI助力CMIP6数据处理技术及在气候变化、生态农业、水文多领域实践应用 目录 专题一 CMIP6中的模式比较计划 专题二 数据下载 专题三 基础知识3.1 Python基础 专题四 单点降尺度 专题五 统计方法的区域降尺度 专题六 基于WRF模式的动力降尺度 专题七…

墙绘艺术在线交易:SpringBoot技术解析

2 相关技术 2.1 SSM框架介绍 本课题程序开发使用到的框架技术&#xff0c;英文名称缩写是SSM&#xff0c;在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等&#xff0c;作为一个课题程序采用SSH框架也可以&#xff0c;SSM框架也可以&#xff0c;SpringMVC也可以。SSH框架…

习题2 算法

选择题 1. 以下叙述中错误的是 【 正确答案: C】。 A.算法正确的程序最终一定会结束 B.算法正确的程序可以有零个输入 C.算法正确的程序可以有零个输出 D.算法正确的程序对于相同的输入一定有相同的结果 2. 下面关于算法的说法错误的是 【 正确答案: B】。 …