摘要:本文分析了程序的功能成分和高級語言的功能成分以及算法的意念作用,指出了高級語言的各功能成分與程序設(shè)計(jì)之間的關(guān)系,提出了“高級語言程序設(shè)計(jì)”的功能意念教學(xué)法
關(guān)鍵詞:程序設(shè)計(jì);高級語言;算法設(shè)計(jì);功能意念
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
1引言
“高級語言程序設(shè)計(jì)”是各類學(xué)校計(jì)算機(jī)相關(guān)專業(yè)的一門重要的專業(yè)基礎(chǔ)課,許多學(xué)校都將其安排在新生入學(xué)后的第一學(xué)期開設(shè)。
對剛接觸這門課程的學(xué)生而言,“高級語言程序設(shè)計(jì)”課程的中心內(nèi)容包括兩個部分:高級語言和程序設(shè)計(jì)。從高級語言和程序設(shè)計(jì)的關(guān)系來說,程序設(shè)計(jì)應(yīng)該是這門課程的核心內(nèi)容。
對于如何搞好“高級語言程序設(shè)計(jì)“的教學(xué),不同的人有不同的看法。筆者在多年的教學(xué)實(shí)踐中,多次嘗試采用“功能意念教學(xué)法”,取得了教好的效果。本文就是這一教學(xué)法的簡單總結(jié)。
2功能意念教學(xué)法
“高級語言程序設(shè)計(jì)”的功能意念教學(xué)法就是從程序的一般功能、程序的一般結(jié)構(gòu)以及程序設(shè)計(jì)的一般過程出發(fā),按照功能+意念+機(jī)制的方式組織教學(xué)。簡單地說,就是為了設(shè)計(jì)一個程序,先解決我們需要做些什么,然后解決程序需要做些什么,最后解決高級語言怎么做到等一序列問題,也就是從問題和任務(wù)出發(fā)進(jìn)行教學(xué)。
以上所述主要圍繞程序最基本的功能展開,至于其它功能部分,比如C語言的編譯預(yù)處理、宏、模塊化、混合語言編程、指針、文件、鏈表等,也可以從功能意念的角度展開教學(xué)。
在具體實(shí)施教學(xué)的過程中,可以根據(jù)教學(xué)要求按照自頂向下的原則制定出所教授的高級語言的基本功能意念表,以方便教學(xué)。
3算法的意念作用
筆者認(rèn)為,程序設(shè)計(jì)其實(shí)就是為了解決某個問題而從我們所熟悉的程序設(shè)計(jì)語言中挑選合適的語句做一個適當(dāng)?shù)呐帕薪M合。
在上面的這段話中,明顯地有兩個值得我們進(jìn)一步探討的關(guān)鍵詞:合適的語句和適當(dāng)?shù)呐帕薪M合?,F(xiàn)在我們的問題是,如何挑選合適的語句?又怎樣做適當(dāng)?shù)呐帕薪M合?
這兩個問題的解決有賴于所謂算法的概念。因此,為了解決這兩個問題,我們必須針對面臨的具體問題設(shè)計(jì)出有效的算法。
算法是解決特定問題的一序列操作的集合,代表的就是一種意念,換言之,就是設(shè)計(jì)者所希望的對數(shù)據(jù)進(jìn)行加工處理的有序的步驟。這種操作步驟的有序性就決定了如何對所挑選的語句做適當(dāng)?shù)呐帕薪M合。
由粗到細(xì)是我們解決問題的一種典型的思維過程。按照這一思維特點(diǎn),算法設(shè)計(jì)也有一個由粗到細(xì)的過程,即算法細(xì)化。
算法細(xì)化要適可而止,即有一個度的問題,那么我們又該如何把握這個度呢?一般而言,算法細(xì)化只要細(xì)化到其中的每一操作步在準(zhǔn)備采用的語言中都能找到對應(yīng)的語句直接加以實(shí)現(xiàn)即可,而且也必須細(xì)化到這種程度!算法細(xì)化好了,如何挑選合適的語句也就解決了。
總之,算法決定了如何挑選合適的語句以及怎樣對所挑選的語句做適當(dāng)?shù)呐帕薪M合!因此有了算法,我們只需要通過很簡單的翻譯轉(zhuǎn)換就可以很容易地得到程序。
4高級語言的相關(guān)功能成分
高級語言是書寫和記錄程序的工具。為了適應(yīng)程序的功能需要,高級語言自然應(yīng)該提供相應(yīng)的手段或機(jī)制讓程序設(shè)計(jì)人員借以實(shí)現(xiàn)所需要的程序功能,高級語言的相關(guān)功能成分指的就是這些手段和機(jī)制。
4.1數(shù)據(jù)安排機(jī)制
高級程序設(shè)計(jì)語言中的數(shù)據(jù)安排機(jī)制主要體現(xiàn)為用于定義常量、變量、數(shù)組和記錄(或結(jié)構(gòu)體)等的功能成分。單純從語言成分的角度來看,這些功能的實(shí)現(xiàn)主要是由一組和數(shù)據(jù)類型有關(guān)的關(guān)鍵字來體現(xiàn)的。換言之,高級語言為我們提供了一組與數(shù)據(jù)類型有關(guān)的關(guān)鍵字以便程序設(shè)計(jì)人員根據(jù)自己的意愿對數(shù)據(jù)空間進(jìn)行組織和安排。以C語言為例,這些關(guān)鍵字主要有:char、int、float、double、struct以及signed、unsigned、short、long,等等。在源程序中來看,數(shù)據(jù)空間的組織和安排都是通過基于上述關(guān)鍵字的數(shù)據(jù)定義語句來實(shí)現(xiàn)的,比如:
1)int abc;
2)char abc[12] ;
3)*float abc;
4)struct abc{x char;y int;z float;}
struct abc xyz;
作為程序設(shè)計(jì)的工具,為了盡可能給程序設(shè)計(jì)人員帶來方便,高級語言除了支持基本數(shù)據(jù)類型外,還支持用戶自定義類型,如上面的例4)。
4.2數(shù)據(jù)I/O機(jī)制
高級語言中的數(shù)據(jù)I/O機(jī)制主要體現(xiàn)為各種用于數(shù)據(jù)輸入/輸出的語句或函數(shù)(庫函數(shù))等。在C語言中,這些函數(shù)常用的有:
fprintf、printf、sprintf、vprintf、vfprintf、vsprintf、
fscanf、scanf、sscanf、fgetc、fputc、getc、putc、getchar、putchar、fgets、fputs、pus、gets等。
以上列出的是所謂系統(tǒng)預(yù)定義函數(shù),即標(biāo)準(zhǔn)函數(shù)或庫函數(shù)。此外,用戶還可以根據(jù)自己的需要以上述標(biāo)準(zhǔn)函數(shù)為基礎(chǔ)自行定義一些可以得到某些特殊I/O效果的函數(shù)。
4.3數(shù)據(jù)處理機(jī)制
前面已經(jīng)提到,數(shù)據(jù)的內(nèi)部加工處理主要包括數(shù)據(jù)在主機(jī)內(nèi)部的傳送和各種運(yùn)算,高級語言的數(shù)據(jù)處理機(jī)制就
是指為此目的而提供的各種運(yùn)算符。在C語言中,這些運(yùn)算符包括為數(shù)據(jù)傳送提供的賦值運(yùn)算符“=”和為數(shù)據(jù)運(yùn)算提供的算術(shù)運(yùn)算符“+、-、*、/、%、++、--”、關(guān)系運(yùn)算符“>、>=、<、<=、==、|=”、邏輯運(yùn)算符“、||、!”和位運(yùn)算符“、|、~、<<、>>”等等。
4.4流程控制機(jī)制
高級語言中的流程控制機(jī)制主要體現(xiàn)為用來實(shí)現(xiàn)分支程序結(jié)構(gòu)、循環(huán)程序結(jié)構(gòu)以及子程序結(jié)構(gòu)的功能成分,換言之,就是分支語句、循環(huán)語句以及子程序的定義和調(diào)用機(jī)制等。在C語言中,這些語句包括:if語句、switch語句、goto語句、break語句、continue語句、for語句、while語句、do…while語句以及return語句等。
5結(jié)束語
歷史上高級程序設(shè)計(jì)語言有好多種,目前仍然流行的也有好幾種,而且還在不斷的推陳出新。從“功能意念”的角度,不難看出,所有的高級語言都應(yīng)該有相類似的功能成分,以解決程序設(shè)計(jì)所面臨的共同問題。因此,只要我們認(rèn)真地學(xué)好一種語言,重點(diǎn)掌握好程序設(shè)計(jì)的一般思想方法,就可以很容易地掌握另外一種。從一種語言過渡到另一種語言,從語言的角度來說,只不過是一種形式上的轉(zhuǎn)換而已,它們的內(nèi)容(程序的功能)和程序設(shè)計(jì)的思想和方法卻總是相通的。
參考文獻(xiàn):
[1] 譚浩強(qiáng). C程序設(shè)計(jì)(第三版)[M]. 北京:清華大學(xué)出版社,2005.
[2] Brian W.Kernighan, Dennis M. Ritchie. C程序設(shè)計(jì)語言(第二版)[M]. 北京:清華大學(xué)出版社,2002.
[3] Bruce Eckel著. 劉宗田等譯. C++編程思想第1卷:標(biāo)準(zhǔn)C++導(dǎo)引[M]. 北京:機(jī)械工業(yè)出版社,2002.
[4] 鄭啟華. PASCAL程序設(shè)計(jì)(第二版)[M]. 北京:清華大學(xué)出版社,1996.
[5] 沈軍. 程序設(shè)計(jì)方法解析——Java描述[M]. 北京:清華大學(xué)出版社,2004.
[6] 覃征,虞凡等著. 程序設(shè)計(jì)方法與優(yōu)化(第二版)[M]. 西安交通大學(xué)出版社,2007.