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