前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的程序設計主題范文,僅供參考,歡迎閱讀并收藏。
(電子科技大學 計算機科學與工程學院,四川 成都 611731)
摘要:針對程序設計課程存在的理論與編程實踐學時安排矛盾以及實驗教學中師生配比不夠、實驗輔導不足等問題,提出加強預習干預引導、實戰演練、課堂教師輔導和實驗指導以及增加學生分組互助學習、學生討論、成果演示等手段,結合目前國內外取得良好教學效果的翻轉課堂教學法、微課視頻資源實現翻轉教學,并擬在小班試點改進后推廣。
關鍵詞 :程序設計課程;翻轉課堂;微課視頻;小班教學
第一作者簡介:戴波,女,講師,研究方向為并行算法與圖像處理,daibo@uestc.edu.cn。
0 引言
為了全面貫徹落實 《教育部關于全面提高高等教育質量的若干意見》 (教高[2012]4 號)精神,不斷深化本科人才培養模式改革,構建研究型大學本科人才培養新體系,培養高素質拔尖創新人才,《電子科技大學本科人才培養方案修訂指導意見》以通識課程、學科基礎課程、學科拓展課程、專業核心課程、實踐類核心課程、個性化課程6個課程模塊的構建為核心,推動課程的整合和優化,搭建個性化、多元化的人才培養平臺,促進學生全面、個性發展,其理工類課程模塊與學時要求如圖1所示。
基于學校的培養理念,計算機科學與工程學院將培養目標定位在培養掌握計算機基本理論和基本知識,接受從事研究與應用計算機的基本訓練,具有研究和開發計算機軟、硬件基本能力的高級人才。程序設計課程是計算機專業的核心基礎,涉及程序設計語言(C語言)、數據結構、算法設計與分析、面向對象語言(C++/C#/Java)、設計模式和軟件工程等多門課程。我們分析當前教學中存在的如課程分割零碎、課程之間連貫性差、不同課程內容重復較多、對后續課程支撐力度不大、教學手段落后與師資隊伍建設不足等問題,在課程、實驗和團隊建設等方面做了一系列研究探索,如采用遞增式的項目驅動教學分級培訓學生程序設計技能,組建程序設計基礎團隊,重新設計與整合關聯課程,采用自動化批改程序軟件,建立題庫與項目庫等方案,并在小班連續2年進行試點,取得良好效果,2014年開始在全年級推廣[1]。
1 推廣后的程序設計課程現狀與調查分析
1.1 推廣后的程序設計課程現狀
小班試點在舊有培養方案的基礎上進行,C語言和C++課程內容有整合,但仍然與其他班級一樣分開教學和參加統一的期末考試,便于與其他班級對比教學效果。2014年,我們基于新的培養方案在全年級進行合并后的程序設計語言教學,同時面臨如下現狀。
(1)內容多,時間緊,以前的兩門課程合并成為一門課程之后,課時數量是以前一門課程的課時數量,而不是兩門課程課時數量的總和。
(2)導論課沒有打下基礎,如對于計算機硬件及工作流程的初步認識、內存管理方式的理解、鼠標鍵盤的熟悉、操作系統和辦公軟件的熟悉與使用等。
(3)課程合并后,兩門課程的教師總數增加,班級人數由120人以上/班減少為70人/班,達不到學校120人/班配置助教的條件,沒有助教,作業批改量大,上機輔導忙不過來,上機考試監考教師人數不夠。實踐證明,每次實驗課教師能夠輔導到的學生人數不超過10人。
1.2 推廣后的程序設計課程調查
課程結束后,7個班的7名教師和480名學生分別發放調查問卷,其中回收的有效反饋調查表為教師7份,學生186份。
1) 教師調查反饋。
(1)合并后教學時間緊,學生掌握所有內容有難度,存在部分學生學習積極性不高,如上課玩手機和到課率不高等情況。
(2)每班上機相關練習題、實驗、綜合實驗均超過20題,有的班級達到50道題以上。上機題目兼具應用性和趣味性。
(3)導師輔導的上機訓練題量大。
(4)基礎類型的實驗和練習題完成情況良好,綜合性的實驗和練習題只有部分學生能夠完成。
2)學生調查反饋。
(1)有編程基礎的學生在高中階段學習過的編程語言種類有8種,66%的學生學習過C/C++,普遍表現出對目前教學狀況非常滿意,在教師指導下比高中學習得更深入,能夠學習到很多原理性的東西;同時也表示希望能夠給予更多的課后學習指導,提供工程訓練機會。有編程基礎的部分學生仍然感覺上課速度快。
(2)沒有編程基礎的學生認為目前教學難度合適的達73%, 較難/難的達22%,簡單的達5%;普遍希望教師講解得更細致,課堂上能夠演示編程過程,再多增加上機輔導、上機作業和練習題,能夠有項目實踐機會。
1.3 推廣后的期末考試情況與教師試卷分析總結
推廣后的期末考試分數對比見表1。
表1的平均比例表明不及格率占比最高,接近1/3,90分以上占比最低,不到10%;同時表明不同班級差別比較大,教師的教學經驗對于學習效果很重要,如教師1有多年C語言和C++語言教學經驗,其余的教師只從事C語言或者C++語言教學,因此雖然使用同樣的教材,但是由于教學經驗、教學手段、學生不同,使得學生掌握情況不同。教師6強調大學階段的學習自覺性,對學生管束比較少,教學方式比較靈活,最終考試效果最差,不及格率達到44.8%,說明學生學習自覺性差,教師的恰當約束對于當前環境下的學生學習非常有必要。
7位教師總結學生的失分點基本一致,主要集中在填空題的細節問題、讀程序、寫程序和判斷題,恰好是編程訓練沒有過關的體現,這也和各位教師根據考試情況的反思總結一致。教師都反映需要加強編程練習、上機輔導、課上程序演示、程序設計思維訓練,但又都覺得編程練習已經很多,上機量也很大,但訓練效果卻不明顯。以冒泡排序為例,教師上課講,中期考核,期末復習,但是該內容在期末考試中仍然是大的失分點且全年級都呈現這樣的現象,這說明在學習過程中有的學生不認真做,有的學生做了但沒有真正理解和掌握算法原理、編程基礎、調試技術。
教師反思其中一個大的矛盾是理論教學與實踐教學的學時需求矛盾:①不講或者簡單講解基礎理論及細節,學生只能依葫蘆畫瓢而無法舉一反三,理論基礎不穩固則技術不深入,有程序設計基礎的學生則不能進行深入學習;②詳細深入講解需要花費大量時間;③無編程基礎的學生對理論學習普遍不感興趣且由于缺乏經驗,對教師講解的理論理解不夠深入,教師在課堂上沒有時間進行反復講解,而學生不得不在應用過程中根據需要反復學習這些基礎知識。
為解決這些矛盾,各個教師根據教學經驗各有取舍,其中教師5與教師7是以實踐為主與理論講授為主比較突出的2個代表。教師5采用以上機實驗為主、理論教授為輔的教學方式,設計上機相關題目超過50題且上機演示編程過程,編程輔導時間多,同時另外找了優秀學生一起對學生進行上機輔導,但期末筆試90分以上的占比9.2%,不及格率為27.7%。教師7以理論講授為主,對于上機實驗輔導嚴格按照培養方案的16學時,期末筆試考試成績表明學生上機實驗過少,理論掌握并不扎實,90分以上的占比為0.00%,不及格率仍然達到23.1%。以上情況說明“單腳大跨步”的教學方式效果欠佳,但兩者結合教學又存在學時數不夠的現實問題,此外還存在如下問題:學生認為最難的不是理論學習,而是將理論應用于實際;不少學生需要督促,自覺性差,而教師只有一人,怎么辦?
2 改進措施
針對程序設計課程在全年級推廣后出現的問題,程序設計教學團隊教師積極思考、討論并試圖尋找能夠解決現存問題的教學方法。戴爾的經驗之塔[2]說明單純的課堂教學平均只能夠達到20%的效果,而具有主動學習的參與、討論、演講等教學方法可以達到50%~90%的教學效果。既要在有限的時間內傳授基礎理論,深入講解原理和運行機制且可以在實踐過程中能夠隨時查閱學習基礎理論,又要在教師人數有限的條件下給予足夠的上機實驗演示和輔導,教師就需要將一些以記憶和理解為主的知識點放到課前讓學生預習,課堂上以項目驅動的方式引導學生加強編程練習并給予輔導。此外,對于一些需要深入分析的問題則可在學生預習的情況下,在課堂上以分組或者集體討論的方式解決,但存在部分學生不預習而等待教師上課講解或者學生預習目的性不強、自學能力不夠等問題。教學團隊教師經過調研發現,最近幾年在國內外逐步發展的翻轉課堂教學[3]恰好滿足有教學理論研究支撐和國內外優秀教學經驗借鑒等條件,具體方案如下。
(1)將理論知識的講解以微課的形式錄制成視頻,達到學生在教師引導條件下自學的效果,同時在學生完成預習作業后,檢驗其學習效果以便于學生根據自身情況決定是否還需要反復看視頻鞏固學習;教師也可以通過學生完成預習作業的情況制訂課堂活動安排,協助學生更好地掌握知識。
(2)教師將分析問題、設計思路、流程圖繪制、編程、編譯鏈接、調試等演示案例的完整過程錄制成視頻,讓學生可以反復觀看臨摹,解決初期沒有教師在身邊編程入門難的問題,達到課堂演示編程的效果,避免課堂上編程占用時間過多、編程代碼文字過小后排學生看不清楚等問題。
(3)在課堂上指導學生進行編程練習,解決學生視頻學習過程中的疑問、討論解決實際項目問題的方法及方案的選擇。
(4)鼓勵優秀學生幫助其他同學,對于幫助其他同學的學生給予平時成績加分,解決缺乏編程輔導的問題。
(5)在現有培養方案條件下擬用部分班級試點進行翻轉教學,部分班級不采用,然后進行效果對比和進一步分析與改進,使其更適合當前的本科教學。
3 結語
基于“全面發展的創新教育”人才培養理念培養高素質拔尖創新人才,除了構建合理的人才培養體系外,還需改進對學生培養更直觀有效的課程教學。翻轉課堂教學以實踐理論“戴爾的經驗之塔”和布魯姆認知教育目標分類模型理論[4]為基礎,強調學生在教師的指導下學習,學生是教育的主體,教師的教是為了不教,自主學習具有無可替代的價值[5]。翻轉課堂教學法以學生為主體進行研究,能夠在有限的教學時間內達到傳授知識、教授技能、培養自學能力的目的,可操作性強,是解決現有程序設計課程改革問題的有效方法,但效果和存在的問題還有待多次試點改進及全面推廣后具體分析及解決。
參考文獻:
[1] 戴波, 周世杰, 曹晟, 等.“程序設計”課程教學模式的探索[J]. 實驗科學與技術, 2012(6): 309-311.
[2] 焦麗珍. 神奇的“經驗之塔”:“視聽教學法之理論”[J]. 現代教育技術, 2012, 22(6): 126.
[3] 愛課程網. 翻轉課堂教學法[EB/OL]. [2014-10-16]. http://icourse163.org/course/pku-21016#/info.
[4] Anderson L W, Kmthwohl D R. A Taxonomy for learning, teaching, and assessing: a revision of bloom’s taxonomy of educational objectives[M]. Complete Ed. London:Pearson, 2000: 38-62.
前幾年,OpenGL雖然是開放式的標準,但是只能在具有UNIX操作系統的各種昂貴的工作站之間通用;盡管工作站上的OpenGL性能優越、編程方便、生成圖形精真,但是只有少數人能體會其中樂趣,而令大多數PC機用戶望塵莫及。隨著計算機技術的發展,工作站與PC機的性能日趨接近。Microsoft公司首先將OpenGL圖形庫鏈接到Windows NT中,目前又將OpenGL動態庫掛到最新Windows 95上,這樣,廣大PC機用戶就可充分享受OpenGL的樂趣了。更令人高興的是,目前國內外出現了專門對OpenGL進行硬件加速的三維圖形加速卡。這樣,普通用戶只
要擁有一臺Pentium 90以上、16MB RAM、520MB以上硬盤容量的PC機以及一臺43cm以上的大屏幕監視器和一塊OpenGL三維圖形加速卡組成的系統,就能與圖形工作站相媲美,但價格卻便宜數十倍。
本文作者一直從事計算機圖形應用開發工作。原來是在SGI工作站上利用OpenGL開發圖形程序,后來又首先在國內第一塊三維圖形加速卡AGC-3D上基于Windows NT的Visual C++2.0環境下繼續進行開發。在開發過程中,同一OpenGL程序幾乎不用修改就能在兩個平臺間來回移植,效果甚好。
一、OpenGL特點及功能
OpenGL是一個開放的三維圖形軟件包,它獨立于窗口系統和操作系統,能十分方便地在各平臺間移植。
OpenGL具有七大功能。
(1)建模 OpenGL圖形庫除了提供基本的點、線、多邊形的繪制函數外,還提供了復雜的三維物體(如球、錐、多面體、茶壺等)以及復雜曲線和曲面(如Bezier、Nurbs等曲線或曲面)繪制函數。
(2)變換 OpenGL圖形庫的變換包括基本變換和投影變換。基本變換有平移、旋轉、變比和鏡像四種變換,投影變換有平行投影(又稱正射投影)和透視投影兩種變換。
(3)顏色模式設置 OpenGL顏色模式有兩種,即RGBA模式和顏色索引(Color Index)。
(4)光照和材質設置 OpenGL光有輻射光(Emitted Light)、環境光(AmbientLight)、漫反射光(Diffuse Light)和鏡面光(Specular Light)。材質是用光反射率來表示。場景(Scene)中物體最終反映到人眼的顏色是光的紅綠藍分量與材質紅綠藍分量的反射率相乘后形成的顏色。
(5)紋理映射(Texure Mapping) 利用OpenGL紋理映射功能可以十分逼真地表達物體表面細節。
(6)位圖顯示和圖像增強 圖像功能除了基本的拷貝和像素讀寫外,還提供了融合(Blending)、反走樣(Antialiasing)和霧(fog)的特殊圖像效果處理。
(7)雙緩存(Double Buffering)動畫 雙緩存即前臺緩存和后臺緩存,簡而言之,后臺緩存計算場景、生成畫面,前臺緩存顯示后臺緩存已畫好的畫面。
此外,利用OpenGL還能實現深度暗示(Depth Cue)、運動模糊(Motion Blur)等特殊效果。
二、OpenGL for Windows NT圖形庫
OpenGL圖形庫一共有100多個函數。其中核心函數有115個,它們是最基本的函數,其前綴是gl;OpenGL實用庫(OpenGL utility library,GLU)的函數功能更高一些,如繪制復雜的曲線曲面、高級坐標變換、多邊形分割等,共有43個,前綴為glu; OpenGL輔助庫(OpenGL auxiliary library,GLAUX)的函數是一些特殊的函數,包括簡單的窗口管理、輸入事件處理、某些復雜三維物體繪制等函數,共有31個,前綴為aux。
此外,還有六個WGL函數非常重要,專用于OpenGL和Windows NT窗口系統的連接,其前綴為wgl,主要用于創建和選擇圖形操作描述表(rendering contexts)以及在窗口內任一位置顯示字符位圖。這些功能是Windows NT對OpenGL的唯一補充,見表1所示。
表1 管理圖形操作描述表的WGL函數
另外,還有五個Win32函數用來處理像素格式(pixel formats)和雙緩存。由于它們是對Win32系統的擴展,因此不能應用在其他OpenGL平臺上,見表2所示。
表2 管理像素格式Win32函數
三、OpenGL for Windows NT程序設計
OpenGL for Windows NT的程序設計與OpenGL for UNIX的程序設計有一點小區別,關鍵就在于如何將OpenGL與不同操作系統下的窗口系統連接起來。如果調用OpenGL輔助庫窗口管理函數,則不用考慮這些問題。下面將主要介紹在Windows NT下OpenGL的程序設計關鍵。
1.圖形操作描述表
在Windows NT下窗口程序必須首先處理設備描述表(Device Contexts,DC),DC包含許多如何在窗口上顯示圖形的信息,即指定畫筆和刷子的顏色,設置繪圖模式、調色板、映射模式以及其他圖形屬性。同樣,OpenGL for Windows NT的程序也必須使用DC,這與其他Windows程序類似。但是,OpenGL for Windows NT必須處理特殊的DC圖形操作描述表,這是DC中專為OpenGL使用的一種。一個OpenGL應用圖形操作描述表內有OpenGL與Windows NT窗口系統相關的各種信息。一個OpenGL應用首先必須創建一個圖形操作描述表,然后再啟動它,最后在所定義的窗口內按常規方式調用OpenGL函數繪制圖形。
一個圖形操作描述表不同于其他DC,它們調用每個GDI函數都需要一個句柄,而圖形操作描述表方式下只需一個句柄就可任意調用OpenGL函數。也就是說,只要當前啟用了某個圖形操作描述表,那么在未刪除圖形操作描述表之前可以調用任何OpenGL函數,進行各種操作。
2.像素格式
在創建一個圖形操作描述表之前,首先必須設置像素格式。像素格式含有設備繪圖界面的屬性,這些屬性包括繪圖界面是用RGBA模式還是顏色表模式,像系緩存是用單緩存還是雙緩存,以及顏色位數、深度緩存和模板緩存所用的位數,還有其他一些屬性信息。
(1)像素格式結構
每個OpenGL顯示設備都支持一種指定的像素格式號。一般用一個名為PIXELFORMATDESCRIPTOR的結構來表示某個特殊的像素格式,這個結構包含26個屬性信息。Win32定義的PIXELFORMATDESCRIPTOR如下所示:
typedef struct tagPIXELFORMATDESCRIPTOR
{
WORD nSize;
WORD nVersion;
DWORD dwFlags;
BYTE iPixelType;
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE ilayerType;
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
}
PIXELFORMATDESCRIPTOR,
*PPIXELFORMATDESCRIPTOR,
FAR *LPPIXELFORMATDESCRIPTOR;
(2)初始化PIXELFORMATDESCRIPTOR結構
PIXELFORMATDESCRIPTOR中每個變量值的具體含義和設置可以參
考有關資料,下面舉出一個PIXELFORMATDESCRIPTOR初始化例子來簡要
說明相關變量的意義。定義PIXELFORMATDESCRIPTOR結構的pfd如下:
PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR),//結構尺寸
l, //結構版本
PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//特性標志
PFD-TYPE-RGBA,//RGBA模式
24,//24位顏色
0,0,0,0,0,0,//不涉及這些屬性
0,0,0,0,0,0,0,//沒有alpha緩存和累積緩存
32,//32位深度緩存
0,0,//沒有模板緩存和輔助緩存
PFD-MAIN-PLANE,//主層類型
0,//保留結構數
0,0,0,//不支持結構數
};
在這個結構里,前兩個變量的含義十分明顯。第三個變量dwFlags的值是PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,表明應用程序使用OpenGL函數來繪制窗口,第四個表明當前采用RGBA顏色模式,第五個采用24位真彩色,即1.67千萬種顏色,如果是256色系統則自動實現顏色抖動;因為沒有使用alpha緩存和累積緩存,所以從變量cAlphaBits到cAccumAlphaBits都設置為0;深度緩存設置為32位,這個緩存能解決三維場景的消隱問題;變量cAuxBuffers設置為0,在Windows NT下不支持輔助緩存;Windows NT下針對OpenGL變量ilayerType只能設置為PFD-MAIN-PLANE,但其他平臺也許支持PFD-OVERLAY-PLANE或PFD-UNDERLA
Y-PLANE;接下來bReserved變量只能設為0,而最后三個變量Windows NT都不支持,故全設置成0。
(3)設置像素格式
當初始化PIXELFORMATDESCRIPTOR結構后,就要設置像素格式。下面幾段從VC++ 2.0的MFC程序中摘出的代碼就是設置像素格式的方式。代碼如下:
CClientDC clientDC(this);
int pixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);
BOOL result=SetPixelFormat(clientDC.m-hDC,pixelFormat,&p
fd);
第一行語句說明得到一個應用窗口客戶區的設置描述表。
第二行調用ChoosePixelFormat()選擇一個像素格式,并將像素格式索引號返回給pixelFormat變量;函數中第一個參數是選擇像素格式的設置描述表的句柄,第二個參數是PIXELFORMATDESCRIPTOR結構的地址。如果調用失敗則返回0;否則返回像素格式索引號。
第三行調用SetPixelFormat()設置像素格式,三個參數分別是設備描述表的句柄、像素格式索引號和PIXELFORMATDESCRIPTOR結構的地址。如果調用成功則返回TURE;否則返回FALSE。
3.創建圖形操作描述表
正如前所述,必須創建圖形操作描述表并啟用它后,才能調用OpenGL函數在窗口內進行各種圖形操作。一般說來,利用MFC中增補的管理圖形操作描述表方法來編程比較方便。下面舉一例:
int CopenglView:: OnCreate(LPCREATESTRUCT lpCreateStruct
)
{
if(CView::OnCreate(lpCreateStruct)==-1)return -1;
// TODO: Add your specialized creation code here
PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTIOR),
//structure sizel,
//structure version number
PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//property flags
PFD-TYPE-RGBA, //RGBA mode
24, //24bit color
0,0,0,0,0,0, //not concerned with these
0,0,0,0,0,0,0, //no alpha or accum buffer
32, // 32bit depth buffer
0,0, //no stencil or aux buffer
PFD-MAIN-PLANE, //main layer type
0, //reserved
0,0,0 //unsupported
};
CClientDC clientDC(this);
int pixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);
BOOL result=SetPixelFormat(clientDC.m-hDC,pixelFormat,&p
fd);
m-hRC=wglCreateContext(clientDC.m-hRC);
return 0;
}
void COpenglView::onDraw(CDC *pDC)
{
COpenglDoc* pDoc=GetDocument();
ASSERT-VAILD(pDoc);
//TODO: add draw code for native data here
wglMakeCurrent(pDC->m-hDC,m-hDC);
DrawMyOpenGL();
wglMakeCurrent(pDC->m-hDC,NULL);
}
void COpenglView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
wglDeleteContext(m-hRC);
}
在程序中,響應WM-CREATE消息的函數OnCreate()僅僅只創建一個臨時的DC,當函數返回時,它自動刪除。因此,在這里不可能啟用圖形操作描述表。當應用程序的窗口內容得到更新后,MFC就調用OnDraw()函數,在此啟用圖形操作描述表wglMakeCurrent()有效。然后,再調用自己用OpenGL寫的繪圖函數DrawMyOpenGL(),則程序就可進行任意的OpenGL圖形操作了。當繪圖結束后,再調用一次wglMakeCurrent(),但第二個參數設為NULL,意思是啟用圖形操作描述表無效,關閉圖形操作描述表。最后,當應用程序結束時,MFC就調用OnDestroy()函數來響應
關鍵詞:循環程序;循環控制;流程圖;算法;程序語句;VF QBASIC
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)08-1906-02
On Recycling Program Design
LIU Li-ming
(Zunyi City, Guizhou Province Vocational High Schools, Zunyi 563000, China)
Abstract: Loop structure is a structured program design, one of the basic structure of the three. but it's also the basis for program design. However, for the beginners, Loop structure is difficult to master, for it's different from the daily habit of thinking of the human mind. In this paper, VF, and QBASIC program design cycle described examples of the cycle of programming languages have in common. Therefore, in the course of study must first correctly understand the language loop statement, and then to prepare specific algorithm, find out the loop control the conditions under which to draw flowcharts, programming statement, on the machine to debug.
Key words: circulation procedures; loop control; flow algorithm; algorithm; program statements; VF QBASIC
順序、分支、循環是結構化程序設計的三種基本結構,所以在高級語言程序設計課程中,掌握這三種結構是學好程序設計的基礎。而循環結構是這三者中最復雜的一種結構,幾乎所有的程序都離不開循環結構,但是對于那些沒有經驗的初學者來說,難度卻不小。特別是遇到更加復雜的多重循環程序,以及分支程序嵌套在一起就更加難以理解。因此這也是計算機等級考試高級語言程序設計的一大難點。
1 循環程序的基本原理
程序是能夠完成一定任務的命令的有序集合。存放程序的文件稱為程序文件。例如:我們要讓計算機屏幕顯示一句話:“I like computer!”。以QBASIC高級語言為例,編寫相應的程序語句如下:
PRINT “I like computer!”
然后執行它,就能得到相應的屏幕顯示。然而在現實生活中往往會遇到一些按規律重復執行的問題,例如:要在計算機屏幕上顯示100行:“I like computer!”,采用循環結構設計將使程序簡練,減少程序的行數,從而節省運行時占用的內存,因此引入并運用了循環程序設計。通過相應的循環程序設計語句讓PRINT “I like computer!”循環執行100次就行了,編寫程序語句如下:
10 FOR I=1 TO 100 SETP 1
20 PRINT “I like computer!”
30 NEXT I
程序中采用了循環語句格式:FOR= TO STEP
NEXT
功能:這個語句指定循環變量取一系列數值,并且對循環變量的每一個值把循環體執行一次。初值表達式、終值表達式和步長值表達式都是算術表達式。步長值可以是正數(叫做遞增循環),也可以是負數(叫做遞減循環)。
結合圖1分析,該循環程序的控制過程是這樣的,令I的取值范圍為1到100,先將變量I賦值為1(即I=1),I的值屬于1到100的取值范圍(即滿足循環條件),執行PRINT “I like computer!”一次;然后I的值按步長數1依次遞增,從而反復執行PRINT “I like computer!”語句100次。
從分析不難發現循環程序執行的核心問題就是判斷循環條件,即根據對循環條件的判斷來確定是否進入循環體以及執行循環體語句的次數。各種高級語言程序設計的基本原理都相同,即當所給定的循環條件為真時,就反復執行其循環體(命令組);當條件為假時,則終止其循環體,而去執行其后繼命令。
2 如何學習循環程序設計
2.1 循環程序語句
各種高級語言都有相應的類似的循環程序語句。例如前面介紹的QBASIC中的:
FOR= TO STEP
NEXT
等循環語句。
又如VF中的:
DO WHILE
[命令組]
ENDDO
等循環語句,初學者在學習時首先要搞清楚這些循環語句的含義、特點和用法。例如VF中與DO WHILE循環語句配對的是ENDDO;與FOR循環語句配對的是ENDFOR。不能混淆使用,也不能將忘記書寫。
一般每種語言都有多種循環語句,要對它們進行比較。在一些具體運用中采用恰當的循環語句可能會使循環程序更加簡潔明了。
2.2 流程圖
學習循環程序設計首先要學會看流程圖(亦稱程序框圖)。就是用一些簡單的圖形符號和文字說明,直觀地描述程序的處理步驟。程序流程圖不僅有助于程序設計,而且也為閱讀、分析程序帶來方便。
2.3 算法
在具體的循環程序設計中遇到的問題往往比較復雜,因此在設計前應該認真分析,要設定哪些變量,寫出哪些計算公式,擬出解決問題的思路。
例:假定要求從鍵盤上依次輸入三個數,求這三個數之和。
編寫算法:第一步:存和的內存變量S清0。第二步:反復執行下列操作3次,輸入一個數并存入X,計算S=S+X。第三步:輸出S。第四步:結束。
2.4 編寫語句
學習編寫循環程序之前應該多閱讀一些相關的典型的程序語句,從易到難循序漸進。編寫語句時應該充分的結合流程圖來展開,要根據擬定的算法來設計循環條件。
3 循環程序的應用
以VF程序設計為例,假定要求從鍵盤輸入一個郵政編碼,在“考生檔案”庫文件中查找。一個也查不到,則顯示“無此郵政編碼”。否則,每查到一個,就顯示該考生的姓名與工作單位。直到全部查完為止。
過程分析:① 鍵盤輸入待查郵編并存入內存變量YZBM;② 打開庫文件查詢郵編;③ 用EOF()函數進行循環控制,即通過查找后是否到達文件尾作為條件來進行循環控制;④ 如EOF()為真則退出循環,并顯示“無此郵編”;⑤ 如EOF()假則循環顯示該考生的姓名、工作單位,然后繼續查找直到EOF()為真時停止查找并顯示“查找完畢”。
程序流程圖如圖2所示,其循環結構由三部分組成。① 設置初值。包括循環操作中的初值和控制循環的初值兩部分,通過查找郵政編碼獲得EOF()函數的值是控制循環用的初值。② 循環的實際操作。這部分是循環中要反復執行的操作,同是包括控制循環條件的修改,又叫“循環體”,輸出姓名和工作單位是循環操作,繼續查找既是循環操作的一部分,又是修改控制循環條件。③ 循環控制部分的核心是一個條件判斷,即EOF()函數的值是 “假”開始循環,值為“真”退出循環。
程序設計如下:
ACCEPT "請輸入待查的郵政編碼(5位整數):"TO YZBM
USE 考生檔案
LOCATE ALL FOR 郵政編碼=YZBM
IF EOF()
?"經查找,所有考生中無此郵政編碼!"
ELSE
DO WHILE .NOT. EOF()
?"姓名:"+姓名+SPACE(4)+"通訊地址:"+通訊地址
CONTINUE
ENDDO
?"已經查完了!"
ENDIF
USE
在循環程序設計中一定要注意控制循環次數的控制,否則循環程序將無法結束,即陷入“死循環”。通常的辦法有“計數控制”,“條件控制”。在本例中就采用了“條件控制”。
4 多重循環
一個循環語句中可以包含另一個循環語句,這種結構叫做循環語句“嵌套”,在外層的叫外循環,在內層的叫內循環。多重循環結構的特點是:外層變一次,內層變一遍。
比較典型的運用例子就是設計打印乘法九九表的程序,即1*1=1,1*2=2,……,9*9=81。首先考慮如何打印1*1=1,1*2=2……,1*9=9,這用單循環很容易就能實現。但是對于整個程序的設計就要使用多重循環了。被乘數和乘數分別用A和B表示,A的值從1增加到9,B的值從1增加到9,每次都增加1,其乘積用P表示。每個A值都要使B從1變化到9,然后打印出相應的乘積。用VF設計主要程序語句如下:
A=1
DO WHILE A
B=1
DO WHILE B
P=A*B
? A,"*",B,"=",P
B=B+1
ENDDO
A=A+1
ENDDO
5 結束語
許多問題的求解歸結為重復執行的操作,比如數值計算中的方程迭代求根,非數值計算中的對象遍歷。重復執行就是循環。重復執行不是簡單地重復,每次重復,操作的數據(狀態、條件)都可能發生變化。重復的動作是受控制的,因此循環程序設計的要點就是要做好循環控制的設計。
參考文獻:
[1] 林卓然.BASIC語言簡明教程[M].廣州:中山大學出版社,1995.
[2] 遲成文.全國計算機考級考試教程(二級)[M].北京:電子工業出版社,1997.
一、立項
1.對預防調查對象的理解
一是“可能引發職務犯罪的隱患、非規范職務行為”,應指未然的職務犯罪;二是“職務犯罪衍化的宏觀和微觀因素”,應指已然的職務犯罪背后的深層次原因。這里的已然職務犯罪一般是指一個整體深層次因素引發的類案、行業、領域群體性職務犯罪等,而非個案。對于自偵部門查處的個案一般沒有必要預防調查,因為通常這些案件經自偵部門偵查后,其漏洞和隱患問題已基本查清,無需再重復勞動,直接可以利用現有的資料進行案例剖析、發出檢察建議或開展后續其他預防工作。
2.預防調查的啟動條件
一是預防部門在開展預防咨詢、警示教育等預防活動中,發現或經群眾反映有關單位在制度上、管理上存在易發職務犯罪漏洞和潛在隱患問題的。如2008年我省漳州市龍文區檢察院根據新聞媒體報道反映的市區路面超載車輛增多,造成多處路段損壞等現象,分析可能存在公路監管部門執法不到位等瀆職問題。啟動預防調查程序后,及時地發現有關部門涉嫌瀆職犯罪線索,移送自偵部門,從中立案6件,同時還通過開展預防警示教育,協助公路局及時修復路段損壞,加大超載車輛的打擊力度,促進了依法行政。
二是偵查部門經初查不具備立案條件,但反映出有關單位在制度、管理上存在易發職務犯罪漏洞和潛在隱患問題,經分管檢察長交辦或上級檢察院批辦的。如2009年福建省廈門市海滄區對廈門第一農場下屬的山邊洪管理區涉及征地賠償款的糾紛進行預防調查,選擇了控申部門經初查不具備立案條件,但反映出該農場在制度、管理上存在易發職務犯罪漏洞和潛在隱患問題的題材進行立項調查。
三是某一行業或領域職務犯罪高發或呈上升趨勢,需黨委、政府或主管部門采取相應預防對策的。如2009年,我省寧德市兩級檢察機關查處機動漁船燃油補貼系列職務犯罪案件40件,涉及作案人員57人,包括海洋與漁業部門工作人員、鄉鎮干部、村委成員和漁民等,案值高達707.5萬元,影響很大。寧德市檢察院專門成立預防調查工作領導小組,采取查閱案卷、召開案情分析會、詢問犯罪嫌疑人犯罪的主觀動因、向漁民發放問卷調查等形式,深入7個市、縣(區)兩級海洋漁業、財政部門,了解國家“油補”政策出臺的背景、意義及存在問題,形成《“油補”案件情況調查報告》和《“油補”案件引發的對國家油價補貼政策的思考及采取的防范對策》,并向市政府及海洋漁業的主管部門發出檢察建議。
有上述情況之一,預防部門可以組織人員和力量確定承辦,收集現有的相關材料,組織預防部門進行討論開展預防調查的可行性和必要性,然后再由預防部門的承辦人填寫《預防調查立項審批表》,預防部門負責人簽署意見,報主管檢察長決定,并報上一級人民檢察院預防部門備案。
二、組織調查
1.制作調查方案或提綱
預防調查立項后,由預防部門負責同志組織承辦人和其他人員,根據已掌握的有關材料,研究制定調查方案或調查提綱,分管檢察長也可以參與討論。調查方案或調查提綱要列明:調查的來源或現有資料的總體評估分析、調查需要采取的措施、各承辦人的任務分配、調查所需的期限和步驟,調查要達到的預期效果等等,并將討論情況記錄在案,參與討論的人員要簽名。
2.組織調查的方式
組織調查要按照制定的預防調查方案分步驟開展,當然調查方案或調查提綱在實際的調查中可以有所調整。在實踐中可以采取以下方式:與有關單位召開座談會,相互通報有關情況,了解具體工作的流程;向有關人員了解、核實相關情況;查閱、調取為預防建議和糾正違法意見提供依據的相關資料以及用于調查分析的具體事件、項目和問題的文件資料等;邀請專家對一些專業性的工作提供咨詢,為預防調查提供專業指導和幫助;走訪、問卷調查、聘請預防聯絡員以及訊問犯罪嫌疑人(包括服刑犯);復印案卷等一系列的有助于了解分析的調查方式。
3.調查需要注意的事項
在組織調查活動中,應當注意三個方面事項:一是對外開展預防調查時,必須由兩名以上檢察人員持介紹信并出示檢察人員工作證;二是調查中向有關人員了解、核實情況,查閱、調取資料前,應當征得有關單位和人員的同意,并在被調查單位的紀檢監察工作人員配合下進行。三是預防調查不同于偵查,不能對被調查人采取拘傳、拘留和其他任何限制人身自由的強制措施,不得進行訊問、搜查,凍結存款、匯款等偵查手段,調查場所是單位或被調查人所在地,嚴禁將被調查對象帶入檢察院。
三、調查結果處置
1.發現相關職務犯罪線索
根據最高人民檢察院《關于推進職務犯罪偵查和預防一體化工作機制建設的指導意見》的要求:“預防部門應當在預防工作中注意發現和受理案件線索,經審查,認為有初查必要的,應當及時移送偵查部門,并向舉報中心備案,偵查部門立案的,應向預防部門反饋。”承辦人應當填寫《預防部門職務犯罪線索處置表》,及時移送偵查部門。
2.發現有違法違紀行為或涉嫌普通刑事案件
根據有關規定將相關線索和材料移交有關單位紀檢監察部門或公安機關處理。
3.剖析犯罪原因,形成預防報告
完成對某一行業或領域職務犯罪原因的剖析和預防對策的研究,形成有分析、有對策的詳細預防調查報告。根據《最高人民檢察院關于實行懲治和預防職務犯罪年度報告制度的意見》,形成專項預防報告,報有關行業的主管部門和有關單位。
4.與發現存有職務犯罪的單位及時聯系
發現有關單位內部機制不健全、管理混亂,明顯存在導致職務犯罪發生的機會和條件,需要有關方面采取預防措施的,與有關單位聯系溝通,開展必要的預防工作,如警示教育、發送預防職務犯罪檢察建議、糾正違法通知書等活動。
當然上述四種情況可能并存。針對上述情況,承辦人要提出具體的處理意見,并制作《預防調查情況報告》,報預防部門負責人審核后,經分管領導批準。情況報告內容主要包括:立項調查來源、主要問題、具體調查情況、調查結論、處理意見或建議以及承辦人、承辦日期等。若未發現以上四種情形的,立即終結預防調查工作,并將有關調查結果及時反饋被調查單位。
四、調查終結
1.調查終結的四種情形
預防調查情況報告的處置意見經批準后,一般在立項后的三個月內完成。根據不同情況進行處置后,相關單位落實并反饋的,預防調查可以終結。一是移送線索的,自偵部門已經受理并立案;二是發現有違法違紀行為或涉嫌普通刑事案件的,相關單位紀檢監察部門或公安機關已接收并反饋的;三是預防調查專項報告呈送后行業主管部門或相關單位引起重視并被采納的;四是有關單位內部制度得到完善,取得預防效果的。
2.制作《預防調查終結報告》
根據上述完成情況,承辦人應當制作《預防調查終結報告》工作文書。列明立項調查來源、具體調查情況、承辦人處理意見或建議、主管檢察長意見、處理意見落實情況、預防調查成效綜述等。《預防調查終結報告》一式二份,一份立卷歸檔,一份報送上一級人民檢察院預防部門備案。
【關鍵詞】Java程序設計;教學探索;教學方法
隨著計算機軟件技術的發展,Java以其簡單、面向對象、穩定、與平臺無關、多線程,動態等特點成為軟件開發領域的主流程序設計語言之一,也成為高等院校計算機專業教學體系中一門重要的主干課程。但是并不是所有學生都能學好,這不僅僅是學生的問題,也取決于教師如何完成該課程的教學工作。學生無興趣,學不會,感覺壓力很大,種種現象反映出我們的教學工作出了問題。我們需要尋求解決問題的方法,提教學效果。
一、Java程序設計課程教學中存在的問題及原因
傳統教學過程中,任課教師一般首先會按照教材對知識點進行講解,然后編寫程序分析、演示所講知識點,學生只是跟隨老師思路,被動接受,學生不會主動去思考,去尋求解決問題的辦法,時間一長就喜歡接受教師寫好的現成程序,當自己獨立去解決實際問題時,就腦子空空,難以應對。產生這些現象的原因主要有以下幾點:
1.知識點沒有真正掌握
在學生的學習過程中,隨著課程的逐步展開,學習了更多新的知識點后,就把以前學過的基本的語法規則遺忘了。當程序中需要使用以往的知識點時,就要不斷的去翻書尋找,如變量如何定義,語句控制的相關用法等等,而對具體用法含義沒有真正領悟。
2.在解決問題時編程方式和傳統思維方式存在差異
如變量的講解環節,它的值是可隨著程序的調用而變化,具體的式子在傳統數學模式里是不成立。有些問題看上去很簡單,需要程序解決時,又要循環又要中斷,就出現了整個思考過程要程序化。學生在剛開始學習程序時,很難采用計算機的方式去解決問題,另外完全依附于教師,教一點學一點,下課后就算結束了,從不自己獨立思考,沒有讓學生養成良好的編程習慣,從而僵化了學習模式。
3.隨著難度增加,學習興趣逐漸降低
學生初學時興趣一般都大,但是,隨著學習的深入,知識點難度的增加,學習的興趣和積極性就會逐漸削弱。當新鮮感沒有的時候,就會感覺到程序設計枯燥、難懂,也就不去聽、不去學了。
4.學習目的不明確,教學與實踐脫節
很多學生學習目的不明確,不知道為何而學,學了干什么,很多學生學習這門課緊緊為了修學分,雖然書本中的知識掌握的很好,但是僅僅能夠完成書本上的題目,忽略了實際軟件研發的經驗的積累,從而造成了教學與實踐的嚴重脫節。
針對以上問題,就需要授課教師改變自己的教學方法,探索新的教學理念,深入對Java程序設計進行剖析,提高學生的學習興趣和動手能力,真正感受到程序設計的魅力。
二、教學改進措施
1.增加教學環節中實訓課時
為了使學生能夠掌握所學的知識點,靈活運用去解決實際問題,同時培養良好的團隊意識,激發自主創新能力,這就要求學生不能只停留在學的層面上,而要進一步達到會的深度。為了使學生真正作到學會并靈活運用這個目標,在教學上就應該加大實踐操作的力度,要求教師形成一個從基本知識講解到實踐動手操作的指導團隊模式。在進行課程教學的學期開始,就要求主講教師根據教學的具體內容結合學生平時學習效果來設計適當的課程階段性項目,在學生上機操作實現的整個過程中對知識點進行運用,從而加深其印象。教師在指導的過程中,在解答專業知識點的同時要注重引導培養學生的創新自學能力。在必要時可根據學生的個性化要求進行分組,實現不同的項目開發與制作。這樣就能夠增加學生的自信及提高對課程的興趣程度。教師在課堂上的知識點講解及實驗實訓的項目實踐應用,都要做到任務分工明確,安排科學合理,效果檢驗及時,這樣就能根據教學進度,結合學生掌握情況,調整教學方式,達到良好的教學效果。
2.拓展新的教學方法
(1)引導學生發散思維
程序演示是Java程序設計課程授課環節的一個重要組成,在程序演示過程老師應該提出問題,啟發學生思考,可提問不同的學生,對不同的解決方案進行比較、分析,同時可穿插舊的知識點,幫助學生加強記憶。在提問解決問題的過程中要注重循序漸進的引導,讓學生從不知道,到找到解決問題的辦法的過程中去思考,培養分析問題、解決問題的能力,同時針對該問題進行拓展,提出新的要求,從而達到開闊學生視野,激發潛能,加強認識新知識點,穩固已經掌握的知識點的目的。
(2)要適時表揚鼓勵
學生在學習的過程中,是否有興趣鉆進去,取決于他是否取得進步。假如自己已經盡力學了,還是學不會,當然就很受打擊,從而失去再堅持下去的念頭。在教學的過程中,無論是提問,還是學生在問一些簡單的問題,就應該適時捕捉他們取得的進步,要肯定并鼓勵學生。讓學生有信心去學,也就是說只要認真的學習,就能不斷的提高。這樣學生的興趣不斷加濃,就會更用功的去尋求進步,得到同學們,尤其是教師的認可。學生的好勝心,成就感,在教學中得到應用,會取得意想不到的效果。
(3)故意設置錯誤啟發
教學過程中,程序的編寫及演示過程中,應該把常見的錯誤給學生故意暴露出來。問題的解決通常情況下是出現了錯誤,尋求解決錯誤的有效方法。學生學習知識本就是要認識錯誤,得到如何糾正錯誤的方法。這樣在代碼書寫及調試時,制造矛盾,激發對錯誤的認識并解惑。在容易出現錯誤的基本知識點,無論是新學的還是已經學過的,都要不失時機的在錯誤中提高。這樣往往可以加深學生的印象,以后假如出現類似情況,他們也很快能夠找到應對的方法。也可以在處理錯誤時把錯誤多樣化,同樣的環境,不同的錯誤又該如何應對,就起到了,舉一反三的教學效果。
(4)搭建課程總體項目
在課程開始就給同學們規劃一個大的項目,此后知識點的逐一展開就是逐步完成目標的過程。學習的各個章節可設置局部的小項目,明確目標。要遵循事物發展,由易到難,由小到大的規律,小項目進行排序,前面完成的就是后面要出現的基礎,依此一環扣一環,逐層推進最終實現課程的總體項目。不然學生總會在學習中產生顧慮,到底學了有什么用,又用到那里。這樣學生就會努力的向目標進發,有針對性的去提高,否則造成盲目學習,其效果可想而知。
(5)教學過程讓學生有輕松感
教師應該在教學中,在講解單調的程序類課程時要有足夠的幽默感,這樣就能夠調動的課堂氣氛,使學生更專注于課程內容。其實教學就是一門獨特的語言藝術,教學就是在教與學的交流中進行的,就要發揮教師的語言能力,感染和吸引學生,輕松的完成知識點的講解。往往有些教師就不注意這點,只知道埋頭講知識點,其實已經喪失了教學良機,也就談不上提高教學質量了。
3.緊密與實踐相結合
老師在授課過程中,應該讓學生知道自己所學知識的基本用途,了解該如何利用使用所學知識解決實際問題。高校老師在授課之余也擔負著科研工作,因此可以將科研工作中的實際案例作為教學案例進行剖析、講解,甚至可以讓學生參加在研項目,通過大量實際案例的分析、代碼的編寫使學生更加深入的了解Java的運行原理。
4.改變傳統課程考核方式
目前高等院校期終考試一般采用筆試進行,這樣以來就使學生更注重理論的死記硬背,而不關心實際的應用,即使不會用程序解決實際問題也不影響自己的課程成績。針對這種現象,應當引入上機考試的方式進行考核。考核時,學生試題來源于試題庫,老師在制作試題庫時就可以更加注重學生分析問題、解決問題的能力考核,同時,學生平時學習也會更加注重動手能力。平時課程課內實訓時就要灌輸學生學習要以用為主的思想,加強學生對知識點的理解和聯想,不斷提升學生的自覺能動性。
三、結束語
隨著計算機軟件技術的飛速發展,基于Java的行業應用在社會各個領域扮演重要角色,因此高等院校Java程序設計課程教學工作就顯的尤為重要。這就要求教師和學生就必須達到教與學的緊密有效的結合,及時發現問題、解決問題,形成良性循環,使學生真正做到知識的深刻理解、掌握以及靈活運用,高效的完成教學任務。
參考文獻
[1]廖福保.Java語言課程項目教學探討[J].廣東農工商職業技術學院學報,2012(2):29—31.
[2]史岳鵬.高職高專《Java程序設計》課程項目驅動一體化教學模式研究[J].科技信息,2012(20):33—34.
[3]馬雪英,王桂平.以能力為導向的程序設計類課程教學體系[J].計算機教育,2011(4):74—78.
關鍵詞:VB程序設計 教學過程 能力
VB程序設計是大多高校必開的計算機基礎課程,在我校,VB也針對絕大多數院系開課。但由于課程比較枯燥難學,學生對程序設計畏懼、對程序設計思想不理解等諸多原因,導致VB課程教學效果達不到預期效果。通過幾年的VB基礎教學,我總結了一些教學經驗,在此與大家分享。
一、好的開始是成功的一半,基礎必須打好
VB是一門面向對象、事件驅動機制的程序設計課程,為了以后能更好、更深入地學習,必須在開始時就讓學生理解和掌握面向對象和事件驅動兩大特點,這樣在后續學習中,學生才能合理地使用合適的對象和事件。
在具體教學過程中,我通過一個淺顯易懂的例子進行詳細講解。比如“一行內容在窗體左、右移動;移動兩種方法:手動和自動,當自動時,文字閃爍顯示”,程序運行界面如圖1所示:
講解過程中,首先讓學生看清楚題意,看清題目的目的和要求,提示學生找出這個題目中要進行操作的對象是什么,該對象該如何在窗口中體現,對對象的操作是什么。得出的結論是要操作的對象是“一行內容”,可以用一個能夠顯示文本的控件實現,操作是“左、右移動”。然后運行程序,通過演示程序運行,讓學生們找出驅動結果顯示的事件是什么。結論是單擊“手動”和“自動”按鈕,才能得到相應的結果。通過多個簡單例題的引導,通過對學生提問,激發學生思考,讓學生真正掌握對象的含義和事件驅動的含義,并能在給出的題目中說出需要添加什么對象,用什么事件來驅動。掌握好了這些,就為以后的學習奠定了堅實的基礎。
二、實例教學和任務驅動機制貫穿始終
VB語言內容繁多,層次性較差,采用“案例引入,上機實踐,質疑解惑”的方式,學生即學即練,上手快,興趣濃,有成就感。以VB的基礎內容控件、控件屬性、事件和方法為例。單個講解的話很容易枯燥乏味,學生也難以真正體會其用途。教師應設計一個綜合實例,實例應注重知識的系統性、完整性和連貫性。我以學生最經常接觸的“登錄界面”為例進行了講解。程序運行界面如圖1-4所示:
本實例包含兩個窗體,主要涉及窗體、標簽、文本框、命令按鈕、圖片等控件,通過本例可以詳細講解每個控件適合用在什么情況,以及相應屬性、事件和方法的使用。由于此例學生經常遇到,所以可以很好地理解,便于掌握。控件外觀屬性如圖1-4設置。
窗體一的代碼如下:
Private Sub Command1_Click()‘按鈕單擊事件
Form1.Hide‘窗體一隱藏,hide方法的使用
Form2.Show ‘窗體二顯示,shoe方法的使用
End Sub
窗體二的代碼如下:
Private Sub Form_Load()
Command1.Enabled = False ‘按鈕可編輯屬性設置,
窗體剛
Command2.Enabled = False 加載時是不可編輯的
Picture1.Picture = LoadPicture(″e:\素材\002.bmp″)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer) ‘文本框 接收輸入事件
Command1.Enabled = True ‘此時按鈕變為可編輯
End Sub
Private Sub Command1_Click()
Picture1.Print ″用戶″; Spc(2); Text1.Text; Spc(2); ″登錄成功″
Command1.Enabled = False
Command2.Enabled = True
End Sub
Private Sub Command2_Click()
Picture1.Cls
Text1.Text = ″″
Text2.Text = ″″
Text1.SetFocus ‘文本框獲得焦點
End Sub
三、問題求解能力的培養
Gagné說過:“教育的中心目標就是教會人們思考,運用他們的理性,成為更好的問題解決者。”VB的學習重點是程序設計,是用它來編程實現生活中的問題,所以單純地靠講解一些實例是遠遠不夠的,關鍵是要培養學生發現問題、分析問題和解決問題的能力。我采取的方法是給出初始創意,讓學生給出擴展功能及相關功能的解決思路,最終能夠轉換為程序。仍以上例為例,讓學生盡可能補充添加功能,并描述該用何方法,什么結構等等來實現,并以作業的形式交上來,然后課堂上給予總結,上機讓學生實現,并給予指導。上例可以添加的功能很多,如輸入不能為空,如果為空給出錯誤提示(分支語句和Msgbox的應用);密碼校驗功能(分支語句實現);設置輸入次數不能超過3次(循環語句實現)等等。這樣的方式使得學生能夠積極地思考,并能夠把理論知識同現實結合起來,從而促進了學生更多問題的處理解決能力,形成了程序設計思維。
對一個題目要求用幾種方法來實現,以此提高學生對程序的分析理解和舉一反三的綜合能力。例如,求1到100之間所有奇數的和。比較容易想到的是用For……Next循環語句實現。要求學生用Do While……Loop和Do……Loop While……來分別實現,學生就必須考慮這三者之間的聯系和區別,以及各自的語句執行特點、循環次數的控制和退出循環的方法等。這樣既使學生從多個角度考慮了問題,也對這三種循環結構有了更深的理解。更進一步,要求學生求1到N之間所有奇數的和。循環變量的終止值需用變量N來表示,因此需要在程序的前面增加一條定義變量N的語句,還需要使用InputBox語句在程序運行的過程中將終止值輸入給變量N,這就要求學生能夠把前面所學的知識綜合起來運用,學生的創新思維和綜合編程能力可以得到訓練和明顯提高。
四、抓好上機實踐環節
上機是提高學生實踐和動手能力的關鍵,所以要嚴格要求。做法是嚴格上機制度,上機表現直接跟成績掛鉤。學生自主意識較差,如果不明確布置任務,他們就會渾水摸魚,上機無事可做,所以每次必須要詳細分配任務,并且任務要具備趣味性、應用性和綜合性,由易到難、由簡到繁,充分調動他們的上機主動性和自我發揮能力。并且要鼓勵學生積極提問、互相幫助,耐心給學生指導,充分利用好每一次上機課。
關鍵詞:程序設計 教學 算法
程序設計是我國高校各專業學生必修的一門核心課程,該課程的教學目的是使學生掌握程序設計的基本方法和理論,應用某一程序設計語言編寫具體的程序。程序設計的教學質量將影響到學生的程序設計能力,影響到學生創新思維的培養。
一、程序設計課程教學現狀
“程序設計”課程長期沿襲傳統教學模式,即以一種高級語言的語句體系為脈絡展開教學,詳細地講解其語句、語法甚至一些細節內容,學生每學習一個語句需要做一些與該語句有關的習題。課程枯燥無味,學生學習積極性不高,很少動手實踐。課程學完后,學生除了學到一些呆板的語句外,收獲甚微。
1.理論基礎薄弱
有些教師過分重視程序設計語言的教學,而對于程序設計中所涉及的程序設計理論、程序設計的方法和算法的設計思想等理論知識的講解不夠深入、透徹。
2.學生缺乏創新能力
學生可以解決那些和已經學過的知識有直接或有密切聯系的問題,而面對一個需要用已經學過的知識進行綜合求解的程序設計問題時,就不知從何下手,對所學知識做不到舉一反三,缺乏程序設計的創新能力。
3.動手能力不強
學生實際動手能力差,具體表現在兩個方面。其一,學生上機調試程序的能力差,難以找到錯誤產生的原因;其二,實際編寫程序的能力不強,編寫的程序功能不夠完善,風格不一,程序健壯性差。
針對以上出現的問題,我們認為應該在教學過程中對學生各方面的編程素養進行引導和培養。
二、編程方法引導
程序設計的觀念雖然發生過很多變化,但程序的基本結構仍然是順序、選擇和循環三種。因此,在學生初學程序設計時就應該注意滲透結構化程序設計的思想,以便使學生養成良好的程序設計習慣。
我們這里談的不是純粹的程序設計方法,如結構化的、面向對象的等,而是在教學中滲透程序設計的技巧。這里舉一個結構化程序設計的例子。
例:求100以內的素數。
經過分析可以發現,除了“2”以外,偶數不可能為素數,所以外循環有50次是多余的,同理在內循環中,也不必用偶數測試。再進行分析又發現,一個合數最小的因子不會大于它的平方根,所以內循環中的次數被再次減少。最后程序變為:
通過不斷改進程序,可以使程序效率得到不斷提高,當然這些提高是在數據規模不斷增長時才能體現出來。盡管現在很多人認為硬件的速度發展很快,我們應該把速度提高的任務交給硬件去實現,這樣的想法未免過于武斷。姑且不論類似上述的技巧對于程序執行效率的提高有多少益處,單從基于問題的學習方法這個角度的出發,程序的衍生對于提高程序員的編程水平也是一個很好的訓練方法,所以這樣的編程技巧是不可多得的,我們在教學過程中就是要進行這方面的引導。
三、編程風格和規則引導
前面提到我們在進行程序設計教學時,傳統教學模式比較少注意編程風格和規則的引導,所以很多時候,學生編制出來的程序都是一路下來齊刷刷,缺乏良好風格,死套語法,缺乏考慮可能的不安全因素。
由于學習程序設計是一個循序漸進的過程,所以在教學中如果潛移默化地引導學生從程序設計入門開始,就注意程序設計的一般風格和應該遵守的規則,就能讓學生更快更好地編制出高質量的程序來,并且具備良好的編程習慣。
舉例說明。我們知道,free和delete都可以把指針所指的內存給釋放掉,比如:
這段程序運行一定沒問題,但如果在其后加上這樣一段代碼:
我們會發現出錯了!這是因為,p所指內存被釋放,但是p存放的地址值仍然不變,即p成了“野指針”。盡管嘗試用if(p!=NULL)來判斷p的可用性,我們卻發現出錯處理并沒有起作用。所以,良好的習慣是在free和delete后,都要對指針作置空處理,即p=NULL。有人會說如果要這種情況出現在程序結束時,一切指針也會消亡,動態內存也會作系統回收,所以P置空是多余的。但是如果有人將這段程序取出來用到其他地方會怎樣呢?結果不是我們想見到的。
四、算法設計概念的引入
程序=算法+數據結構。這就提出我們在進行程序設計教學過程中,不僅要重視語法的講授,也要重視算法的講授,甚至是要將算法提到更為重要的地位。程序設計是要解決問題,語言只不過是為解決問題而使用的工具,真正解決問題的是算法,難怪專家說“算法是魂,程序是衣”。
如在C語言程序設計課程教學中,當完成分支結構程序、循環控制和數組,進入內容較多的算法設計教學后,我們將教學內容分為以下五個方面。
(1)一般數據組織算法:查找、排序、字符串處理、求素數、篩選、迭代、窮舉等;
(2)函數調用,函數嵌套歸、遞推及貪心算法等;
(3)指針算法,動態內存分配,鏈表等;
(4)用矩形法、梯形法計算定積分、模擬算法的隨機抽樣、蒙特卡羅法等算法;
(5)文件數據處理。
在課堂上增加算法設計的分析和討論,強調算法設計的優化和程序的優化,是提高學生分析和解決實際問題能力的有效方法。
五、開展研究性學習
在程序設計過程中,開展研究性學習,是為了提高學生分析和解決實際問題的能力,主要是通過對解決問題的算法進行研究而展開的。由于課時所限,并且學生沒有足夠的實踐經驗,所以對算法問題的研究也是初級的,主要是討論典型問題的典型算法及其應用。
1.通過研究性學習,可以重構知識體系,加深對算法的理解。
研究性學習是學生在教師的指導下,選定主題,然后搜集相關材料,對材料進行歸納、加工處理、分析、總結得到相應結論的學習活動。在教學中,可以根據教學內容,經過反復研究,確定研究主題,并根據學生的自愿報名成立研究小組,如搜索算法研究小組等。然后各小組根據自己研究的算法,重新整理相應的知識,對知識進行歸納、總結。通過對各種算法知識進行整理、分類、小結,加深學生對這些算法的理解。
2.通過研究性學習,同學之間取長補短,共同提高。
每個學生都有所長,也有所短,研究性學習一個重要特點就是:分工合作,共同討論,共同提高。我們可以根椐學生的特點、特長,對他們進行分工,每位學生研究一種算法其中的一個問題,然后整個小組一起討論,每位學生介紹自己的研究情況、研究成果,然后其他同學進行補充,發表自己的見解,這樣每個學生都使自己的研究內容得到補充,同時也學習到了其他同學研究方面的知識,可以取長補短,共同提高。
3.通過研究性學習,總結算法的應用規律,提高程序設計能力。
在進行研究性學習時,除要求學生歸納、整理專題算法知識外,還要總結出算法的應用規律、應用算法解題的步驟和算法的框架。學生通過自己對算法應用規律的總結,對算法的應用得到升華,進一步提高算法的應用能力和程序設計能力。
4.通過研究性學習,提高分析問題的能力、算法表達能力和歸納、綜合能力。
對算法的專題研究,不僅要對算法理論進行總結,算法應用的研究也是很重要的一方面,通過算法的解題應用,既提高了學生分析問題的能力,也加深了學生對算法的理解,提高了學生的算法應用能力。另外,我們在算法研究過程中,要求學生透徹理解算法內容,用算法語言準確描述算法,通過這種途徑進一步加深學生對算法的理解,同時也提高了學生的算法表達能力和歸納、總結的能力。
結論
我們認為在程序設計教學中,要改革舊的教學體系,需要用新的理念、新的內容、新的方法組織教學。首先要用先進的程序設計理論指導教學,并加強編程算法、邏輯思維和編程方法的引導。其次,重視和鼓勵學生對具體問題進行分析和研究,勤于動手和上機訓練,養成良好的編程習慣。此外,對不同層次的學生可以進行分階段教學,前一階段講授基本的程序設計方法,除了講授程序設計語言的基本語法,還對學生進行編程方法及程序設計風格的引導;后一階段主要講授程序設計的較高級的語法和功能,提高學生對算法的認知和重視程序,并且在學生中開展研究性學習,培養學生實際動手能力。
參考文獻:
[1]李云清等.程序設計創新能力的教學研究[A].全國計算機新科技與計算機繼續教育論文集2003.
[2]李海倫等.“程序設計”課程教學改革的研究與實踐[J].計算機教育, 2005.7.
[3]豐振.計算機程序設計教學方法研究[J]. 教學研究,2004.9.
[4]等.淺談程序設計語言課程教學方法[J].吉林大學學報,2005.8第23卷.
關鍵詞:;SQL2000;JAVA課程
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2016)27-0070-02
Abstract: For the sake of convenience for teaching java and chatting between classmates and teacher, this paper designed and constructed website of Java Program Design. This website used and SQL2000 database, and it was totally divided into four modules: network examination center, on-line message, resources center, backstage management. Meanwhile, this website could release news and add the related chain connecting.
Key words: ;SQL2000; JAVA course
近年,Java面向對象程序設計語言因其具有的跨平臺性、分布式及安全性等特點[1],在當今網絡時代得到廣泛應用和發展。作為一種有生產力的編程工具,學習《Java程序設計》課程有助于學生在掌握面向過程程序設計和可視化程序設計基礎上,能夠更深入地掌握面向對象編程技術,且更有利于開發網絡環境下的應用程序。
目前師生之間Java課程的教與學多局限于課堂上面對面的方式,而課后教師與學生之間更深入的交流和探討,因缺少一定場地而受到限制,最終導致師生互動的機會減少。針對此現狀,本文使用[2]技術和SQL2000數據庫[3]設計一個Java課程網上學習平臺,以滿足在線學習及便于師生隨時隨地交流的目的。
1 需求分析
Java課程網站建設的目標是使教學更加方便,方便學生自己學習,提高學生自學能力,也節省學生、老師的時間。要求所設計系統操作方便、更新及時、易于維護管理。擁有動態更改信息;網上答疑;課程教學等基本功能。學生進入網站后可根據系統功能對該課程進行信息瀏覽,查看課件,提出問題及學習等;教師進入網站后也可對課程的一些信息進行瀏覽,對學生提出的問題進行回復,而后臺教師需要進入系統對網站進行維護,更新信息、修改信息或者刪除某些信息。
因此該系統需要滿足的需求為:具有良好的人機界面,以方便操作;學生查看教學信息,下載課件,網上發帖等;教師查看學生提出的問題并進行回答;教師,整理留言和教學資源等。
2 網站功能設計
按照需求分析的結果,網站總體結構設計如圖1所示,角色上主要包括學生、教師和系統管理員;功能上主要包括網絡考試中心,在線留言,資源中心及后臺管理,同時還實現新聞和添加相關鏈接的功能。
3 網站主要功能分析
3.1用戶注冊及管理員登錄
用戶包括普通用戶和管理員,所有用戶先注冊然后登錄系統,權限不同則登錄成功后相應的界面不同。
3.2網站功能顯示
將網站的每個功能模塊顯示出來,如圖2所示,包括:資源中心,考試中心,后臺管理,在線留言及使用幫助等。
3.3資源中心
資源中心主要功能包括查看與課程相關的文檔及任課教師等信息。
3.3.1電子文檔
圖3所示的主要功能是上傳和下載電子文檔。為便于學生課后復習,教師可將課堂上教學用的Java課件等文檔進行上傳供學生瀏覽。
3.3.2網站課程實踐
為加強學生動手能力,從而將理論與實踐相結合,每個知識點都對應有實踐環節,每一實驗都明確具體內容及相關要求(圖4)。
3.4考試中心
圖5所示Java課程的網上考試閱卷,在時間和空間上都不必受傳統考試的限制,可提高考試和閱卷效率。
3.5后臺管理
管理員可以對科目、試題庫及的資源等信息進行增加或修改等管理。
3.5.1 科目大類管理
如圖6所示,可以增加或刪除科目大類,同時給大類編號。
3.5.2 具體科目管理
學好Java,還應該熟悉其課程體系,了解其所屬大類的與其相關的其他科目(圖7),從而明確該課程的重要性。
3.5.3試題庫管理
圖8所示為課程體系中各門課程的試題庫。
3.6在線留言
師生均可在線留言,但需要事先進行注冊(圖9),然后通過登錄界面進入留言板塊。
4 結束語
為便于學生在線學習及師生之間隨時隨地進行Java課程教學的交流,本網站實現了Java教學資源管理與查看、試題庫管理與查看、在線留言及相關新聞等功能,有助于學生更方便更深入地掌握Java語言。
參考文獻:
[1] 張白一, 崔尚森.面向對象程序設計―――Java[M] .西安: 西安電子科技大學出版社, 2013.
1汽車制動系統發展狀況
幾年來西方發達國家又興起了對車輛線控系統(X-BY-WIRE)的研究,線控(BRAKE-BY-WIRE)應運而生,由此展開了對電控機械制動系統(ELECTROMECHANICALBRAKINGSYSTEM)的研究,簡單來說電控機械制動系統就是把原來由液壓或者壓縮空氣驅動的部分改為由電動機來驅動,借以提高響應速度、增加制動效能等,同時也大大簡化了結構、降低了裝配和維護的難度。由于人們對制動性能要求的不斷提高,傳統的液壓或者空氣制動系統在加入了大量的電子控制系統如ABS、TCS、ESP等后,結構和管路布置越發復雜,液壓(空氣)回路泄露的隱患也加大,同時裝配和維修的難度也隨之提高[1]。因此結構相對簡單、功能集成可靠的電子機械制動系統越來越受到青睞,可以預見EMB將最終取代傳統的液壓(空氣)制動器,成為未來車輛的發展方向。
2EMB系統的模型分析
2.1EMB系統工作原理
電子機械制動系統工作原理為:當汽車行駛時需要采取緊急剎車,駕駛者腳踏的力量信號傳到制動踏板,該力量信號經過EMB控制系統的三環調速系統調控后輸出電樞電壓直接作用于無刷直流力矩電機上,輸出的電機軸轉動轉速信號傳遞給傳動機構進行減速增矩,轉化成絲杠位移,再經過制動機構作用轉化成制動力,整個過程的時間極短,在0.1s作用[2]。
2.2EMB執行系統
一個設計完整的EMB執行系統包括無刷直流電機模塊(包括電機驅動模塊)、傳動模塊和制動模塊。要完成EMB的動力學仿真,首先要完成以上三個模塊的數學模型設計。EMB執行系統結構框圖如圖1所示。圖1中:Fd為制動器的目標夾緊力;AVI號為電機轉速控制信號;DIR為電機正反轉控制信號;Ua、Ub、Uc分別為電機定子每相繞組端電壓;Uh+、Uh-分別為霍爾傳感器供電高低電壓;n為電機軸轉速;ns為絲杠轉速;s為絲杠副中螺母的平動位移;F為制動器的夾緊力;Mb為制動器的制動力矩;Jc為傳動機構的轉動慣量;TL為傳動機構的摩擦阻力矩;Sa、Sb、Sc分別為三個霍爾傳感器的信號;Ia、Ib、Ic、分別為電機定子每相繞組電流[3]。
2.3EMB控制系統
電機的控制采用三環(電流環、轉速環和壓力環)反饋控制,輸入為目標夾緊力,輸出為電機電樞電壓。EMB電機的控制系統結構框圖如圖2所示。電機的三環調速系統設計就是對控制器設計,該三環調速系統包括夾緊力控制器、轉速控制器和電流控制器[4]。其設計方法是:從內環開始,每次向外擴展一環,首先設計電流控制器,再將電流環當作轉速調節系統中的一個部分設計轉速控制器,最后把轉速控制環當作夾緊力調節環中的一個部分設計夾緊力控制器。上述的夾緊力控制器、轉速控制器、電流控制器均是PI控制器。電流控制器的輸入是目標電流與實際電流的差值,輸出為電機的控制電壓;轉速控制器的輸入是目標轉速與實際轉速的差值,輸出為電機電流的目標值;夾緊力控制器的輸入是目標制動夾緊力與反饋制動夾緊力的差值,輸出為電機轉速的目標值。電機電流、電機轉速和夾緊力為需測量的量。在本控制系統中,通過無刷直流電機驅動器上安裝的電流傳感器測量電機實時電流;通過光電編碼器測量電機實時轉速;通過壓力傳感器測量制動夾緊力[5]。
3EMB系統的仿真模型
(1)無刷直流電流控制模塊,如圖3所示。
(2)電流-轉速雙閉環控制模塊,如圖4所示。
(3)無刷直流電機三環控制模塊,如圖5所示。
4仿真結果
4.1電流環仿真
當電動機處于空載時,電流值比較小,所以應當在電機堵轉的情況下對電流環進行調節[6]。電流環的試驗結果如圖6所示。可見,實際電流在初始階段有較大的超調,但是在后期可以很好地跟蹤目標電流。
4.2轉速環試驗
轉速環在試驗時,應處于空載狀態。轉速環的試驗結果如圖7所示。可見,在啟動過程中電流能維持較大的值,從而使電動機迅速達到目標轉速。由于電動機在旋轉過程中不斷換相會引起電流的抖動,所以電動機轉速也一直在目標值附近小幅抖動。
4.3壓力環試驗
壓力環的試驗結果如圖8所示。可見,兩種工況下消除制動間隙的時間均小于0.1s,且制動壓力的超調小于5%,同時我們可以發現所設計的EMB執行器能輸出足夠大的制動壓力,而且響應迅速。