3.1 ex0401.f90
一個整數(shù)湿痢,它加上100和加上268后都是一個完全平方數(shù)慕爬,請問該數(shù)是多少膀斋?
代碼:
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
結(jié)果:
分析:
Ex0401中要注意的有获黔,sqrt中的運算數(shù)應(yīng)為浮點數(shù),而定義的x是integer類型在验,所以把后面的另一個加數(shù)寫成了real類型玷氏,計算時會自動把(x+100.0)的結(jié)果變?yōu)閞eal進行開方計算;另外就是sqrt()輸出的結(jié)果也是浮點型的腋舌,由于不能完全精確所以到一定的值之后會四舍五入盏触,從而得不到想要的結(jié)果,所以要強制轉(zhuǎn)化為整型變量之后再進行判斷侦厚。
3.2 ex0402.f90
編程輸出斐波那契數(shù)列耻陕。
代碼:
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
結(jié)果:
分析:
Ex0402中要注意對循環(huán)次數(shù)的控制和賦值的先后次序,不要弄錯了刨沦。
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
結(jié)果:
分析:
Ex0403的重點在于兩個循環(huán)的嵌套和輸出的格式的問題,在里面一個循環(huán)中是不換行的想诅,F(xiàn)ortran中的控制語句是‘a(chǎn)dvance=yes/no’召庞,不寫這句話時默認為yes,即要換行来破,另外篮灼,在格式后面加一個$符號也能達到相同的效果。出了第一個循環(huán)之后由于是要換行的徘禁,所以在第一個循環(huán)和第二個循環(huán)之間加一個什么也不輸出的write诅诱,即會換到下一行,再重新進循環(huán)送朱。