水文與水資源工程專業以高等數學、數理統計和水力學等為基礎理論,運用水文學和有關學科的理論和方法,研究各種實際水文問題的解決途徑和方法,為水利、電力、交通、城市發展和環境保護等工程建設提供水文計算成果;為農業、林業和國土整治規劃提供水文依據。繁復的數學計算是該類課程的特點。以往的教學只偏重理論和方法的講述,而在計算內容上由于涉及繁雜的數據處理和大量的計算,往往是被忽視的環節。在掌握傳統手算方法和步驟的基礎上,如何將計算機編程技術引入本科教學中,是一項新的探索。本文以“水庫運行調度”課程為例,探索了編程計算方法在教學中的實現過程。
1 選定編程語言
由于水文計算主要是通過程序來實現,而對界面設計幾乎沒有要求,因此,這里選用目前廣泛應用的結構化語言C來進行編程。當然,根據課程的需要,也可以選用其他編程語言,如Fortran、Matlab、Basic等等。
2 對課程教學的內容進行整編和提煉

在水文與水資源工程專業的專業課中,有許多分析計算的過程,如洪水演算、設計枯水年的選擇、調度圖的繪制等等,但并不是所有的內容都適合于編程,有些內容可能用Excel等工具更容易實現。因此,需要對教學的具體內容進行提煉,整理出適合編程的題目。在“水庫運行調度”這門課程中,制定了兩個編程題目:一個是“年調節水庫上、下基本調度線的繪制”;另一個是“應用動態規劃來求解年調節水庫的優化調度線”。
3 對程序內容進行分解
由于機時有限,而學生在編程方面的能力又各不相同,多數學生對專項課題的程序實現沒有經驗,要在相對較少的時間內讓大多數學生完成作業,有一定難度。因此,需要對大型程序進行分解,將其分成若干容易實現的程序塊。以“年調節水庫上、下基本調度線的繪制”為例,分解成以下幾個程序塊。
3.1 求單一時段內的初水位
這是一個基本程序塊,要求學生在已知時段末水位、該時段保證出力的條件下,推求時段初水位,其程序框圖如圖1所示。由于時段初水位是通過試算得來,因此需要一個無最高循環次數限定的循環語句來實現,這里選擇C語言中的do-while循環語句。通過該階段的實踐,可以使學生熟悉C語言程序實現的基本過程,并對程序調試有基本的認識。
3.2 求調度期內各時段的初水位
在這個階段,把單一時段初水位的計算擴展到整個調度期,看似僅僅增加了一個循環過程,但其中涉及到前后時段間參數的銜接問題,以及數組的定義及使用等概念,能進一步提高學生對程序的理解和調試能力。
4 插值函數的調用
在前面的程序中,為了簡化編程,“水位-庫容”、“下游水位-流量”等關系曲線均沒有用插值函數,而使用了擬合曲線。為了進一步訓練學生的編程能力,可以在這一階段將擬合曲線替換成插值函數,使學生對子程序的調用、指針的使用等方面的知識有更深入的理解。
5 結果輸出
將計算結果打印到屏幕,或進一步輸出到文件,從而使學生掌握文件讀寫的操作。有條件的話還可以將結果以圖形的形式進行輸出,但在C語言中這樣做有一定難度,一般是輸出數據,再將其拷貝到其他繪圖工具中進行繪圖。
以上為編程實踐的基本過程,在實際教學過程中,根據學生的具體情況,教師可以進行靈活處理:比如給出程序的主體結構,由學生完成關鍵語句的填寫,并獨立完成程序的調試,或輸出幾個中間變量以跟蹤計算過程,還可以要求學生根據具體問題對程序進行局部修改,等等。這些練習的目的都是為了讓學生更好地掌握水文模型的結構、流程和運行結果。另外,可以設計一些具有啟發性的培養學生綜合能力的作業,如“用動態規劃求解最優調度線”。這類作業的特點是物理過程相對簡單,計算流程明晰,計算結果方便驗證,通過學生的獨立思考和反復試驗修改,能夠完成正確的程序設計。此外,為了防止學生中的抄襲現象,可以給每個學生設定不同的參數和設計典型年,并要求每個學生在實驗報告中必須對編程過程和結果進行分析說明。
6 結語
本文以“水庫運行調度”中“上、下基本調度線的繪制”的程序實現為例,分析了在水文與水資源工程專業課程中訓練學生編程能力的基本過程。實踐表明,這不僅使學生牢固掌握了專業課程的基本原理和計算方法,還讓學生掌握了一項實用性廣泛的編程技能。通過編程訓練,學生對該課程的學習興趣也有較大提高,編程能力有了顯著增強。
參考文獻
[1]李鴻雁.編程訓練在水文與水資源工程專業教學中的探索[J].吉林教育,2011(5):14.