文档库 最新最全的文档下载
当前位置:文档库 › Fortran95程序设计习题答案第十一章3

Fortran95程序设计习题答案第十一章3

Fortran95程序设计习题答案第十一章3
Fortran95程序设计习题答案第十一章3

module rational_utility

implicit none

private

public :: rational, &

operator(+), operator(-), operator(*),&

operator(/), assignment(=),operator(>),&

operator(<), operator(==), operator(/=),&

output, input

type :: rational

integer :: num, denom

end type rational

interface operator(+)

module procedure rat__rat_plus_rat

end interface

interface operator(-)

module procedure rat__rat_minus_rat

end interface

interface operator(*)

module procedure rat__rat_times_rat

end interface

interface operator(/)

module procedure rat__rat_div_rat

end interface

interface assignment(=)

module procedure rat_eq_rat

module procedure int_eq_rat

module procedure real_eq_rat

end interface

interface operator(>)

module procedure rat_gt_rat

end interface

interface operator(<)

module procedure rat_lt_rat

end interface

interface operator(==)

module procedure rat_compare_rat end interface

interface operator(/=)

module procedure rat_ne_rat

end interface

contains

function rat_gt_rat(a,b)

implicit none

logical :: rat_gt_rat

type(rational), intent(in) :: a,b

real :: fa,fb

fa=real(a%num)/real(a%denom)

fb=real(b%num)/real(b%denom)

if ( fa > fb ) then

rat_gt_rat=.true.

else

rat_gt_rat=.false.

end if

return

end function rat_gt_rat

function rat_lt_rat(a,b)

implicit none

logical :: rat_lt_rat

type(rational), intent(in) :: a,b

real :: fa,fb

fa=real(a%num)/real(a%denom)

fb=real(b%num)/real(b%denom)

if ( fb > fa ) then

rat_lt_rat=.true.

else

rat_lt_rat=.false.

end if

return

end function rat_lt_rat

function rat_compare_rat(a,b)

implicit none

logical :: rat_compare_rat type(rational), intent(in) :: a,b type(rational) :: c

c=a-b

if ( c%num == 0 ) then

rat_compare_rat=.true.

else

rat_compare_rat=.false. end if

return

end function rat_compare_rat

function rat_ne_rat(a,b)

implicit none

logical :: rat_ne_rat

type(rational), intent(in) :: a,b type(rational) :: c

c=a-b

if ( c%num==0 ) then

rat_ne_rat=.false.

else

rat_ne_rat=.true.

end if

return

end function rat_ne_rat

subroutine rat_eq_rat( rat1, rat2 ) implicit none

type(rational), intent(out):: rat1 type(rational), intent(in) :: rat2

rat1%num = rat2%num

rat1%denom = rat2%denom

return

end subroutine rat_eq_rat

subroutine int_eq_rat( int, rat ) implicit none

integer, intent(out):: int

type(rational), intent(in) :: rat

int = rat%num / rat%denom

return

end subroutine int_eq_rat

subroutine real_eq_rat( float, rat )

implicit none

real, intent(out) :: float

type(rational), intent(in) :: rat

float = real(rat%num) / real(rat%denom)

return

end subroutine real_eq_rat

function reduse( a )

implicit none

type(rational), intent(in) :: a

integer :: b

type(rational) :: reduse

b=gcv_interface(a%num,a%denom) reduse%num = a%num/b

reduse%denom = a%denom/b

return

end function reduse

function gcv_interface(a,b)

implicit none

integer, intent(in) :: a,b

integer :: gcv_interface

if ( min(a,b) .eq. 0 ) then

gcv_interface=1

return

end if

if (a==b) then

gcv_interface=a

return

else if ( a>b ) then

gcv_interface=gcv(a,b)

else if ( a

gcv_interface=gcv(b,a)

end if

return

end function gcv_interface

recursive function gcv(a,b) result(ans)

implicit none

integer, intent(in) :: a,b

integer :: m

integer :: ans

m=mod(a,b)

select case(m)

case(0)

ans=b

return

case(1)

ans=1

return

case default

ans=gcv(b,m)

end select

return

end function gcv

function rat__rat_plus_rat( rat1, rat2 )

implicit none

type(rational) :: rat__rat_plus_rat

type(rational), intent(in) :: rat1,rat2

type(rational) :: act

act%denom= rat1%denom * rat2%denom

act%num = rat1%num*rat2%denom + rat2%num*rat1%denom rat__rat_plus_rat = reduse(act)

return

end function rat__rat_plus_rat

function rat__rat_minus_rat( rat1, rat2 )

implicit none

type(rational) :: rat__rat_minus_rat

type(rational), intent(in) :: rat1, rat2

type(rational) :: temp

temp%denom = rat1%denom*rat2%denom

temp%num = rat1%num*rat2%denom - rat2%num*rat1%denom rat__rat_minus_rat = reduse( temp )

return

end function rat__rat_minus_rat

function rat__rat_times_rat( rat1, rat2 )

implicit none

type(rational) :: rat__rat_times_rat

type(rational), intent(in) :: rat1, rat2

type(rational) :: temp

temp%denom = rat1%denom* rat2%denom

temp%num = rat1%num * rat2%num

rat__rat_times_rat = reduse(temp)

return

end function rat__rat_times_rat

function rat__rat_div_rat( rat1, rat2 )

implicit none

type(rational) :: rat__rat_div_rat

type(rational), intent(in) :: rat1, rat2

type(rational) :: temp

temp%denom = rat1%denom* rat2%num

temp%num = rat1%num * rat2%denom

rat__rat_div_rat = reduse(temp)

return

end function rat__rat_div_rat

subroutine input(a)

implicit none

type(rational), intent(out) :: a

write(*,*) "分子:"

read(*,*) a%num

write(*,*) "分母:"

read(*,*) a%denom

return

end subroutine input

subroutine output(a)

implicit none

type(rational), intent(in) :: a

if ( a%denom/=1 ) then

write(*, "(' (',I3,'/',I3,')' )" ) a%num,a%denom else

write(*, "(I3)" ) a%num

end if

return

end subroutine output

end module rational_utility

program main

use rational_utility

implicit none

type(rational) :: a,b,c

call input(a)

call input(b)

c=a+b

write(*,*) "a+b="

call output(c)

c=a-b

write(*,*) "a-b="

call output(c)

c=a*b

write(*,*) "a*b="

call output(c)

c=a/b

write(*,*) "a/b="

call output(c)

if (a>b) write(*,*) "a>b"

if (a

if (a==b) write(*,*) "a==b"

if (a/=b) write(*,*) "a/=b"

stop

end program main

Fortran95习题答案

第四章 1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program 2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program 3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为'f8.3)") SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去write(*,*) rb/ra ! 输出1.5 5.program main implicit none type distance real meter, inch, cm end type type(distance) :: d write(*,*) "请输入长度:" read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/2.54 write(*,"(f8.3'米='f8.3'厘米='f8.3'英寸')") d%meter, d%cm, d%inch end program 第五章 1.program main

Fortran95 简介-全文版

Fortran95简介-全文版 By陈鲸太FORTRAN的演进 FORTRAN的起源,要追溯到1954年IBM公司的一项计划。由JOHN BACKUS 领导的一个小组,尝试着在IBM 704计算机上面发展一套程序,它可以把使用接近数学语言的文字,翻译成机械语言。这个计划在刚开始并不被大家看好,但他们在1957年交出了成果,也就是第一套FORTRAN编译器,FORTRAN语言也就因此诞生了。FORTRAN语言的执行效率普遍的令各界满意,它证明了这项计划的可行性,也成为第一个被广泛使用的高级语言。FORTRAN的名字来自于英文的FORMULA TRANSLATOR这两个字,而这两个字恰是数学公式翻译器的意思。 旧版的FORTRAN77是在1978年由美国国家标准局(ANSI)所正式公布的,之后改版有1992年提出的FORTRAN90以及1997年的FORTRAN95,本文是为了FORTRAN 95所撰写。 编译器简介 1、VISUAL FORTRAN VISUAL FORTRAN一开始是起源于MICROSOFT的FORTRAN POWERSTATION 4.0,这套工具后来卖给DIGITAL公司来继续发展,下一个版本称为DIGITAL VISUAL FORTRAN 5.0,DIGITAL后来被COMPAQ合并,所以接下来的6.0及6.5版就称为COMPAQ VISUAL FORTRAN。而COMPAQ目前又跟HP合并,也许下一个版本会称为HP VISUAL FORTRAN。 VISUAL FORTRAN被整合在一个叫作MICROSOFT VISUAL STUDIO的图形接口开发环境中,VISUAL STUDIO提供一个统一的使用接口,这个接口包括文书编辑功能,PROJECT的管理、除错工具等等,所以在使用上其实跟上学期的VISUAL C++满类似的,同学们上课用过VISUAL C++,对 VISUAL FORTRAN应该不会陌生。 VISUAL FORTRAN 6.5除了完全支持FORTRAN 95的语法外,扩充功能方面提供完整的WINDOWS程序开发工具,专业版还内含IMSL数值链接库。 另外它还可以和VISUAL C++直接互相连结使用,也就是把FORTRAN和C 语言的程序代码混合编译成同一执行档案。 2、在工作站使用FORTRAN 学校计中工作站也提供FORTRAN COMPILER,使用方式很简单,只需要在存放FORTRAN档案的目录下面输入下面叙述即可:

FORTRAN程序设计复习题及答案

FORTRAN程序设计复习题 一、选择题 B (1)下列各FORTRAN表达式中合法的是 A) S+T*2P >= B) .NOT. (A*B+C) C) A2+B2/(C+D) <= D) (A+B).NOT.A*B.GT.(.NOT.只跟一个表达式) C (2)数学式(3/5)ex+y的FORTRAN表达式是 A) 3*EXP(X+Y)/5 B) 3*E* *(X+Y)/ C) (3/5)*EXP(X+Y)D) EXP(X+Y) D (3)下列FORTRAN77表达式中不合法的是 A) A.GT.B.EQV.C.GT.D B) A.AND.B.AND.C.AND.D C) .NOT.(X.LE.D) A.LT.B.LT.C.LT.D D(4)下列叙述中不正确的是 A) FORTRAN子程序可以单独编译 B) 对一个FORTRAN源程序进行编译和连接无误后可生成可执行文件 C) 即使编译和连接都正确无误,FORTRAN程序运行时仍可能出错 D) FORTRAN连接的主要任务是把函数库中的函数翻译成机器指令(正确描述:主要任务为连接目标文件) B (5)在下列FORTRAN77运算符中,优先级最高的是 A) .AND. B) .NOT. C) .OR. D) .EQ. B (6)FORTRAN表达式"6/5+9/2**3/2"的值为 A) 33 B) 1 C) 5 D) 3 A (7)下列FORTRAN77表达式中,合法的是: A) .AND.. B) 10.0 C) D) 提示:A)相当于 .AND.(.NOT.()) D (8)关于编译一个FORTRAN源程序文件,下列说法中错误的是 A) 允许编译只有一个主程序而没有子程序的源文件 B) 允许编译有多个子程序的源文件 C) 允许编译只有一个子程序而没有主程序的源文件 D) 允许编译有多个主程序的源文件 C (9)在FORTRAN77源程序中,续行标志符必须放在 A) 第1列 B) 第1-6列C) 第6列D) 第5列 D (10)下列关于"SUBROUTIN E MAP(X,Y)"语句行的叙述中,不正确的是 A) 这是子程序的第一个语句 B) 字符串"MAP"是子程序名 C) 变量X是子程序的形参D) 子程序执行后,MAP将返回整型数据 提示:子程序无返回值,自定义函数才有) A (11)FORTRAN表达式"2/4+"的值是 A) B) 1 C) D) 0 提示:2/4默认等于整型,=》 D (12)FORTRAN表达式"MOD,"的值是 A) B)0.0 C) D) A (13下列FORTRAN运算符中,优先级最低的是 A)逻辑运算符.AND. B)算术运算符*

Fortran95简介-全文版

Fortran95簡介-全文版 By陳鯨太FORTRAN的演進 FORTRAN的起源,要追溯到1954年IBM公司的一項計畫。由JOHN BACKUS 領導的一個小組,嘗試著在IBM 704電腦上面發展一套程式,它可以把使用接近數學語言的文字,翻譯成機械語言。這個計畫在剛開始並不被大家看好,但他們在1957年交出了成果,也就是第一套FORTRAN編譯器,FORTRAN語言也就因此誕生了。FORTRAN語言的執行效率普遍的令各界滿意,它證明了這項計畫的可行性,也成為第一個被廣泛使用的高階語言。FORTRAN的名字來自於英文的FORMULA TRANSLATOR這兩個字,而這兩個字恰是數學公式翻譯器的意思。 舊版的FORTRAN77是在1978年由美國國家標準局(ANSI)所正式公布的,之後改版有1992年提出的FORTRAN90以及1997年的FORTRAN95,本文是為了FORTRAN 95所撰寫。 編譯器簡介 1、VISUAL FORTRAN VISUAL FORTRAN一開始是起源於MICROSOFT的FORTRAN POWERSTATION 4.0,這套工具後來賣給DIGITAL公司來繼續發展,下一個版本稱為DIGITAL VISUAL FORTRAN 5.0,DIGITAL後來被COMPAQ合併,所以接下來的6.0及6.5版就稱為COMPAQ VISUAL FORTRAN。而COMPAQ目前又跟HP合併,也許下一個版本會稱為HP VISUAL FORTRAN。 VISUAL FORTRAN被整合在一個叫作MICROSOFT VISUAL STUDIO的圖形介面開發環境中,VISUAL STUDIO提供一個統一的使用介面,這個介面包括文書編輯功能,PROJECT的管理、除錯工具等等,所以在使用上其實跟上學期的VISUAL C++滿類似的,同學們上課用過VISUAL C++,對VISUAL FORTRAN應該不會陌生。 VISUAL FORTRAN 6.5除了完全支援FORTRAN 95的語法外,擴充功能方面提供完整的WINDOWS程式開發工具,專業版還內含IMSL數值程式庫。另外它還可以和VISUAL C++直接互相連結使用,也就是把FORTRAN和C語言的程式碼混合編譯成同一執行檔案。 2、在工作站使用FORTRAN 學校計中工作站也提供FORTRAN COMPILER,使用方式很簡單,只需要在存放FORTRAN檔案的目錄下面輸入下面敘述即可: ccsun33 [u8623033/fortran]% f77 filename.for

FORTRAN 95 语法速查

FORTRAN 95 语法速查 ----------白云、李学哲、陈国新、贾波编著《FORTRAN95程序设计》读书笔记 目录:一、应用程序的创建与运行/FORTRAN 95所用的字符/ 变量类型及其声明,常量声明/表达式与运算符 二、输入与输出:表控、有格式 三、选择语句与结构:IF语句、CASE结构 四、DO循环结构 五、数组:数组的声明,数组的引用,数组的算术运算,数组的输入、输出,给数组赋初值, 动态数组,WHERE、FORALL语句 六、子程序:语句函数,内部子程序,调用子程序时的虚实结合:形参为数组、非定界数组、子 程序名、星号,递归子程序,外部子程序,纯子程序,逐元子程序 七、派生数据类型与结构体 八、指针与动态链表 九、文件:存取方式,基本操作语句,各类文件的读写操作 十、接口、模块 十一、公用区、存储关联、数据块子程序 十二、绘图:坐标系、设置图形颜色、创建图形程序/ 常用过程:设置线型、绘一像素点、设置当前位置、绘直线、绘弧线、绘矩形、绘多边形、绘制扇形(圆、椭圆)/ 文字信息的显示 附/录:标准函数与标准子例行程序 一、基础部份 1-1 FORTRAN 95 应用程序的创建与运行 创建或运行FORTRAN 95程序必须在Microsoft Developer Studio平台上进行。尽管程序文本及相关文件的编辑可以在任一文本编辑器上进行,然后再拷到Studio的文档窗口中。但最好还是一开始就进入Studio环境。创建FORTRAN 95 程序的步骤大致如下: 1)启动Microsoft Developer Studio 可以通过不同方式运行dfdev.exe程序以启动Microsoft Developer Studio [开始] \ Compaq Visual Fortran 6 \ Developer Studio \ dfdev.exe:或 ……\CVF66 \https://www.wendangku.net/doc/0d1592036.html,\MSDEV98\dfdev.exe Microsoft Developer Studio的界面如下图所示: 文档窗口 工作空间窗口 输出窗口

fortran课后习题答案

第一章 FORTRAN程序设计基础第15页 1、2 1.简述程序设计的步骤。 “程序设计”:反映了利用计算机解决问题的全过程,通常要经过以下四个基本步骤:(1)分析问题,确定数学模型或方法;(2)设计算法,画出流程图;(3)选择编程工具,编写程序;(4)调试程序,分析输出结果。 2. 什么是算法?它有何特征?如何描述算法? 解决问题的方法和步骤称为算法。 算法的五个特征:(1) 有穷性。 (2) 确定性。 (3) 有效性。 (4) 要有数据输入。(5) 要有结果输出。 算法的描述有许多方法,常用的有:自然语言、一般流程图、N-S图等。 第二章顺序结构程序设计 第29页 1、2、3、4、5、6、7、8、9 1.简述符号常量与变量的区别? 符号常量在程序运行过程中其值不能改变。变量在程序运行过程中其值可以改变。 2. 下列符号中为合法的FORTRAN 90标识符的有哪些? (1) A123B (2) M%10 (3) X_C2 (4) 5YZ (5) X+Y (6) F(X) (7) COS(X) (8) A.2 (9) ‘A’ONE (10) U.S.S.R. (11) min*2 (12) PRINT 3. 下列数据中哪一些是合法的FORTRAN常量? (1) 9,87 (2) .0 (3) 25.82(4) -356231 (5) 3.57*E2 (6) 3.57E2.1 (7) 3.57E+2(8) 3,57E-2 4. 已知A=2,B=3,C=5(REAL);且I=2,J=3(INTEGER),求下列表达式的值: (1) A*B+C 表达式的值: 11 (2) A*(B+C) 表达式的值: 16 (3) B/C*A 表达式的值: 1.2 (4) B/(C*A) 表达式的值: 0.3 (5) A/I/J 表达式的值: 0.33 (6) I/J/A 表达式的值: 0 (7) A*B**I/A**J*2 表达式的值: 4.5 (8) C+(B/A)**3/B*2. 表达式的值: 7.25 (9) A**B**I 表达式的值: 512 5. 将下列数学表达式写成相应的FORTRAN表达式: (1) 1E-2 (2)(-B+SQRT(B*B-4*A*C)/(2*A) (3) 1+X+X*X/2+X**3/2/3 (4) COS(ATAN((A**3+B**3)**(1.0/3)/(C*C+1))) (5) EXP(A*X**2+B*X+C) (6) COS(X*Y/SQRT(X*X+Y*Y))**3 6. 用FORTRAN语句完成下列操作: (1) 将变量I的值增加1。I=I+1 (2) I的立方加上J,并将结果保存到I中。 I=I**3+J (3) 将E和F中大者存储到G中。G=Max(E,F) (4) 将两位自然数N的个位与十位互换,得到一个新的数存储到M中(不考虑个位为0的情况) M=MOD(N,10)*10+N/10 第三章选择结构程序设计第43页 1、2、3、5、6、7、9 1.分析下列程序运行结果 (1) LOGICAL P INTEGER I,I1,I2,I3 P=.FALSE. READ*,I I1=MOD(I,10) I2=MOD(I/10,10) I3=I/100

fortran习题参考答案

工程分析程序设计上机作业(五) 模块化编程 上机目的:掌握内部例程、主程序、外部例程、模块等功能的使用方法。 1、有一个六边形,求其面积。为求面积,作了3条辅助线。如图所示:(提示,三角形面 积 2 a b c s ++ =,a、b、c为三个边长)。要求用内部函 数来计算每个三角形的面积。 =21 program main implicit none real :: A(9)=(/10,30,16,13,21,14,20,36,28/) integer i real s s=area(A(3),A(4),A(7))+area(A(2),A(7),A(8))+ & area(A(1),A(8),A(9))+area(A(5),A(6),A(9)) print*,'The area is',s contains function area(x,y,z) implicit none real x,y,z real p,area p=(x+y+z)/2 area=sqrt(p*(p-x)*(p-y)*(p-z))

end function end 2、编写一个子例程子程序,SUM(S,T,N1,N2)。把整型数N1到N2进行求和,并把求 和的结果放置到S,把整型数N1到N2进行求积,并把求积的结果放置到T。并用这个子程序来计算: y=++++++++++- (1234)(345678)(3*4*5*6)(1*2*3) program main implicit none integer A(8) integer i,b,c,d,e,f,g,m,n,y b=0;d=0;g=1;n=1 do i=1,8 A(i)=i end do call sum(b,c,1,4) call sum(d,e,3,8) call sum(f,g,3,6) call sum(m,n,1,3) y=b+d+g-n print*,'y=(1+2+3+4)+(3+4+5+6+7+8)+(3*4*5*6)-(1*2*3)=',y contains subroutine sum(s,t,N1,N2) integer s,t,N1,N2,i do i=N1,N2 s=s+A(i) t=t*A(i) end do end subroutine end 3、编写函数子程序GDC求两个数的最大公约数。求最大公约数的算法如下:把两个数中 大的那个数作为被除数,两数相除得到一个余数。把余数去除除数得到新一轮的余数。 不断重复这一过程直到余数为0,这时的除数就是两个数的最大公约数。

Fortran 95内在过程

附录B Fortran 95内在过程 FORTRAN 95标准提供了115个内在过程,其中包括109个内在函数和6个内在子例行子程序。很多编译系统还提供额外的内在过程。 按照形式,内在过程分为如下两类:通用过程;专用过程。 所谓通用过程是一个集合名称,通用过程与专用过程是一个集合与其元素的关系。一个通用过程由两个或多个专用过程组成。 在所有的115个内在过程当中,除了如下4个内在函数外,其他都是通用过程:LGE、LGT、LLE和LLT。 专用过程针对具体类型与种别的变量。例如,求一个变量的绝对值的通用过程为ABS(X),而求一个整型变量的绝对值的专用过程为IABS(X),求一个复型变量的绝对值的专用过程为CABS(X),如此等等。所以,每个通用过程属下的专用过程都必定具有相应的类型,种别,甚至维的属性。这些专用过程的名称的主要用途是作为实元来传递,这时就必须使用专用过程名称。注意,在表中注明了少数专用过程不能作为实元。 按照功能,FORTRAN 95的内在过程主要分为如下5类:查询与数字操作函数;转换,置空以及传递函数;计算函数;数组函数;内在子例行程序。 如果从功能的角度来对内在过程分类,那么除了上面的比较具体的5类之外,还可以从内在过程对数组的作用方式的角度,把内在过程分为两大类:逐元过程和变换过程。 所谓逐元过程,就是从数学的观点来看,这些专用过程的计算对象并不是数组,但是可以运用一种自然的方式使得这专用过程能够作用于数组对象,并且得到相同形状的数组结果。也就是使得该过程分别作用于数组的每个元素,把所有的过程结果再集合起来作为结果数组。内在过程当中的大部分都属于逐元过程,包括:转换函数;计算函数(除了REPEA T,TRIM,DOT_PRODUCT,MA TMUL之外);子例行程序MVBITS。其他的所有内在过程就都不是逐元过程了。 所谓变换过程,就是内在过程里面逐元过程之外的所有过程都称为变换过程,因为从它们的定义的实质上看,就是作用于一个数组数据对象,得到一个标量或者数组结果,也就是一个变换的过程,而不是单独地作用于每个元素。因此除了函数NULL之外,所有的变换过程或者是具有一个取数组值的哑元,或者是具有一个取数组值的实元,它们对数组的作用都是某种整体变换作用。例如对于向量的乘积,就不能逐个元素地进行。 内在过程的引用正如一般过程的引用一样,可以使用关键词变量。由于某些内在过程的变量是可选项,因此使用关键词能够省略相应的实元。 常见的关键词哑元名称含义如下: ● DIM:DIM主要用于数组简化函数以及其他一些数组函数,表示在函数的作用对象不是整个数组的情况下,数组的哪个维被过程作用。DIM取值为标量整型值,并且常常是可选变量。 ●KIND:KIND一般用于转换函数,说明转换结果的种别参数。KIND实元必须是一个标量整型初始化表达式,一般是可选的。 ●BACK:BACK作为一个可选的逻辑型变量用来表示逆序过程,即它所出现的内在过程的对于数据对象的反方向操作。例如,如果在内在过程INDEX当中出现了BACK=.TRUE.,那么INDEX的搜索操作就必须与正常方向相反,即从字符串的右端开始。 注意内在函数的非指针哑元都具有INTENT(IN)的属性,而指针哑元则不能改变其关联的实元或目标。

Fortran作业2

FORTRAN第二次实习作业 2014301610307 -D-马莉1 、根据最新个人所得税计算方法,如下面的个税税率表。工资、薪金所得,适用七级超额累进税率,税率为百分之三(3% )至百分之四十五(45% )。3500 元为起征点,即只需要缴纳高于3500 元部分的个税。请根据下表编程,通过给定个人收入,计算其所需邀纳的个税。 program jiaoshui implicit none integer m real n character i 100 print*,'应缴纳所得税是否含税,请回答Y或N:' read*,i print*,'请输入工资所得:' read *,m if(i=='Y')then select case(m) case(0:1500) n=m*3/100-0 case(1501:4500) n=m*10/100-105 case(4501:9000) n=m*20/100-555 case(9001:35000) n=m*25/100-1005 case(35001:55000) n=m*30/100-2775 case(55001:80000) n=m*35/100-5505 case default n=m*45/100-13505 end select elseif(i==’N’)then select case(m)

case(0:1455) n=m*3/100-0 case(1456:4155) n=m*10/100-105 case(4156:7755) n=m*20/100-555 case(7756:27255) n=m*25/100-1005 case(27256:41255) n=m*30/100-2775 case(41256:57505) n=m*35/100-5505 case default n=m*45/100-13505 end select else print*,"输入格式不正确,请重新输入:" goto 100 endif print*,n End 2、编写程序求某天在当年中是第多少天,例如2010 年1 月10 号是2010 年的第10 天。要求分别使用IF 、CASE结构来编写。program tianshu2 implicit none integer M1(12),i,y,m,d,sum,n data M1/31,28,31,30,31,30,31,31,30,31,30,31/ sum=0 100 print *,"请输入日期格式例如:2010 10 23" read 10,y,m,d 10 format(i4,1x,i2,1x,i2) if(m>12.or.d>31)then

Fortran95程序设计课后习题答案(word版方便)

第四章 1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program 2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program 3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为'f8.3)") SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去write(*,*) rb/ra ! 输出1.5 5.p rogram main implicit none type distance real meter, inch, cm end type type(distance) :: d write(*,*) "请输入长度:" read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/2.54 write(*,"(f8.3'米='f8.3'厘米='f8.3'英寸')") d%meter, d%cm, d%inch end program 第五章 1.program main implicit none integer money real tax write(*,*) "请输入月收入" read(*,*) money if ( money<1000 ) then tax = 0.03 else if ( money<5000) then tax = 0.1 else tax = 0.15 end if write(*,"(' 税金为'I8)") nint(money*tax) end program 2.program main implicit none integer day character(len=20) :: tv write(*,*) "请输入星期几" read(*,*) day select case(day) case(1,4) tv = "新闻" case(2,5) tv = "电视剧" case(3,6) tv = "卡通" case(7) tv = "电影" case default write(*,*) "错误的输入" stop end select write(*,*) tv end program 3.program main implicit none integer age, money real tax write(*,*) "请输入年龄" read(*,*) age write(*,*) "请输入月收入" read(*,*) money if ( age<50 ) then if ( money<1000 ) then tax = 0.03 else if ( money<5000 )then tax = 0.10 else tax = 0.15 end if else if ( money<1000 ) then tax = 0.5 else if ( money<5000 )then tax = 0.7 else tax = 0.10 end if end if write(*,"(' 税金为'I8)") nint(money*tax) end program 4.program main implicit none integer year, days logical mod_4, mod_100, mod_400 write(*,*) "请输入年份" read(*,*) year mod_4 = ( MOD(year,4) == 0 ) mod_100 = ( MOD(year,100) == 0 ) mod_400 = ( MOD(year,400) == 0 ) if ( (mod_4 .NEQV. mod_100) .or. mod_400 ) then days = 366 else days = 365 end if write(*,"('这一年有'I3'天')") days stop end program 第六章 1.program main implicit none integer i do i=1,5 write(*,*) "Fortran" end do stop end program 2.program main implicit none integer i,sum sum = 0 do i=1,99,2 sum = sum+i end do write(*,*) sum stop end program 3.program main implicit none integer, parameter :: answer = 45 integer, parameter :: max = 5 integer weight, i do i=1,max write(*,*) "请输入体重" read(*,*) weight if ( weight==answer ) exit end do if ( i<=max ) then write(*,*) "猜对了" else write(*,*) "猜错了" end if stop end program 4.program main implicit none integer, parameter :: max=10 integer i real item real ans ans = 1.0 item = 1.0 do i=2,max item = item/real(i) ans = ans+item

Fortran 95学习笔记

Fortran 95 变量名称的取名策略:变量的名字中可以使用的字符集包括英文的26个字母、0~9这10个数字以及下划线“_”,不过前缀必须是英文字母。变量名称的长度限制随着各家编译器的不同而不同,Fortran 标准规定最少要支持到6个字符,Fortran90则最少要支持到31个字符 Implicit Fortran 标准中有一项不太好的功能,它的变量不一定要经过程序声明才能使用,编译器会根据变量的第一个字母来自东决定这个变量的类型。第一个字母为I、J、K、L、M、N的变量会被视为整数类型,其他的变量则会被当成浮点数来使用。 Implicit命令的功能是用来设置“默认类型”。所谓的默认类型,是指Fortran不经过声明,由第一个字母来决定变量类型。可以经过Implicit描述来决定哪些字母开头的变量会自动使用某种类型 Implicit integer (A,B,C) !A、B、C开头的都被视为整型数 Implicit integer(A-F,I,K) !A到F及I、K开头的变量都视为整型数 Implicit real(M-P) !M到P开头的变量都视为浮点数 Implicit none !关闭默认类型功能,所有变量都要事先声明 常数的声明方法(Parameter) Program ex Implicit none Real ::pi Parameter(pi = 3.14129) Write(*,”(F4.2)”) sin(pi/6) end 在Fortran90里,Parameter可以作为形容词,和变量的声明同时写在一起 Real, parameter ::pi=3.14159 !这里pi前面的冒号不能省,和上面代码不同(上面的可以省略)设置变量的初值 变量内容并不一定要在程序执行时才设置,可以在声明时同时给予初值。在Fortran90偶那个,在设置变量初值时,直接把数值写在声明的变量后面就行了。使用这个方法来设置初值是,不能省略声明中间的那两个冒号(Fortran90) 在fortran77中则要使用Data命令设置初值 Fortran 90 Fortran 77 program ex90 implicit none integer ::a=1 real ::b=2.0 complex ::c=(1.0,2.0) character (len=20) ::str="Hello Acuzio!" write (*,*) a,b,c,str end program ex77 implicit none integer a real b

fortran 95 基础注意

1.除字符型常量外,源程序中不区分字母的大小写,如语句ReaL a和real A是 等价的。 2.Fortran 95字符集以外的可打印字符,只能出现在注释、字符常量、字符串编 辑符和输入输出记录中。 3.Fortran 95规定标识符只能由字母、数字、下划线“”和$组成,且起始字符必 须是英文字母。(标识符即名称,用来在程序中标识有关实体,如变量、符号常量、函数、程序单元、公用块数组、模块和形参等) 4.用“!”作注释标志符,“!”可以在一行的任一位置,注释延伸至程序行的结束。 5.数据类型——integer(整数类型)、real(实数类型)、complex(实数类型,如 (1.2,3.5)表示1.2+3.5i)。 6.非数值型数据——character(字符类型,在程序中表示形式用…?或“”,如…a?, “hello!”)、logical(逻辑类型,表示判断的结果,只有两种值true、false)。 7.二至三十六进制表示,形式为:±r#数字如输出3994575的程序 Print﹡,2﹟1111001111001111001111 Print﹡,7﹟45644664 Print﹡,8﹟17171717 Print﹡,3994575 Print﹡,﹟3cf3cf !16进制可以略去16 Print﹡,36﹟2dm8f end 8.非打印字符的表示形式

9. 变量表示与赋值 integer x,y ,z !定义x 、y 和z 是整型变量 character *6 name !定义name 是字符变量,字符长度为6 real a,b !定义a 和b 是实型变量 complex ::s=(1.5,8.9) !定义s 是单精度复型变量,并对其赋值(1.5,8.9) integer (2)::c=1,d !定义c 和d 是短整型变量,并对a 赋值1 real * 8 e !定义e 是双精度型变量 注意:符号“::”在变量定义语句中可有可无,若有可对变量赋初值,否则不能赋初值。 10. 变量的赋值 直接赋值,如 integer a 或者integer ::a=20 a=20 用data 语句初始化,格式为:Data 变量1,变量2,…,变量n /常量l ,常量2,…,常量n / 说明:(1)data 可以给多个变量同时赋初值,中间用逗号隔开。 (2)被赋值的常量一定要放在一对“/”中。 (3)被赋值的常量与对应的变量数据类型要一致。 (4)被赋值的常量中还可以使用*来表示数据的重复。 如:real a,b,c 如:data m,n,k/3*5/ data a,b,c/1.0,2.0,3.0/ 执行此语句后,m ,n ,k 都为5 11. 算数运算符 算术运算符的优先级为括号→乘方→乘、除→加、减,其中乘和除同级,加和减同级分别从左到有进行计算,乘方运算从右到左;其中“**”表示乘方。 如:2**3**2/2的计算顺序为先3**2=9,然后2**9=512,最后512/2=256。 注意:① 数学表达式2211 y x y x 应该写成x1/y1+x2/y2;② 两个整数相除的结果一定也为整数,

Fortran95第一章第六大题习题与答案

1. 从键盘输入a,b,c 的值,计算f=cos |a+b |/sin |b| |a|++tan c 上机执行该程序,输入a=-4.6°,b=10°,c=21.85°,观察计算结果。 Program ex1_1 implicit none real a,b,c,f print*,'请输入a,b,c(角度值)' read*,a,b,c a=a*3.14159/180.0 b=b*3.14159/180.0 c=c*3.14159/180.0 f=cos(abs(a+b))/sin(sqrt(abs(a)+abs(b)))+tan(c) write(*,*)'f=',f stop End 2.设圆锥体底面半径r 为6,高h 为5,从键盘输入r 、h ,计算圆锥体体积。计 算公式为V=3 2h r π。 Program ex1_2 implicit none real r,h,v print*,'请输入r,h 的值' read*,r,h v=3.14159*r*r*h/3 write(*,*)'v=',v stop End 3.求一元二次方程02=++c bx ax 的两个根1x 和2x 。方程的系数a 、b 、c 值从键盘输入并假定042>-ac b 。 Program ex1_3 implicit none real a,b,c,x1,x2 print*,'请输入a,b,c 的值' read*,a,b,c x1=(b+sqrt(b*b-4*a*c))/2*a x2=(b-sqrt(b*b-4*a*c))/2*a write(*,*)'x1=',x1,'x2=',x2 stop End 4.从键盘输入一个三位十进制整数,分别输出其个位、十位、百位上的数字。

fortran95的使用方法9

附录C FORTRAN95语法 在本附录我们给出FORTRAN95的语法规则(ISO/IEC 1559-1:1997(E))。所谓语法规则,就是描述一切FORTRAN95的词汇,语句,结构等语言成分的形式规则,凡是遵循了这个描述的,就是合法的FORTRAN95语言;否则,就是不合法的。 因此语法规则本身必须是精确的,绝对不能产生歧义。在这种要求下,FORTRAN95的语法采用了形式语言的方式给出语法规则,即属于所谓Backus-Naur形式(BNF)的一种变体。 由于这种描述形式本身采用了语言的形式,因此有几点说明如下: ●在描述语法时,对于属于FORTRAN字符集的字符按照字面形式来理解,除非有特别的说明。 ●对于每一个语法成分的描述,都有一个唯一的编号,这个编号的采用了如下的一般形式: Rxyy 其中的R表示规则,而x表示FORTRAN标准的节号,yy表示对于该语法成分的描述在该节的唯一编号,因此对于每一个语法成分的描述,这个Rxyy可以看成是它的唯一编号,全书的正文当中,每当第一次引入一个语法成分,我们总是给出了它的这个编号。在下面的规则表里面,这个编号简写为纯数字,省略了字母R。 ●下面的描述当中,为了简洁起见,采用了如下的缩写: argument……arg attribute……..attr declaration…..decl definition……def descriptor……desc expression…..expr integer………int operator……..op specifier…….spec statement……stmt ●同样为了简洁的缘故,这里给出的形式描述不可能是绝对完备和精确的,在能够理解的前提下,本附录采用了一定的简化形式,并且在FORTRAN标准的基础上作了一定的节略。 ●除了文字之外,还使用了来自FORTRAN字符集的如下特殊符号;另外还使用了|表示或者的意思。

Fortran 95常用关键字

Fortran 95常用关键字 1、数据类型:整型,实型(浮点型),复数型,逻辑型,字符型 自定义数据类型(TYPE) 2、逻辑运算 ==,/=,>,<,>=,<= .AND., .OR., .NOT., .EQV., .NEQV. 3、输入输出格式 A, F, E, I, X, / 4、常用命令关键字 SELECT, PROGRAM, PRINT, STOP, END, WRITE, INTEGER, REAL, COMPLEX, CHARACTER, LOGICAL, READ, FORMAT, IMPLICIT, PARAMETER, DATA, EQUIVALENCE, TYPE, PAUSE, CONTINUE, CYCLE, EXIT, IF, SELECT, DO, ALLOCATE, DEALLOCATE, WHERE, FORALL, SUBROUTINE, CALL, RETURN, FUNCTION, COMMON, BLOCK DATA, SAVE, INTERFACE, CONTAINS, MODULE, USE, PUBLIC, PRIVATE, ENTRY, OPEN, INQUIRE, CLOSE, NAMELIST, POINTER, NULLFY, REWIND, BACKSPACE, ENDFILE 5、常用属性关键字 PARAMETER(见命令), ALLOCATABLE, EXTERNAL, SAVE(见命令), INTENT(IN), INTENT(OUT), INTENT(INOUT), INTRINSIC, OPTIONAL, RECURSIVE, TARGET, POINTER(见命令), PUBLIC(见命令), PRIVATE(见命令) 6、函数 CHAR( ), ICHAR( ), LEN( ), LEN_TRIM( ), INDEX( ), TRIM( ), SELECTED_INT_KIND( ), SELECTED_REAL_KIND( ), ALLOCATED(), RANDOM_SEED( ), RANDOM_NUMBER( ), ASSOCIATED( ), PRESENT( ), NULL(), REAL(), INT() 7、参数 KIND, LEN, RESULT, UNIT, FILE, EXIST, STATUS, IOSTAT, NML, FMT, ACCESS, RECL 8、特殊格式 字符串定界符,逻辑值定界符 字符串名(a:b) 字符串取子串操作 字符串a//字符串b 字符串连接操作 9、控制结构 分支 IF(条件表达式) THEN……ELSE……END IF 多重判断语句IF(条件表达式) THEN…ELSE IF(条件表达式) THEN…ELSE IF(条件表达式) THEN ……ELSE…END IF 嵌套IF结构 SELECT CASE语句 CASE()中只能用整型、字符型、逻辑型常量 CASE(A), CASE(A, B), CASE(A:B)意义。 10、循环 CYCLE,EXIT 计数循环: DO 计数器=初始值,终止值,增量 END DO

Fortran95第9章 基本计算(一)赋值语句

第9章基本计算(一)赋值语句 从计算机的实际状态来看,给出表达式并不意味着计算的开始,真正能够驱动计算的是可执行语句,而最直接驱动表达式的计算过程的就是赋值语句,完成一个赋值步骤,就意味着机器的状态的局部或全局发生了一个根本的变化。 从语法的角度来看,一个表达式还只是一个比较复杂的复合词汇,还不能构成一个完整的语句,而赋值语句则是一个在语法意义上的完整的语句,表达式在赋值语句中扮演关键的语法作用。 从计算问题的角度来看,赋值可以说是基本的计算步骤,考虑一下我们人工计算的过程就可以发现,任何一个完整的计算步骤,都可以说就是一个赋值步骤,特别是公式演算和数值计算,完成一个局部运算过程的标志,往往就是求出某个中间变量的数值或表达式。 FORTRAN语言作为一种以公式翻译为初衷的高级语言,它的赋值语句的一般形式就是一个数学等式,当然不是那种公式恒等变换得到的恒等式,而是要把运算的结果赋予一个变量,因此它的一般句法形式为: variable = expression variable => expression 可以看到一个赋值语句作为一个完整的语句,分为三个部分: ● 被赋值的变量 ● 赋值符号 ● 计算(表达式) 其中被赋值的变量,通过赋值,就拥有了明确的取值形式,如果该变量含有下标,片断下标或子串范围,则赋值的前提是它们都已经获得具体的取值。 基于表达式结果的不同种类,赋值语句分为: ●固有赋值:固有赋值是把任意类型的值赋予一个非指针变量,或把一个指针变量赋 予一个与之相关联的目标。 ●自定义赋值:自定义赋值得以构成的前提是存在一个可访问的子例行程序,它包含 一个具有ASSIGNMENT形式的赋值界面,其属性与自定义赋值语句里的变量和表达式的属性保持一致。 ●指针赋值:指针赋值把一个指针变量关联到它的目标对象,或者说把一个目标对象 赋予到一个指针变量。在形式上它使用符号=>。 ●过滤数组赋值:这个赋值过程是对满足一定条件的数组元素进行赋值,而不是对数 组整体进行赋值。 ●并行指标数组赋值。这种赋值形式给出了一种有效的并行机制,能够大规模地对多 重指标变量进行赋值。 下面我们将分节讨论这5类赋值形式,首先给出一些例子如下:

相关文档