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