Fortran experiment_4 实验报告

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,即会换到下一行,再重新进循环。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,523评论 0 17
  • 9.3 星期日 晴(142) 今天再次有幸听了武校长的:做智慧父母---武际金校长家庭教育报告会。武校...
    王界程阅读 357评论 0 0
  • 习惯一个人走了
    穆布布阅读 279评论 0 1