c語言編程范文

時間:2023-04-09 13:08:07

導(dǎo)語:如何才能寫好一篇c語言編程,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

c語言編程

篇1

關(guān)鍵詞:C語言;學(xué)習(xí);編程

1 C語言的特點和優(yōu)勢

C語言是學(xué)習(xí)編程語言的基礎(chǔ),它集合了很多語言的特點,我們都知道語言之間是相同的,而C語言能夠把很多語言的特點集中起來,有高級語言和低級語言的特點,能夠編輯系統(tǒng)軟件和應(yīng)用軟件,所以C語言是一個非常重要的語言。要想學(xué)好C語言,首先要了解下它的歷史,1970年美國AT&T貝爾實驗室的Ken Thompson以BCPL語言為基礎(chǔ)設(shè)計出很簡單很接近硬件的B語言,但B語言過于簡單,功能有限,繼而在1972年―1973年期間美國貝爾實驗室D.M在B語言的基礎(chǔ)上設(shè)計出C語言,所以C語言用起來非常的方便,能夠給程序帶來自由和便利,這也是很多軟件用它的原因之一。在C語言的語法中,運算和程序書寫是非常豐富的,在編寫程序的過程中能夠用到的運算方法有很多,可以實現(xiàn)很多高級程序無法實現(xiàn)的功能,使用起來靈活多樣,能實現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運算。C語言還能夠直接的訪問物理地址進(jìn)行各種操作,非常方便的對程序進(jìn)行控制和編譯。

2 學(xué)習(xí)枯燥乏味之理由

在學(xué)習(xí)C語言的過程中很多學(xué)生對C語言提不起任何的興趣,導(dǎo)致在上課的時候壓力很大,聽不進(jìn)去,甚至無法理解。C語言的功能非常強大,這是我們學(xué)習(xí)的最基本理由,而且目前C語言的用途很廣,收到計算機方向的重視,所以我們也必須對自己要重視起來,大部分同學(xué)在學(xué)習(xí)起來覺得很枯燥,理論的東西很難記住,對C語言的認(rèn)識也不夠深入,所以會造成一個學(xué)期學(xué)完之后反過來想想,覺得一無所獲。那究其緣由為何會出現(xiàn)這樣的情況呢?

個人認(rèn)為首先一個是教學(xué)方式上,C語言的理論東西偏多,不能通過一些直接的感官方式給學(xué)生,造成學(xué)生的理解困難,如果能通過很直觀的方式來呈現(xiàn)內(nèi)容的話效果應(yīng)該會比較好,比如說多進(jìn)行上機的操作,讓程序能夠通過界面的方式反饋出來等等。

其次是在C語言中有很多的算法和結(jié)構(gòu)讓很多同學(xué)覺得眼花,很多同學(xué)只是簡單的靠記憶把他記憶下來,這樣效果就很低,而且非??菰?,應(yīng)該要通過更多的實踐練習(xí)掌握它們的規(guī)律和方法。

最后就是教師在教學(xué)上應(yīng)該要注重教學(xué)方法,不能僅僅簡單的理論教學(xué)和實踐教學(xué),應(yīng)該把學(xué)生放在第一位,能夠聽懂才是關(guān)鍵,否則一堂課下來內(nèi)容講完了,學(xué)生收不到你的效果。教師在課堂講解的過程中除了課程教授之外,還要傳達(dá)C語言在整個計算機學(xué)習(xí)中的重要性,讓學(xué)生更加深入的去理解和分析,增強他們的學(xué)習(xí)興趣,這個才是關(guān)鍵。

3 編程技巧

同學(xué)們之所以學(xué)習(xí)的非常吃力,覺得C語言很枯燥,歸根結(jié)底是沒有掌握到C語言的學(xué)習(xí)技巧,其實對于初學(xué)者來說覺得學(xué)習(xí)吃力是正常的,學(xué)習(xí)任何一門語言都是有一個過程的,關(guān)鍵問題在于你要掌握其精髓的地方,只要掌握了重點一定能夠?qū)W好語言。對于C語言我們應(yīng)該要更加注重其編程技巧,接下來就闡述幾個比較有用的技巧。

⑴指針掌握。指針的掌握在C語言中是非常重要的,也是C語言中一個非常重要的技巧之一。指針能夠在運算的過程中提高速度,讓整個編程的語句變得更加簡單,不足的地方就是消耗的內(nèi)存要大點,但是和整個編程語言來說微不足道,如果本身內(nèi)存就有富裕的話那么就一點問題都沒有了,所以同學(xué)們在學(xué)習(xí)這一章的時候一定要加強自我的學(xué)習(xí)能力,除了老師上課講的知識之外,可以多去網(wǎng)上找相關(guān)資料進(jìn)行補充,把指針這一章做好學(xué)習(xí)。

⑵數(shù)學(xué)知識掌握。數(shù)學(xué)知識在整個計算機學(xué)習(xí)的過程中是非常重要的,能夠解決C語言中的很多問題,IT界有句話叫“數(shù)學(xué)是計算機之母”,由此可見數(shù)學(xué)在計算機學(xué)習(xí)中的重要地位。同時,在整個C語言的學(xué)習(xí)中如果能夠很好的用到數(shù)學(xué)思想的話也能夠促進(jìn)學(xué)習(xí),在編程之前首先進(jìn)行分析,通過什么樣的算法能夠更加簡單,這就是數(shù)學(xué)的一種運用,所以數(shù)學(xué)知識對學(xué)習(xí)編程語言非常有作用。

⑶位運算的掌握。使用位運算可以使代碼更簡潔,效率更高)使問題得到解決。其實在所有的計算機程序中可以說位是最小的數(shù)據(jù)單位,一般而言所有的運算和操作都可以通過“位運算”來解決,這足見“位”在編程語言中的重要性。在C語言當(dāng)中去應(yīng)用能夠提高效率,解決更多的問題。

當(dāng)然不管什么樣的技巧,應(yīng)該具體問題具體分析,上述只是個人的一些看法,總體來說能夠提高編程效率,通過讓同學(xué)們不會感到枯燥,讓C語言更加廣泛的應(yīng)用。

4 總結(jié)

總的來說,C語言的功能非常強大,所以作為我們學(xué)生有責(zé)任要把它學(xué)好,為今后的就業(yè)打下基礎(chǔ)。C語言作為高校的一門公共基礎(chǔ)課,不僅僅是計算機專業(yè)開設(shè)了,其他非計算機專業(yè)的同學(xué)也要進(jìn)行學(xué)習(xí),所以學(xué)好C語言能夠提高自己的編程效率和對編程語言的理解,對整個計算機語言的學(xué)習(xí)是非常有作用的。希望通過我的個人拙見,讓更多的同學(xué)學(xué)習(xí)C語言,而且能夠掌握,培養(yǎng)自己的編程能力,這樣才能更好的服務(wù)社會。

[參考文獻(xiàn)]

[1]李自清.淺談C語言編程中的常見錯誤和解決方法[J].科技信息(科學(xué)教研),2007(33).

篇2

【關(guān)鍵詞】堆棧;緩沖區(qū);函數(shù)調(diào)用;指針

中圖分類號:TP39文獻(xiàn)標(biāo)識碼A文章編號1006-0278(2015)09-122-01

C語言是一種面向過程的計算機語言,它的表現(xiàn)能力和處理能力極強,具有豐富的運算符和數(shù)據(jù)類型,便于實現(xiàn)各類復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。它還可以直接訪問內(nèi)存的物理地址,進(jìn)行基于bit位的操作。它的編寫不依賴計算機硬件的應(yīng)用程序,又可以編寫多種程序。

雖然C語言具備多種優(yōu)點,但也其存在著不少的缺點。常常會出現(xiàn)很多問題從而導(dǎo)致程序運行錯誤。循環(huán)語句是一個非常好的結(jié)構(gòu),它可以節(jié)省很多代碼,使程序代碼看起來非常簡單。而對于嵌套循環(huán)更是非常精妙,能夠解決很多問題,但是由于內(nèi)循環(huán)和外循環(huán)的退出條件不同,在某種沒有考慮到的異常情況下容易導(dǎo)致死循環(huán),從而造成災(zāi)難性的后果。因此,對于一個可靠性要求比較高的程序來說,盡可能減少嵌套循環(huán)的使用,只要有可能就把它寫成幾個單獨的循環(huán),對于有十足把握的嵌套循環(huán),也不建議使用。堆棧一般程序默認(rèn)的堆棧大小約為1M,雖然程序堆棧大小可以設(shè)置,但是為程序堆棧設(shè)置較大的值,可能增加內(nèi)存的開銷和啟動時間。因此在程序設(shè)計時不盲目的為程序設(shè)置很大的堆??臻g。因此對于一個大型程序開發(fā),必須要考慮每個函數(shù)的堆棧的使用,對于多線程來說,每個函數(shù)盡可能節(jié)省有限的堆棧空間。特別忌諱在函數(shù)中定義局部變量的大型數(shù)組,如果在函數(shù)中定義一個局部變量的大型數(shù)組,就有可能導(dǎo)致定義的數(shù)組覆蓋堆棧段或代碼段中的數(shù)據(jù),從而造成程序的崩潰。為節(jié)省有限的堆棧段空間:避免使用局部變量的大型數(shù)組;盡量避免用長調(diào)用或遞歸函數(shù);避免傳遞大型結(jié)構(gòu)體,建議用指針代替;定義短壽命變量(像auto類型)。在熟悉匯編語言的人眼里,C語言編寫的程序不值得一提,就像C語言和其它高級語言相比。這種說法雖然有些偏激,但是卻有它的道理,因為匯編語言是效率最高的計算機語言。不過匯編語言也有它明顯的缺點,它太繁瑣,不宜閱讀,我們不能用匯編語言來寫一個幾十萬行沒有什么人能夠讀懂代碼的程序。所以,為了寫一個復(fù)雜的大型軟件,同時為了獲得程序的高效率,我們可以采用變通的方法,在C代碼中嵌入?yún)R編,混合編程。這樣既提高了效率,又增加了可讀性。

上面幾種問題是初學(xué)者經(jīng)常遇到的幾種典型問題,隨著學(xué)習(xí)的深入,還有一些初學(xué)者不易發(fā)現(xiàn)的問題也是至關(guān)重要的。

一、緩沖區(qū)溢出問題

緩沖區(qū)用于存放給定類型的數(shù)據(jù),是內(nèi)存的連續(xù)塊。一些C語言的基本函數(shù)如內(nèi)存的拷貝函數(shù),字符串的拷貝函數(shù)本身的安全性比較差,這些標(biāo)準(zhǔn)函數(shù)不判定原內(nèi)容和目的內(nèi)容的長度,當(dāng)原內(nèi)容長度大于目的內(nèi)容長度的時候,可能會出現(xiàn)字符串過長導(dǎo)致覆蓋了相鄰存儲單元,進(jìn)而導(dǎo)致程序運行錯誤,導(dǎo)致程序崩盤。

這種情況可以在編寫的代碼中檢查所有對數(shù)組的讀/寫操作,以確保對數(shù)組的操作在正確的范圍,但是這樣會使程序在性能上受到很大影響。例如strcpy函數(shù)經(jīng)常被用錯,進(jìn)而造成了緩沖區(qū)溢出的風(fēng)險。在執(zhí)行strcpy函數(shù)前,必須保證目標(biāo)源有足夠的空間容納數(shù)據(jù),這個是極為重要的。另外,對源數(shù)據(jù)存儲空間的限制也是一種較好的辦法,這不僅會使得應(yīng)用程序更為有效,而且也降低了緩沖區(qū)溢出問題。當(dāng)然這個函數(shù)相對應(yīng)的安全函數(shù)是strncpy函數(shù)。但這個函數(shù)常見的錯誤就是在人們對于這個函數(shù)的count值計算來源:很多人是用目標(biāo)緩沖區(qū)的字節(jié)總數(shù)作為count值,而實際上應(yīng)該是留在緩沖區(qū)的字符數(shù)目作為count值。

二、指針的使用

C語言的難點和精華就是C語言的指針,指針的種類就有很多,例如:整數(shù)指針變量、字符指針變量、指向整數(shù)指針的指針、整數(shù)數(shù)組指針、整數(shù)指針數(shù)組、指向整數(shù)數(shù)組指針的指針等。對于初學(xué)者來說,還沒有看完估計就沒有信心了。其實指針也非常簡單,別看它的定義很復(fù)雜,和普通變量相比,普通變量是用來表示一個數(shù)據(jù),每一個數(shù)據(jù)都存在計算機的地址中;而指針是用來表示一個計算機的地址,對于一個32位程序,所有類型的指針的值都是一個32位整數(shù),它的值是0x0000-0xffff中的一個。只要把指針理解為匯編中的計算機內(nèi)存地址,應(yīng)該就能更好的理解指針的功能了。上面這些指針是比較常見的,其實C語言中還有一種“野指針”,我們都知道“野指針”不是NULL指針,是指向“垃圾”內(nèi)存的指針?!耙爸羔槨笔呛芪kU的,有時會讓人誤以為該指針合法,有時候會讓程序崩潰。

避免“野指針”的產(chǎn)生要注意這幾種情況,例如:指針變量沒有被初始化。任何指針變量剛被創(chuàng)建時不會自動成為NULL指針,它的缺省值是隨機的;第二種是指針p被free或者delete之后,沒有置為NULL,讓人誤以為p是個合法的指針;第三種情況發(fā)生在指針操作超越了變量的作用域范圍。

三、系統(tǒng)調(diào)用

系統(tǒng)調(diào)用就是在用戶層和核心層之間的層次與接口。系統(tǒng)調(diào)用模塊的預(yù)先設(shè)定,提供了用戶與應(yīng)用程序的核心程序服務(wù)。在一般的操作系統(tǒng)中,只有操作系統(tǒng)才能有權(quán)訪問系統(tǒng)硬件,而用戶和程序是無法對設(shè)備直接訪問。所以需要系統(tǒng)調(diào)用來為應(yīng)用程序提供硬件資源或重要軟件資源。

篇3

【關(guān)鍵詞】C語言 編程 結(jié)構(gòu)化

1 C語言的編程特點

1.1 C語言的定位

很多人都普遍的認(rèn)為C語言是在B語言的基礎(chǔ)上發(fā)展過來的一種高級編程語言。然而從編程語言的層次結(jié)構(gòu)方面來說,我們應(yīng)該認(rèn)為C語言,是在匯編語言的基礎(chǔ)上發(fā)展而來的,它比匯編這類編程語言要高級,但是比一些可視化的編程語言又低級,所以準(zhǔn)確來說,C語言應(yīng)該算是中級編程語言,或者稱為準(zhǔn)高級程序設(shè)計語言。目前很多高級程序設(shè)計語言都是在C語言的基礎(chǔ)上發(fā)展而來的,或者至少借鑒了C語言程序設(shè)計的思想。80年代初,Bjarne Stroustrup在貝爾實驗室對標(biāo)準(zhǔn)C進(jìn)行了改進(jìn)和完善,C++得以誕生,使得面向?qū)ο蟮某绦蛟O(shè)計思想得以提出和落實;21世紀(jì)初,人們將C語言和單片機相結(jié)合,開發(fā)出來了應(yīng)用于單片機編程的C51語言,使得單片機的程序設(shè)計從反復(fù)的匯編語言設(shè)計中抽身出來,大大的提高了程序的設(shè)計效率。

可見C語言在整個編程語言的發(fā)展過程中屬于承上啟下的作用,同時其自身的應(yīng)用領(lǐng)域又在不斷的更新和發(fā)展。

1.2 C語言的編程特點

通過上述C語言的定位可知,它既具備高級程序設(shè)計語言的結(jié)構(gòu)性和層次性特點,同時也兼具了低級程序設(shè)計語言的實用性。

(1)用相應(yīng)的C語句可以實現(xiàn)對微機操作中的字節(jié)、地址等進(jìn)行直接訪問。

(2)基于函數(shù)的結(jié)構(gòu)化特點,使得復(fù)雜的軟件系統(tǒng)可以由多個人,以設(shè)計子函數(shù)的形式,分別各自進(jìn)行程序開發(fā)。之后進(jìn)行函數(shù)的匯總,最后由主函數(shù),按照既定的程序流完成對各個子函數(shù)的調(diào)用就行。

(3)豐富的數(shù)據(jù)類型,尤其是指針類型,可以很方便的應(yīng)用于復(fù)雜數(shù)據(jù)和大數(shù)據(jù)的訪問和處理。

(4)由于C語言基本上不向低級語言那樣直接涉及到對硬件的操作,所以C語言程序往往具有很好的通用性,方便程序移植。

2 C語言的編程技巧

2.1 扎實基本工

在進(jìn)行C語言程序設(shè)計之前,首先要熟悉運算符、表達(dá)式以及各鐘類型數(shù)據(jù)的定義和使用方法,其次對順序、分支和循環(huán)三大程序結(jié)構(gòu)要有較好的把握,并熟練使用while循環(huán)、for循環(huán)、switch語句等。如果要在程序的設(shè)計上有進(jìn)一步的提高,那就需要對“指針”能夠進(jìn)行熟練的使用了。指針可以用于表示變量,但更多的是用于代表數(shù)組、存儲地址以及函數(shù)地址。在代替不同變量時將返回不同的值,可以說指針的功能十分強大。對其熟練使用有助于程序設(shè)計的簡潔和便利。

2.2 立足C語言的結(jié)構(gòu)化的特點,熟練程序設(shè)計基本構(gòu)型

C語言典型的特點就是結(jié)構(gòu)化,在進(jìn)行具體的程序開發(fā)時,應(yīng)該首先要根據(jù)設(shè)計的軟件項目,然后進(jìn)行任務(wù)的細(xì)分,由于C語言不需要編程人員去配置硬件資源,因此程序設(shè)計人員可以把更多的精力放在各個細(xì)分任務(wù)的子函數(shù)設(shè)計上,考慮用最簡單的程序結(jié)構(gòu)去實現(xiàn)。在數(shù)據(jù)類型的選擇上,能夠用短數(shù)據(jù)類型就盡量用短數(shù)據(jù)類型。

另外,為了提高程序代碼的執(zhí)行效率,建議C語言程序設(shè)計人員要了解C語言程序最終運行的硬件的基礎(chǔ)機構(gòu),是在微型計算機上運行,還是在單片機上運行。在了解硬件平臺結(jié)構(gòu)及內(nèi)部資源的前提下進(jìn)行相應(yīng)的程序設(shè)計,將有助于提升程序的運行效率。

3 C語言的實踐應(yīng)用

3.1 混合編程

很多程序設(shè)計人員都認(rèn)為C語言比匯編語言高級,所以認(rèn)為沒有必要去學(xué)習(xí)和了解低級語言。其實這種思路是及其錯誤的。匯編語言之所以稱之為低級語言,是因為其更加貼近于硬件。在編程時一定要明確的在代碼中描述清楚,數(shù)據(jù)如何從一個存儲單元送入另一個單元,因此顯得編程復(fù)雜,由于其直接和硬件打交道,所以被稱為低級語言。但是其運行效率卻是最高的。所以在C語言程序設(shè)計上要有質(zhì)的飛越,有必要了解匯編語言的編程思路和理念。有條件的話可以將C語言和匯編語言混合編程,從而發(fā)揮出兩類編程語言各自的優(yōu)點,達(dá)到設(shè)計程序的最優(yōu)化。

在進(jìn)行C語言和匯編語言的混合編程時,無論是采用C語言調(diào)用匯編,還是匯編調(diào)用C語言,還是C語言嵌入?yún)R編的方式,都應(yīng)該對調(diào)用關(guān)系、各模塊的連接以及參數(shù)的傳遞進(jìn)行妥善的處理。對于調(diào)用關(guān)系,則需要對調(diào)用的函數(shù)和過程進(jìn)行說明;通過明確函數(shù)和變量的命名以及存儲模式的關(guān)聯(lián)性,從而實現(xiàn)各模塊的有效連接;通常情況下往往通過堆棧的方式來實現(xiàn)參數(shù)的傳遞。

3.2 C語言在工程上的應(yīng)用

C語言在電力電氣系統(tǒng)、交通控制系統(tǒng)以及機器人控制方面都有廣泛的應(yīng)用。下面以工廠通風(fēng)控制系統(tǒng)的C語言程序設(shè)計為例來加深對C語言軟件編程思想的理解。

工廠通風(fēng)控制程序的設(shè)計時采用模塊化得設(shè)計思想,即單獨的編寫初始化函數(shù)void Initial(void);中斷處理函數(shù)void**(void)interrupt;數(shù)據(jù)采集函數(shù)unsigned char ADconvert(unsigned char address)以及其它函數(shù)等。然后由主程序負(fù)責(zé)對各個子函數(shù)的調(diào)用,從而實現(xiàn)對工廠通風(fēng)系統(tǒng)的控制。簡化的主程序如下:

main( ){ ... Initial(void);

while(l){ReadAi( );ADconvert(unsignedchar address);

DataChange( ); DisPlay( ); …}

整個系統(tǒng)由于需要不停的對工廠數(shù)據(jù)進(jìn)行采集,所有主程序的結(jié)構(gòu)就設(shè)置成了循環(huán)結(jié)構(gòu),當(dāng)通風(fēng)控制系統(tǒng)有序的進(jìn)行準(zhǔn)備工作之后,通過調(diào)用初始化函數(shù),程序就開始進(jìn)入主循環(huán),主循環(huán)中通過調(diào)用采集程序,完成對測量對象的循環(huán)檢測以及對顯示程序,數(shù)據(jù)處理函數(shù)的循環(huán)調(diào)用。一遍又一遍的不停循環(huán)執(zhí)行主程序。在這個主程序循環(huán)的過程中,如果有異常情況發(fā)生,則隨著中斷觸發(fā)事件的發(fā)生,將進(jìn)入中斷響應(yīng),實現(xiàn)對中斷函數(shù)的調(diào)用。

4 總結(jié)

C語言作為編程語言中經(jīng)典的一類程序設(shè)計語言,因其結(jié)構(gòu)化、可移植化、編程簡介的特點,被廣泛的應(yīng)用國民生產(chǎn)的各個領(lǐng)域。而隨著信息技術(shù)、互聯(lián)網(wǎng)技術(shù)以及物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,未來C語言的應(yīng)用領(lǐng)域?qū)⒆兊酶訌V泛。對C語言在軟件編程方面的研究和分析將變得更有意義。

參考文獻(xiàn)

[1]顧泰龍,李遠(yuǎn)靜.基于C語言的計算機軟件編程實驗研究[J].軟件工程師,2013(08).

[2]李強.計算機軟件開發(fā)語言的選擇探討[J].電子制作,2013(09).

作者單位

篇4

C語言是一種計算機程序設(shè)計語言,是計算機匯編語言的重要組成部分。其實質(zhì)就是通過對語言進(jìn)行編寫和翻譯,使其產(chǎn)生一種與社會相銜接的語言,讓人和計算之間通過這種語言能夠進(jìn)行簡單的交流。C語言是在1972年由美國貝爾研究所提出,1978年先后被運用到各種機型中。C語言具有雙重性,具備高級語言的特點和匯編語言的優(yōu)越性,不僅能對系統(tǒng)應(yīng)用程序進(jìn)行編寫,而且能對不依靠計算機硬件的應(yīng)用程序進(jìn)行編寫。同時C語言也具有廣泛的應(yīng)用性,能在多個計算機的操作系統(tǒng)中運用,大大提高了計算機軟件編程的效率。隨著計算機的日益普及,C語言的應(yīng)用領(lǐng)域越來越寬,成為目前較為流行的高級程序設(shè)計語言之一,在許多大型的軟件編程中被廣泛的應(yīng)用。C語言具有如下的特點:

1.1模塊化思想模塊化的基本思想就是運用C語言在進(jìn)行計算機軟件編程設(shè)計時,按功能作用的不同將一個較大的程序分割成為許多小的子模塊,使每個小的子模塊成為一個功能單一、理解簡單和結(jié)構(gòu)合理的小程序。

1.2簡潔性強C語言具有語言簡潔、結(jié)構(gòu)緊湊、使用方便、靈活的優(yōu)勢。C語言包含了32個關(guān)鍵字和9條控制語句,源程序書寫方式較自由靈活,因此在計算機軟件編程中要選擇使用小寫字母,壓縮掉所有不重要的部分。

1.3運算范圍廣C語言總共具有34種運算符,其運算符號十分豐富且對運輸結(jié)果能采用各種各樣的表達(dá)形式,因此C語言的數(shù)據(jù)處理能力強,可以為各類數(shù)據(jù)結(jié)構(gòu)進(jìn)行復(fù)雜的運算,進(jìn)行一些高級語言較難實現(xiàn)的運算功能。

1.4移植泛用性C語言在進(jìn)行軟件編程中基本上不需要做任何的修改,就能運用于各種不同型號的計算機和操作系統(tǒng)環(huán)境上,從而形成很多不同版本的C語言。

1.5應(yīng)用效率高C語言的應(yīng)用結(jié)構(gòu)簡單清晰,能夠?qū)?nèi)存中的相應(yīng)地址進(jìn)行直接的訪問,操作十分方便,被稱為高級語言中的低級語言。同時能夠直接調(diào)用系統(tǒng)功能,直接操作硬件,具備許多高級語言所不具備的高效率。

2.C語言在計算機軟件編程中的技巧

C語言具有模塊化的特點,因此在計算機軟件程序編程中,充分發(fā)揮C語言的靈活性和方便性,提高軟件編程的技巧性,能夠優(yōu)化軟件程序編輯和提高軟件開發(fā)的效率和質(zhì)量。

2.1變量數(shù)據(jù)和運算模式的合理設(shè)置設(shè)置變量數(shù)據(jù)時,要在最大限度滿足計算機軟件編程需要的前提下,盡可能合理的設(shè)置變量數(shù)據(jù),使用無符號的最小數(shù)據(jù)類型,這樣能減少程序代碼,從而促進(jìn)計算機軟件編程的有效運行。同時在設(shè)置運算模式時,要盡量運用定點運算,避免運用浮點運算。

2.2變量存貯器類型的合理定義在計算機軟件編程中,采用和操作不同類型的變量存貯器時,會造成編譯后的代碼執(zhí)行效率各不相同,只有合理定義變量存貯器類型,才能不斷提高程序的執(zhí)行效率。因此在定義變量存貯器類型時,應(yīng)在滿足條件的情況下盡量選用內(nèi)部直接尋址存貯器。

2.3變量存貯類型的靈活設(shè)置在計算機軟件編程中,C語言具有模塊化思想,正確函數(shù)變量的傳遞在編程中十分重要,因此子程序模塊使用的變量常采用局部變量,而整個程序模塊使用的變量要采用全局變量。另外在C語言中靈活使用指針、結(jié)構(gòu)和聯(lián)合,也便于數(shù)據(jù)的傳遞,提高軟件編程的效率。

2.4設(shè)計軟件編程與C語言的接口C語言具有程序執(zhí)行速度快和直接操作硬件的優(yōu)勢,在進(jìn)行數(shù)據(jù)采集、中斷服務(wù)器處理和實時控制時,可以將C語言程序運用到計算機軟件編程中,自行控制數(shù)據(jù)的傳遞,從而能夠精確控制任務(wù),加快實時響應(yīng)。

2.5編譯控制指令的正確選擇C語言能為計算機的軟件編程提供了20多條控制指令,總體可分為首要控制指令和一般控制指令,首要控制指令的選擇只能用一次,要放在源程序的開始處,以防止重復(fù)而導(dǎo)致停止編譯,而一般控制指令的選擇可以多次。因此選擇正確的控制指令,能加速程序調(diào)試過程。

3.C語言在計算機軟件編程中的應(yīng)用

C語言具有很強的優(yōu)越性,可以適用于計算機軟件編程實驗研究,這就需要對C語言在計算機軟件編程中的應(yīng)用有一個全面的認(rèn)識,避免在以后的程序設(shè)計過程中出現(xiàn)基礎(chǔ)不足的情況。

3.1指針的應(yīng)用C語言中的指針代表相關(guān)變量、相應(yīng)函數(shù)的地址和地址相對應(yīng)的存儲內(nèi)容。在進(jìn)行軟件編程時,如果一個相應(yīng)的變量聲明前面,出現(xiàn)“*”號,那就表示這個內(nèi)存地址相對應(yīng)的存儲內(nèi)容。通常情況下C語言的一個指針代表著一個相應(yīng)函數(shù)的地址,是一個常量。此外,C語言的指針可以在調(diào)用函數(shù)時得到幾個不同于return(z)的返回值。

3.2字符串在C語言中,字符串是一種以ASCII的UNL作為數(shù)組退出的一種chair型的數(shù)組,在計算機軟件編程中,字符串的使用一般不需要引用庫。但在C標(biāo)準(zhǔn)庫中包含著一些函數(shù)可以操作相應(yīng)的字符串,在使用這些函數(shù)時,需要運用相對應(yīng)的頭文件進(jìn)行引用。

3.3C語言結(jié)構(gòu)C語言主要包括三種結(jié)構(gòu)模式即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)在C語言中是按照先后次序進(jìn)行操作,通過構(gòu)建一個相對簡單和完整的程序,進(jìn)行相對獨立的運用。循環(huán)結(jié)構(gòu)是在進(jìn)行各種數(shù)據(jù)運算和處理時,需要對其中的一些語句進(jìn)行反復(fù)的執(zhí)行,這在一定程度上簡化了程序的長度,使程序變得簡潔。選擇結(jié)構(gòu)是根據(jù)相關(guān)的分支條件選擇相應(yīng)的執(zhí)行路徑,在計算機軟件編程中要選擇具有較強適應(yīng)性執(zhí)行路徑。

篇5

關(guān)鍵詞 C語言;中等職業(yè)教育;計算機專業(yè)

中圖分類號:G712 文獻(xiàn)標(biāo)識碼:B

文章編號:1671-489X(2015)23-0083-02

1 前言

《教育部關(guān)于進(jìn)一步深化中等職業(yè)教育教學(xué)改革的若干意見》(教職成〔2008〕8號)明確提出,中職教育要堅持以人為本,關(guān)注學(xué)生職業(yè)生涯持續(xù)發(fā)展的實際需要,培養(yǎng)他們具有良好的職業(yè)道德,掌握必要的文化知識和熟練的職業(yè)技能,成為德、智、體、美全面發(fā)展的具有中國特色社會主義事業(yè)的建設(shè)者和接班人。隨著社會對中職學(xué)生的要求關(guān)注度逐漸提高,中職教育面臨的問題也日益突出,尤其是學(xué)生質(zhì)量的下降與社會的高期望值之間的差距,對從事中職教育的老師提出了更高的要求。如果教與學(xué)的問題解決不好,就會影響技術(shù)技能型人才的培養(yǎng)質(zhì)量,繼而影響整個社會經(jīng)濟的發(fā)展。

2 中職學(xué)校計算機專業(yè)開設(shè)編程語言課的必要性

自1987年起,國家教育部就開始了中職畢業(yè)生直接上大學(xué)(普通高校)的探索。目前,國家每年都有部分普通高校本科和??茖趩为氄袖浿械嚷殬I(yè)學(xué)校畢業(yè)生,這為中等職業(yè)教育的發(fā)展提供了有利條件,拓寬了中職學(xué)生繼續(xù)學(xué)習(xí)的渠道。中職學(xué)生升入高一級學(xué)校,繼續(xù)學(xué)習(xí)計算機相關(guān)專業(yè),編程語言課的學(xué)習(xí)是必然的,因此在中職階段提前開設(shè)相關(guān)編程語言課的學(xué)習(xí)就很必要,它會為學(xué)生今后拓展專業(yè)知識奠定有利的基礎(chǔ)。

3 中職計算機專業(yè)學(xué)生現(xiàn)狀

1)學(xué)生普遍閱讀能力差,抓不住重點,遇到題目不明其意。

2)邏輯推理能力差,缺乏全局統(tǒng)籌安排意識,遇到問題不知如何解決,加之中職配套教材例題又多以數(shù)學(xué)問題為主,學(xué)生初中階段甚至是小學(xué)階段的數(shù)學(xué)知識欠缺,直接導(dǎo)致現(xiàn)階段問題突出。

3)英文界面的操作有難度,關(guān)鍵字不能借助英語知識記憶。

4)變通能力差,不會舉一反三。

5)學(xué)習(xí)惰性強、缺乏自信,遇到困難不愿自行解決、認(rèn)為也解決不了。

6)主觀意識中排斥編程類課程的學(xué)習(xí),認(rèn)為沒有實際用途。

4 教學(xué)思考與對策

目前,中職學(xué)校編程語言主要開設(shè)VF和C兩門課程,VF的學(xué)習(xí)相對容易一些,可視化的界面直觀形象操作也很簡單,同時VF作為高考對接考試中的考試科目,學(xué)生主觀上更重視一些,無論是老師的教還是學(xué)生的學(xué)問題不突出。而C語言前幾年曾經(jīng)是考試科目之一,近兩年被取消,目前有些中職學(xué)校又在重新開設(shè),具有一定教學(xué)難度。教師考慮到學(xué)生今后的學(xué)習(xí)需要,這門課就是讓學(xué)生理解計算機在解決問題時所采用的思路、方法,讓學(xué)生逐步形成解決問題、統(tǒng)籌布局的能力,要合理安排這門課程的教學(xué)難度,提高學(xué)生的學(xué)習(xí)興趣。

科學(xué)合理安排教材內(nèi)容 學(xué)校現(xiàn)在所用的是高等教育出版社編寫的《C語言程序設(shè)計教程》,從第一章到第十章內(nèi)容分別是概述、數(shù)據(jù)類型和運算、基本輸入與輸出、流程控制、函數(shù)、數(shù)組、指針、結(jié)構(gòu)與聯(lián)合、編譯預(yù)處理、文件、對外接口、圖形、漢字處理、用戶界面技術(shù)。

按照以往的教學(xué)經(jīng)驗和往屆學(xué)生的學(xué)習(xí)效果,再結(jié)合學(xué)生的認(rèn)知結(jié)構(gòu),筆者將第二章數(shù)據(jù)類型及運算的知識點結(jié)構(gòu)做了些微調(diào)整,即先講數(shù)據(jù)類型,然后將整型、實型、字符型數(shù)據(jù)類型又分為相應(yīng)的變量和常量,常量講各種表示方法,變量講標(biāo)示符命名規(guī)則、講不同的定義形式、講初始化和賦值方式。第三章基本輸入的知識點也做了相應(yīng)的調(diào)整,調(diào)整為先講單個字符的輸出與輸入函數(shù),再講格式化輸出與輸入函數(shù),而字符串的輸出與輸入等到學(xué)完數(shù)組和指針后再講。C中的圖形和文本部分,界面效果相比較適合,但程序相對大,函數(shù)、指針的運用比較多,程序有相當(dāng)?shù)碾y度,所以這幾章內(nèi)容我在課堂上不講解,但會建議感興趣的學(xué)生自行上機調(diào)試,看程序界面和前幾章的有何不同,為學(xué)生今后的繼續(xù)學(xué)習(xí)留一些空間。

適當(dāng)降低教學(xué)難度并調(diào)整講課進(jìn)度 在每節(jié)課的例題中精選一些學(xué)生容易掌握的、有特點的例題進(jìn)行講解,并對其舉一反三、變換對比程序,讓學(xué)生每節(jié)課學(xué)得少而精。

不同章節(jié)選用不同的教學(xué)方法 同時注意將上機環(huán)境融入到課堂講授中,讓學(xué)生直觀的認(rèn)識程序的調(diào)試、運行、結(jié)果的必然聯(lián)系和關(guān)系,引導(dǎo)學(xué)生發(fā)現(xiàn)課堂分析程序與上機調(diào)試程序存在的區(qū)別,這樣有利于學(xué)生課后自學(xué),逐步提高學(xué)生的自學(xué)能力。

1)講函數(shù)的定義時,可將之前學(xué)過的程序代碼(主函數(shù)中實現(xiàn)相應(yīng)功能的程序語句)改寫到自定義函數(shù)體中,然后為該自定義函數(shù)加上相應(yīng)的變量說明、輸出語句等,使之形成完整的自定義函數(shù)。然后再讓學(xué)生反復(fù)練習(xí),將改寫的程序變成自定義函數(shù)。

2)講函數(shù)的調(diào)用時,接觸到的程序中一般含有多個函數(shù),因此先教學(xué)生將大程序分成小模塊(每一函數(shù)就是一個模塊),然后結(jié)合上機過程,采用F7鍵進(jìn)行單步調(diào)試,每次點按F7,程序從主函數(shù)進(jìn)入后會單步順序走一條語句,直到碰到調(diào)用語句時,程序會跳轉(zhuǎn)到相應(yīng)的自定義函數(shù)定義處,接著再按F7鍵,程序會從自定義函數(shù)定義處順序執(zhí)行,遇到return語句時程序又會返回到調(diào)用位置處。結(jié)合上機過程講解這節(jié)內(nèi)容,程序的走向、函數(shù)的調(diào)用、函數(shù)的返回過程清晰明了,相比較課堂的講解效果好許多。

3)講解變量的存儲類型和作用域時,也可采用上述的將程序劃分模塊的方法,引導(dǎo)學(xué)生將程序分成若干源文件、若干函數(shù),接著在函數(shù)外找到外部變量和外部靜態(tài)變量,在函數(shù)內(nèi)部找到局部變量和局部靜態(tài)變量,最后告知學(xué)生每一種變量的作用域和特點,這節(jié)內(nèi)容上機調(diào)試程序時,教學(xué)生利用監(jiān)視器窗口對每種變量添加監(jiān)視,仔細(xì)觀察每種變量的初值、變化情況以及最終值的保留情況(即作用域的長短)。

課后作業(yè)控制難度 多年的教學(xué)發(fā)現(xiàn),課堂上學(xué)生跟著老師能較順利地完成程序代碼的分析,得到正確的運行結(jié)果,但是獨立完成作業(yè)時,卻問題很多,這說明學(xué)生對課堂內(nèi)容沒有完全掌握,獨立解決問題的能力不夠,所以課后的作業(yè)難度要降低,作業(yè)可以以小組(3~5人)的名義上交,交作業(yè)的最終目的是檢驗學(xué)生對課堂內(nèi)容的掌握情況,促進(jìn)相互學(xué)習(xí),這樣既鍛煉了學(xué)生,又增進(jìn)了他們之間的感情,還能體驗成功的樂趣,增強他們的自信心。

注重和其他專業(yè)課程的銜接 如和VF課程的銜接。編程語言都有相通之處,VF 和C就是這樣,在處理有些問題時,只是兩種語言的表示方法不同而已,讓學(xué)生對比學(xué)習(xí),效果會更好。

5 結(jié)語

語言類的教學(xué)會有這樣的瓶頸,教得淺了,學(xué)生學(xué)得容易,但實際編寫代碼的能力不高;教得深了,學(xué)生學(xué)起來難度太大,提不起學(xué)習(xí)積極性,反而會打擊學(xué)習(xí)熱情。筆者認(rèn)為語言類的教學(xué)尤其是C語言對學(xué)生的幫助短期內(nèi)可能看不到明顯的效果,它更多是思維上的潛移默化的影響,比如考慮問題的角度、解決的步驟、是否考慮到多個方面等。

參考文獻(xiàn)

[1]譚浩強.C語言程序設(shè)計[M].北京:清華大學(xué)出版社,

2001.

[2]徐維祥.C語言程序設(shè)計教程[M].北京:高等教育出版社,2004.

篇6

關(guān)鍵詞 高職教育 C語言 結(jié)構(gòu)化編程 互聯(lián)網(wǎng)

如何提高高職計算機類專業(yè)學(xué)生非圖形模式下的結(jié)構(gòu)化編程能力,是高職計算機教育中的一個普遍問題。作者通過三年的努力,對“C語言程序設(shè)計”課程在教學(xué)內(nèi)容、教材建設(shè)、實訓(xùn)設(shè)計、網(wǎng)站建設(shè)和考核方式等諸多方面,進(jìn)行了大膽的改革和探索,將電子教材、電子教案、學(xué)習(xí)論壇、編程工具、學(xué)習(xí)資料等,整合成為學(xué)習(xí)網(wǎng)站,在教學(xué)過程中通過論壇程序不同版本,實施案例驅(qū)動,課后通過QQ群進(jìn)行輔導(dǎo)答疑,通過論壇、電子郵件進(jìn)行作業(yè)提交批改,建立了基于案例驅(qū)動的結(jié)構(gòu)化編程教學(xué)模式。本文具體論述了基于案例驅(qū)動的高職C語言結(jié)構(gòu)化編程教學(xué)的過程和方法。

1 教學(xué)內(nèi)容

在課程設(shè)計上,針對高職計算機專業(yè)學(xué)制短,技能要求高的特點,提出了“一條線兩階段,三結(jié)構(gòu)四循環(huán)”的教學(xué)模式。

“一條線”是指在一年級的編程教學(xué)課中,貫徹C語言一條線。曾經(jīng)有一種觀點,認(rèn)為高職計算機專業(yè)的編程語言教學(xué),直接從面向?qū)ο笳Z言開始學(xué)習(xí),可以節(jié)約時間。但是,70%的企業(yè)依然要求學(xué)生具備面向過程的結(jié)構(gòu)化編程能力。考慮到企業(yè)的需求,結(jié)合后續(xù)的課程安排,我們決定在一年級的課程安排上,貫徹C語言“一條線”,即在第一學(xué)期,開設(shè)“程序設(shè)計基礎(chǔ)”,第二學(xué)期,開設(shè)面向過程的“C語言程序設(shè)計”。

“兩階段’指課程安排分為“程序設(shè)計基礎(chǔ)”和“C語言程序設(shè)計”兩個階段?!俺绦蛟O(shè)計基礎(chǔ)”解決程序的基本結(jié)構(gòu),重點在建立學(xué)生的結(jié)構(gòu)化程序的基本框架和概念;以C語言為基本語言,使學(xué)生能有實際操作的平臺,但準(zhǔn)確把握“把C語言作為偽語言”的原則,不讓學(xué)生陷入C語言多變的泥淖,而把注意力放在結(jié)構(gòu)化程序的基本結(jié)構(gòu)上?!癈語言程序設(shè)計”放在解決C語言的使用上,把握“C語言”是編程工具而不是研究對象的原則,根據(jù)企業(yè)的編程規(guī)范,對“C語言”進(jìn)行簡化,重點是如何使用C語言解決一般復(fù)雜程度的結(jié)構(gòu)化編程問題。

“三結(jié)構(gòu)”是指在一年的學(xué)習(xí)中,學(xué)生要學(xué)習(xí)三個成績管理軟件的編程,分別是基于一維數(shù)組、二維數(shù)組和動態(tài)結(jié)構(gòu)數(shù)組。從企業(yè)實際應(yīng)用來看,動態(tài)空間的使用,可以用動態(tài)數(shù)組解決。因此我們?nèi)サ袅随湵恚攸c是讓學(xué)生寫出有工程實際意義的結(jié)構(gòu)化程序。

“四循環(huán)”是指編寫基于“三結(jié)構(gòu)”的每一個成績管理軟件過程中,教師四個以上的程序版本,引導(dǎo)學(xué)生改寫、增加函數(shù),讓學(xué)生直觀地看到軟件的功能是如何一步一步構(gòu)建起來的。

結(jié)構(gòu)化程序設(shè)計的教學(xué)中,如何讓學(xué)生建立起結(jié)構(gòu)化程序的框架是很困難的。一個簡單的成績管理軟件,代碼就超過300行。對初學(xué)者來說,看懂超過100行的程序就需要很長時間,學(xué)生又如何能在短短的課堂時間里通過增加/改寫函數(shù)來增加功能呢?這也就是很多學(xué)生學(xué)完了C語言程序設(shè)計,依然不能編寫一個簡單的應(yīng)用程序的主要原因。我們發(fā)現(xiàn)通過論壇程序版本,利用工具軟件BeyondCompare,比較不同的程序版本之間的差異,可以讓學(xué)生直觀地看到軟件的功能是如何一步一步構(gòu)建起來的,如圖1所示。程序的第一個版本,就是一個主函數(shù),不超過10行,只顯示程序的幾項功能菜單,學(xué)生很容易理解,然后通過第二個、第三個版本,每一個版本實現(xiàn)或改進(jìn)一個菜單的功能,直到最后版本。

通過圖1,我們可以看到程序功能的增加是由哪些代碼實現(xiàn)的,而通過不斷反復(fù)的比較,學(xué)生就可以掌握結(jié)構(gòu)化程序設(shè)計的過程和方法。

在教學(xué)過程中,通過比較版本,讓學(xué)生直觀地看到復(fù)雜的程序功能是如何由簡單的函數(shù)一個一個構(gòu)成的。學(xué)生經(jīng)過“程序設(shè)計基礎(chǔ)”的課程設(shè)計,基本掌握主函數(shù)與模塊函數(shù)的作用和相互關(guān)系,可以看懂超過100行的C語言源程序,理解基于一維數(shù)組的成績管理系統(tǒng);在“C語言程序設(shè)計”的課程設(shè)計中,學(xué)生對主函數(shù)與模塊函數(shù)的理解更加深入,可以看懂超過300行的C語言源程序,理解基于動態(tài)結(jié)構(gòu)數(shù)組的成績管理系統(tǒng),掌握主函數(shù)的設(shè)計方法,并按照規(guī)范的格式寫出自己的函數(shù)?;叵肴昵埃驗闆]有采用這種方法,只要是超過20行的程序,學(xué)生就普遍反映看不懂。由此可見,采用新的方法后,學(xué)生編程能力的提高十分明顯。

2 教材建設(shè)

2004年9月清華大學(xué)出版社出版了作者主編的21世紀(jì)高職高專規(guī)劃教材《程序設(shè)計基礎(chǔ)》,教材主要在三個方面進(jìn)行了改革。

(1)強調(diào)把生活中的問題轉(zhuǎn)化為程序的能力,使學(xué)生真正能夠編寫實用的程序

在教材編寫思想上,重點放在培養(yǎng)學(xué)生把生活中的問題轉(zhuǎn)變成為程序并進(jìn)行處理的能力,強調(diào)轉(zhuǎn)變講授思路,推行引導(dǎo)學(xué)生首先想清楚“我要做什么?”,然后才教給學(xué)生“如何做”,最后上機進(jìn)行驗證的三步教學(xué)法。

在教材的編寫風(fēng)格上,對全書所有的例題進(jìn)行了通盤的考慮,在循環(huán)、數(shù)組、函數(shù)和結(jié)構(gòu)化設(shè)計等單元,所有的例子都有前后的聯(lián)系,強調(diào)內(nèi)容的前后銜接,特別注意工程規(guī)范的引入,在變量的命名、程序格式方面,均按工程要求進(jìn)行。在案例選擇上,全部采用工程實際和實際生活中的案例。

(2)提出了以“三大區(qū)域”為特色的c程序的基本框架

通過把一個基本的C程序從上到下分成預(yù)處理區(qū)、變量聲明區(qū)、執(zhí)行語句區(qū)“三大區(qū)域”為特色的C程序的基本框架,讓學(xué)生樹立正確的程序格式與規(guī)范。“三大區(qū)域”概念的提出,明確規(guī)定了程序的基本框架,讓學(xué)生從一開始就按固定的格式進(jìn)行編程,養(yǎng)成良好的編程習(xí)慣。

(3)提出了使用函數(shù)的“三大步九要素”的基本方法,建立使用函數(shù)的清晰框架

我們提出的使用函數(shù)的“三大步九要素”的基本方法,在教學(xué)中取得了很好的效果。

所謂“三大步”,是指我們在使用自定義的函數(shù)時,對函數(shù)進(jìn)行聲明、定義和調(diào)用。三大步按順序進(jìn)行。

所謂“九要素”,是分別指函數(shù)聲明、定義、調(diào)用各有三要素共九點:函數(shù)聲明的三要素:返回值的類型、函數(shù)的名字、形式參數(shù)。函數(shù)定義的三要素:形式參數(shù)、功能、返回值。函數(shù)調(diào)用的三要素:名字、實際參數(shù)、返回值。通過對“九要素”的理解掌握,學(xué)生能夠建立起使用函數(shù)的清晰框架。

3 實訓(xùn)設(shè)計

對高職學(xué)小的技能培養(yǎng),實訓(xùn)是很重要的環(huán)節(jié)。我們采用了項目驅(qū)動的思想來設(shè)計實訓(xùn)項目,每一單元的實訓(xùn),都是構(gòu)成最終程序的不同版本,在“程序設(shè)計基礎(chǔ)”頭程序版本8個,“C語言程序設(shè)計”共程序版本10個,構(gòu)成了實用的軟件框架,學(xué)生相當(dāng)于參與了一個中等復(fù)雜程度的軟件開發(fā),積累了經(jīng)驗。在今后的實際工作中,完全可以以此為模板,進(jìn)行結(jié)構(gòu)化程序的開發(fā)。

4 網(wǎng)站建設(shè)

利用互聯(lián)網(wǎng)技術(shù),建立基于互聯(lián)網(wǎng)的學(xué)習(xí)資源。2003年建立了“光華之窗”教學(xué)網(wǎng)站,在網(wǎng)站平臺上,將電子教材、電子教案、學(xué)習(xí)論壇,編程工具、學(xué)習(xí)資料等,整合成為學(xué)習(xí)網(wǎng)站,設(shè)計了“程序設(shè)計基礎(chǔ)”、“C語言程序設(shè)計”教學(xué)論壇,兩年來積累了完整的教學(xué)過程資料??梢哉f,網(wǎng)站的建設(shè)和運行,為課程的質(zhì)量提供了保證,避免了“課隨老師走”的問題。

5 考核方式

篇7

一、研究目標(biāo)及擬解決的主要問題

程序設(shè)計基礎(chǔ)(C)具有較強的實踐性,對學(xué)生以后參與專業(yè)領(lǐng)域的應(yīng)用軟件的開發(fā)和使用會有極大的幫助,它的學(xué)習(xí)效果將直接影響學(xué)生后續(xù)課程的學(xué)習(xí)。由于本課程的學(xué)習(xí)對象是大學(xué)一年級的學(xué)生,他們對計算機語言與編程還很陌生。一方面,C語言存在難點集中、跨度大的問題,要求學(xué)生記憶大量的語法規(guī)則、語句格式等,容易使學(xué)生產(chǎn)生畏難情緒;另一方面,該課程難以體現(xiàn)軟件工程思想,不利于學(xué)生能力的培養(yǎng)。第三,傳統(tǒng)的教學(xué)方式主要以教師講授為主,培養(yǎng)出來的學(xué)生缺乏自主學(xué)習(xí)的能力,缺乏運用知識解決實際問題的能力。第四,對學(xué)生的學(xué)習(xí)評價方式單一,大多以卷面筆試成績?yōu)橐罁?jù),很難客觀體現(xiàn)學(xué)生的實際應(yīng)用能力。針對這些問題,本項目提出建立以培養(yǎng)能力為主線的教學(xué)體系;依靠網(wǎng)絡(luò)信息技術(shù)和多媒體技術(shù)構(gòu)建基于WebQuest教學(xué)模式的網(wǎng)絡(luò)探究教學(xué)平臺,提高學(xué)生實際編程能力。本項目擬解決的主要問題有:

(1)實行啟發(fā)式、討論式、探究式、趣味性教學(xué),建立教與學(xué)互動的教學(xué)情境。廣泛吸取先進(jìn)的教學(xué)經(jīng)驗,以教師為主導(dǎo),以學(xué)生為主體,完善教學(xué)課件,精選典型、趣味性案例,多媒體教學(xué)和黑板書寫等多種方式相配合,實行啟發(fā)式、討論式、探究式、趣味性教學(xué),建立教與學(xué)互動的教學(xué)情境,激發(fā)學(xué)生的學(xué)習(xí)興趣,提高教學(xué)效果。采用“實例-理論-應(yīng)用”的教學(xué)方式,任務(wù)驅(qū)動,用實例來引入、解釋概念,用案例來演繹理論和方法,鼓勵學(xué)生自己提出問題的解決方案,對遇到的問題,鼓勵同學(xué)之間或師生討論,或在老師的的啟發(fā)與引導(dǎo)下解決問題。培養(yǎng)學(xué)生具有合作學(xué)習(xí)和探究性學(xué)習(xí)的能力,培養(yǎng)良好的團(tuán)隊精神,為以后的后續(xù)課程的學(xué)習(xí)打下良好的基礎(chǔ)。

(2)構(gòu)筑網(wǎng)絡(luò)教學(xué)平臺

構(gòu)筑網(wǎng)絡(luò)教學(xué)平臺,教學(xué)資料全部上網(wǎng),以教學(xué)課件、教學(xué)錄像為基礎(chǔ),以學(xué)習(xí)指南、實驗指導(dǎo)、作業(yè)習(xí)題為引導(dǎo),以在線答疑、手機答疑、短信答疑、電子郵件答疑為互動,以在線測試、模擬考試為補充,鼓勵學(xué)生自主學(xué)習(xí)、開放學(xué)習(xí)、靈活學(xué)習(xí)。

通過師生互動的教學(xué),通過網(wǎng)絡(luò)教學(xué)資源的配合,讓學(xué)生掌握各學(xué)習(xí)環(huán)節(jié),充分發(fā)揮學(xué)生的學(xué)習(xí)積極性和能動性,激發(fā)和促進(jìn)學(xué)生的能力發(fā)展。

(3)考核方式

建立試題庫,抽題組卷;實行全校統(tǒng)考,考教分離; 期末閉卷筆試(統(tǒng)考)成績占70%,平時作業(yè)成績占10%,平時實驗成績占20%。

(4)鼓勵學(xué)生參加各社會實踐大賽:全國大學(xué)生數(shù)學(xué)建模競賽、挑戰(zhàn)杯競賽、電子設(shè)計競賽、軟件設(shè)計大賽等,鍛煉和培養(yǎng)學(xué)生的創(chuàng)新精神和方案創(chuàng)新設(shè)計的能力。

二、研究內(nèi)容

1、如何以培養(yǎng)學(xué)生分析問題、解決問題編程能力為目標(biāo),編寫適合教學(xué)的教材,修定、完善“程序設(shè)計語言(C)”的課程教學(xué)大綱、實驗大綱和實驗指導(dǎo)書。

2、如何依靠網(wǎng)絡(luò)信息技術(shù)和多媒體等新興技術(shù)構(gòu)建基于WebQuest教學(xué)模式的網(wǎng)絡(luò)探究教學(xué)平臺,建設(shè)“程序設(shè)計語言(C)”重點課程網(wǎng)站。

3、如何以“全國信息技術(shù)應(yīng)用水平大賽”為載體,增強學(xué)生掌握應(yīng)用開發(fā)技術(shù)的自信心與能力。

4、如何培養(yǎng)學(xué)生形成正確的程序設(shè)計思想,能夠熟練地使用C語言進(jìn)行程序設(shè)計并具備調(diào)試程序的能力,為后繼課程VC,VC++及其他程序設(shè)計課程的學(xué)習(xí)和應(yīng)用打下基礎(chǔ)。

三、本項目研究解決教學(xué)問題擬采取的主要方法

1、對當(dāng)前民辦院校和獨立學(xué)院計算機類專業(yè)基礎(chǔ)課程體系進(jìn)行比較研究,對當(dāng)前IT行業(yè)要求學(xué)生應(yīng)具有的主要應(yīng)用開發(fā)能力進(jìn)行比較研究,從而,編寫適合學(xué)生的教材,合理的確定“程序設(shè)計語言(C)”的課程教學(xué)內(nèi)容與學(xué)時、教學(xué)大綱、實驗大綱和實驗指導(dǎo)書;課程設(shè)計要求、方式、學(xué)時與學(xué)分、課程設(shè)計指導(dǎo)書(任務(wù)書)等,體現(xiàn)出課程的先進(jìn)性、科學(xué)性,符合軟件行業(yè)對人才的能力需求。

2、精講課本知識,充分利用先進(jìn)的教學(xué)手段,提高課程教學(xué)質(zhì)量。加強師資與實驗室建設(shè),加強綜合課程設(shè)計環(huán)節(jié),切實提高學(xué)生實際動手能力的培養(yǎng)。

3、豐富和完善試題庫、模擬試卷與解答、多媒體課件、教學(xué)錄像、在線答疑等各類教學(xué)資源。在該項目實施的基礎(chǔ)上,該項目組已經(jīng)按照城市學(xué)院重點課程建設(shè)的要求,于2011年申報院級“程序設(shè)計基礎(chǔ)(C)重點課程建設(shè)項目”。從而,在城市學(xué)院建立完善的、以培養(yǎng)學(xué)生掌握C語言為目標(biāo),掌握后續(xù)課程C++、VC++程序設(shè)計方法的教學(xué)體系。

4、改革課程與課程的考核方式。

四、項目研究(開發(fā))的總體安排及進(jìn)展情況

(1)第一階段:

準(zhǔn)備階段:根據(jù)課程的特點,項目組的教師討論提出最優(yōu)方案,制定詳細(xì)的計劃,分工責(zé)任到人,并定期檢查進(jìn)展情況。

(2)第二階段:

具體實施階段:編寫適合學(xué)生的教材,制作統(tǒng)一的教案和電子課件,合理的確定 “程序設(shè)計語言(C)”的課程教學(xué)內(nèi)容與學(xué)時、教學(xué)大綱、實驗大綱和實驗指導(dǎo)書等,體現(xiàn)出課程的先進(jìn)性、科學(xué)性,符合軟件行業(yè)對人才的能力需求。申報院級“程序設(shè)計基礎(chǔ)(C)重點課程建設(shè)項目”。

(3)第三階段:

豐富和完善“程序設(shè)計語言(C)”課程試題庫、模擬試卷與解答、多媒體課件、教學(xué)錄像、在線答疑等各類教學(xué)資源。由相關(guān)教師完成網(wǎng)站建設(shè)工作。

(4)第四階段:

評價項目研究成果;撰寫項目“研究報告”;發(fā)表研究論文及應(yīng)用論文。

五、預(yù)期成果

1、教學(xué)研究的研究報告。

2、教學(xué)研究的教材、教案、課件、教學(xué)大綱、實驗大綱、實驗指導(dǎo)書等。

3、以“全國信息技術(shù)應(yīng)用水平大賽”為載體,增強學(xué)生掌握應(yīng)用開發(fā)技術(shù)的自信心與能力。

篇8

【關(guān)鍵詞】C;C++;Fortran;混合編程;字符串;文件讀寫;函數(shù)調(diào)用

對C、C++、Fortran不同語言混合起來進(jìn)行編程,利用各自的優(yōu)勢,彌補各自功能的不足,如FORTRAN語言具有強大的科學(xué)數(shù)字計算功能,但繪圖功能不強;而C、C++語言計算功能不強,但它具有良好的移植性和較強的圖形功能,可將計算方式轉(zhuǎn)變?yōu)閿?shù)據(jù)輸入簡易、結(jié)果顯示方便的Windows可視化應(yīng)用程序,因此,在許多情況下,我們應(yīng)該使用C、C++、Fortran等進(jìn)行混合編程。在既要大量計算,又要圖形處理的開發(fā)環(huán)境中,可以通過混合編程,達(dá)到優(yōu)勢互補。

1.混合編程開發(fā)平臺及編譯開發(fā)環(huán)境的選擇

Fortran語言沒有大小寫之分,而Windows平臺下的混合語言編程過程中大小寫問題十分突出??紤]到編譯器的差異,可以用以下方式進(jìn)行跨平臺編程的函數(shù)聲明。C、C++編譯器使用MicrosoftVisualC++6.0編譯集成開發(fā)環(huán)境,F(xiàn)ortran編譯器使用DigitalVisualFortran6.0編譯集成開發(fā)環(huán)境。

VC++與FORTRAN的語言編譯器同出自微軟家族,且使用同一操作平臺,因此在它們兩者之間進(jìn)行混合編程是完全可以實現(xiàn)的,但是必須充分考慮兩種語言之間的接口問題,即在存儲模式、語言約定、數(shù)據(jù)處理以及例程單位等方面的一致性問題。

存儲模式的一致性。存儲模式是指編譯器應(yīng)遵循的某種規(guī)則,這種規(guī)則是把程序的代碼和數(shù)據(jù)裝入存儲器段中的一套預(yù)先制定的規(guī)則,它定義了編譯器將代碼和數(shù)據(jù)組織分段的方法,同時也規(guī)定了訪問每段中代碼和數(shù)據(jù)的尋址方法。一般來說PC機上有6種存儲模式:微小模式(Tiny)、小模式(Small)、中模式(Medi-um)、緊湊模式(Compact)、大模式(Large)、巨模式(Huge)。對FORTRAN一般用大模式,而VC++至少是緊湊模式以上,因為FORTRAN采用段間或遠(yuǎn)程傳址。

語言約定的一致性?;旌暇幊虝r,要注意調(diào)用程序與被調(diào)用程序遵守同樣的約定,不能發(fā)生沖突。這些約定包括命名約定、調(diào)用約定、參數(shù)傳遞約定和函數(shù)返回值約定。

命名約定,即在編程過程中相互匹配的標(biāo)識符應(yīng)保持一致。由于VC++語言嚴(yán)格區(qū)分大小寫,而FORTRAN中不存在大小寫問題,VC++中還存在類型說明及其它一些問題,如果命名約定在調(diào)用程序與被調(diào)用程序之間不一致,程序就不會成功地連接。FORTRAN的缺省方式使符號名在目標(biāo)文件中變成大寫,如果在VC++程序中調(diào)用一個使用FORTRAN缺省的FORTRAN子例程,在VC++中需用一個純大寫的名稱來生成一個調(diào)用;當(dāng)在VC++中用一個純小寫的名稱來生成一個調(diào)用時,在FORTRAN程序中需用C和STDCALL屬性將所有名稱轉(zhuǎn)換為純小寫的形式;在VC++中,當(dāng)一個調(diào)用例程的名稱以混合書寫形式出現(xiàn)的時候,需使用FORTRAN的ALIAS屬性來解決混合書寫形式之間的命名沖突。

調(diào)用約定,指語言實現(xiàn)調(diào)用的規(guī)則及方法。調(diào)用約定可以從三個方面影響程序設(shè)計:首先是調(diào)用例程利用調(diào)用約定決定傳遞給另一個例程的自變量的順序;其次是被調(diào)用的例程利用調(diào)用約定決定接收傳遞過來參數(shù)的順序;第三是所有涉及堆棧這樣一種數(shù)據(jù)結(jié)構(gòu)的參數(shù)從椎棧中移去后,調(diào)用例程和被調(diào)用例程必須在調(diào)整堆棧的職責(zé)上取得一致。在VC++與FORTRAN語言混合編程時,兩者之間的函數(shù)調(diào)用一般采用C與STDCALL調(diào)用約定。

假設(shè)一個C語言函數(shù)為voidcFunction(),那么只需要在它的頭文件里面進(jìn)行如下定義即可。

#ifdef_cplusplus

extern/C0void{

#endif

externvoid_stdcallCFunction();

#definecFunctionCFUNCTION

#ifdef_cplusplus

}

#endif

這樣就可實現(xiàn)上述函數(shù)在Fortran或C++程序中的直接調(diào)用。

2.混合編程中的字符串處理

混合編程中經(jīng)常會出現(xiàn)需要傳遞字符串的情況,而字符串的傳遞是一個較為麻煩的問題。在Fortran里,字符串是沒有結(jié)束符的,但是有長度的概念,也就是說,編譯器會給每一個字符串一個長度以控制,在Windows平臺下用如下方法定義。

以C函數(shù)為例,定義如下。

voidmessag(char*msg1,int*where1,char*msg2,int*where2)

{

printf(/,,%sshouldbe%d,while%ssh-

ouldbe%d\n0,msg1,*where1,msg2,where2);

}

如果要在Fortran里調(diào)用的話,需要以下定義。

#ifdefinedULTRIX||SPARC||IRIS||LINUX||WIN32

#ifdefinedULTRIX||SPARC||IRIS||LINUX

externvoid_stdcallmessag(char*,int*,char*,int*,int,int)

#definemessag(s1,i1,s2,i2)messag_(s1,i1,s2,i2,strlen(s1),strlen(s2))

#else/*WIN32Platform*/

externvoid_stdcallmessag(char*,int,int*,char*,int,int*)

如果要用在C++中,需要如下定義。

#ifdef_cplusplus

extern/C0{

#endif

/*yourexterncode*/

#ifdef_cplusplus

}

#endif

Fortran里便可以直接調(diào)用如下。

CALLMESSAG(char1,i1,char2,i2)

同樣,在Fortran里寫的字符串處理函數(shù)使用以上的define和extern后,也可以在C里直接調(diào)用。

3.混合編程中的文件讀寫處理

文件讀寫也是混合編程中一個非常重要的問題,由于編程語言的差異,不同的編譯器的存儲格式也存在差異,如VisualFortran與DigitalFortran在存儲數(shù)據(jù)塊中還存在著差別。在一個write語句中,VisualFortran存儲數(shù)據(jù)塊的開始標(biāo)志與結(jié)束標(biāo)志是用一個字節(jié)表示,而在DigitalFortran是用一個整形數(shù),即4個字節(jié)來表示。也就是說,VisualFortran一個數(shù)據(jù)塊最多可以存儲128個字節(jié),如果一個write語句要求寫入的數(shù)據(jù)量大于128字節(jié)時,則按循環(huán)形式存入。所以,DigitalFortran在讀取時就應(yīng)該把它轉(zhuǎn)化為相應(yīng)的DigitalFortran存儲形式。

4.混合編程過程中數(shù)據(jù)結(jié)構(gòu)的處理

主要體現(xiàn)在數(shù)組和結(jié)構(gòu)2個方面。在Fortran語言里,數(shù)組和C、C++里的數(shù)組有些不同,這表現(xiàn)在行列順序和數(shù)組起始值.Fortran語言不同于C、C++的行優(yōu)先,而使用列優(yōu)先的方式。假設(shè)有一個數(shù)組a,m行n列,采用行優(yōu)先時的數(shù)據(jù)存放格式如下。

a11,a12,a1n,a21,a22,,,a2n,,,

am1,am2,,,amn

而采用列優(yōu)先的數(shù)據(jù)存放格式如下。

a11,a21,,,am1,a12,a22,,,am2,,,a1n,a2n,,,amn

行優(yōu)先順序推廣到多維數(shù)組,規(guī)定為先排最右的下標(biāo);列優(yōu)先順序推廣到多維數(shù)組,規(guī)定為先排最左的下標(biāo)。這樣,在混合語言編程里調(diào)用數(shù)據(jù)時必須注意行列優(yōu)先的差別,進(jìn)行準(zhǔn)確地調(diào)用.數(shù)組的另一個差別是起始下標(biāo)的不同。Fortran默認(rèn)的數(shù)組下標(biāo)是以1開始的,而C、C++默認(rèn)的數(shù)組下標(biāo)卻是從0開始的,所以在調(diào)用時要注意加1或者減1,以保證調(diào)用到正確的數(shù)據(jù)。

Fortran語言里的結(jié)構(gòu)經(jīng)過聲明后就被分配了空間,在C、C++里面也要聲明它,采用下面的方式。

Fortran結(jié)構(gòu)聲明格式如下。

COMMON/COLOR7/C_RED,C_GREEN,C_BLUE

COMMON/NDDAT/NID(NASIZE),XN(3,NASIZE)

C、C++結(jié)構(gòu)聲明格式如下。

#ifdef_cplusplus

extern"C"{

#endif

#definecolor7COLOR7

#definenddatNDDAT

externstruct{floatc_red;floatc_green;floatc_blue;}color7;

externstruct{intnid[NASIZE];floatxn[NASIZE][3];}ndda;t

#ifdef_cplusplus

}

#endif

綜合上述問題的研究,混合編程的優(yōu)勢在于它允許調(diào)用另一種語言編寫的現(xiàn)有程序代碼、使用在特定語言環(huán)境下難以實現(xiàn)的算法和獲得處理速度方面的優(yōu)勢。在混合編程中的關(guān)鍵問題是協(xié)調(diào)2種或多種語言間所的調(diào)用約定、命名約定及參數(shù)傳遞方式,并使它們在數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)類型上保持一致。

參考文獻(xiàn)

[1]張志華,王林江,呂慶風(fēng).混合編程與FORTRAN計算程序可視化[J].計算機應(yīng)用,1999,19(6):33-35.

[2]袁平.多語言混合編程的技術(shù)關(guān)鍵及方法[J].電腦與信息技術(shù),1996,(1):43-45.

[3]周振紅.IntelVisualFortran應(yīng)用程序開發(fā)[M].鄭州:黃河水利出版社,2006.

篇9

關(guān)鍵詞:可重構(gòu);Impulse C;FPGA;高性能計算

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2009)04-0991-03

The Research on Reconfigurable Computing Programming Technology Based on Impulse C

MAO Xing-quan

(Jiangnan Institute of Computing Technology, Wuxi 214083,China)

Abstract: The research on reconfigurable computing takes up with highly flexible architecture for high performance computing. Reconfigurable platforms with FPGA instruments appear largely in recently years. The high-level programming technology of FPGA let the software engineers break away from the trouble of hardware and concentrate on the algorithmic functionality. The Impulse C development kit is a relatively simple and C-based approach which is used for hardware/software co-development. Combining with the hardware compilers, these tools form a whole processor/FPGA mixed means, and greatly simplify the design process of the reconfigurable component. But still, there is some gaps about efficiency and optimization need to fill.

Key words: reconfigurable; impulse C; FPGA; High performance computing

1 可重構(gòu)計算技術(shù)

1.1 基于FPGA的可重構(gòu)計算

隨著電子、通信、科學(xué)計算等應(yīng)用領(lǐng)域的不斷發(fā)展,對高性能信息處理系統(tǒng)的需求日益增加。傳統(tǒng)的基于通用處理器通過軟件編程實現(xiàn)基本算法的方法和基于硬件的方法都無法完全滿足這些需求。而可重構(gòu)計算技術(shù)結(jié)合了通用微處理器的靈活性和專用ASIC的高效性,為滿足各領(lǐng)域?qū)Ω咝阅苡嬎愕男枨筇峁┝艘粭l可能的途徑。

可重構(gòu)計算(Reconfigurable Computing)是指,在軟件的控制下,利用系統(tǒng)中的可重用資源,根據(jù)應(yīng)用的需要重新構(gòu)造一個新的計算平臺,達(dá)到接近專用硬件設(shè)計的高性能??[1]。而具有可重新配置電路功能特性的FPGA(Field-Programmable Gate Array)的出現(xiàn),正好滿足了可重構(gòu)計算系統(tǒng)的需求。目前的可重構(gòu)計算系統(tǒng)主要是基于FPGA的,以便針對不同的計算需求構(gòu)造不同的硬件結(jié)構(gòu),實現(xiàn)高效的并行計算,提高電子信息系統(tǒng)的實時處理能力、自適應(yīng)能力、可靠性、降低硬件系統(tǒng)的規(guī)模和功耗等等。

1.2 可重構(gòu)系統(tǒng)的體系結(jié)構(gòu)

為了取得上述性能上的優(yōu)勢,并且支持廣泛的應(yīng)用,可重構(gòu)系統(tǒng)一般由通用微處理器和可重構(gòu)部件聯(lián)合組成。通用處理器控制可重構(gòu)部件的運行并執(zhí)行不能有效加速的代碼,計算密集的核心代碼被映射到可重構(gòu)部件上執(zhí)行,可重構(gòu)部件擔(dān)當(dāng)通用微處理器的協(xié)處理器的角色[2]。

一個典型的可重構(gòu)系統(tǒng)的結(jié)構(gòu)是:通用處理器初始化可重構(gòu)的硬件,為其送入必要的數(shù)據(jù)或者提供數(shù)據(jù)在存儲器中的位置信息??芍貥?gòu)的計算單元獨立于主處理器執(zhí)行實際的計算任務(wù),計算完成后返回結(jié)果。如圖1所示。這種形式的耦合允許可重構(gòu)部件在不受主處理器干擾的情況下運行大量的操作,并保持與主處理器同步。

1.3 FPGA的編程技術(shù)

使用FPGA作為可重構(gòu)計算平臺也存在著挑戰(zhàn)。傳統(tǒng)上,低層次的硬件描述必須采用VHDL或Verilog語言編寫,這些語言通常不是軟件編程人員的專長。

然而基于C語言的FPGA設(shè)計工具的出現(xiàn),支持了比硬件描述語言更高級的編程抽象,使采用軟件設(shè)計工具和標(biāo)準(zhǔn)C語言來實現(xiàn)絕大部分應(yīng)用成為可能,特別是計算密集型的設(shè)計。

這些新的硬件編譯工具允許對C語言應(yīng)用程序進(jìn)程處理和優(yōu)化,生成FPGA網(wǎng)表格式的硬件設(shè)計,同時也包括對C語言做必要的擴展,以便于描述高并行、多進(jìn)程的應(yīng)用[4]。

有效使用這些工具和軟硬件協(xié)同設(shè)計方法的關(guān)鍵在于對應(yīng)用在軟硬件之間進(jìn)行劃分,確立一個適合于高并行應(yīng)用的編程模型,以及確立一個應(yīng)用的結(jié)果,從而最大限度利用硬件并行優(yōu)勢[5]。

2 Impulse C開發(fā)平臺

2.1 Impulse C編程模型

Impulse C就是一種基于C的硬件設(shè)計和軟硬件混合設(shè)計語言,他能夠抽象掉硬件和軟件之間通信的許多細(xì)節(jié),使得開發(fā)人員能夠更加專注于應(yīng)用的劃分而不用擔(dān)心硬件的底層細(xì)節(jié)。

Impulse C的編程模型是一個面向流的、軟硬件混合式應(yīng)用程序的通信順序進(jìn)程模型[3]。通過使用一些C兼容的擴展,一個應(yīng)用程序被描述為一組通過流、信號、和共享存儲器進(jìn)行通信的進(jìn)程。這些進(jìn)程持續(xù)接收數(shù)據(jù)、進(jìn)行計算、產(chǎn)生輸出來完成應(yīng)用程序的工作。

Impulse C編程模型的核心是進(jìn)程和流。Impulse C致力于從算法到混合FPGA/處理器系統(tǒng)的映射,目的在于建立硬件進(jìn)程在FPGA上的硬件實現(xiàn),軟件進(jìn)程存在于微處理器中。硬件進(jìn)程通過流、信號和存儲器與軟件進(jìn)程相聯(lián)系。如圖2所示。對于被映射到硬件的進(jìn)程,C語言被約束在它的一個子集里,而軟件進(jìn)程只受主機或目標(biāo)C編譯器的限制。

Impulse C編譯器為硬件進(jìn)程生成可綜合HDL,以及實現(xiàn)特定的流、信號、存儲器所必須的硬件之間的接口和硬件到軟件的接口。該編譯器可以執(zhí)行指令調(diào)度、循環(huán)流水、和循環(huán)展開。它包含多種編譯指令(在C中用語句#pragma來表達(dá)),這些編譯指令能夠調(diào)整優(yōu)化結(jié)果,使其滿足通常的面積/性能需求。

2.2 Impulse C的開發(fā)環(huán)境

Impulse Accelerated Technologies公司專門為加速超級計算應(yīng)用而提供可編程FPGA的開發(fā)工具,他們推出的CoDeveloper開發(fā)工具為基于FPGA的可重構(gòu)計算提供了一個軟/硬件協(xié)同開發(fā)環(huán)境。CoDeveloper使用Impulse C庫來支持多重并行處理,將基于C語言的設(shè)計在編譯后以FPGA網(wǎng)表的形式建立硬件。

CoDeveloper開發(fā)環(huán)境包括:實現(xiàn)從C到RTL級HDL轉(zhuǎn)換的CoBuilder,針對具體平臺的自動生成軟硬件接口的平臺支持包(Platform Support Package,PSP),以及軟硬件協(xié)同設(shè)計調(diào)試工具Application Manager和Application Monitor。

CoDeveloper使用Impulse C語言提供了對FPGA系統(tǒng)級的設(shè)計,對軟/硬件劃分,同時允許使用標(biāo)準(zhǔn)C構(gòu)造編寫和自動優(yōu)化獨立進(jìn)程,具有最小的軟件編程復(fù)雜度。同時具有在標(biāo)準(zhǔn)C開發(fā)環(huán)境下編譯和調(diào)試的能力。

2.3 Impulse C的開發(fā)流程

Impulse C編譯器能夠?qū)mpulse C進(jìn)程轉(zhuǎn)換成相應(yīng)的硬件和軟件二進(jìn)制文件。在這個處理的過程中,需要執(zhí)行一系列的步驟,其中一部分依賴于你所選擇的平臺對象。如圖3所示。

對于軟件進(jìn)程,使用標(biāo)準(zhǔn)的交叉編譯器和Impulse C提供的特定平臺運行是庫即可。硬件進(jìn)程需要通過RTL生成器的分析,并通過幾遍編譯進(jìn)行優(yōu)化。在這個流程中,設(shè)計輸入、初始的桌面仿真和調(diào)試是利用通常的C開發(fā)工具來完成的。在仿真的過程中,CoDeveloper會通過Application Monitor等調(diào)試工具監(jiān)視Impulse C應(yīng)用程序,指出其中的異?;蛟O(shè)計缺陷。

3 在加速3-DES算法中的應(yīng)用

3-DES算法是常用的加/解密算法,網(wǎng)絡(luò)上可以找到它的公開源代碼。其核心算法是對64位的數(shù)據(jù)塊進(jìn)行加密或解密,對于大量的數(shù)據(jù),只要將該算法重復(fù)應(yīng)用在這些64位塊數(shù)據(jù)上就可以了。

數(shù)據(jù)流模型對該算法是非常適合的,因此我們用Impusle C庫函數(shù)中的流接口來讀取數(shù)據(jù)和輸出數(shù)據(jù)。我們在頂層創(chuàng)建生產(chǎn)者和消費者進(jìn)程,這樣就可以向在FPGA上運行的硬件進(jìn)程輸入一些隨機文本,并接受輸出的加密解密算的結(jié)果。還要創(chuàng)建一個代表加密算法的進(jìn)程和一個代表解密算法的進(jìn)程。加密算法進(jìn)程從生產(chǎn)者進(jìn)程中接收配置數(shù)據(jù)和文本數(shù)據(jù),然后把加密結(jié)果按照一次一個字符的方式寫到輸出流中。如圖4所示。解密進(jìn)程和加密進(jìn)程實質(zhì)是一樣的,除了編譯時參數(shù)不同以外。

算法是用標(biāo)準(zhǔn)C加上Impulse C的庫來描述的,因此可以用標(biāo)準(zhǔn)桌面的調(diào)試工具和CoDeveloper Application Monitor進(jìn)行設(shè)置和運行,并可觀察數(shù)據(jù)流在系統(tǒng)各個不同的進(jìn)程之間的流動,算法的結(jié)果可以在編譯到FPGA平臺之前進(jìn)行驗證。

用標(biāo)準(zhǔn)桌面開發(fā)工具仿真它的功能后,用Altera公司的DE2目標(biāo)板,在混合FPGA/處理器硬件平臺上實現(xiàn)了該應(yīng)用。這個平臺的開發(fā)套件包括了所用編譯和綜合到FPGA的開發(fā)工具。這個開發(fā)套件結(jié)合Impulse C編譯器,包含了編譯C源程序和執(zhí)行應(yīng)用所需要的所有工具。

在把加密程序編譯成目標(biāo)硬件的過程中,首先必須設(shè)計支持DE2平臺的Platform Support Package文件,接著利用利用這個平臺支持包處理相關(guān)的Impulse C源文件,產(chǎn)生相應(yīng)的硬件和軟件的接口文件。

然后用Altera的Quartus工具建立新的項目,CoDeveloper輸出生成的硬件和軟件文件給Quartus,整個系統(tǒng)用Quartus工具綜合,并用SOPC Builder的工具生成bit文件,通過USB電纜下載到FPGA上運行驗證。

在這個實驗中,通過運行在通用處理器上的軟件進(jìn)程來獲取測試時間,并與在通用處理器上運行的純軟件方式的加密算法所用時間作為對比。對同一塊數(shù)據(jù)進(jìn)行加密,混合平臺上運行的時間約為0.014秒,通用處理器上的軟件實現(xiàn)約為0.12秒,硬件實現(xiàn)比純軟件實現(xiàn)速度提高了8.6倍,這主要是由于硬件實現(xiàn)發(fā)揮了算法內(nèi)層循環(huán)中的底層并行性的能力。

4 結(jié)論

本文介紹了基于FPGA的可重構(gòu)計算平臺的體系結(jié)構(gòu),以及在C語言的環(huán)境中對FPGA的編程技術(shù),還對基于Impulse C庫的CoDeveloper工具進(jìn)行了詳細(xì)的論述。在此基礎(chǔ)上,通過3-DES加密算法的實例,對在CoDeveloper和Altera設(shè)計工具的環(huán)境下基于Impulse C的軟硬件協(xié)同開發(fā)技術(shù)進(jìn)行了深入的研究。

可重構(gòu)計算是未來高性能計算的一個發(fā)展方向。采用高級語言對FPGA的進(jìn)行編程,可以使開發(fā)人員把注意力集中在算法的描述上,并讓軟件設(shè)計師也能完成底層硬件的的設(shè)計工作。當(dāng)然這些需要強大的可重構(gòu)編譯器的支持。未來,面向可重構(gòu)計算的編程模型、編程語言及相關(guān)的編譯器的設(shè)計還有待進(jìn)一步研究。

參考文獻(xiàn):

[1] 羅金平,杜貴然,周興銘.計算機體系結(jié)構(gòu)的新發(fā)展:通用重構(gòu)計算技術(shù)[J].計算機工程,1999(9):1.

[2] 王昭順,王沁,曲英杰.可重構(gòu)計算機體系結(jié)構(gòu)[J].北京科技大學(xué)學(xué)報.2001,23(4):387-389.

[3] Katherine Cpmpton,Scott Hauck.Reconfiguralbe Computing:A Survey of Systems and Software.ACM Computing Surveys,2002,34(2):171-210.

篇10

[關(guān)鍵詞]BASIC 編程 過程

隨著高等級公路的不斷修建,采用的各種測量儀器和計算方法也越來越先進(jìn)、快速、精確。目前我們在公路建設(shè)中主要的測量儀器大部分都采用全站儀,而在公路的平面設(shè)計、縱斷面設(shè)計、橫斷面設(shè)計等工作中,都已采用電腦計算,但是一般電腦只方便于內(nèi)業(yè),對于外業(yè)來說就不能隨意攜帶。如果我們使用PC-500袋裝電腦,那就不管內(nèi)業(yè)和外業(yè)都是很方便的,因它小巧、容量大,故特別適應(yīng)于公路建設(shè)中的施工單位的隨意測量放樣和監(jiān)理單位的測量監(jiān)理使用。

下面就本人在公路建設(shè)中使用PC-500機進(jìn)行公路坐標(biāo)程序編制方法介紹如下,供同行們參考。

例如編制某一條公路的中樁,可按以下步驟來解決。

一、確定計算處理方案

在一般的公路線型中,無非有直線和曲線兩種情況,而曲線又分為圓曲線和帶有緩和曲線的圓曲線兩種。要計算出某中樁坐標(biāo),必須根據(jù)曲線要素判斷該點是在直線上還是在曲線上,然后按有關(guān)公式進(jìn)行計算,就很容易得出正確結(jié)果。

二、根據(jù)方案畫出框圖(即程序流程圖)

框圖是程序編制中利用規(guī)定的符號及規(guī)則來描述程序的思想、步驟,體現(xiàn)程序編制人員的思路、意圖的一種程序編制方法。在程序的編制過程中,由于使用了許多條件語句和無條件語句等,使其程序不按行號順序執(zhí)行,而是根據(jù)實際需要改變了執(zhí)行順序,即“跳躍式”地執(zhí)行。因此,我們在編程開始前就要根據(jù)自己的設(shè)計思路先畫出程序框圖,再根據(jù)框圖進(jìn)行編程。

在框圖的編制中,應(yīng)當(dāng)按照每個步驟的功能選擇適當(dāng)?shù)目驁D位置,然后組成框圖,再將程序的執(zhí)行步驟逐個按順序填入框圖中(如上圖)。

三、框圖檢查

當(dāng)框圖檢查無錯后,再對照框圖編制你所需要的程序。

四、上機調(diào)試程序和運行程序

根據(jù)編寫完成的程序編入計算機,并調(diào)試。當(dāng)調(diào)試完畢并運行無錯后,即可進(jìn)行坐標(biāo)計算。

剛編好的程序總會存在各種各樣的錯誤和問題,在調(diào)試過程中,要查看各語句的書寫格式,使用規(guī)則等是否正確。有時一個標(biāo)點符號或空格的錯誤使用,都會造成全部的計算結(jié)果出錯或“死機”等,所以在調(diào)試過程、查看的過程中要特別仔細(xì)。

在調(diào)試的過程中,還要輸入一些數(shù)據(jù)進(jìn)行試運行,看是否運行情況正確,能否得到預(yù)期的效果,有時可能因為得不到預(yù)期的正確結(jié)果而對原程序做些局部修改。總之,調(diào)試是一項費時費力的工作過程。

在編制程序的過程中,要正確使用公式以及公式的前后順序。如果某公式里含有一個或多個未知數(shù),那么就應(yīng)把未知數(shù)的計算式放在該公式的前面,使計算機首先計算未知數(shù)后再計算該公式,否則出錯。例如:

10 INPUT”A,B,C=”;A,B,C

20 X1=(3+2*A)*SQR(E+C)

30 E=(A+B)*C

40 PRINT”X1=”; X1

50 END

因30行里的E未計算出來,故20行就無法運行,并發(fā)生錯誤,故應(yīng)把該程序改寫成:

20 E=(A+B)*C