Fortran95习题答案

Fortran95习题答案
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

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

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

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

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

end do

write(*,*) ans

stop

end program

5.program main

implicit none

integer, parameter :: length = 79 character(len=length) :: input, output integer i,j

write(*,*) "请输入一个字串"

read(*,"(A79)") input

j=1

do i=1, len_trim(input)

if ( input(i:i) /= ' ' ) then

output(j:j)=input(i:i)

j=j+1

end if

end do

write(*,"(A79)") output

stop

end program

第七章

1.program main

implicit none

integer, parameter :: max = 10 integer i

integer :: a(max) = (/ (2*i, i=1,10) /)

! sum()是fortran库函数

write(*,*) real(sum(a))/real(max)

stop

end program

2.integer a(5,5) ! 5*5=25

integer b(2,3,4) ! 2*3*4=24

integer c(3,4,5,6) ! 3*4*5*6=360

integer d(-5:5) ! 11

integer e(-3:3, -3:3) ! 7*7=49

3.program main

implicit none

integer, parameter :: max=10

integer f(max)

integer i

f(1)=0

f(2)=1

do i=3,max

f(i)=f(i-1)+f(i-2)

end do

write(*,"(10I4)") f

stop

end program

4.program main

implicit none

integer, parameter :: size=10

integer :: a(size) = (/ 5,3,6,4,8,7,1,9,2,10 /) integer :: i,j

integer :: t

do i=1, size-1

do j=i+1, size

if ( a(i) < a(j) ) then ! a(i)跟a(j)交换

t=a(i)

a(i)=a(j)

a(j)=t

end if

end do

end do

write(*,"(10I4)") a

stop

end

5.a(2,2) ! 1+(2-1)+(2-1)*(5) = 7

a(3,3) ! 1+(3-1)+(3-1)*(5) = 13

第八章

1.program main

implicit none

real radius, area

write(*,*) "请输入半径长"

read(*,*) radius

call CircleArea(radius, area)

write(*,"(' 面积= 'F8.3)") area

stop

end program

subroutine CircleArea(radius, area)

implicit none

real, parameter :: PI=3.14159

real radius, area

area = radius*radius*PI

return

end subroutine

2.program main

implicit none

real radius

real, external :: CircleArea

write(*,*) "请输入半径长"

read(*,*) radius

write(*,"(' 面积= 'F8.3)") CircleArea(radius)

stop

end program

real function CircleArea(radius)

implicit none

real, parameter :: PI=3.14159

real radius

CircleArea = radius*radius*PI

return

end function

3.program main

implicit none

call bar(3)

call bar(10)

stop

end program

subroutine bar(length)

implicit none

integer, intent(in) :: length

integer i

character(len=79) :: string

string=" "

do i=1,length

string(i:i)='*'

end do

write(*,"(A79)") string

return

end subroutine

4.program main

implicit none

integer, external :: add

write(*,*) add(100)

end program

recursive integer function add(n) result(sum) implicit none

integer, intent(in) :: n

if ( n<0 ) then

sum=0

return

else if ( n<=1 ) then

sum=n

return

end if

sum = n + add(n-1)

return

end function

5.program main

implicit none

integer, external :: gcd

write(*,*) gcd(18,12)

end program

integer function gcd(A,B)

implicit none

integer A,B,BIG,SMALL,TEMP

BIG=max(A,B)

SMALL=min(A,B)

do while( SMALL /= 1 )

TEMP=mod(BIG,SMALL)

if ( TEMP==0 ) exit

BIG=SMALL

SMALL=TEMP

end do

gcd=SMALL

return

end function

6.program main

use TextGraphLib

implicit none

integer, parameter :: maxx=60, maxy=20

real, parameter :: StartX=0.0, EndX=3.14159*2.0 real, parameter :: xinc = (EndX-StartX)/(maxx-1) real x

integer i,px,py

call SetScreen(60,20)

call SetCurrentChar('*')

x=StartX

do px=1,maxx

py = (maxy/2)*sin(x)+maxy/2+1

call PutChar(px,py)

x=x+xinc

end do

call UpdateScreen()

stop

end program

第九章

1.program main

implicit none

character(len=79) :: filename

character(len=79) :: buffer

integer, parameter :: fileid = 10

integer count

integer :: status = 0

logical alive

write(*,*) "Filename:"

read (*,"(A79)") filename

inquire( file=filename, exist=alive)

if ( alive ) then

open(unit=fileid, file=filename, &

access="sequential", status="old")

count = 0

do while(.true.)

read(unit=fileid, fmt="(A79)", iostat=status ) buffer

if ( status/=0 ) exit ! 没有资料就跳出循环

write(*,"(A79)") buffer

count = count+1

if ( count==24 ) then

pause

count = 0

end if

end do

else

write(*,*) TRIM(filename)," doesn't exist."

end if

stop

end

2.program main

implicit none

character(len=79) :: filename

character(len=79) :: buffer

integer, parameter :: fileid = 10

integer i

integer :: status = 0

logical alive

write(*,*) "Filename:"

read (*,"(A79)") filename

inquire( file=filename, exist=alive)

if ( alive ) then

open(unit=fileid, file=filename, &

access="sequential", status="old")

do while(.true.)

read(unit=fileid, fmt="(A79)", iostat=status ) buffer

if ( status/=0 ) exit ! 没有资料就跳出循环

do i=1, len_trim(buffer)

buffer(i:i) = char( ichar(buffer(i:i))-3 )

end do

write(*,"(A70)") buffer

end do

else

write(*,*) TRIM(filename)," doesn't exist."

end if

stop

end

3.program main

implicit none

type student

integer chinese, english, math, science, social, total

end type

type(student) :: s, total

integer, parameter :: students=20, subjects=5

integer i

open(10,file="grades.bin",access="direct",recl=1)

write(*,"(7A10)") "座号","中文","英文","数学","自然","社会","总分" total = student(0,0,0,0,0,0)

do i=1, students

read(10,rec=(i-1)*subjects+1) s%chinese

read(10,rec=(i-1)*subjects+2) s%english

read(10,rec=(i-1)*subjects+3) s%math

read(10,rec=(i-1)*subjects+4) s%science

read(10,rec=(i-1)*subjects+5) s%social

s%total = s%chinese+s%english+s%math+s%science+s%social

total%chinese = total%chinese+s%chinese

total%english = total%english+s%english

total%math = total%math+s%math

total%science = total%science+s%science

total%social = total%social+s%social

total%total = total%total+s%total

write(*,"(7I10)") i, s

end do

write(*,"(A10,6F10.3)") "平均", &

real(total%chinese)/real(students),&

real(total%english)/real(students),&

real(total%math)/real(students),&

real(total%science)/real(students),&

real(total%social)/real(students),&

real(total%total)/real(students)

stop

end

4.program main

implicit none

character(len=79) :: filename

character(len=79) :: buffer

integer, parameter :: fileid = 10

integer i

integer :: status = 0

logical alive

write(*,*) "Filename:"

read (*,"(A79)") filename

inquire( file=filename, exist=alive)

if ( alive ) then

open(unit=fileid, file=filename, &

access="sequential", status="old")

do while(.true.)

read(unit=fileid, fmt="(A79)", iostat=status ) buffer

if ( status/=0 ) exit ! 没有数据就跳出循环

do i=1, len_trim(buffer)

buffer(i:i) = char( ichar(buffer(i:i))-(mod(i-1,3)+1) )

end do

write(*,"(A70)") buffer

end do

else

write(*,*) TRIM(filename)," doesn't exist."

end if

stop

end

5.module typedef

type student

integer :: num

integer :: Chinese, English, Math, Natural, Social

integer :: total

integer :: rank

end type

end module

program main

use typedef

implicit none

integer, parameter :: fileid=10

integer, parameter :: students=20

character(len=80) :: tempstr

type(student) :: s(students) ! 储存学生成绩

type(student) :: total ! 计算平均分数用

integer i, num, error

open(fileid, file="grades.txt",status="old", iostat=error)

if ( error/=0 ) then

write(*,*) "Open grades.txt fail."

stop

end if

read(fileid, "(A80)") tempstr ! 读入第一行文字

total=student(0,0,0,0,0,0,0,0)

! 用循环读入每位学生的成绩

do i=1,students

read(fileid,*) s(i)%num, s(i)%Chinese, s(i)%English, &

s(i)%Math, s(i)%Natural, s(i)%Social ! 计算总分

s(i)%Total = s(i)%Chinese + s(i)%English + &

s(i)%Math + s(i)%Natural + s(i)%Social ! 累加上各科的分数, 计算各科平均时使用

total%Chinese = total%Chinese + s(i)%Chinese

total%English = total%English + s(i)%English

total%Math = total%Math + s(i)%Math

total%Natural = total%Natural + s(i)%Natural

total%Social = total%Social + s(i)%Social

total%Total = total%Total + s(i)%Total

end do

call sort(s,students)

! 重新输出每位学生成绩

write(*,"(8A7)") "座号","中文","英文","数学","自然","社会","总分","名次" do i=1,students

write(*,"(8I7)") s(i)

end do

! 计算并输出平圴分数

write(*,"(A7,6F7.1)") "平均", &

real(total%Chinese)/real(students),&

real(total%English)/real(students),&

real(total%Math) /real(students),&

real(total%Natural)/real(students),&

real(total%Social) /real(students),&

real(total%Total) /real(students)

stop

end program

subroutine sort(s,n)

use typedef

implicit none

integer n

type(student) :: s(n), t

integer i,j

do i=1,n-1

do j=i+1,n

if ( s(i)%total < s(j)%total ) then

t = s(i)

s(i)=s(j)

s(j) = t

end if

end do

end do

forall(i=1:n)

s(i)%rank = i

end forall

end subroutine

第十章

1.integer(kind=4) :: a ! 4 bytes

real(kind=4) :: b ! 4 bytes

real(kind=8) :: c ! 8 bytes

character(len=10) :: str ! 10 bytes

integer(kind=4), pointer :: pa ! 4 bytes

real(kind=4), pointer :: pb ! 4 bytes

real(kind=8), pointer :: pc ! 4 bytes

character(len=10), pointer :: pstr ! 4 bytes

type student

integer Chinese, English, Math

end type

type(student) :: s ! 12 bytes

type(student), pointer :: ps ! 4 bytes

2.integer, target :: a = 1

integer, target :: b = 2

integer, target :: c = 3

integer, pointer :: p

p=>a

write(*,*) p ! 1

p=>b

write(*,*) p ! 2

p=>c

p=5

write(*,*) c ! 5

3.module linklist

type student

integer :: num

integer :: Chinese, English, Math, Science, Social end type

type datalink

type(student) :: item

type(datalink), pointer :: next

end type

contains

function SearchList(num, head)

implicit none

integer :: num

type(datalink), pointer :: head, p

type(datalink), pointer :: SearchList

p=>head

nullify(SearchList)

do while( associated(p) )

if ( p%item%num==num ) then

SearchList => p

return

end if

p=>p%next

end do

return

end function

end module linklist

program ex1016

use linklist

implicit none

character(len=20) :: filename

character(len=80) :: tempstr

type(datalink), pointer :: head

type(datalink), pointer :: p

type(student), allocatable :: s(:)

integer i,error,size

write(*,*) "filename:"

read(*,*) filename

open(10, file=filename, status="old", iostat=error)

if ( error/=0 ) then

write(*,*) "Open file fail!"

stop

end if

allocate(head)

nullify(head%next)

p=>head

size=0

read(10, "(A80)") tempstr ! 读入第一行字符串, 不需要处理它! 读入每一位学生的成绩

do while(.true.)

read(10,fmt=*, iostat=error) p%item

if ( error/=0 ) exit

size=size+1

allocate(p%next, stat=error) ! 新增下一个数据

if ( error/=0 ) then

write(*,*) "Out of memory!"

stop

end if

p=>p%next ! 移动到链表的下一个数据

nullify(p%next)

end do

write(*,"('总共有',I3,'位学生')") size

allocate( s(size) )

p=>head

do i=1,size

s(i)=p%item

p=>p%next

end do

do while(.true.)

write(*,*) "要查询几号同学的成绩?"

read (*,*) i

if ( i<1 .or. i>size ) exit ! 输入不合理的座号

write(*,"(5(A6,I3))") "中文",s(i)%Chinese,&

"英文",s(i)%English,&

"数学",s(i)%Math,&

"自然",s(i)%Science,&

"社会",s(i)%Social end do

write(*,"('座号',I3,'不存在, 程序结束.')") i

stop

end program

4.module typedef

implicit none

type :: datalink

integer :: i

type(datalink), pointer :: next

end type datalink

end module typedef

program ex1012

use typedef

implicit none

type(datalink) , pointer :: p, head, next

integer :: i,n,err

write(*,*) 'Input N:'

read(*,*) n

allocate( head )

head%i=1

nullify(head%next)

p=>head

do i=2,n

allocate( p%next, stat=err )

if ( err /= 0 ) then

write(*,*) 'Out of memory!'

stop

end if

p=>p%next

p%i=i

end do

nullify(p%next)

p=>head

do while(associated(p))

write(*, "(i5)" ) p%i

p=>p%next

end do

! 释放链表的存储空间

p=>head

do while(associated(p))

next => p%next

deallocate(p)

p=>next

end do

stop

end program

第十一章

1.module utility

implicit none

interface area

module procedure CircleArea

module procedure RectArea end interface

contains

real function CircleArea(r)

real, parameter :: PI=3.14159

real r

CircleArea = r*r*PI

return

end function

real function RectArea(a,b)

real a,b

RectArea = a*b

return

end function

end module

program main

use UTILITY

implicit none

write(*,*) area(1.0)

write(*,*) area(2.0,3.0)

stop

end program

2.module time_utility

implicit none

type :: time

integer :: hour,minute,second

end type time

interface operator(+)

module procedure add_time_time end interface

contains

function add_time_time( a, b )

implicit none

type(time) :: add_time_time

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

integer :: seconds,minutes,carry

seconds=a%second+b%second

carry=seconds/60

minutes=a%minute+b%minute+carry

carry=minutes/60

add_time_time%second=mod(seconds,60)

add_time_time%minute=mod(minutes,60)

add_time_time%hour=a%hour+b%hour+carry

return

end function add_time_time

subroutine input( a )

implicit none

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

write(*,*) " Input hours:"

read (*,*) a%hour

write(*,*) " Input minutes:"

read (*,*) a%minute

write(*,*) " Input seconds:"

read (*,*) a%second

return

end subroutine input

subroutine output( a )

implicit none

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

write(*, "(I3,' hours',I3,' minutes',I3,' seconds')" ) a%hour,a%minute,a%second

return

end subroutine output

end module time_utility

program main

use time_utility

implicit none

type(time) :: a,b,c

call input(a)

call input(b)

c=a+b

call output(c)

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教程5章

第5章准备数据 从本章开始,我们将赋予语言实质性的语义,也就是规定上章所描述的语言的每一个细节所具有的涵义。这种涵义与其说是我们对于一种语言细节的定义,不如说是算法的要求,要求语言具有足够多的细节,用来表达在算法当中有可能出现的精细情节。 对于任何的问题,站在计算机的角度来看,总是可以把它抽象为如下图所示的结构: 因此要准备通过计算来解决一个问题,首先要作到的是把该问题所涉及到的数据整理好,也就是列出所有的数据,然后根据数据的数学属性进行分类,这个分类的过程就是对数据施加足够的标记的过程,将来把这些数据输入到计算机,计算机将能够依据这些标记,辨识出数据所应该具有的数学属性,从而施加相应的合法数学运算。 所以作为向计算机描述计算问题的FORTRAN语言,它首先要作到的是约定如何给数据施加足够详细的标记。 对这个标记过程的第一个要求是保证准确性,也就是说这个语言的标记系统必须正确地反映真实世界的问题里面,数据所具有的数学属性,因此这个标记系统必然是与数据的数学分类结构保持一致的。 从数学的观点来看,世界上的所有数据,总是可以被表示为整数,实数,复数等等基本的数据种类,因此本章的内容就是讨论: ●FORTRAN语言如何把数据归结为一些基本数据类型; ●然后为了足够详尽地描述每一个数据类型的属性,FORTRAN是如何施加相应的标 记的; ●FORTRAN语言对于这些标记(语法形式)所约定的语义是什么。 然后我们就可以知道,要想用FORTRAN来描述一个问题的算法,并进而以问题算法的FORTRAN语言版本为媒介,通过计算机来得到计算结果,第一个步骤,就是准备好数据的FORTRAN描述。 5.1 数据是什么 在上一章里,据称计算机能够使用语言,而且是非常类似于人类的语言,至少从形式上看很象,这难免会令某些人(特别是看过KUBRICK的影片《2001: A Space Odyssey》的观众们)感到恐惧:) 别怕!且先不讨论FORTRAN作为语言是否具有与人类语言等价的表达能力,至少从自然语言的语义学的角度来看,FORTRAN说出来的话其实是绝对空洞的,因为FORTRAN 语言的全部语义基础就只是数据,而数据对机器而言,只是意味着经过编码的符号。 一台计算机其实是由以下6个部分组成:

《程序设计语言(FORTRAN)》理论课程教学大纲(可打印修改)

《程序设计语言(FORTRAN)》课程教学大纲 课程编号: 总学时数:64(计划内)+16(计划外) 总学分数:4 课程性质:必修课 适用专业:给水排水工程、环境工程、土木工程、工程力学、无机非金属材料工程、应用化学等工科专业。 一、课程的任务和基本要求: FORTRAN语言广泛应用于数值分析、科学计算和工程设计等领域,FORTRAN90/95是FORTRAN语言的最新版本,它是一个功能十分强大且体现现代程序设计语言特征的新型程 序设计语言,在社会上产生了广泛影响,许多高等学校、科研院所和公司企业开始引入和使用FORTRAN90/95语言。《程序设计语言(FORTRAN)》课是计算机基础教学课程体系中一门重要的计算机技术基础课程,是给水排水工程、环境工程、土木工程、工程力学、无机非金属材料工程、应用化学等工科专业(方向)的一门学科基础课和专业必修课。 1、课程任务 通过《程序设计语言(FORTRAN)》课程的学习,使学生了解和掌握计算机程序设计的基本概念、基本知识和基本方法,了解和掌握计算机求解问题的机制和方法,熟练掌握FORTRAN90/95语言基本内容、编程技能和开发环境,能熟练运用FORTRAN90/95语言设计 和编写比较复杂的FORTRAN90/95程序,有效解决本专业中遇到的一些数值计算和数据处理问题,使学生计算机应用能力得到显著提高,为专业应用和发展奠定基础。 2、基本要求 (1) 了解程序设计的基本概念、基本知识和基本方法。 (2) 掌握FORTRAN90/95基本内容,能设计和编写比较复杂的FORTRAN90/95程序。 (3) 掌握FORTRAN90/95开发环境(Developer Studio),提高开发效率。 (4) 能结合本专业实际,熟练使用FORTRAN90/95解决有关数值计算和数据处理问题。 二、基本内容和要求: 1.程序设计概述 (1)程序设计语言。 (2)程序和程序设计。 (3)算法的基本概念和主要特征。 (4)程序设计方法。 通过学习要求学生了解程序设计的基本知识、基本概念、基本方法。掌握计算机求解问题的机制和方法。 2.FORTRAN90/95软件开发环境 (1)FORTRAN语言发展概述和FORTRAN90/95主要特征。 (2)Digital Visual FORTRAN 5.0/Compag Visual FORTRAN 6.6主要特性和系统配置。 (3)Microsoft Developer Studio开发环境和解题过程。 通过学习要求学生了解FORTRAN语言发展历史和FORTRAN90/95主要特征,掌握Microsoft Developer Studio开发环境和解题过程。 3.FORTRAN90/95基础知识 掌握字符集、名称、关键字、程序单元、语句、书写格式、数据类型等基础知识和基本概念。 通过学习要求学生熟练掌握FORTRAN90/95常用语法知识和基本使用规则。

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

fortran95教程4章

第2篇. 计算的叙述 算法的每一个步骤,都必须给予确切的定义。对于算法当中所 考虑的每一种情况,每一个有待执行的动作,都必须严格地和 不含混地加以规定。…对于以描述算法作为目的而设计出来 的,采用了形式的定义的程序设计语言,或者说计算机语言, 它的每一个语句都必须有非常确切的意义。 ---- D.E.Knuth[1]《The Art of Computer Programming》 本质上FORTRAN就是一门语言,一门人与计算机赖以进行有效交流的语言,在这个意义上和我们使用的中文,英文等没有本质差别。现在假设要来描述一种大家都陌生的语言,那么总是要分成两个方面来描述,即一方面要描述这门语言的表象和形态,也就是它使用哪些符号,哪些词汇,一般的句式如何,怎样才能完整叙述一个任务之类;另一方面需要说明这门语言的语义,也就是说这门语言是如何用来表达我们需要它表达的意思的。 第4章基本上就是描述FORTRAN作为一种语言的基本形态,也就是书写这种语言的书写规则。 接下来几章则逐步说明如何用FORTRAN来表达我们的要求,或者反过来说,FORTRAN提供了些什么表达方式,以便我们用来向计算机提出合理的任务: ● 表达基本数据; ● 表达数据的结构; ● 完整地描述数据; ● 构造表达式; ● 驱动计算的赋值; ● 计算过程的结构控制; 在整个第二篇,我们将领略到FORTRAN 95是如何能够做到精致地描述计算的,而把一个问题阐述清楚了,就意味着问题已经解决了一大半。

[1]Donald E. Knuth (高纳德),Stanford University的The Art of Computer Programming荣休教授,而The Art of Computer Programming(计算机程序设计技巧)正是他的伟大著作的名称。洋洋七大卷的《The Art of Computer Programming》是当今全世界每一个计算机科学家所膜拜的圣经。1974年在该书刚完成前面很少一部分时,就给他带来了计算机科学家们梦寐以求的图灵奖。 第4章FORTRAN 95语言的形貌 要说明一门语言的形态,必须回答以下问题: ●它使用哪些符号来表达信息? ●它的词汇如何构成? ●它的语句如何构成? ●如何表达一个完整的任务? 具体的对于一门计算机语言,把这几个问题更加明确地转换过来,就是: ●它使用键盘上的哪些符号,各个符号有哪些用途? ●它的词汇如何由键盘字符构成?含有哪些固定的词汇?以及容许自由构成合法词汇 的规则是什么? ●它具有哪些固定的语句格式?以及容许自由构成合法语句的规则是什么? ●我们交待给计算机的任何任务,都必须明确说明任务的开始,执行步骤和完成,因 此一段完整的源代码应该具备什么样的形式?以及应该具备哪些要素? 本章就是要回答这些问题。 4.1 FORTRAN语言所使用的字符 从最抽象的层面来看,人与计算机的交流只是信息的交流,而信息总是需要依靠某种信号来表示,对于人来说,最方便的就是字符。而对于计算机来说,自然就是键盘所能敲出的那些字符(信号),因此下面就是要说明: ●FORTRAN 95能识别键盘上敲出的哪些字符? ●每个字符对于FORTRAN 95来说又意味着什么? 4.1.1 FORTRAN 95所使用的基本字符 按照FORTRAN 95标准的规定,一切FORTRAN 95的实现平台都必须使用下面表4-1所列出来的这个基本的字符集,或者说,这个字符集是所有遵循FORTRAN 95标准的编译

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.360docs.net/doc/0a6763469.html,\MSDEV98\dfdev.exe Microsoft Developer Studio的界面如下图所示: 文档窗口 工作空间窗口 输出窗口

fortran安装

Intel Visual Fortran 2013 sp1 完整版下载及安装教程(windows) 10月16日版:更新支持win8.1、VS2013下载地址 【完整安装包】https://www.360docs.net/doc/0a6763469.html,/akdlm/irc_nas/3651/w_fcompxe_ novsshell_2013_sp1.1.139.exe 【联网安装包】https://www.360docs.net/doc/0a6763469.html,/akdlm/irc_nas/3651/w_fcompxe_ novsshell_online_2013_sp1.1.139.exe 【百度云副本】https://www.360docs.net/doc/0a6763469.html,/s/18E41z 更新内容(翻译自官网,不妥之处恳请指正): 1.Intel? Fortran Compiler 更新至14.0.1 --增加/assume:std_value 编译选项 --增加/Q[a]xMIC-AVX512 编译选项 --增加/Qopt-gather-scatter-unroll=n 编译选项 2.Intel? Math Kernel Library 更新至11.1 Update 1 3.增加对Microsoft Windows 8.1*的支持 4.增加对日语的支持 5.修正问题 --https://www.360docs.net/doc/0a6763469.html,/en-us/articles/intel-composer-xe-2013-compilers-sp1-fixes-list --https://www.360docs.net/doc/0a6763469.html,/en-us/articles/intel-mkl-111-bug-fixes/ 安装说明: 1、下载安装包中的任意一个,前两个为官方地址,第三个为百度云副本(完整安装包) 2、运行w_fcompxe_novsshell_2013_sp1.0.103.exe 3、点击extract,解压安装包,解压完毕程序会自动运行安装向导 4、在第三步(Activation)中选择Choose alternative activation,点击下一步 5、选择Use a license file 6、选择你的授权许可文件(lib文件) 7、继续安装过程 备注: 1、安装Intel Visual Fortran Composer前,请确保已经安装了Microsoft Visual Studio 2010/2012/2013。若使用其他编辑器,需要手动配置编译环境。 Visual Studio官网:https://www.360docs.net/doc/0a6763469.html,/。 微软旗下的DreamPark计划为在校大学生免费提供VS2013Pro版,地址:https://https://www.360docs.net/doc/0a6763469.html, 2、安装过程中没有加以说明的步骤,请直接点击下一步。

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

相关文档
最新文档