implicit none
integer(kind=4) a!长整型
integer(kind=2) b!短整型
real(kind=4) c1!浮点数
real(kind=4) c2
c1=1.0+2/3!注意结果与下面不一样
c2=1.0+2.0/3.0
print *,"Hello"
write(*,*) "Rock the world"
a=2**2-5
write(*,*) "2^2-5=",a,c1,c2
stop
end program main
2.program main
implicit none
complex(kind=4) a
character(len=6) b
character(len=20) c
a=(3.2,3.5)
write(*,*) a
b="l love "
c=" you"
write(*,*) b,c
write(*,*) b//c
c(2:)="myself"
write(*,*) b,c
write(*,*) b//c!连接两个字符串
stop
end program main
3.program main
implicit none
complex(kind=4) a
character(len=20) b,b1,c
character(len=6) c1
a=(3.2,3.5)
write(*,*) a
b="l love "
b1="l love myself"
c1="myself"
c=" you"
write(*,*) b,c
write(*,*) b//c
c(2:)="myself"
write(*,*) b,c
write(*,*) b//c!连接两个字符串
write(*,*) len(b)!计算a的长度
write(*,*) len_trim(b) !输出字符串的实际长度
write(*,*) index(b1,c1)!写出c在b1里面的位置,多出来的空格也算的,所以字符的长短需要设计正好。
stop
end program main
4.
program main
implicit none
integer(kind=4)a
character(len=20)b
read(*,*) a,b
write(*,*) a,b
stop
end program main
5.program main
implicit none
integer d
real(kind=4)a,c,e
character(len=20)b
d=1000
a=3.1415926
c=2.3656
e=1.0000335
b="l love you"
write(*,"(A3)") b !Am是以m个字符宽进行输出
write(*,"(F5.3)") a!Fm.n是以m个字符宽输出,n个小数位
write(*,"(5X,F5.3)") a!nX向右移动n格
write(*,"(//F5.3,1X,F6.4//)") a,c
write(*,"(1X,I6)") d !针对整数输出n位
write(*,"(3(F6.4,1X))")a,c,e
stop
end program main
6.program main
implicit none
integer ::d=5
real(kind=4)::a,c,e!设置变量的初值
real(kind=4):: a1,a2,a3
character(len=10):: a4
real pi
character(len=20)b
parameter(pi=3.1415926) !固定为常数,后期不能再动。
DATA a1,a2,a3,a4 /1,2,3,"Fortran"/!Data ..../..../一一对应设定初值
write(*,*)a1+a2,a3,a4
a=3.1415926
e=1.0000335+pi
b="l love you"
write(*,"(A3)") b !Am是以m个字符宽进行输出
write(*,"(F5.3)") a!Fm.n是以m个字符宽输出,n个小数位
write(*,"(5X,F5.3)") a!nX向右移动n格
write(*,"(//F5.3,1X,F6.4//)") a,c
write(*,"(1X,I6)") d !针对整数输出n位
write(*,"(3(F6.4,1X))")a,c,e
stop
end program main
7.program main
implicit none
integer:: a=1,b=2
real :: c
c=a/b
write(*,"(F4.2)")c
c=real(a)/real(b)!预先规定好类型,不用一开始先real
write(*,"(F4.2)")c
stop
end program main
8.program main
implicit none
type ::person
character(len=20)::name
integer :: age
integer :: weight
integer :: height
character(len=20) ::address
end type person
type(person)::a
write(*,*)"Name:"
read(*,*)a%name
write(*,*)"Age:"
read(*,*)a%age
write(*,*)"Weight:"
read(*,*)a%weight
write(*,*)"Height:"
read(*,*)a%height
write(*,*)"Address:"
read(*,*)a%address
write(*,100 ) a%name,a%age,a%weight,a%height,a%address
100 format(/,"Name:",A10/,"Age:",I3/,"Weight:",I3/,"Height:",I3/,"Address:",A20)
end program main
第四章练习题
1.program main
write(*,100) "Have a good time.","That's not bad.","Mary"," isn't my name."
100 format(A16,/A15,/'"',A4,'"',A15)
end program main
2.program main
real(kind=4) ::r,pi
parameter(pi=3.1415926)
write(*,*) "半径(m)="
read(*,*) r
write(*,100) pi*r**2
100 format("面积=",F10.5,"m^2")
end program main
3.program main
real(kind=4) ::a
write(*,*) "old grade="
read(*,*) a
write(*,100) a**1/2*10
100 format("new grade=",F7.2)
end program main
4.1/1.5
5.program main
implicit none
real(kind=4) ::a
type::unit
real::m
real::dm
real::cm
real::mm
end type unit
type(unit)::u
write(*,*) "英尺="
read(*,*) a
u%m=a/124
u%dm=a/124*1000
u%cm=a/124*1000*1000
u%mm=a/124*1000*1000*1000
write(*,100) u%m,u%dm,u%cm,u%mm
100 format("米:",F20.2/,"分米:",F20.2/,"厘米:",F20.2/,"毫米:",F20.2)
end program main
第二章
1.
program mainimplicit none
real(kind=4)::speed
write(*,*)"Car speed="
read(*,*)speed
if(speed>100)then
write(*,*)"You are too fast.Slow down."
else
write(*,*)"You could move on."
end if
end program main
2..EQ.等于
.NE.不等于
.GT.大于
.GE.大于等于
.LT.小于
.LE.小于等于
3..and.
.or.
.not.--------(.not.3<5)2
.eqv.(1<3.eqv.3<5)1
.neqv.
4.program main
implicit none
integer wind,speed
logical a,b
write(*,*)"The wind is_____?"
read(*,*)wind
write(*,*)"The speed is______?"
read(*,*)speed
a=speed>100
b=wind>500
if(a .or. b)then
write(*,*)"We have no lessons today."
else
write(*,*)"Still have lessons"
end if
end program main
5.program main
implicit none
integer score
write(*,*)"The score is_____?"
read(*,*)score
if(score<=25.and.score>=0)then
write(*,*)"D"
else if(score<=50.and.score>25) then
write(*,*)"C"
else if(score<=75.and.score>50) then
write(*,*)"B"
else if(score<=100.and.score>75) then
write(*,*)"A"
end if
end program main
6.program main
implicit none
real::a,b
real,parameter:: e=0.0001
write(*,*)"Input:"
read(*,*)a
b=sqrt(a)**2-a
if(abs(b)<0.0001)then
write(*,*)"EQUAL."
else
write(*,*)"Not Equal"
end if
end program main
7.program main
implicit none
character(len=1)::grade
Integer::score
read(*,*)score
select case(score)!这里的变量只能是integer,character
case(75:100)
grade='A'
case(50:74)
grade='B'
case(25:49)
grade='C'
case(0:24)
grade='D'
case default
grade='?'
end select
write(*,"('grade=',A1)")grade
end program main
8.program main
implicit none
integer ::light,count
do count=1,10,1
write(*,*) count
if(count==6)cycle!cycle是用在直接进行下一次的循环。
if(count==9)exit!exit直接退出循环
end do
end program main
9.program main
implicit none
integer ::fn,fn_1,fn_2,i
fn_1=1
fn_2=0
write(*,*)"f(0)=0"
write(*,*)"f( 1)=1"
do i=2,10,1
fn=fn_1+fn_2
write(*,*) fn
fn_2=fn_1
fn_1=fn
write(*,"('f(',I2,')=',I2/)")i,fn
end do
end program main
10.Datatype name(size).
例如:integer ::student(10)
integer a(10)=integer,dimension(10)::a=integer a(下一行) dimension a(10)
自定义数组:
Type ::person
real ::height,weight
end type
type(person)::a(10)
...
...
a(2)&weight=180.0
a(2)&height=120.0
11.integer::a(10,10)
integer,dimension(10,10)::a
integer a
dimension a(10,10)
12.特殊声明数组,integer::a(0:3)
13.赋初值:
integer:;a(5)
integer::i
data(a(i),i=2,4)/2,4,6/
write(*,*)(a(i),i=2,4)或者(a(i),i=2,4,1)
integer::a(i)=(/1,2,3,4,5/)(/(i=1,5)/)
14.program main
implicit none
integer::a(2,2)=(/1,2,3,4/)
integer::b(2,2)=(/5,6,7,8/)
integer::c(2,2)
integer::cc=2,i,j,k
do i=1,cc
do j=1,cc
c(i,j)=0
do k=1,cc
c(i,j)=c(i,j)+a(i,k)*b(k,j)
end do
end do
end do
do i=1,2
write(*,*)c(i,:)
end do
end program main
第七章:数组答案
implicit none
integer::i
integer::a(10)=(/(i,i=2,20,2)/)
write(*,*)a
end program main
implicit none
integer,parameter::size=10!放入数组的size必须是固定的
integer::i,j,max
integer::a(size)=(/5,3,6,4,8,7,1,9,2,10/)
do i=1,size
do j=i+1,size
if(a(i)<a(j))then
max=a(i)
a(i)=a(j)
a(j)=max!交换两个元素
end if
end do
end do
write(*,*)a
end program main
函数
格式:
program main
...
...
end program main
subroutine 名字()
...
...
..
end subroutine 名字
2.子程序的变量是独立存在的。
3.program main
implicit none
integer::a,b
write(*,*)"a="
read(*,*)a
write(*,*)"b="
read(*,*)b
call add(a,b)
end program main
subroutine add(one,two)
implicit none
integer::one,two
write(*,*)one+two
return
end
4.Fortran是传址调用,调用时所传递出去的参数和子程序中的接受的参数,
他们会使用相同的内存地址来记录数据,所以所以再改变地址所用的数字时,会一直被改变。
5.program main
implicit none
integer,parameter::num=5
real::angel(num)=(/30,45,35,50,40/)
real::speed(num)=(/25,20,21,27,22/)
real::distance(num)
integer::i
do i=1,num
call calculation_distance(angel(i),speed(i),distance(i))
write(*,*)distance(i)
end do
end program main
subroutine calculation_distance(angel,speed,distance)
implicit none
real::angel,speed,distance,rad
real,parameter::g=9.8
call angel_to_rad(angel,rad)
distance=speed*cos(rad)*(2.0*speed*sin(rad)/g)
return
end
subroutine angel_to_rad(angel,rad)
implicit none
real::angel,rad
rad=angel/180*3.1415926
return
end
6.program main
implicit none
real::a=1.0,b=2.0
real,external::add!声明这个是函数
write(*,*)add(a,b)
end program main
function add(a,b)!这部可以直接用real function add(a,b)来代替
implicit none
real::a,b
real::add
add=a+b
return
end
7.program main
implicit none
integer,parameter::num=5
real::angel(num)=(/30,45,35,50,40/)
real::speed(num)=(/25,20,21,27,22/)
real::distance(num)
real,external::calculation_distance
integer::i
do i=1,num
distance(i)=calculation_distance(speed(i),angel(i))
write(*,*)distance(i)
end do
end program main
real function calculation_distance(speed,angel)
real::speed,angel,rad
real,parameter::g=9.8
real,external::angel_to_rad
rad=angel_to_rad(angel)
calculation_distance=speed*cos(rad)*(2.0*speed*sin(rad)/g)
return
end
real function angel_to_rad(angel)
real angel
angel_to_rad=angel/180.0*3.1415926
return
end
8.program main
implicit none
integer::a=1,b=2
common/group1/ a
common/group2/b
call showgroup1
call showgroup2
end program main
subroutine showgroup1
implicit none
integer::num1
common/group1/num1
write(*,*)num1
return
end
subroutine showgroup2
implicit none
integer::num2
common/group2/num2
write(*,*)num2
return
end
9.传递函数的参数中,需要两个变量的类型一致,比如说
real::a
call add(a)
----------------------
subroutine add(a)
integer::a
这里的a就是新的量,是随机的
10.