Fortran基础笔记1

1.program main 
    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 main 
    implicit 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

第七章:数组答案

1.program main 
    implicit none
    integer::i
    integer::a(10)=(/(i,i=2,20,2)/)
    write(*,*)a
    end program main
2.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

函数

1.

格式:

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.


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值