前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇程序設(shè)計基本結(jié)構(gòu)范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
C語言 結(jié)構(gòu)化程序設(shè)計 循環(huán)結(jié)構(gòu) 效率
一、引言
學(xué)習(xí)和應(yīng)用計算機高級程序設(shè)計語言的人都知道,在這些語言中為實現(xiàn)結(jié)構(gòu)化程序設(shè)計,一般都會采用三種最基本的結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。因此,掌握這三種基本結(jié)構(gòu)的使用方法,是學(xué)習(xí)和掌握高級程序設(shè)計語言課的基礎(chǔ)。這三種基本結(jié)構(gòu)中,順序結(jié)構(gòu)和選擇結(jié)構(gòu)和我們平常的思維習(xí)慣相似。因此,最容易理解和掌握;而循環(huán)結(jié)構(gòu)是這三種基本結(jié)構(gòu)中最復(fù)雜的一種結(jié)構(gòu),與我們?nèi)粘5乃季S習(xí)慣不盡相同,因此理解起來相對來說比較困難。但是,幾乎所有的程序都離不開循環(huán)結(jié)構(gòu),利用它可以簡化程序、提高工作效率。因此,學(xué)習(xí)和應(yīng)用高級程序設(shè)計語言的人又必須要掌握循環(huán)結(jié)構(gòu)。但是,通過本人近幾年的教學(xué)發(fā)現(xiàn),大多數(shù)學(xué)生在學(xué)到循環(huán)結(jié)構(gòu)一段時間后,干脆將這門課給放棄了,原因是他們覺得循環(huán)結(jié)構(gòu)太難理解了。用順序結(jié)構(gòu)和選擇結(jié)構(gòu)做一個小程序還可以,用循環(huán)結(jié)構(gòu)實在難理解。鑒于這個原因,本人將日常授課中總結(jié)出來的一點心得從初學(xué)者的角度寫出來,希望能對即將和正在學(xué)習(xí)高級程序設(shè)計語言課的人有所幫助。當(dāng)然,我們在這里是以C語言為例來說的,其實這方面的知識對其他語言比如Visual Basic語言等同樣適用。
在C語言中,循環(huán)結(jié)構(gòu)主要是由For語句、While語句、Do-While語句三種結(jié)構(gòu)來實現(xiàn)的。而在這三種循環(huán)結(jié)構(gòu)語句中又以for語句的應(yīng)用更為廣泛。因為for語句在其開頭語句中就已經(jīng)包含了循環(huán)變量的初始值、循環(huán)變量的終止值、循環(huán)的判斷條件以及循環(huán)變量的變化趨勢等這些內(nèi)容,因此在編寫其循環(huán)體時,只用考慮其循環(huán)體應(yīng)該包含的主要功能就行了,而不用在For語句之前對循環(huán)變量的初始值進(jìn)行過多地考慮,同樣也不用在循環(huán)內(nèi)部考慮其循環(huán)變量如何變化。對大多數(shù)有程序設(shè)計經(jīng)驗的人來說,使用for語句實現(xiàn)循環(huán)結(jié)構(gòu)是一件輕而易舉的事情。但是,對于沒有經(jīng)驗的初學(xué)者來說,要想將for語句的作用及使用方法掌握住也不是一件容易的事情,更不用說While語句、Do-While語句的使用了。因此,本文從初學(xué)者的角度,闡述了C語言中循環(huán)結(jié)構(gòu)的幾種典型應(yīng)用。
二、用循環(huán)結(jié)構(gòu)輸出幾何圖形
在教學(xué)過程中,不管開設(shè)哪一種高級程序設(shè)計語言課,只要一講到循環(huán)結(jié)構(gòu),大多數(shù)老師幾乎不約而同地選擇輸出簡單的幾何圖形來作為講解循環(huán)結(jié)構(gòu)的最好實例。
對于這種類型的題目,初學(xué)者往往最容易想到的方法就是采用多條輸出語句來完成程序的設(shè)計。雖然這種方法很快能夠?qū)崿F(xiàn)所要效果,但其缺陷也是很明顯的:缺乏靈活性、程序修改起來不方便,也不符合程序設(shè)計的思想。比如,我想讓大家輸出8行,每行36個“*”。這個時候,我們就不得不在輸入“*”的時候特別仔細(xì),因為一不小心可能個數(shù)就不對了。
但是,這樣的問題如果用循環(huán)語句來實現(xiàn)的話,程序不但可以簡化多,并且可以很靈活地將其修改成我們想要的效果。
因此,在講解這一類圖形時,授課教師最好引導(dǎo)學(xué)生按照正常的程序設(shè)計思想,先分析圖形的組成結(jié)構(gòu),找出其中變化的規(guī)律,然后按照所找到的規(guī)律用循環(huán)結(jié)構(gòu)來編寫出相對應(yīng)的程序代碼,這樣一旦要求有一點點變化不用大篇幅地修改程序,而只用找到關(guān)鍵的幾個地方修改一下就可以了。教師在講解的過程中,可以舉一反三,多次修改、讓學(xué)生反復(fù)練習(xí),直到他們理解為止。
現(xiàn)在,我們來具體分析一下該圖形,看看它有什么樣的特點,然后我們利用For循環(huán)將它的程序代碼編寫出來。
三、結(jié)束語
以上關(guān)于循環(huán)結(jié)構(gòu)的使用基本上都是在程序設(shè)計教學(xué)過程中的一些體會與總結(jié),可能比較膚淺,但是對于初學(xué)者來說,掌握這些知識還是有必要的。在進(jìn)行課程教學(xué)的過程中,將自己在學(xué)習(xí)過程中得到的一些好的方法傳授給學(xué)生,讓他們從中去實踐、體會,從而引起他們更大的學(xué)習(xí)興趣是必要的。如何讓一名初學(xué)者盡快擺脫日常的思維定式,更加透徹地理解和掌握程序設(shè)計中的基本思想,領(lǐng)會程序設(shè)計的精髓,是高級語言程序設(shè)計這門課程在講授過程中,應(yīng)該時刻注意的問題。更希望學(xué)生在學(xué)習(xí)的過程中不只是從老師這里拿一些現(xiàn)成的經(jīng)驗去使用,更重要的是讓學(xué)生學(xué)會自己去發(fā)現(xiàn)問題、解決問題,總結(jié)出一些更好的程序設(shè)計方法,為以后進(jìn)行軟件開發(fā)與設(shè)計打下良好的基礎(chǔ)。
參考文獻(xiàn):
[1]譚浩強.C程序設(shè)計(第三版)[M].清華大學(xué)出版社,2005.
[2]蘇運霖.計算機程序設(shè)計藝術(shù)第1卷?基本算法[M].北京:國防工業(yè)出版社,2002.
[3]譚浩強.C語言程序設(shè)計(第二版)[M].北京:清華大學(xué)出版社,1999.
關(guān)鍵詞: 循環(huán)結(jié)構(gòu) C語言 程序設(shè)計
引言
順序、選擇、循環(huán)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu),所以在高級語言程序設(shè)計課程中,掌握這三種結(jié)構(gòu)是學(xué)好程序設(shè)計的基礎(chǔ)。循環(huán)結(jié)構(gòu)是這三者中最復(fù)雜的一種,幾乎所有的程序都離不開循環(huán),因此,熟練掌握循環(huán)結(jié)構(gòu)是程序設(shè)計的最基本的要求。在C語言中,循環(huán)結(jié)構(gòu)主要是由for和while、do-while語句實現(xiàn)的,其中for語句的應(yīng)用更為普遍一些。for語句的用法對于有程序設(shè)計經(jīng)驗的學(xué)生來說輕而易舉,但是對于那些沒有經(jīng)驗的初學(xué)者來說難度卻不小。本文從初學(xué)者的角度,闡述了C語言中循環(huán)結(jié)構(gòu)幾種典型應(yīng)用的實現(xiàn)方法。
一、用循環(huán)結(jié)構(gòu)實現(xiàn)幾何圖形
輸出簡單的幾何圖形,是循環(huán)結(jié)構(gòu)的典型應(yīng)用之一。對于這一類型的題目,初學(xué)者往往直接采用一條或若干條輸出語句printf完成,這樣雖然可以完成題目要求,但是很顯然缺乏靈活性,不符合程序設(shè)計的思想。按照正常的程序設(shè)計思想,應(yīng)該先分析圖形的構(gòu)成,找出其中的規(guī)律:如圖1中的實心三角形,每一行由若干個空格、星號和一個回車換行符構(gòu)成,將行號、空格數(shù)和星號數(shù)分別設(shè)為i、m和n,則可形成表1:
*
***
*****
*******
*********
由表1可以得出,行號i與空格數(shù)m、星號數(shù)n有如下的數(shù)學(xué)關(guān)系:
m=5-i,n=2×i-1
則實心三角形的構(gòu)成規(guī)律可以描述為:第i行由(5-i)個空格和(2×i-1)個星號和一個回車符構(gòu)成。把行號i作為for語句的循環(huán)變量,則此程序中的循環(huán)部分如下:
for(i=1;i<=5;i++)
{
/*輸出(5-i)個空格;*/
for(m=1;m<=5-i;m++)
printf(“”);
/*輸出(2*i-1)個星號;*/
for(n=1;n<=2*i-1;n++)
printf(“*”);
/*輸出回車符;*/
printf(“\n”);
}
采用上面的方法,可以使學(xué)生很容易編寫出類似的程序,其中關(guān)鍵在于讓學(xué)生找出圖形中行號與每一行的空格數(shù)及星號數(shù)的關(guān)系。
二、循環(huán)結(jié)構(gòu)在數(shù)組中的應(yīng)用
在C語言中,for語句經(jīng)常與數(shù)組相結(jié)合,用于實現(xiàn)數(shù)組元素的賦值、輸入和輸出。對于初學(xué)者來說,更習(xí)慣于用順序結(jié)構(gòu)的語句來實現(xiàn)(如圖2左)。我們將圖2左的幾條語句作比較,可以看出在這5條語句中,不同的只有數(shù)組下標(biāo),那么就可以將這5條語句合并成一條for語句,將數(shù)組下標(biāo)換成for語句的循環(huán)變量i,而i的值從0增加到4。按照for語句的基本語法規(guī)則可以很容易寫出圖2右的for語句。
同樣,對于下面這個輸出二維數(shù)組元素的例子,也可以用上述方法實現(xiàn),不過轉(zhuǎn)換過程比上例要復(fù)雜一些:經(jīng)過對比圖3左側(cè)方框中順序結(jié)構(gòu)的12條語句,可以發(fā)現(xiàn)也是只有數(shù)組下標(biāo)在變化,但是由于是二維數(shù)組,行下標(biāo)和列下標(biāo)同時都在變化,很顯然不能直接用一條簡單的for語句來實現(xiàn)。但是我們可以把這12條語句細(xì)分一下,3條語句為一組,而在同一組中的語句只有列下標(biāo)在變化,這時可以采用上例中的方法,將列下標(biāo)都用循環(huán)變量j來代替,得到圖3右上的形式。再次對比圖3右上的4條for語句,不同的是行下標(biāo),同樣用新的循環(huán)變量i來代替,合并后得到圖3右下最終二重for循環(huán)的語句。
三、循環(huán)結(jié)構(gòu)中的效率問題
程序設(shè)計的初學(xué)者往往以完成題目要求的功能為目的,程序的執(zhí)行效率是最容易忽略的一個問題。在循環(huán)結(jié)構(gòu)中,具體表現(xiàn)為循環(huán)體的執(zhí)行次數(shù)。例如,一個經(jīng)典的素數(shù)判定問題。在數(shù)學(xué)中素數(shù)的定義為:素數(shù)即指那些大于1,且除了1和它本身外,不能被其它任何數(shù)整除的數(shù)。根據(jù)這一定義,初學(xué)者很容易編寫出如下所示的程序段:
int isprime(int n)
{
int i;
for(i=2;i<n;i++)
if(n%i==0)return 0;
return 1;
}
上面的程序,完全可以實現(xiàn)題目要求的功能,初學(xué)者往往滿足于此。但是當(dāng)對for循環(huán)的執(zhí)行次數(shù)進(jìn)行分析時,我們發(fā)現(xiàn):當(dāng)n不是素數(shù)時,沒有任何問題;而當(dāng)n是素數(shù)時,循環(huán)體就要執(zhí)行(n-2)次,而實際上是不需要這么多次的。根據(jù)數(shù)學(xué)的知識,可以將次數(shù)降為n/2或n的算術(shù)平方根,這樣可以大大減少循環(huán)體的執(zhí)行次數(shù),提高程序的效率。
程序的執(zhí)行效率是編程中時刻需要考慮的問題,也是程序設(shè)計中的基本要求。這需要許多算法方面的知識,對于初學(xué)者來說,要求可能過高,但是我們在講授過程中要注意向?qū)W生灌輸這種思想,從學(xué)習(xí)之初就要打下良好的基礎(chǔ),尤其是類似上面例子中這樣顯而易見的情況,可以提醒學(xué)生在編制完一道程序以后,檢驗一下,是否還有可優(yōu)化的地方,這對以后進(jìn)一步學(xué)習(xí)高級編程都是必要的。
如何讓一名初學(xué)者盡快擺脫日常的思維定式,更加透徹地理解和掌握程序設(shè)計中的基本思想,領(lǐng)會程序設(shè)計的精髓,是高級語言程序設(shè)計這門課程的講授過程中應(yīng)該時刻注意的問題。希望本文能在這方面起到一點作用。
參考文獻(xiàn):
2、線性表的定義:線性表的順序存儲結(jié)構(gòu)及其插入與刪除運算。棧和隊列的定義;棧和隊列的順序存儲結(jié)構(gòu)及其基本運算。線性單鏈表、雙向鏈表與循環(huán)鏈表的結(jié)構(gòu)及其基本運算。
3、樹的基本概念:二叉樹的定義及其存儲結(jié)構(gòu);二叉樹的前序、中序和后序遍歷。順序查找與二分法查找算法;基本排序算法(交換類排序,選擇類排序,插入類排序)。
4、程序設(shè)計基礎(chǔ):程序設(shè)計方法與風(fēng)格。結(jié)構(gòu)化程序設(shè)計。面向?qū)ο蟮某绦蛟O(shè)計方法,對象,方法,屬性及繼承與多態(tài)性。
5、軟件工程基礎(chǔ):軟件工程基本概念,軟件生命周期概念,軟件工具與軟件開發(fā)環(huán)境。結(jié)構(gòu)化分析方法,數(shù)據(jù)流圖,數(shù)據(jù)字典,軟件需求規(guī)格說明書。結(jié)構(gòu)化設(shè)計方法,總體設(shè)計與詳細(xì)設(shè)計。
6、軟件測試的方法:白盒測試與黑盒測試,測試用例設(shè)計,軟件測試的實施,單元測試、集成測試和系統(tǒng)測試。程序的調(diào)試,靜態(tài)調(diào)試與報考調(diào)試。
7、數(shù)據(jù)庫設(shè)計基礎(chǔ):數(shù)據(jù)庫的基本概念:數(shù)據(jù)庫,數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)模型,實體聯(lián)系模型及 E-R 圖,從 E-R 圖導(dǎo)出關(guān)系數(shù)據(jù)模型。
[關(guān)鍵詞] 程序設(shè)計; 精品課程; 課程體系結(jié)構(gòu)
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2012 . 24. 066
[中圖分類號] G64 [文獻(xiàn)標(biāo)識碼] A [文章編號] 1673 - 0194(2012)24- 0114- 02
本課程從高技能人才的培養(yǎng)要求出發(fā),以強化技術(shù)應(yīng)用能力培養(yǎng)為主線,構(gòu)建理論教學(xué)體系和實踐教學(xué)體系。 VB(Visual Basic簡稱VB,以下同)程序設(shè)計是一門實踐性很強的課程,只聽、看、讀是學(xué)不會程序設(shè)計的,只有讓學(xué)生多動手、多實踐,通過編寫調(diào)試大量的程序,才能使學(xué)生從中理解程序設(shè)計的思想方法、積累程序調(diào)試的經(jīng)驗,體會成功的樂趣,從而激發(fā)學(xué)生的學(xué)習(xí)興趣。我們堅持程序設(shè)計課程以培養(yǎng)學(xué)生的創(chuàng)新意識和動手能力為目的。我們的指導(dǎo)思想是:課堂精講,上機多練,課程設(shè)計綜合實訓(xùn)。 使學(xué)生初步具備設(shè)計、開發(fā)中小型應(yīng)用程序的綜合素質(zhì)和技能。
我們在教學(xué)中,采用任務(wù)驅(qū)動與項目教學(xué)相結(jié)合的方式,以案例提出問題,教師示范解決方案為基本形式,充分調(diào)動學(xué)生學(xué)習(xí)積極性為核心,使學(xué)生在教師的示范過程中,掌握知識點,學(xué)習(xí)分析問題的方法,提高解決問題的能力。在教學(xué)內(nèi)容方面,注意了緊密跟蹤計算機技術(shù)的最新發(fā)展,不斷增加反映 VB程序設(shè)計最新技術(shù)的內(nèi)容,基本做到了與世界同步、與國際接軌。在教學(xué)中,堅決貫徹以實際應(yīng)用為目的,以提高實際編程能力為核心的教學(xué)思想,精講多練,不去糾纏過多的語法和算法,著重培養(yǎng)和訓(xùn)練解決實際問題的能力編程能力,讓學(xué)生在編程中學(xué)編程,取得了較好的教學(xué)效果。
1 課程體系結(jié)構(gòu)的研究與實踐
VB程序設(shè)計是計算機信息管理專業(yè)的一門專業(yè)基礎(chǔ)課程。“程序設(shè)計”是計算機的靈魂,由于VB簡單易學(xué)、方便快捷,是近年來發(fā)展最為迅速的面向?qū)ο蟮某绦蛟O(shè)計語言。
傳統(tǒng)的程序是由過程或函數(shù)組成,過程或函數(shù)由一系列的字符組成,豈不說編寫程序,閱讀起來就晦澀難懂,程序出錯、查錯、修改等都是十分困難的事情。從而,可視化的編程工具應(yīng)運而生,VB就是其中之一。有了可視化的開發(fā)環(huán)境,編程工作變得越來越輕松、有趣味。便編程人員在編寫應(yīng)用程序時,既不需要通過反復(fù)調(diào)試運行調(diào)整它們,而只是把由開發(fā)工具提供的各個對象拖放到屏幕上并調(diào)整位置、大小、顏色、字體等即可。程序運行時所見的結(jié)果就是設(shè)計時調(diào)整的結(jié)果,也就是常說的“所見即所得” 。
鑒此情況,我們對VB程序設(shè)計課程進(jìn)行了專題性的研究,經(jīng)過不斷的教學(xué)改革與研究,逐步完善,已建立了具有全新的課程體系結(jié)構(gòu)。
2 就業(yè)為導(dǎo)向,規(guī)劃課程結(jié)構(gòu)
高等職業(yè)教育是就業(yè)教育,因此我們的課程定位為:培養(yǎng)學(xué)生具有良好的程序設(shè)計風(fēng)格,面對程序設(shè)計具有設(shè)計、編譯、調(diào)試、維護(hù)和重用能力。讓學(xué)生學(xué)會并掌握運用VB程序設(shè)計解決實際問題,利用計算機和編程技術(shù)提高我們的生活效率和工作質(zhì)量,做到事半功倍,也為今后的專業(yè)課打下堅實的基礎(chǔ)。
3 從實用性出發(fā),改革教學(xué)方法
為了實現(xiàn)以就業(yè)為導(dǎo)向,以能力為本位的應(yīng)用性人才的培養(yǎng)目標(biāo),結(jié)合VB程序設(shè)計的基本知識和基本技能,我們對傳統(tǒng)教學(xué)進(jìn)行了改革,以項目為導(dǎo)向,對課程內(nèi)容與時間進(jìn)行了壓縮調(diào)整,同時確保教學(xué)質(zhì)量,對VB程序設(shè)計現(xiàn)有的教材進(jìn)行大力度的改革與補充。
我們采用了“任務(wù)驅(qū)動式”的教學(xué)方法。以“任務(wù)”為目的,以語言理論教學(xué)為過程,最終用語言設(shè)計“任務(wù)”,實現(xiàn)任務(wù)的要求,培養(yǎng)學(xué)生分析問題的能力及統(tǒng)籌全局、協(xié)調(diào)關(guān)系的基本素質(zhì),使學(xué)生樹立面向工程進(jìn)行程序設(shè)計的思想,為其將來從事計算機程序設(shè)計打下良好的基礎(chǔ)。
VB程序設(shè)計采用工學(xué)結(jié)合,以項目為導(dǎo)向的教學(xué)方法。將知識劃分模塊,項目分解。本門課程共分為三大部分:程序設(shè)計基礎(chǔ)、程序設(shè)計技巧和程序設(shè)計應(yīng)用。
VB程序設(shè)計課程設(shè)計的總體理念是第一部分程序設(shè)計基礎(chǔ)講述程序設(shè)計語言基礎(chǔ)知識和設(shè)計規(guī)范;第二部分是對第一部分理論的簡單應(yīng)用,包括程序調(diào)試和程序設(shè)計技巧;第三部分是將第一部分和第二部分運用到實際的項目工程中去。
(1) 程序設(shè)計基礎(chǔ)。在VB程序設(shè)計中非常重要,是程序設(shè)計的理論基石,通過基礎(chǔ)部分的學(xué)習(xí),讓學(xué)生掌握程序設(shè)計的基本理論和基本方法,尤其是養(yǎng)成良好的程序設(shè)計規(guī)范,為后續(xù)課程的學(xué)習(xí)打下良好的基礎(chǔ),也為日后零距離上崗鋪平道路。
(2) 程序設(shè)計技巧。這部分是整個課程的紐帶,起著承前啟后的作用。程序設(shè)計理論乏味枯燥,通過這一部分的趣味小程序,鞏固學(xué)生的理論知識和語言規(guī)范,掌握數(shù)據(jù)的使用方法,掌握鍵盤、鼠標(biāo)的使用技巧,掌握過程和函數(shù)的定義和調(diào)用方法,了解枚舉及自定義數(shù)據(jù)類型等。
(3) 程序設(shè)計應(yīng)用。通對文件管理系統(tǒng)、圖形圖像和多媒體系統(tǒng)、數(shù)據(jù)庫應(yīng)用系統(tǒng)、網(wǎng)絡(luò)類應(yīng)用系統(tǒng)、ActiveX簡單應(yīng)用,按照程序設(shè)計規(guī)范的要求,在教師的組織和協(xié)調(diào)下,獨立上機完成項目。在學(xué)生自己動手的實踐活動中,掌握職業(yè)技能和專用知識,從而構(gòu)建屬于自己的經(jīng)驗和知識體系,提高學(xué)生自己的綜合職業(yè)能力。
本課程以講授為主、輔以演示法、實驗法及討論法等多種靈活多樣的教學(xué)方法,并結(jié)合現(xiàn)代教育技術(shù)手段,有效地調(diào)動學(xué)生的學(xué)習(xí)積極性,促進(jìn)學(xué)生積極思考,激發(fā)學(xué)生潛能。在理論課教學(xué)過程中以講授法為主,通過講授使學(xué)生獲得VB程序設(shè)計課程系統(tǒng)的理論知識。在講授的過程中,課程小組注重講述與講解相結(jié)合。通過講述,使學(xué)生理清VB程序設(shè)計開發(fā)各個環(huán)節(jié)基本內(nèi)容的邏輯性;通過教師運用深入淺出的語言對教學(xué)內(nèi)容進(jìn)行說明、解釋和論證,使學(xué)生理解和掌握VB程序設(shè)計開發(fā)的基本概念和基本原理。具體包括以下5個方面:實施師生互動式教學(xué);實施研究性教學(xué);實施案例分析法教學(xué);實施師生協(xié)作式教學(xué);實施專題討論教學(xué)。
4 加強職教理論研究,深入職教理念改革
我們在VB程序設(shè)計課程的教學(xué)中,盡可能以真實的職業(yè)活動為情境主線,切合學(xué)生認(rèn)知過程,用教材和多媒體為載體,讓學(xué)生在實踐中,掌握程序設(shè)計技能,懂得程序設(shè)計知識,從而構(gòu)建屬于自己的經(jīng)驗和知識技能體系,經(jīng)過多年的實踐,這種以學(xué)生為主,講授和學(xué)生上機4 ∶ 6的教學(xué)過程設(shè)計取得了很好的效果,這為我們進(jìn)一步深化其他職教課程的改革積累了經(jīng)驗,也為推動職教課的建構(gòu)奠定了基礎(chǔ)。
VB程序設(shè)計是一門實踐性很強的課程,在有限的課時中,學(xué)生通過作品參觀、理論學(xué)習(xí)、校內(nèi)實踐和參加技能競賽,這種工學(xué)交替、理論和實踐交融的學(xué)習(xí),由感性認(rèn)識上升到理性認(rèn)識,最后升華到職業(yè)認(rèn)識,以學(xué)生職業(yè)能力發(fā)展為目的,培養(yǎng)“零距離”或“近距離”上崗的程序設(shè)計人才。
5 探索實踐性課程的考核方法
改變了考試的方法,應(yīng)知應(yīng)會的理論知識,采用常規(guī)的考試形式。而對于實踐性較強的內(nèi)容,采用答辯式、撰寫報告等多種形式進(jìn)行考試。學(xué)生結(jié)業(yè)的總成績是本門課程各種形式考核的綜合,今后我們將進(jìn)一步探索以網(wǎng)絡(luò)化學(xué)生自我評價為中心,以職業(yè)能力描述的學(xué)習(xí)目標(biāo)為標(biāo)準(zhǔn)化的考核新模式。
6 教學(xué)模式的設(shè)計
VB程序設(shè)計課程以就業(yè)為導(dǎo)向,以能力為本位和計算機整合的課程,課程建設(shè)突出程序設(shè)計和工程項目開發(fā)。鑒于VB程序設(shè)計課程的特點,基于項目導(dǎo)向的教學(xué)范式,在教學(xué)過程中利用在不同階段和不同目標(biāo)采用了不同的教學(xué)方法:
(1) 以真實和模擬的職業(yè)活動為載體,選取典型真實的工程項目效果為實現(xiàn)目標(biāo),構(gòu)建特定的學(xué)習(xí)情境。
(2) 用仿真模擬課件為載體,在教師的組織和協(xié)調(diào)下,讓學(xué)生通過自己動手完成程序開發(fā)。
(3) 職業(yè)教育是一種“有目標(biāo)的活動”,為此整個教學(xué)和學(xué)習(xí)過程依照職業(yè)的工作過程展開,使生獲得完整的職業(yè)行動能力,最終實現(xiàn)“零距離上崗”的就業(yè)目標(biāo)。
(4) 采用真實職業(yè)環(huán)境與工作要求的考核辦法,全面檢查與評價學(xué)習(xí)效果。在教學(xué)計劃中,設(shè)置課程實訓(xùn)課,通過工程項目應(yīng)用開發(fā),全面考查學(xué)生的學(xué)習(xí)效果;通過答辯、口試與上機抽查測試,考查學(xué)生對知識的掌握程度和實際操作的熟練程度及分析問題與解決問題的能力。
7 特色與創(chuàng)新
(1) 本課程是計算機專業(yè)學(xué)生的基礎(chǔ)課程,注重培養(yǎng)學(xué)生實際編程能力,用以培養(yǎng)學(xué)生分析問題的完備性及統(tǒng)籌全局、協(xié)調(diào)關(guān)系的基本素質(zhì),使學(xué)生樹立面向工程進(jìn)行程序設(shè)計的思想,為其將來從事相關(guān)專業(yè)打下良好的基礎(chǔ);
(2) 本課程采用項目驅(qū)動的教學(xué)方法,將軟件開發(fā)和VB程序設(shè)計緊密結(jié)合;
(3) 用實際工程案例培養(yǎng)學(xué)生實踐水平,為社會提供零距離上崗人才;
(4) 考試方式以筆試、答辯、上機考核等多種形式對學(xué)生進(jìn)行考核。
主要參考文獻(xiàn)
[1] 李勇帆. Visual Basic程序設(shè)計案例教程[M]. 北京:人民郵電出版社,2009.
[2] 李勇帆. Visual Basic程序設(shè)計上機指導(dǎo)與測試[M]. 北京:人民郵電出版社,2009.
關(guān)鍵詞:面向?qū)ο螅怀绦蛟O(shè)計;思維方法
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)17-21493-03
1 引言
程序設(shè)計作為計算機科學(xué)與技術(shù)專業(yè)重要的學(xué)科基礎(chǔ)課,在由基礎(chǔ)訓(xùn)練到專業(yè)課教學(xué)階段過渡過程中起到承上啟下的作用。它不僅為今后學(xué)習(xí)專業(yè)課打下堅實的理論基礎(chǔ)和技術(shù)基礎(chǔ),而且為軟件開發(fā)提供必要的理論、方法和工具。由于面向?qū)ο蟪绦蛟O(shè)計是程序設(shè)計發(fā)展的趨勢,越來越多的大學(xué)已經(jīng)開設(shè)C++、Java、Delphi等面向?qū)ο缶幊陶Z言,作為學(xué)生學(xué)習(xí)程序設(shè)計的重要課程。面向?qū)ο缶幊陶Z言的教學(xué)過程中,要注重向?qū)W生傳授面向?qū)ο蟮幕舅枷牒头椒ǎ驗樗鼈儗幊虒嵺`具有普遍的指導(dǎo)意義。
2 面向?qū)ο笏枷氲闹匾?/p>
傳統(tǒng)的程序設(shè)計是面向過程的,采用結(jié)構(gòu)化程序設(shè)計思想。這種方法主要是圍繞設(shè)計算法來進(jìn)行的,即在程序設(shè)計過程中常常考慮的問題是采用什么樣的解題方法和步驟。程序設(shè)計工作的本質(zhì)是功能分解,采用“自頂向下、逐步求精”的方法,把所要開發(fā)的應(yīng)用程序系統(tǒng)功能分解為若干子功能,針對每個子功能編寫程序模塊,所有功能都隱含在程序代碼中。當(dāng)程序較大和較復(fù)雜時,各類數(shù)據(jù)及實現(xiàn)不同功能的過程之間的聯(lián)系變得復(fù)雜,以致于程序可靠性低,維護(hù)性較差。
面向?qū)ο笫亲越Y(jié)構(gòu)化方法以來對系統(tǒng)開發(fā)過程的最重要的變革,在20世紀(jì)90年代,它代替了結(jié)構(gòu)化方法而成為軟件開發(fā)的主要方法。這種開發(fā)策略基于下面的概念,即系統(tǒng)可以由一系列稱作對象的可重用組件來構(gòu)建。對象是面向?qū)ο笙到y(tǒng)的基本思維單位,與結(jié)構(gòu)化方法里分離數(shù)據(jù)和功能不同,對象包含了它們兩者,具有一定的屬性(數(shù)據(jù))和行為(功能)。它的實質(zhì)是從系統(tǒng)組成的角度對系統(tǒng)進(jìn)行分析,利用類及對象作為基本構(gòu)造單元,使設(shè)計出的軟件模塊化、可復(fù)用性、易于維護(hù),降低開發(fā)維護(hù)費用,提高軟件質(zhì)量。
面向?qū)ο蟮木柙谟诳紤]問題的思路是從現(xiàn)實世界的人類思維習(xí)慣出發(fā)的。面向?qū)ο笳Z言對程序設(shè)計的主要影響并不在于它的語法特征,而在于它所提供的自然的問題求解機制和結(jié)構(gòu)。要理解面向?qū)ο笳Z言的能力,應(yīng)首先理解面向?qū)ο蠹夹g(shù)的基本原理和基本思想。使用面向?qū)ο缶幊坦ぞ撸绻麤]有面向?qū)ο蟮木幊趟枷耄帽取安徊炱滢o”,最終仍然是“近而不可見”,難以開發(fā)出優(yōu)秀的系統(tǒng)。教學(xué)過程中要注意提醒學(xué)生面向?qū)ο笫且环N新的思維模式,不要只把注意力錯誤地放到語法規(guī)范的學(xué)習(xí)方面,而忽略了對于面向?qū)ο蠓椒ǖ膶W(xué)習(xí)和理解。
3 面向?qū)ο缶幊趟枷氲呐囵B(yǎng)
在面向?qū)ο蟪绦蛟O(shè)計中,有三個基本的原則思想,它們是封裝、繼承和多態(tài)性編程思想,只有掌握這些思想“利器”,才能把它們有效地用于指導(dǎo)實際編程。教學(xué)過程中要著重闡述這些思想方法。
3.1 引導(dǎo)學(xué)生認(rèn)識封裝性,學(xué)會使用對象構(gòu)造程序
面向?qū)ο蟪绦蛟O(shè)計方法是以對象為核心,把程序看作是相互協(xié)作又彼此獨立的對象的集合。因此,教學(xué)過程中訓(xùn)練學(xué)生的編程思維時,要擺脫傳統(tǒng)的面向過程思維方式的束縛,首先要考慮使用什么對象來解決問題,如何設(shè)計對象以及如何讓對象發(fā)生聯(lián)系,即學(xué)會以對象為基本模塊來構(gòu)造程序。
在進(jìn)行面向?qū)ο蟪绦蛟O(shè)計時,一一去描述同類對象既不可能也是極大的工作重復(fù),例如,設(shè)計一個求圓面積的程序時,不可能一一描述每個圓對象。為了克服類似的復(fù)雜性,在程序設(shè)計時,采用了人們在處理復(fù)雜問題時常用的一種方法―抽象,它是將做什么和怎么做分開,從而隱藏了問題的復(fù)雜性。在面向?qū)ο蟪绦蛟O(shè)計中,抽象是最基本的原則之一,包括數(shù)據(jù)抽象和行為抽象。數(shù)據(jù)抽象是抽象出某類對象的公共屬性,行為抽象是抽象出某類對象的公共行為。這樣,用抽象的方法抓住了編程者所關(guān)心的重要信息,而忽略掉一些不重要的細(xì)節(jié)部分,從而找到了一類對象的抽象數(shù)據(jù)類型。然后,用面向?qū)ο缶幊坦ぞ叩念悪C制把一類對象共有屬性的數(shù)據(jù)結(jié)構(gòu)和操作該數(shù)據(jù)結(jié)構(gòu)的行為捆綁在一起,封裝在一個程序?qū)嶓w內(nèi)定義成一種類類型,這一過程就是數(shù)據(jù)封裝,簡稱封裝。
下面是對圓對象抽象封裝后得到的C++類:
class Circle{
private:
int radius; //數(shù)據(jù)成員
public:
Circle(int r){radius=r;}//成員函數(shù)
double area(){return 3.14*radius*radius;}//成員函數(shù)
};
從上面的例子中看出,編程工具提供的類機制把對象的數(shù)據(jù)結(jié)構(gòu)和使用數(shù)據(jù)結(jié)構(gòu)的操作封裝在一起,并且通常將數(shù)據(jù)結(jié)構(gòu)部分聲明為private訪問屬性而使其不能被外界直接訪問,或者說對外界隱藏,而只能通過在這個數(shù)據(jù)結(jié)構(gòu)上定義的public訪問屬性的操作接口間接地訪問數(shù)據(jù)結(jié)構(gòu),使數(shù)據(jù)結(jié)構(gòu)被隱藏在操作接口背后,操作的實現(xiàn)細(xì)節(jié)也一樣被隱藏在操作接口的背后;達(dá)到了封裝數(shù)據(jù)結(jié)構(gòu)的目的,這種編程思想使得類的使用者只需知道操作的接口,而沒有必要了解數(shù)據(jù)結(jié)構(gòu)及在數(shù)據(jù)結(jié)構(gòu)上的操作的實現(xiàn)細(xì)節(jié),大大減輕了使用者的負(fù)擔(dān)。另外,當(dāng)類的數(shù)據(jù)結(jié)構(gòu)或操作的實現(xiàn)被修改時,只要操作的接口不變,使用類的程序的其余部分則不必修改,有利于程序的維護(hù)。
在定義類之后,以類為模型生成所需的對象,不同對象之間通過發(fā)送消息向其他對象提出服務(wù)請求,接受消息的對象主動完成指定的功能,整個程序的功能由所有對象共同完成。例如,在C++程序中編寫下面的代碼,生成了兩個圓對象,并向它們發(fā)消息要求計算自身的面積:
Circle c1(3),c2(5);
c1.area();c2.area();
3.2 領(lǐng)悟繼承性,實現(xiàn)代碼重用
繼承可以說是面向?qū)ο蟪绦蛟O(shè)計的最重要特點,它不僅自然地體現(xiàn)了現(xiàn)實世界中對象的一般和特殊關(guān)系,而且很好地解決了軟件的可重用性問題。在教學(xué)過程中可以通過實例,使學(xué)生領(lǐng)悟繼承性的“真諦”,并通過它合理地實現(xiàn)代碼重用。
所謂繼承,是指子類自動擁有父類的屬性和操作,并可以增加自己的新的屬性和操作,這就為面向?qū)ο蟪绦蛟O(shè)計的代碼重用提供了很好的方法支持。在繼承關(guān)系中子類還可以被繼承得到子類,如此下去,使得類與類間的繼承關(guān)系形成多層次結(jié)構(gòu),從而能很好地刻畫現(xiàn)實世界中存在的多層次關(guān)系。例如,針對某小型公司編寫計算雇員工資的程序,首先,根據(jù)工資計算方法的不同,分析得出該公司存在經(jīng)理、技術(shù)人員、銷售員、銷售經(jīng)理四種類型的雇員。根據(jù)各類雇員之間的聯(lián)系,抽取姓名、工號等共性形成頂層的雇員類,經(jīng)理、技術(shù)人員、銷售員三個類由雇員類派生而來,雇員類中增加級別屬性,技術(shù)人員類中增加專業(yè)屬性,銷售員類中增加銷售額屬性;而銷售經(jīng)理又繼承了經(jīng)理和銷售員兩個類,形成軟件系統(tǒng)的類的層次結(jié)構(gòu)。下面是雇員類與經(jīng)理類的C++定義:
class employee{
char name[10];//姓名
unsigned no; //工號
……
};
class manager: public employee{
int level; //級別
……
};
利用繼承與派生機制,對于類似的問題或只有部分類似的問題都可以通過從已定義的類派生出新類來解決,避免了重復(fù)。即繼承性使得用戶在開發(fā)新的應(yīng)用系統(tǒng)時不必完全從零開始,可以繼承原有的相似系統(tǒng)的功能或者從類庫中選取需要的類,再派生出新的類以實現(xiàn)所需要的功能。繼承機制實現(xiàn)了代碼的重用,加快和簡化了程序設(shè)計,極大地提高了開發(fā)效率。
3.3 靈活運用多態(tài)性,簡化程序處理邏輯
在面向?qū)ο蟪绦蛟O(shè)計領(lǐng)域,多態(tài)性通常特指如下機制:派生類對象可以象基類對象一樣使用,同樣的消息既可以發(fā)送給基類對象也可以發(fā)送給派生類對象。也就是說,在類等級的不同層次中可以共享一個行為的名字,但是不同層次中的類卻各自按自己的需要來實現(xiàn)這個行為。當(dāng)一個對象接收到發(fā)送給它的消息時,根據(jù)該對象所屬于的類動態(tài)地選用該類中定義的實現(xiàn)算法。
例如,C++語言中是通過虛函數(shù)來實現(xiàn)多態(tài)性的,對于上面提到的計算雇員工資的問題,因為各種類型的雇員的工資計算方法不同,在雇員類、經(jīng)理、技術(shù)人員、銷售員類中分別定義如下虛函數(shù):
virtual double salary()=0;
virtual double salary(){ return 5000+level*100; }
virtual double salary(){ return 3000+hour*50; }
virtual double salary(){ return sales*0.04; }
對上述幾個類構(gòu)成的簡單的類層次結(jié)構(gòu), 可以用如下的代碼計算工資:
void ShowSalry(const employee& r){cout
并且,可按下面的方式使用多態(tài)程序段:
void main(){
manager e1("Tom",1001,5);
technician e2("Sue",2023,30),
salesman e3("Liu",2012,30);
ShowSalry(e1);
ShowSalry(e2);
ShowSalry(e3);
可見,多態(tài)性為統(tǒng)一地處理一組接口相同但實現(xiàn)不同的操作提供了極好的方法支持, 是一種形而上學(xué)的方法, 它使程序邏輯簡單明了、可讀性強。此外, 多態(tài)性還能使程序擴充特別容易,例如,如果我們還希望求其它類型雇員的工資,只需要從employee類直接或間接派生出該類并為其定義不同版本的salary函數(shù),而多態(tài)程序段保持不變。
多態(tài)性機制不僅增加了面向?qū)ο筌浖到y(tǒng)的靈活性,而且進(jìn)一步減少了冗余信息,顯著提高了軟件的可重用性和可擴充性。
4 總結(jié)
正是由于封裝、繼承和多態(tài)性編程思想, 使面向?qū)ο蟮某绦蛟O(shè)計方法能自然、 準(zhǔn)確地模擬現(xiàn)實世界的問題。面向?qū)ο蟪绦虻慕虒W(xué),要重視對學(xué)生進(jìn)行面向?qū)ο笏枷氲呐囵B(yǎng),只有掌握了面向?qū)ο筮@一優(yōu)秀的理論工具,才能運用面向?qū)ο蟮乃枷敕治觥⒃O(shè)計,并利用語言支持和實現(xiàn)面向?qū)ο罄碚摰恼Z法結(jié)構(gòu)去編程解決問題,編程過程中可以方便地共享已有的軟件資源和程序代碼,從而大幅度提高軟件的開發(fā)效率和減少今后的軟件維護(hù)工作量。
參考文獻(xiàn):
[1] 楊芙清. 面向?qū)ο蟮南到y(tǒng)分析[M]. 北京:清華大學(xué)出版社,1998.5.
[2] Ian Graham. 袁兆山 譯. 面向?qū)ο蠓椒ㄔ砼c實踐[M]. 北京:機械工業(yè)出版社,2003.1.
[3] 呂鳳翥. C++語言基礎(chǔ)教程[M]. 北京:清華大學(xué)出版社,1999.