Fortran experiment_4 实验报告

2017-05-04  本文已影响0人  tobbby

3.1 ex0401.f90

一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少?

代码:

program ex0401

implicit none

integer :: x
integer :: y,z

do x = -100, 10000
    y = sqrt(x+100.0)
    z = sqrt(x+268.0) 
    if (y*y==(x+100).and.z*z==(x+268))  then
        write(*,*) x
    end if
end do
end

结果:

分析:

Ex0401中要注意的有,sqrt中的运算数应为浮点数,而定义的x是integer类型,所以把后面的另一个加数写成了real类型,计算时会自动把(x+100.0)的结果变为real进行开方计算;另外就是sqrt()输出的结果也是浮点型的,由于不能完全精确所以到一定的值之后会四舍五入,从而得不到想要的结果,所以要强制转化为整型变量之后再进行判断。

3.2 ex0402.f90

编程输出斐波那契数列。

代码:

program ex0402

implicit none

integer :: i = 1
integer :: x1 = 1
integer :: x2 = 1
integer :: res = 0
integer :: n

read(*,*) n

do i=1, n
    if ( i==1 .or. i==2) then
        write(*,*) x1
    else
        res = x2 + x1
        write(*,*) res
        x1 = x2
        x2 = res
    end if
end do
end

结果:

分析:

Ex0402中要注意对循环次数的控制和赋值的先后次序,不要弄错了。

3.3 ex0403.f90

编程输出九九乘法表。

代码:

program ex0403

impicit none
integer :: i,j

do i=1,9
    do j=1,i
    write(*,"(i2,a1,i1,a1,i2)",advance='no'),i,"x",j,"=",i*j
    end do
    write(*,*)
end do
end

结果:

分析:

Ex0403的重点在于两个循环的嵌套和输出的格式的问题,在里面一个循环中是不换行的,Fortran中的控制语句是‘advance=yes/no’,不写这句话时默认为yes,即要换行,另外,在格式后面加一个$符号也能达到相同的效果。出了第一个循环之后由于是要换行的,所以在第一个循环和第二个循环之间加一个什么也不输出的write,即会换到下一行,再重新进循环。

上一篇 下一篇

猜你喜欢

热点阅读