fortran入门教程怎么从.txt(数据是复数)文件读入复数,并赋值给另一个复数

工程和科学数值计算咨询

  • 专业: 计算数学与科学工程计算

如果想定义一个6×13的复数数组,A

!这个一般都是要写上的。下面会进一步说明。

Fortran程序的主要结构就是这样了。一般还会有些module的部分在主函数前,函数在主函数后。

1、数据类型,声明及赋初值

如果声明成integer:: a,则默认为长整型。

还有指数的形式,如1E10为单精度,1D10为双精度

(6)自定义类型type:类似于C中的struct

与C不同的是,Fortran中变量不声明也能使用,即有默认类型(跟implicit命令有关)。按

使得a,b使用同一块内存。这样可以节省内存;有时可精简代码。如:equivalence(很长名字的变量如三维数组的某个元素,a),之后使用a来编写程序就简洁多了。

! 仅.NOT.连接一个表达式,其余左右两边都要有表达式(可以是logical类型的变量)

如果then后面只有一句,可写为

…… !//case135)代表变量等于135会执行该模块

pause暂停程序执行,按enter可继续执行

…… !//counter每取一个值对应着一次循环。增/减量不写则认为1 …… !//循环主体也没有必要用{} 行代码 …… !//这是do的最后一行

类似于C中的while(逻辑运算) {……}。

3、没看到和C里面的do{……}while(逻辑运算); 相对应的循环语句.

不过可以这样,保证至少做一循环:

4、Fortran的一个特色:带署名的循环

还有一些循环主要用于Fortran中的数组运算,为Fortran特有,很实用。

和C不同的是,Fortran中的数组元素的索引值写在()内,且高维的也只用一个(),如

!声明小可变经过某个途径得知所需数组大小size之后,用下面的语句:

之后该数组和通过一般方法声明的数组完全相同。

2、数组在内存中的存放

(2)利用Fortran的特色:隐含式循环。看例子就明白了。

 

设a,b为相同类型、维数和大小的数组

a=5 !所有元素赋值为5 a=b !对应元素赋值,要求a,b,c维数和大小相同,下同 

 a(1:3)=b(4:6) !类似于这种的要求左右数组元素个数相同 

where形式上类似于if,但只用于设置数组。设有两个同样类型、维数和大小的数组a,b

b=a !a中小于3的元素赋值给b对应位置的元素

有点像C中的for循环:

其中triplet形如i=2:6:2,表示循环,最后一个数字省略则增量为1

Fortran中函数分两类:子程序(subroutine)自定义函数(function)。自定义函数本质上就是学上的函数,一般要传递自变量给自定义函数,返回函数值。子程序不一定是这样,可以没有返值。传递参数要注意类型的对应,这跟C是一样的。

目的:把某一段经常使用的有特定功能的程序独立出来,可以方便调用。习惯上一般都把子程序放在主程序结束之后。

!给子程序起一个有意义的名字。可以传递参数,子程序无返回值与自定义函数不同之处。括号内也可以空着,代不传递参数。 …… !接下来的程序编写跟主程序没有任何别。 return !跟C不同,这里表示子程序执行后回到调用它的地方继续执行下面的程序。不一定放在最后。 !可以放在子程序的其他位置,作用相同;子程序中return之后的部分不执行。还可省略不写

调用:使用call命令直接使用,不需要声明。在调用处写:

和子程序的明显不同在于:需要在主程序中声明之后才能使用。调用方式也有差别。另外按照惯例用函数不去改变自变量的值。如果要改变传递参数的值,习惯上用子程序来做。

一般自定义函数也是放在主程序之后。

return !跟C不同,这里表示子程序执行后回到调用它的地方继续执行下面的程序。可以不写

也可以这样直接声明返回值类型,简洁些:

(1)注意类型的对应。Fortran中甚至可以传递数值常量,但只有跟函数定义的参数类型对应才会到想要的结果。如call ShowReal(1.0)就必须用1.0而不是1。

integer num(size) !可以定义一个数组,其大小是通过传递过来的参数决定的。这很实用。

!注意这里与在主程序中声明数组时,数组大小需要用常数来规定大小的规则不太一样,而这里也可以用参数变量赋值其数组大小。

(6)传递函数(包括自定义函数、库函数、子程序都是可以的)。类似于C中的函数指针需要在主程序和调用函数的函数中都声明作为参数传递的函数。如

(7)函数使用接口(interface):一段程序模块。以下情况必需:

在子程序或自定义函数中定义:

则a和c共用相同内存,b和d共用相同内存。

全局变量太多时会很麻烦。可以把它们人为归类,只需在定义时在common后面加上区间名。如

这样使用时就不必把所有全局变量都列出来,再声明common /groupe1/ c就可以用a、c全局变量了。

可以使用block data程序模块。在主程序和函数中不能直接使用前面提到的data命令给全局变量赋初值。可以给它们各自赋初值;如果要使用data命令必须要这样:

Module不是函数。它用于封装程序模块,一般是把具有相关功能的函数及变量封装在一起。用法很单,但能提供很多方便,使程序变得简洁,比如使用全局变量不必每次都声明一长串,

使用:在主程序或函数中使用时,需要在声明之前先写上一行:

Module中有函数时必须在contains命令之后(即在某一行写上contains然后下面开始写函数,多所有函数都写在这个contains之后)。并且module中定义过的变量在module里的函数中可直接使用,函数之间也可以直接相互调用,连module中的自定义函数在被调用时也不用先声明。

6、include放在需要的任何地方,插入另外的文件(必须在同一目录下)。如:

Fortran里有两种读取文件的方式,对应于两种文件

!1020是给文件编的号,除1256的正整数都可,因为26是默认的输出位置(屏幕),15是默认的输入位置(键盘) !下面这一段用于确认指定名字的文件是否存在 !按一定格式输入输出,格式可以另外写并指定行代码,也可以直接写在read/write中 !1X代表一个空格。F6.3代表real型数据用占6个字符(含小数点),其中小数点后三位。 !常用的还有I3,用于整型数据,共占三个字符;A8,字符型,占8个字符。换行用 /

二进制文件的读取有所不同。不再列举。

另一个很实用的读写功能是内部文件(internal file)。看看这个例子就明白了。

则结果输出1+2=3。反过来也是可以的:

我要回帖

更多关于 fortran入门教程 的文章

 

随机推荐