題目要求
設計程式,輸入降水量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 以上 更好?反觀自身,唯一值得自豪的可能就是在 方面有點涉獵,從小學三年級開始,便開始了自己的二胡學習,粗略計算也有六年了。六年間,經歷過坎坷挫折從開始連一級考試都無法通過到最終拿到八級證書。不斷地犯錯,不斷地糾正,不斷的失敗,不斷地重頭再來,無數次想過放棄,對自己說...