c語言編程范文

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

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

c語言編程

篇1

關鍵詞:C語言;學習;編程

1 C語言的特點和優勢

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

2 學習枯燥乏味之理由

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

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

其次是在C語言中有很多的算法和結構讓很多同學覺得眼花,很多同學只是簡單的靠記憶把他記憶下來,這樣效果就很低,而且非常枯燥,應該要通過更多的實踐練習掌握它們的規律和方法。

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

3 編程技巧

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

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

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

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

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

4 總結

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

[參考文獻]

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

篇2

【關鍵詞】堆棧;緩沖區;函數調用;指針

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

C語言是一種面向過程的計算機語言,它的表現能力和處理能力極強,具有豐富的運算符和數據類型,便于實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行基于bit位的操作。它的編寫不依賴計算機硬件的應用程序,又可以編寫多種程序。

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

上面幾種問題是初學者經常遇到的幾種典型問題,隨著學習的深入,還有一些初學者不易發現的問題也是至關重要的。

一、緩沖區溢出問題

緩沖區用于存放給定類型的數據,是內存的連續塊。一些C語言的基本函數如內存的拷貝函數,字符串的拷貝函數本身的安全性比較差,這些標準函數不判定原內容和目的內容的長度,當原內容長度大于目的內容長度的時候,可能會出現字符串過長導致覆蓋了相鄰存儲單元,進而導致程序運行錯誤,導致程序崩盤。

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

二、指針的使用

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

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

三、系統調用

系統調用就是在用戶層和核心層之間的層次與接口。系統調用模塊的預先設定,提供了用戶與應用程序的核心程序服務。在一般的操作系統中,只有操作系統才能有權訪問系統硬件,而用戶和程序是無法對設備直接訪問。所以需要系統調用來為應用程序提供硬件資源或重要軟件資源。

篇3

【關鍵詞】C語言 編程 結構化

1 C語言的編程特點

1.1 C語言的定位

很多人都普遍的認為C語言是在B語言的基礎上發展過來的一種高級編程語言。然而從編程語言的層次結構方面來說,我們應該認為C語言,是在匯編語言的基礎上發展而來的,它比匯編這類編程語言要高級,但是比一些可視化的編程語言又低級,所以準確來說,C語言應該算是中級編程語言,或者稱為準高級程序設計語言。目前很多高級程序設計語言都是在C語言的基礎上發展而來的,或者至少借鑒了C語言程序設計的思想。80年代初,Bjarne Stroustrup在貝爾實驗室對標準C進行了改進和完善,C++得以誕生,使得面向對象的程序設計思想得以提出和落實;21世紀初,人們將C語言和單片機相結合,開發出來了應用于單片機編程的C51語言,使得單片機的程序設計從反復的匯編語言設計中抽身出來,大大的提高了程序的設計效率。

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

1.2 C語言的編程特點

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

(1)用相應的C語句可以實現對微機操作中的字節、地址等進行直接訪問。

(2)基于函數的結構化特點,使得復雜的軟件系統可以由多個人,以設計子函數的形式,分別各自進行程序開發。之后進行函數的匯總,最后由主函數,按照既定的程序流完成對各個子函數的調用就行。

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

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

2 C語言的編程技巧

2.1 扎實基本工

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

2.2 立足C語言的結構化的特點,熟練程序設計基本構型

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

另外,為了提高程序代碼的執行效率,建議C語言程序設計人員要了解C語言程序最終運行的硬件的基礎機構,是在微型計算機上運行,還是在單片機上運行。在了解硬件平臺結構及內部資源的前提下進行相應的程序設計,將有助于提升程序的運行效率。

3 C語言的實踐應用

3.1 混合編程

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

在進行C語言和匯編語言的混合編程時,無論是采用C語言調用匯編,還是匯編調用C語言,還是C語言嵌入匯編的方式,都應該對調用關系、各模塊的連接以及參數的傳遞進行妥善的處理。對于調用關系,則需要對調用的函數和過程進行說明;通過明確函數和變量的命名以及存儲模式的關聯性,從而實現各模塊的有效連接;通常情況下往往通過堆棧的方式來實現參數的傳遞。

3.2 C語言在工程上的應用

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

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

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

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

DataChange( ); DisPlay( ); …}

整個系統由于需要不停的對工廠數據進行采集,所有主程序的結構就設置成了循環結構,當通風控制系統有序的進行準備工作之后,通過調用初始化函數,程序就開始進入主循環,主循環中通過調用采集程序,完成對測量對象的循環檢測以及對顯示程序,數據處理函數的循環調用。一遍又一遍的不停循環執行主程序。在這個主程序循環的過程中,如果有異常情況發生,則隨著中斷觸發事件的發生,將進入中斷響應,實現對中斷函數的調用。

4 總結

C語言作為編程語言中經典的一類程序設計語言,因其結構化、可移植化、編程簡介的特點,被廣泛的應用國民生產的各個領域。而隨著信息技術、互聯網技術以及物聯網技術的飛速發展,未來C語言的應用領域將變得更加廣泛。對C語言在軟件編程方面的研究和分析將變得更有意義。

參考文獻

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

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

作者單位

篇4

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

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

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

1.3運算范圍廣C語言總共具有34種運算符,其運算符號十分豐富且對運輸結果能采用各種各樣的表達形式,因此C語言的數據處理能力強,可以為各類數據結構進行復雜的運算,進行一些高級語言較難實現的運算功能。

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

1.5應用效率高C語言的應用結構簡單清晰,能夠對內存中的相應地址進行直接的訪問,操作十分方便,被稱為高級語言中的低級語言。同時能夠直接調用系統功能,直接操作硬件,具備許多高級語言所不具備的高效率。

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

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

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

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

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

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

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

3.C語言在計算機軟件編程中的應用

C語言具有很強的優越性,可以適用于計算機軟件編程實驗研究,這就需要對C語言在計算機軟件編程中的應用有一個全面的認識,避免在以后的程序設計過程中出現基礎不足的情況。

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

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

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

篇5

關鍵詞 C語言;中等職業教育;計算機專業

中圖分類號:G712 文獻標識碼:B

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

1 前言

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

2 中職學校計算機專業開設編程語言課的必要性

自1987年起,國家教育部就開始了中職畢業生直接上大學(普通高校)的探索。目前,國家每年都有部分普通高校本科和專科對口單獨招錄中等職業學校畢業生,這為中等職業教育的發展提供了有利條件,拓寬了中職學生繼續學習的渠道。中職學生升入高一級學校,繼續學習計算機相關專業,編程語言課的學習是必然的,因此在中職階段提前開設相關編程語言課的學習就很必要,它會為學生今后拓展專業知識奠定有利的基礎。

3 中職計算機專業學生現狀

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

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

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

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

5)學習惰性強、缺乏自信,遇到困難不愿自行解決、認為也解決不了。

6)主觀意識中排斥編程類課程的學習,認為沒有實際用途。

4 教學思考與對策

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

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

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

適當降低教學難度并調整講課進度 在每節課的例題中精選一些學生容易掌握的、有特點的例題進行講解,并對其舉一反三、變換對比程序,讓學生每節課學得少而精。

不同章節選用不同的教學方法 同時注意將上機環境融入到課堂講授中,讓學生直觀的認識程序的調試、運行、結果的必然聯系和關系,引導學生發現課堂分析程序與上機調試程序存在的區別,這樣有利于學生課后自學,逐步提高學生的自學能力。

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

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

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

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

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

5 結語

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

參考文獻

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

2001.

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

篇6

關鍵詞 高職教育 C語言 結構化編程 互聯網

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

1 教學內容

在課程設計上,針對高職計算機專業學制短,技能要求高的特點,提出了“一條線兩階段,三結構四循環”的教學模式。

“一條線”是指在一年級的編程教學課中,貫徹C語言一條線。曾經有一種觀點,認為高職計算機專業的編程語言教學,直接從面向對象語言開始學習,可以節約時間。但是,70%的企業依然要求學生具備面向過程的結構化編程能力。考慮到企業的需求,結合后續的課程安排,我們決定在一年級的課程安排上,貫徹C語言“一條線”,即在第一學期,開設“程序設計基礎”,第二學期,開設面向過程的“C語言程序設計”。

“兩階段’指課程安排分為“程序設計基礎”和“C語言程序設計”兩個階段。“程序設計基礎”解決程序的基本結構,重點在建立學生的結構化程序的基本框架和概念;以C語言為基本語言,使學生能有實際操作的平臺,但準確把握“把C語言作為偽語言”的原則,不讓學生陷入C語言多變的泥淖,而把注意力放在結構化程序的基本結構上。“C語言程序設計”放在解決C語言的使用上,把握“C語言”是編程工具而不是研究對象的原則,根據企業的編程規范,對“C語言”進行簡化,重點是如何使用C語言解決一般復雜程度的結構化編程問題。

“三結構”是指在一年的學習中,學生要學習三個成績管理軟件的編程,分別是基于一維數組、二維數組和動態結構數組。從企業實際應用來看,動態空間的使用,可以用動態數組解決。因此我們去掉了鏈表,重點是讓學生寫出有工程實際意義的結構化程序。

“四循環”是指編寫基于“三結構”的每一個成績管理軟件過程中,教師四個以上的程序版本,引導學生改寫、增加函數,讓學生直觀地看到軟件的功能是如何一步一步構建起來的。

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

通過圖1,我們可以看到程序功能的增加是由哪些代碼實現的,而通過不斷反復的比較,學生就可以掌握結構化程序設計的過程和方法。

在教學過程中,通過比較版本,讓學生直觀地看到復雜的程序功能是如何由簡單的函數一個一個構成的。學生經過“程序設計基礎”的課程設計,基本掌握主函數與模塊函數的作用和相互關系,可以看懂超過100行的C語言源程序,理解基于一維數組的成績管理系統;在“C語言程序設計”的課程設計中,學生對主函數與模塊函數的理解更加深入,可以看懂超過300行的C語言源程序,理解基于動態結構數組的成績管理系統,掌握主函數的設計方法,并按照規范的格式寫出自己的函數。回想三年前,因為沒有采用這種方法,只要是超過20行的程序,學生就普遍反映看不懂。由此可見,采用新的方法后,學生編程能力的提高十分明顯。

2 教材建設

2004年9月清華大學出版社出版了作者主編的21世紀高職高專規劃教材《程序設計基礎》,教材主要在三個方面進行了改革。

(1)強調把生活中的問題轉化為程序的能力,使學生真正能夠編寫實用的程序

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

在教材的編寫風格上,對全書所有的例題進行了通盤的考慮,在循環、數組、函數和結構化設計等單元,所有的例子都有前后的聯系,強調內容的前后銜接,特別注意工程規范的引入,在變量的命名、程序格式方面,均按工程要求進行。在案例選擇上,全部采用工程實際和實際生活中的案例。

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

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

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

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

所謂“三大步”,是指我們在使用自定義的函數時,對函數進行聲明、定義和調用。三大步按順序進行。

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

3 實訓設計

對高職學小的技能培養,實訓是很重要的環節。我們采用了項目驅動的思想來設計實訓項目,每一單元的實訓,都是構成最終程序的不同版本,在“程序設計基礎”頭程序版本8個,“C語言程序設計”共程序版本10個,構成了實用的軟件框架,學生相當于參與了一個中等復雜程度的軟件開發,積累了經驗。在今后的實際工作中,完全可以以此為模板,進行結構化程序的開發。

4 網站建設

利用互聯網技術,建立基于互聯網的學習資源。2003年建立了“光華之窗”教學網站,在網站平臺上,將電子教材、電子教案、學習論壇,編程工具、學習資料等,整合成為學習網站,設計了“程序設計基礎”、“C語言程序設計”教學論壇,兩年來積累了完整的教學過程資料。可以說,網站的建設和運行,為課程的質量提供了保證,避免了“課隨老師走”的問題。

5 考核方式

篇7

一、研究目標及擬解決的主要問題

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

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

(2)構筑網絡教學平臺

構筑網絡教學平臺,教學資料全部上網,以教學課件、教學錄像為基礎,以學習指南、實驗指導、作業習題為引導,以在線答疑、手機答疑、短信答疑、電子郵件答疑為互動,以在線測試、模擬考試為補充,鼓勵學生自主學習、開放學習、靈活學習。

通過師生互動的教學,通過網絡教學資源的配合,讓學生掌握各學習環節,充分發揮學生的學習積極性和能動性,激發和促進學生的能力發展。

(3)考核方式

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

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

二、研究內容

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

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

3、如何以“全國信息技術應用水平大賽”為載體,增強學生掌握應用開發技術的自信心與能力。

4、如何培養學生形成正確的程序設計思想,能夠熟練地使用C語言進行程序設計并具備調試程序的能力,為后繼課程VC,VC++及其他程序設計課程的學習和應用打下基礎。

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

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

2、精講課本知識,充分利用先進的教學手段,提高課程教學質量。加強師資與實驗室建設,加強綜合課程設計環節,切實提高學生實際動手能力的培養。

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

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

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

(1)第一階段:

準備階段:根據課程的特點,項目組的教師討論提出最優方案,制定詳細的計劃,分工責任到人,并定期檢查進展情況。

(2)第二階段:

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

(3)第三階段:

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

(4)第四階段:

評價項目研究成果;撰寫項目“研究報告”;發表研究論文及應用論文。

五、預期成果

1、教學研究的研究報告。

2、教學研究的教材、教案、課件、教學大綱、實驗大綱、實驗指導書等。

3、以“全國信息技術應用水平大賽”為載體,增強學生掌握應用開發技術的自信心與能力。

篇8

【關鍵詞】C;C++;Fortran;混合編程;字符串;文件讀寫;函數調用

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

1.混合編程開發平臺及編譯開發環境的選擇

Fortran語言沒有大小寫之分,而Windows平臺下的混合語言編程過程中大小寫問題十分突出。考慮到編譯器的差異,可以用以下方式進行跨平臺編程的函數聲明。C、C++編譯器使用MicrosoftVisualC++6.0編譯集成開發環境,Fortran編譯器使用DigitalVisualFortran6.0編譯集成開發環境。

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

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

語言約定的一致性。混合編程時,要注意調用程序與被調用程序遵守同樣的約定,不能發生沖突。這些約定包括命名約定、調用約定、參數傳遞約定和函數返回值約定。

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

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

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

#ifdef_cplusplus

extern/C0void{

#endif

externvoid_stdcallCFunction();

#definecFunctionCFUNCTION

#ifdef_cplusplus

}

#endif

這樣就可實現上述函數在Fortran或C++程序中的直接調用。

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

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

以C函數為例,定義如下。

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

{

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

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

}

如果要在Fortran里調用的話,需要以下定義。

#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里便可以直接調用如下。

CALLMESSAG(char1,i1,char2,i2)

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

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

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

4.混合編程過程中數據結構的處理

主要體現在數組和結構2個方面。在Fortran語言里,數組和C、C++里的數組有些不同,這表現在行列順序和數組起始值.Fortran語言不同于C、C++的行優先,而使用列優先的方式。假設有一個數組a,m行n列,采用行優先時的數據存放格式如下。

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

am1,am2,,,amn

而采用列優先的數據存放格式如下。

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

行優先順序推廣到多維數組,規定為先排最右的下標;列優先順序推廣到多維數組,規定為先排最左的下標。這樣,在混合語言編程里調用數據時必須注意行列優先的差別,進行準確地調用.數組的另一個差別是起始下標的不同。Fortran默認的數組下標是以1開始的,而C、C++默認的數組下標卻是從0開始的,所以在調用時要注意加1或者減1,以保證調用到正確的數據。

Fortran語言里的結構經過聲明后就被分配了空間,在C、C++里面也要聲明它,采用下面的方式。

Fortran結構聲明格式如下。

COMMON/COLOR7/C_RED,C_GREEN,C_BLUE

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

C、C++結構聲明格式如下。

#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

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

參考文獻

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

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

[3]周振紅.IntelVisualFortran應用程序開發[M].鄭州:黃河水利出版社,2006.

篇9

關鍵詞:可重構;Impulse C;FPGA;高性能計算

中圖分類號:TP311文獻標識碼: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 可重構計算技術

1.1 基于FPGA的可重構計算

隨著電子、通信、科學計算等應用領域的不斷發展,對高性能信息處理系統的需求日益增加。傳統的基于通用處理器通過軟件編程實現基本算法的方法和基于硬件的方法都無法完全滿足這些需求。而可重構計算技術結合了通用微處理器的靈活性和專用ASIC的高效性,為滿足各領域對高性能計算的需求提供了一條可能的途徑。

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

1.2 可重構系統的體系結構

為了取得上述性能上的優勢,并且支持廣泛的應用,可重構系統一般由通用微處理器和可重構部件聯合組成。通用處理器控制可重構部件的運行并執行不能有效加速的代碼,計算密集的核心代碼被映射到可重構部件上執行,可重構部件擔當通用微處理器的協處理器的角色[2]。

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

1.3 FPGA的編程技術

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

然而基于C語言的FPGA設計工具的出現,支持了比硬件描述語言更高級的編程抽象,使采用軟件設計工具和標準C語言來實現絕大部分應用成為可能,特別是計算密集型的設計。

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

有效使用這些工具和軟硬件協同設計方法的關鍵在于對應用在軟硬件之間進行劃分,確立一個適合于高并行應用的編程模型,以及確立一個應用的結果,從而最大限度利用硬件并行優勢[5]。

2 Impulse C開發平臺

2.1 Impulse C編程模型

Impulse C就是一種基于C的硬件設計和軟硬件混合設計語言,他能夠抽象掉硬件和軟件之間通信的許多細節,使得開發人員能夠更加專注于應用的劃分而不用擔心硬件的底層細節。

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

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

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

2.2 Impulse C的開發環境

Impulse Accelerated Technologies公司專門為加速超級計算應用而提供可編程FPGA的開發工具,他們推出的CoDeveloper開發工具為基于FPGA的可重構計算提供了一個軟/硬件協同開發環境。CoDeveloper使用Impulse C庫來支持多重并行處理,將基于C語言的設計在編譯后以FPGA網表的形式建立硬件。

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

CoDeveloper使用Impulse C語言提供了對FPGA系統級的設計,對軟/硬件劃分,同時允許使用標準C構造編寫和自動優化獨立進程,具有最小的軟件編程復雜度。同時具有在標準C開發環境下編譯和調試的能力。

2.3 Impulse C的開發流程

Impulse C編譯器能夠將Impulse C進程轉換成相應的硬件和軟件二進制文件。在這個處理的過程中,需要執行一系列的步驟,其中一部分依賴于你所選擇的平臺對象。如圖3所示。

對于軟件進程,使用標準的交叉編譯器和Impulse C提供的特定平臺運行是庫即可。硬件進程需要通過RTL生成器的分析,并通過幾遍編譯進行優化。在這個流程中,設計輸入、初始的桌面仿真和調試是利用通常的C開發工具來完成的。在仿真的過程中,CoDeveloper會通過Application Monitor等調試工具監視Impulse C應用程序,指出其中的異常或設計缺陷。

3 在加速3-DES算法中的應用

3-DES算法是常用的加/解密算法,網絡上可以找到它的公開源代碼。其核心算法是對64位的數據塊進行加密或解密,對于大量的數據,只要將該算法重復應用在這些64位塊數據上就可以了。

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

算法是用標準C加上Impulse C的庫來描述的,因此可以用標準桌面的調試工具和CoDeveloper Application Monitor進行設置和運行,并可觀察數據流在系統各個不同的進程之間的流動,算法的結果可以在編譯到FPGA平臺之前進行驗證。

用標準桌面開發工具仿真它的功能后,用Altera公司的DE2目標板,在混合FPGA/處理器硬件平臺上實現了該應用。這個平臺的開發套件包括了所用編譯和綜合到FPGA的開發工具。這個開發套件結合Impulse C編譯器,包含了編譯C源程序和執行應用所需要的所有工具。

在把加密程序編譯成目標硬件的過程中,首先必須設計支持DE2平臺的Platform Support Package文件,接著利用利用這個平臺支持包處理相關的Impulse C源文件,產生相應的硬件和軟件的接口文件。

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

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

4 結論

本文介紹了基于FPGA的可重構計算平臺的體系結構,以及在C語言的環境中對FPGA的編程技術,還對基于Impulse C庫的CoDeveloper工具進行了詳細的論述。在此基礎上,通過3-DES加密算法的實例,對在CoDeveloper和Altera設計工具的環境下基于Impulse C的軟硬件協同開發技術進行了深入的研究。

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

參考文獻:

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

[2] 王昭順,王沁,曲英杰.可重構計算機體系結構[J].北京科技大學學報.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

[關鍵詞]BASIC 編程 過程

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

下面就本人在公路建設中使用PC-500機進行公路坐標程序編制方法介紹如下,供同行們參考。

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

一、確定計算處理方案

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

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

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

在框圖的編制中,應當按照每個步驟的功能選擇適當的框圖位置,然后組成框圖,再將程序的執行步驟逐個按順序填入框圖中(如上圖)。

三、框圖檢查

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

四、上機調試程序和運行程序

根據編寫完成的程序編入計算機,并調試。當調試完畢并運行無錯后,即可進行坐標計算。

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

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

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

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行就無法運行,并發生錯誤,故應把該程序改寫成:

20 E=(A+B)*C