彭石
(中山大學南方學院電氣與計算工程學院,廣州510900)
多媒體技術的發展使教學活動發生了顯著的變化,許多先進的教學設備和教學軟件系統紛紛走進了今天的課堂[1],教師的地位在發生著悄悄的變化,為了提高教學效率,針對不同的課程選擇合適的教學手段成為了教師要思考的問題。增強學生學習的積極性,活躍課堂的氣氛,將教學內容變抽象為具體、變難懂為易懂,可以取得簡明高效的教學效果。本文針對C 語言教學之中存在的具體問題,作了深入分析,提出了使用MATLAB 來輔助教學活動的方案[2],實踐表明,該方案可以解決上述問題。
C 語言和其它計算機語言相比,具有很多自己的特點。例如它有豐富的數據類型,有自己獨特的運算符,如++,--,有功能強大又很神秘的指針和編譯器;它還有許多和程式邏輯息息相關的操作是編譯器定義加上去的,使慣于循序思考的學生容易不知所措,總之C語言具有自己獨特的特性,對于沒有相關背景的初學者,難度很大[3]。
強大的繪圖功能是MATLAB 的特點之一,這是C語言不具備的。它提供了一系列的繪圖函數,即使是初學的用戶,只需要掌握一些基本參數就能得到所需圖形[4]。此外,MATLAB 可以采用不同的坐標系,如直角坐標、對數坐標、極坐標等,它包含了許多制作動畫和視頻常用的函數,用戶可以很方便的使用這些函數實現自己的目的而不必去思考具體的實現細節。
針對C 語言教學之中的種種問題,接下來本文將會結合具體案例進行仔細分析。
循環結構可以將重復書寫的代碼的變得簡單,用來描述重復執行某段過程的問題,這是程序設計中可以充分發揮計算機特長的程序結構,C 語言中主要包含四種循環,即goto 循環、while 循環、do while 循環和for 循環。
在MATLAB 中,最基本而且應用最為常見的繪圖函數為plot,利用它可以在二維平面上繪制出各種曲線。為了說明for 循環的作用,本例子用MATLAB 繪制了5 個不同顏色的同心圓,圖1 演示了使用for 循環繪制5 個同心圓的過程。


圖1 使用for循環繪制的同心圓
其中,x 和y 是單個圓進行40 次采樣的位置坐標數組,C 是設置顏色的數組,從圖形可以看出,使用MATLAB 可以方便的繪制出不同色彩的圖形方便學生理解,彌補了C 語言的不足。
函數遞歸是一種強大又復雜的編程技巧,它將大的問題分解為一組相似的小問題,每個小問題都有一個簡單解。遞歸函數是會直接調用自身的一種函數,一般來說,遞歸函數反復調用自身直到問題最終解決。
“漢諾塔”是程序設計中一個經典的遞歸問題,是一個著名的益智游戲,描述如下:塔上有A、B、C 三根柱子和直徑依次遞減的空心圓盤,開始時A 柱子上的所有圓盤都按從大到小的順序排列,通過每次移動一個圓盤到另一根柱子上,最終把所有圓盤移動到C 柱子上,過程中大的圓盤不能放在小圓盤上[5]。使用C 語言可以求出漢諾塔移動的過程,可是由于缺少繪圖API,無法將整個運行流程動態的展現出來,因此本文采用了MATLAB 語言來編程實現這個問題。
首先是MATLAB 寫的漢諾塔遞歸函數hanoi.m 文件,在這個函數里面引用了繪圖函數arr.m。

其次是繪圖函數文件arr.m,這個函數分別繪制了三個柱子上的圓盤放置情況,以及動態的變化過程,其中a,b,c 是三個存放盤子信息的數組,pause(2)是程序休眠;clf 代表清屏。


最后是程序啟動的運行代碼。


圖2 使用MATLAB制作的漢諾塔演示動畫
圖形動畫演示如圖2 所示,左邊是程序開始的截圖,右邊是程序運行結束的圖形,從圖形里可以看出,整個漢諾塔包含三根柱子,從左邊挪到右邊大概需要3分鐘,層數越多,程序運行需要的遞歸次數越多,因而時間也越久。動畫完整地展示了漢諾塔的運行流程,可以說MATLAB 讓復雜的數學問題變得清晰易懂。
動態規劃是求解決策過程最優化的數學方法,日常生活之中經常會碰到需要求解結果最優的問題,由于這類問題涉及到的技巧性,使用C 語言研究多階段決策過程的優化問題,在各類編程競賽和數學建模之中屢見不鮮[6]。最優化原理把多階過程轉化為一組簡單的單階段問題,利用各階段之間的關系,逐個求解,這就是動態規劃。
本文舉一個經典的動態規劃例子,下面有一組數字三角形,要求計算一條從頂部到底部的路徑,使得路徑上所經過的數字和最大,路徑的每個點都只能往相鄰的左下或右下走,求出這個最大路徑的和即可,不需要具體的路徑;三角形的行數介于1-100,各個點數字為0-99。

圖3
這里簡化程序的輸入輸出過程,直接使用給出的數據,構造一個模型可以適用于任意輸入數據組合,算法的思想是先求解最下一行的最大路徑值,接著逐行往上求解,使用MATLAB 編程如下所示:



圖4 動態規劃輸入輸出對比演示
用MATLAB 得到的結果如圖4 所示,使用MAT?LAB 繪制矩陣圖形,左邊是輸入的數據,右邊是求得的結果數組;計算得到最終結果g 值為30,各階的結果矩陣A2。左右對比可以很容易看出動態規劃的求解過程以及遞歸過程,因此使用MATLAB 可以將復雜的數學問題變得清晰易懂,它可以在C 語言的教學過程之中起到十分重要的輔助作用。
C 語言是一門抽象的程序設計語言,它作為開發語言被應用在不同的領域;它結構的復雜性和學習的獨特性質,注定了初學者會遇到這樣那樣的問題,即使是具有一定編程經驗的程序員,在遇到復雜的數學問題時候,往往也會一籌莫展。因此選擇一種具有完整的圖形界用戶面和方便的編程接口的語言作為輔助教學開發工具,具有十分重要的作用,可以大大簡化理解的難度和開發的復雜度,方便教學的順利開展,為了解決這個問題,本文研究了使用MATLAB 語言來解決C語言教學之中遇到的一些問題,并且對具體的案例提出了解決方案,分析表明MATLAB 在C 語言的學習開發過程之中,具有十分重要的輔助作用,是課堂教學的重要工具。