Fortran 程式設計 作業02

2021-10-21 15:36:58 字數 4276 閱讀 1038

題目要求

設計程式,輸入降水量t

tt,判斷該降水量是 12

1212

小時或 24

2424

小時時間段內的,再依據圖示降雨量,分類得出降水等級

題設分析

首先觀察題目,發現涉及到「判斷」類的字眼,於是初步確定使用選擇結構。

選擇結構可使用的程式結構如下:

if - endif 結構:

if (condition 01) then

statement block

end if

if - else - endif 結構:

if  (condition 01) then

statement block 01

else

statement block 02

end if

if - else if - endif 結構:

if (condition 01) then

statement block 01

else if (condition 02) then

statement block 02

else if (condition 03) then

statement block 03

......

else

statement block n

end if

if 結構:

if (condition 01) statement block
select case - case - end select結構:

select case (variable)

case (condition 01)

statement block 01

case (condition 02)

statement block 02

case (condition 03)

statement block 03

......

case defult

statement block n

end select

觀察題設,發現該問題需要進行兩次大的判斷:

① 判斷輸入資料為12小時或24小時;

② 判斷輸入資料落在何種降雨量區間內。

第乙個判斷,可以通過顯示「is the input data rainfall within 12 hours?」後交由使用者選擇的方式進行判斷。

即使用者輸入y/n來進行判斷輸入資料的種類,若輸入y,則進入第一類雨量判斷;若輸入n,則進行第二類雨量判斷。

可以將該段**進行如下的書寫:

character selc

print *,'is the input data rainfall within 12 hours?(y/n)'

read *,selc

if (selc.eq.y.or.selc.eq.y) then

call judgement_1

else if (selc.eq.n.or.selc.eq.n) then

call judgement_2

else

print *,'input error.'

end if

其中,judgement_1是接下來為了程式模組化而使用的第一類雨量判別的子程式,judgement_2是第二類雨量判別的子程式。

在這裡,我們使用call()語句進行子程式的呼叫。

接下來,書寫判斷雨量的兩類子程式:

首先書寫兩類子程式的公需部分,即變數定義和使用者輸入雨量部分:

real pre

print *,'please enter the precipitation rain fall.'

read *,pre

do while (pre.lt.0)

print *,'input error.'

read *,pre

end do

然後書寫第一類雨量判別的子程式:

subroutine judgement_1(p)

inplicit none

real p

print *,'該次降雨的型別為'

if (p.lt.5) then

print *,'小雨'

else if (p.lt.15)

print *,'中雨'

else if (p.lt.30)

print *,'大雨'

else if (p.lt.70)

print *,'暴雨'

else if (p.lt.140)

print *,'大暴雨'

else

print *,'特大暴雨'

end if

end subroutine judgement_1

類似我們可以書寫出第二類雨量判別的子程式(此處略過不談)

經過模組化編寫之後,我們可以初步完成我們的程式如下:

program as02

implicit none

character selc

real pre

print *,'is the input data rainfall within 12 hours?(y/n)'

read *,selc

do while (selc.ne."y".or.selc.ne."y".or.selc.ne."n".or.selc.ne."n")

print *,'input error.'

read *,selc

end do

if (selc.eq.「y」.or.selc.eq.「y") then

print *,'please enter 12 hours of precipitation rain fall.'

read *,pre

call judgement_1 (pre)

else

print *,'please enter 24 hours of precipitation rain fall.'

read *,pre

call judgement_2 (pre)

end if

end program as02

subroutine judgement_1 (p)

implicit none

real p

print *,'該次降雨的型別為:'

if (p.lt.5) then

print *,'小雨'

else if (p.lt.15)

print *,'中雨'

else if (p.lt.30)

print *,'大雨'

else if (p.lt.70)

print *,'暴雨'

else if (p.lt.140)

print *,'大暴雨'

else

print *,'特大暴雨'

end if

end subroutine judgement_1

subroutine judgement_2 (p)

implicit none

real p

print *,'該次降雨的型別為:'

if (p.lt.10) then

print *,'小雨'

else if (p.lt.25)

print *,'中雨'

else if (p.lt.50)

print *,'大雨'

else if (p.lt.100)

print *,'暴雨'

else if (p.lt.250)

print *,'大暴雨'

else

print *,'特大暴雨'

end if

end subroutine judgement_2

上述程式即為題目要求的輸入資料後判斷降水型別的程式**。

下面呈現程式設計的執行後的結果:

[1] fortran學習筆記6(函式、子程式)

預備作業02

確實,到現在為止我沒有太多特長,對樂器一竅不通,最關鍵還是唱歌走音,我也是沒啥說的了,藍瘦香菇,但要說有什麼技能比90 以上的人要好,我可以很自信的說 儘管我的身體素質不強,各種運動並不特別擅長,但我特別熱愛籃球。爆發力,速度等雖然不行,但我認為我有出色的身體協調能力,我可以很協調的做一些動作,可以...

預備作業02

1.技能學習的經驗 在長達12年的學習生涯裡,與各個科目打交道一直是我的主要任務,也佔據了我絕大部分的時間。然而,在學習之外,有很多很多的豐富多彩的事一直在吸引我的目光,我也一直沉浸其中。從小學開始,我就一直學習國畫,我喜歡在國畫含蓄卻又灑脫的風格,靈動而又輕盈的筆法,讓人大為讚嘆。在國畫中,我體會...

預備作業02

你有什麼技能比大多人 超過90 以上 更好?反觀自身,唯一值得自豪的可能就是在 方面有點涉獵,從小學三年級開始,便開始了自己的二胡學習,粗略計算也有六年了。六年間,經歷過坎坷挫折從開始連一級考試都無法通過到最終拿到八級證書。不斷地犯錯,不斷地糾正,不斷的失敗,不斷地重頭再來,無數次想過放棄,對自己說...