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