時間:2022-11-19 08:47:21
引言:易發(fā)表網(wǎng)憑借豐富的文秘實踐,為您精心挑選了九篇c語言論文范例。如需獲取更多原創(chuàng)內(nèi)容,可隨時聯(lián)系我們的客服老師。
參考文獻:
[1]裘宗燕.C++程序設計語言(特別版).北京機械工業(yè)出版社,2002.7.
[2]StandleyB.lippman.C++Primer中文版.人民郵電出版社,20006.3.
[3]譚浩強.C程序設計(第二版).清華大學出版社出版,2005.6.
[4]錢能.C++程序設計教程.清華大學出版社,2005.5.
[5]沈美明.IBMPC匯編語言程序設計.清華大學出版社,1993.9.
[6]錢曉捷.匯編語言程序設計.電子工業(yè)出版社,2003.
【參考文獻】
[1]翟乃強,隋樹林,匯編語言與C語言及VisualC++混合編程[J].青島科技大學學報,2003,24(B09):136~138.
[2]錢曉捷,匯編語言程序設計(第二版)[M],電子工業(yè)出版社,2003.6.
[3]錢春英,淺談C語言與匯編語言混合編程的一些技術(shù)[J].南通航運職業(yè)技術(shù)學院學報,2005,4(1):50~52,55.
[4]郭曉梅,匯編語言與C語言的混合編程及應用[J].南京農(nóng)專學報,2002,18(4):49~52,62.
[5]普拉塔.CPrimerPlus(第五版)中文版[M].人民郵電出版社,2005.
[6]斯馬爾迪諾.教學技術(shù)與媒體[M].高等教育出版社,2008.
[7]教育部考試中心.全國計算機等級考試二級教程——C語言程序設計[M].2010年版.北京:高等教育出版社,2010.
參考文獻:
[1]周以真.計算思維[J].中國計算機學會通訊,2007,(3):77-79.
[2]董榮勝.計算思維與計算機導論[J].計算機科學,2009,(36):50-52.
[3]林旺.孫洪濤[J].基于軟件應用的計算思維能力培養(yǎng)教學設計.中國電化教育2014,(11):122-127.
關(guān)鍵詞FranklinC51編譯器匯編語言結(jié)構(gòu)化設計模塊中斷
--------------------------------------------------------------------------------
在研制單片機應用系統(tǒng)時,匯編語言是一種常用的軟件工具。它能直接操作硬件,指令的執(zhí)行速度快。但其指令系統(tǒng)的固有格式受硬件結(jié)構(gòu)的限制很大,且難于編寫與調(diào)試,可移植性也差。隨著單片機硬件性能的提高,其工作速度越來越快,因此在編寫單片機應用系統(tǒng)程序時,更著重于程序本身的編寫效率。而FranklinC51交叉編譯器是專為80C51系列單片機設計的一種高效的C語言編譯器,使用它可以縮短開發(fā)周期,降低開發(fā)成本,而且開發(fā)出的系統(tǒng)易于維護,可靠性高,可移植性好,即使在代碼的使用效率上,也完全可以和匯編語言相比,因此目前它已成為開發(fā)80C51系列單片機的流行工具。
1C51語言程序設計的基本技巧
C語言是一種高級程序設計語言,它提供了十分完備的規(guī)范化流程控制結(jié)構(gòu)。因此采用C51語言設計單片機應用系統(tǒng)程序時,首先要盡可能地采用結(jié)構(gòu)化的程序設計方法,這樣可使整個應用系統(tǒng)程序結(jié)構(gòu)清晰,易于調(diào)試和維護。對于一個較大的程序,可將整個程序按功能分成若干個模塊,不同的模塊完成不同的功能。對于不同的功能模塊,分別指定相應的入口參數(shù)和出口參數(shù),而經(jīng)常使用的一些程序最好編成函數(shù),這樣既不會引起整個程序管理的混亂,還可增強可讀性,移植性也好。
在程序設計過程中,要充分利用C51語言的預處理命令。對于一些常用的常數(shù),如TRUE,F(xiàn)ALSE,PI以及各種特殊功能寄存器,或程序中一些重要的依據(jù)外界條件可變的常量,可采用宏定義"#define"或集中起來放在一個頭文件中進行定義,再采用文件包含命令"#include"將其加入到程序中去。這樣當需要修改某個參量時,只須修改相應的包含文件或宏定義,而不必對使用它們的每個程序文件都作修改,從而有利于文件的維護和更新。現(xiàn)舉例說明如下:
例1對于不同的單片機晶振,程序取不同的延時時間,而且可根據(jù)外界條件的變化修改延時時間的長短。對于這樣的程序,可利用宏定義和條件編譯來實現(xiàn)。程序如下:
#defineflag1
#ifdefflag==1
#definefosc6M
delay=10;
#elifflag==0
#definefosc8M
delay=12;
#else
#definefosc12M
delay=20;
#endif
main()
{
for(I=0;I<delay;I++);
}
這樣源程序不作任何修改就可適用于不同時鐘頻率的單片機系統(tǒng),并可根據(jù)情況的不同取不同的delay值,完成不同的目的。
2C51語言與匯編語言程序的混合編程
C51編譯器能對C語言源程序進行高效率的編譯,生成高效簡潔的代碼,在絕大多數(shù)場合采用C語言編程即可完成預期的目的。但有時為了編程直觀或某些特殊地址的處理,還須采用一定的匯編語言編程。而在另一些場合,出于某種目的,匯編語言也可調(diào)用C語言。在這種混合編程中,關(guān)鍵是參數(shù)的傳遞和函數(shù)的返回值。它們必須有完整的約定,否則數(shù)據(jù)的交換就可能出錯。下面就以力源公司的10位串行A/D轉(zhuǎn)換器TLC1549為例說明C語言程序與匯編語言程序的調(diào)用。
圖1TLC1549管腳圖
1549的管腳圖和時序圖分別如圖1和圖2所示,假定DATAOUT接P1.0,接P1.1,CLOCK接P1.2。
1549的具體特性請查閱有關(guān)資料。
例2C語言程序與匯編語言程序的調(diào)用,其子程序如下:
PUBLICAD;入口地址
SEG_ADSEGMENTCODE;程序段
RSEGSEG_AD
USING0
AD:MOVR6,#00
MOVR7,#00
SETBP1.1
ACALLDELAY
CLRP1.1
ACALLDELAY
MOVR0,#10
RR0:SETBP1.2
NOP
CLRP1.2
DJNZR0,RR0
ACALLDELAY
MOV30H,R6;A/D轉(zhuǎn)換的高
;兩位保存在R6中
ACALLCIR
MOVR6,30H
SETBP1.2
NOP
CLRP1.2
MOV30H,R6
ACALLCIR
MOVR6,30H
MOVR0,#8;A/D轉(zhuǎn)換的低
;8位保存在R7中
RR2:SETBP1.2
NOP
CLRP1.2
MOV30H,R7
ACALLCIR
MOVR7,30H
DJNZR0,RR2
RET
CIR:CLRC
MOVC,P1.0
MOVA,30H
RLCA
MOV30H,A
RET
END
在以上程序中,函數(shù)的返回值為一無符號整型數(shù),根據(jù)調(diào)用規(guī)則,返回值的高位必須在R6中,低位在R7中,這樣才可保證數(shù)據(jù)的傳遞不出錯。另外,在調(diào)用過程中,必須注意寄存器的入棧。這樣在以后用到A/D轉(zhuǎn)換時,在C語言中調(diào)用匯編語言子程序AD()即可。
3C51中斷處理過程
C51編譯器支持在C源程序中直接開發(fā)中斷過程,因此減輕了使用匯編語言的繁瑣工作,提高了開發(fā)效率。中斷服務函數(shù)的完整語法如下:
void函數(shù)名(void)[模式]
[再入]interruptn[usingr]
其中n(0~31)代表中斷號。C51編譯器允許32個中斷,具體使用哪個中斷由80C51系列的芯片決定。r(0~3)代表第r組寄存器。在調(diào)用中斷函數(shù)時,要求中斷過程調(diào)用的函數(shù)所使用的寄存器組必須與其相同。"再入"用于說明中斷處理函數(shù)有無"再入"能力。C51編譯器及其對C語言的擴充允許編程者對中斷所有方面的控制和寄存器組的使用。這種支持能使編程者創(chuàng)建高效的中斷服務程序,用戶只須在C語言下關(guān)心中斷和必要的寄存器組切換操作。
例3設單片機的fosc=12MHz,要求用T0的方式1編程,在P1.0腳輸出周期為2ms的方波。
用C語言編寫的中斷服務程序如下:
#include<reg51.h>
sbitP1_0=P1^0;
voidtimer0(void)interrupt1using1{
/*T0中斷服務程序入口*/
P1_0=!P1_0;
TH0=-(1000/256);/*計數(shù)初值重裝*/
TL0=-(1000%256);
}
voidmain(void)
{
TMOD=0x01;/*T0工作在定時器方式1*/
P1_0=0;
TH0=-(1000/256);/*預置計數(shù)初值*/
TL0=-(1000%256);
EA=1;/*CPU開中斷*/
ET0=1;/*T0開中斷*/
TR0=1;/*啟動T0*/
do{}while(1);
}
在編寫中斷服務程序時必須注意不能進行參數(shù)傳遞,不能有返回值。
為了激發(fā)學生的興趣,可以采用Funcode平臺進行課程設計。Funcode平臺是一款基于游戲設計和動畫界面的C\C++\Java綜合實驗教學平臺,該平臺以游戲設計為“噱頭”,吸引學生的學習興趣,雖然如此,該平臺通過精選大量的游戲案例,還是很好地將程序設計知識點和游戲設計緊密地結(jié)合起來,始終緊扣C語言知識點,為C語言課程設計教學提供了一個很好的工具。
1.1圖形方式的游戲界面編輯Funcode平臺采用圖形界面方式的游戲編輯環(huán)境,直觀、美觀、簡潔易用。圖1所示為正在設計中的游戲,左側(cè)矩形框中為最終運行時可見的游戲界面,可以從右側(cè)中的“魚”(Funcode中稱為“精靈”,任何類似的圖片都是精靈,不同的精靈以精靈名區(qū)分)中任意拖拽一條“魚”到左側(cè)矩形框中,即可在游戲界面中增加一條魚。
1.2提供功能函數(shù),屏蔽對圖形的復雜處理Funcode平臺提供了大量功能函數(shù),屏蔽對圖形對象的復雜處理,使學生能夠?qū)W⒂诔绦蛟O計和游戲邏輯功能的實現(xiàn)。例如:功能函數(shù)voiddSetSpriteLinearVelocityX(constchar*szName,constfloatfVelX)可以使精靈以某一速度水平運動。讓圖1左側(cè)中的魚(假設該魚命名為fish0)游動起來,學生只需用一條函數(shù)調(diào)用語句dSetSpriteLinearVeloctyX(“fish0”,30)即可實現(xiàn);亦可通過調(diào)用功能函數(shù)dSetSpriteLinearVelocity(“fish0”,30,30)使魚水平方向和垂直方向分速度均為30,即在屏幕上“斜向”游動;功能函數(shù)dSetSpriteFlipX(“fish0”,true)調(diào)用可以使魚水平翻轉(zhuǎn),即實現(xiàn)“掉頭”功能。
1.3整體邏輯框架簡潔,功能強大Funcode平臺整體邏輯框架由7個主要函數(shù)模塊組成,分別是主函數(shù)模塊、鼠標移動事件模塊、鼠標單擊事件模塊、按鍵事件模塊、按鍵彈起事件模塊、對象碰撞事件模塊、對象與邊界碰撞事件模塊。其主函數(shù)模塊如以下程序代碼所示,通過主函數(shù)模塊控制整個游戲的運行和界面刷新。其他的6個函數(shù)模塊幾乎包含了游戲設計中需要處理的所有事件,并且向?qū)W生屏蔽了事件激發(fā)所需要的復雜判斷過程,所有的鼠標事件、鍵盤事件、碰撞事件均為自動激發(fā),這很大程度上降低了設計難度,使學生可以專注于游戲邏輯功能的實現(xiàn)。例如:要實現(xiàn)圖1中的“魚”游到右側(cè)邊界時掉頭向左游邏輯功能,在Funcode平臺下,當圖1中的“魚”游到右側(cè)邊界時,“對象與邊界碰撞”模塊將會自動激發(fā),該模塊的初始程序代碼如下所示。此時,學生無需判斷和處理“魚”是否游到邊界(這對大學一年級學生而言比較困難),只需要知道“魚”游到邊界后會自動調(diào)用“對象與邊界碰撞”模塊對應的dOnSpriteColWorldLimit函數(shù)即可。因此,學生只要能夠根據(jù)游戲功能在該函數(shù)中正確地編寫相應的代碼就可以了,具體實現(xiàn)“掉頭向左游”邏輯功能的完整程序代碼如下所示。顯然,這樣就極大地簡化了對圖形對象和事件的處理,學生就可以把更多的精力投入到游戲邏輯功能的實現(xiàn)和代碼的編寫和調(diào)試中。
1.4開放式環(huán)境,極大地激發(fā)學生創(chuàng)新能力Funcode提供了開放式的開發(fā)環(huán)境,除了完成Funcode提供的課程設計案例以外,學生也可以按照自己的思路,添加素材,大膽創(chuàng)新,設計和開發(fā)真正屬于自己的游戲,這樣能極大地激發(fā)學生的程序設計熱情。例如:一組學生開發(fā)的“大魚吃小魚”游戲,當大魚吃小魚得分達到一定的分值時,可以生出“魚寶寶”,尾隨大魚游動,生動有趣。
2教學內(nèi)容和方法的改革
基于Funcode平臺,在教學內(nèi)容和方法的改革上,以激發(fā)學生興趣,調(diào)動學生學習主動性為主要目標,在此基礎(chǔ)上,貫穿整個課程設計的各個階段,采用多種教學方式和方法培養(yǎng)學生各方面的綜合素質(zhì)。
2.1選題階段在選題內(nèi)容上,典型游戲設計和自主創(chuàng)新相結(jié)合。改變原有的設計內(nèi)容變?yōu)榛贔uncode平臺游戲設計。設計內(nèi)容分為兩類:一類是典型的可在Funcode平臺上實現(xiàn)的游戲,比如坦克大戰(zhàn)、打地鼠等;另一類是學生自選題目,要學生根據(jù)Funcode平臺功能,發(fā)揮自己的想象力,創(chuàng)造自己的游戲。教師要通過討論、引導等方式,鼓勵學生自己設計游戲,培養(yǎng)其創(chuàng)新意識和創(chuàng)新能力。題目選定之后,要求學生將游戲整體功能用功能模塊和流程圖的方式清楚地表示出來,并且要能夠準確地描述各模塊之間的關(guān)系,鍛煉學生的抽象思維和邏輯思維能力。在選題方式上,要堅持組內(nèi)討論和師生互動相結(jié)合。組內(nèi)討論有利于游戲功能的完善,有利于發(fā)揮所有同學的創(chuàng)新潛力,有利于調(diào)動學生參與的積極性。通過教師和學生的討論交流,教師要控制游戲功能的實現(xiàn)復雜度,既要保證設計的工作量,又要保證控制在可實現(xiàn)的范圍內(nèi)。
2.2設計階段在課程設計過程中,要避免“學生問,教師答”的教學模式,教師要積極地參與到所有學生的設計中,主動和學生交流討論,掌握他們的設計情況;善于通過引導啟發(fā),培養(yǎng)學生各方面的綜合素質(zhì)。在設計中,要及時發(fā)現(xiàn)并指出存在的問題;對于學生提出的問題,要善于引導他們積極獨立思考,盡量讓其自主分析,找到原因,進而找到解決問題的方法,這一方面可以培養(yǎng)學生獨立思考,分析問題和解決問題的能力,另一方面可以增強學生的成就感和自信心,有利于調(diào)動學生參與實踐的熱情。對于游戲功能的實現(xiàn),要讓學生畫出流程圖或?qū)崿F(xiàn)步驟,體會程序設計中的抽象思維和邏輯思維。比如對于“打飛蟲”游戲,當“拍子”拍中“飛蟲”時,對應Funcode抽象概念為“拍子”對象和“飛蟲”對象發(fā)生碰撞事件,由于碰撞事件自動激發(fā),所以拍中“飛蟲”后對應的游戲功能實現(xiàn)邏輯應該在碰撞事件中表達。對于該碰撞事件的處理,要求學生首先畫出拍中“飛蟲”后的處理邏輯,體會程序設計中的邏輯思維。比如:使“飛蟲”圖像從界面消失在“飛蟲”鏈表中刪除該飛蟲顯示拍效根據(jù)拍中的“飛蟲”類型計分刷新游戲界面上顯示的實時得分值。課程設計要求按組進行,設計中要求分工合理,任務明確,緊密協(xié)作,嚴格按照日程安排,完成設計任務。要求每2天一次,將每人獨立設計的模塊進行整合并測試,同時要求學生定期開展討論,鼓勵他們對設計中存在的問題,積極和同組同學交流溝通,要善于發(fā)揮集體的力量,解決問題。在協(xié)作設計中,培養(yǎng)學生的團隊合作意識。此外,在游戲的設計過程中,必然會存在一些較難實現(xiàn)或者知識點超出課本內(nèi)容的功能,從經(jīng)驗來看,大多數(shù)學生都會無奈地選擇放棄該功能。此時,教師一定要向?qū)W生強調(diào)自主學習的重要意義,讓他們認識到課堂教學中講的內(nèi)容大多是最基礎(chǔ)的核心知識點,而實際的應用中要涉及的知識卻遠非如此,并積極鼓勵和指導學生學習和掌握相關(guān)知識點。
2.3考評階段為了進一步培養(yǎng)學生興趣,調(diào)動其積極性,考核采用每組分別進行講解和演示,交流心得體會,其他組同學和教師進行打分的形式。打分項分為游戲功能、工作量、流暢性、創(chuàng)新性、美觀性等5個方面。演示中鼓勵其他組的同學提問和試玩游戲,盡量找出游戲設計的缺陷,通過多種方式培養(yǎng)學生的展示能力和競爭意識。最后,教師再進行總結(jié)性點評,指出設計的優(yōu)缺點。
3教學效果
從調(diào)動學生學習積極性方面來看,在整個課程設計過程中,學生始終保持著極高的熱情。教師為課程設計建立了QQ群,提供全天答疑服務,從QQ群討論情況來看,學生提問很多,討論熱烈,而且絕大多數(shù)在課外時間。此外,課程設計結(jié)束后,很多學生指出,F(xiàn)uncode平臺美中不足的是:自己創(chuàng)造出的游戲最終生成的可執(zhí)行程序離開Funcode平臺不能運行,非常令人遺憾。這也可以從一個側(cè)面反映了學生的熱情和對自己勞動成果的珍惜。從課程設計內(nèi)容來看,學生大多是按照自己的想法設計的,游戲功能可謂五花八門,創(chuàng)新能力得到了很好的培養(yǎng)和鍛煉。更重要的一點是達到了課程設計的教學目的,學生對程序設計的理解更加深刻,鞏固了C語言學習成果,能夠?qū)⒂螒蚬δ艿膶崿F(xiàn)邏輯用計算機語言準確地表達出來。在程序設計中遇到的具體問題,學生能夠提出自己的解決思路,并通過編寫程序表達自己的思路,很好地將課堂上學到的理論知識應用于實際問題的解決,抽象思維和邏輯思維能力、程序設計實踐動手能力均得到了很好的鍛煉。例如:圖2所示為學生設計的游戲初始界面。該游戲?qū)崿F(xiàn)的功能有:游戲?qū)崟r倒計時;游戲?qū)崟r顯示得分;通過鍵盤控制游戲的開始、暫停和游戲場景的切換;用鼠標控制“拍子”進行移動和拍打;打到大蚊子、小蚊子積分不同,打到堅果則減分,且打中目標有圖片特效產(chǎn)生;蚊子的產(chǎn)生地點、時間、數(shù)量和產(chǎn)生時的飛行速度都是隨機的,且飛行速度隨著積分級別越來越快;游戲結(jié)束時顯示得分最高的三條歷史記錄等。此游戲中,學生自己編寫代碼(不包括自動生成的代碼)行數(shù)在800行以上,使用的C語言知識點涵蓋了數(shù)組、鏈表、函數(shù)、變量作用域、多分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等。
4結(jié)語
關(guān)鍵詞IPSec;NAT;IKE;UDP封裝
1引言
基于IP技術(shù)的虛擬專用網(wǎng)(VirtualProfessionalNetwork,簡稱VPN)是通過Internet平臺將局域網(wǎng)擴展到遠程網(wǎng)絡和遠程計算機用戶的一種成本效益極佳的方法。隨著網(wǎng)絡安全技術(shù)的飛快發(fā)展,越來越多大型企業(yè)利用互聯(lián)網(wǎng)采用IPSec技術(shù)建立VPN網(wǎng)絡,IPSec已逐漸成為VPN構(gòu)建的主流技術(shù)。IP安全協(xié)議(IPSecurityProtocol,簡稱IPSec)是由互聯(lián)網(wǎng)工程工業(yè)組(InternetEngineeringTaskForce,簡稱IETF)1998年底規(guī)劃并制定的網(wǎng)絡IP層標準。IPSec不僅可以為IP協(xié)議層以上所有的高層協(xié)議和應用提供一致性的安全保護,而且除了可用于IPv4之外,也可用于下一代IP協(xié)議IPv6。
另外,NAT(NetworkAddressTranslation)技術(shù)通過改變進出內(nèi)部網(wǎng)絡的IP數(shù)據(jù)包的源和目的地址,把無效的內(nèi)部網(wǎng)絡地址翻譯成合法的IP地址在Internet上使用。該技術(shù)一方面可以把私有IP地址隱藏起來,使外界無法直接訪問內(nèi)部網(wǎng)絡,對內(nèi)部網(wǎng)絡起到保護作用;另一方面,它可以緩解由于IPv4先天設計上的不足,而導致的IP地址嚴重短缺的現(xiàn)狀。
但是,被廣泛使用的網(wǎng)絡地址轉(zhuǎn)換(NAT)設備卻制約著基于IPSec技術(shù)的VPN的發(fā)展,這是因為IPSec協(xié)議在VPN中承擔保護傳輸數(shù)據(jù)的安全性任務。在數(shù)據(jù)傳輸過程中,任何對IP地址及傳輸標志符的修改,都被視作對該協(xié)議的違背,并導致數(shù)據(jù)包不能通過安全檢查而被丟棄。但在VPN中運用NAT技術(shù),則不可避免地要將私網(wǎng)地址映射為公網(wǎng)地址,即對IP地址要進行修改。因此,在VPN網(wǎng)絡中如何使IPSec和NAT協(xié)同工作,實現(xiàn)NAT的透明穿透具有現(xiàn)實意義。
2協(xié)議介紹
2.1IPSec
IPSec包括安全協(xié)議和密鑰管理兩部分。其中,AH和ESP是兩個安全協(xié)議,提供數(shù)據(jù)源驗證、面向無連接的數(shù)據(jù)完整性、抗重放、數(shù)據(jù)機密性和有限抗流量分析等安全任務。為了能夠?qū)⑾鄳陌踩铡⑺惴ê兔荑€應用于需要保護的安全通道,IPSec規(guī)定兩個通信實體進行IPSec通信之前首先構(gòu)建安全關(guān)聯(lián)SA。SA規(guī)定了通信實體雙方所需要的具體安全協(xié)議、加密算法、認證算法以及密鑰。IKE提供了用來協(xié)商、交換和更新SA以及密鑰的完整機制。
IPSec定義了兩種類型的封裝模式——傳輸模式和隧道模式。傳輸模式只對IP分組應用IPSec協(xié)議,對IP報頭不進行任何修改,它只能應用于主機對主機的IPSec虛擬專用網(wǎng)VPN中。隧道模式中IPSec將原有的IP分組封裝成帶有新的IP報頭的IPSec分組,這樣原有的IP分組就被有效地隱藏起來了。隧道主要應用于主機到網(wǎng)關(guān)的遠程接入的情況。
2.2NAT
NAT能解決目前IP地址緊缺的問題,而且能使得內(nèi)外網(wǎng)絡隔離,提供一定的網(wǎng)絡安全保障。它解決問題的辦法是:在內(nèi)部網(wǎng)絡中使用內(nèi)部地址,通過NAT把內(nèi)部地址翻譯成合法的IP地址在Internet上使用,其具體的做法是把IP包內(nèi)的地址或用合法的IP地址來替換。NAT功能通常被集成到路由器、防火墻、ISDN路由器或者單獨的NAT設備中。
NAT有三種類型:靜態(tài)NAT、動態(tài)地址NAT、網(wǎng)絡地址端口轉(zhuǎn)換NAPT。其中靜態(tài)NAT設置起來最為簡單,內(nèi)部網(wǎng)絡中的每個主機都被永久映射成外部網(wǎng)絡中的某個合法的地址。而動態(tài)地址NAT則是在外部網(wǎng)絡中定義了一系列的合法地址,采用動態(tài)分配的方法映射到內(nèi)部網(wǎng)絡。NAPT則是把內(nèi)部地址映射到外部網(wǎng)絡的一個IP地址的不同端口上。根據(jù)不同的需要,三種NAT方案各有利弊。
3IPSec與NAT的不兼容性分析
根據(jù)協(xié)議的定義,我們知道IPSec和NAT兩個協(xié)議之間存在一定的不兼容性。其不兼容性主要有以下幾種形式:
1)NAT對AH的影響
IPSecAH進行驗證的時候,處理的是整個IP包,包括源地址和目的地址。如果IPSec通信雙方存在NAT設備,NAT設備就會修改外層IP包頭的源地址并修改其校驗和,這樣接收方會因認證失敗而丟棄該包。
2)NAT對ESP的影響
TCP/UDP校驗和地計算涉及一個虛構(gòu)的IP包頭,該包頭含有IP源和目的地址。因此,當NAT設備改變IP地址時也需要更新IP頭和TCP/UDP校驗和。如果采用ESP傳輸模式,IP包經(jīng)過NAT設備時,NAT設備修改了IP包頭,但是TCP/UDP校驗和由于處于加密負載中而無法被修改。這樣,該信包經(jīng)過IPSec層后將因為TCP協(xié)議層的校驗和的錯誤而被丟棄。
另外,由于TCP/UDP校驗和只與內(nèi)層原始IP包頭有關(guān),外層IP包頭的修改并不對其造成影響,因此采用ESP隧道模式和僅靜態(tài)或動態(tài)NAT的情況下不存在TCP校驗和的問題。但是,在NAPT情況下,因為NAPT需要TCP/UDP端口來匹配出入信包,而端口號受到ESP加密保護,所以ESP分組通信將會失敗。
3)NAT對IKE的影響
IKE主模式與快速模式中如果使用IP地址作為身份信息,經(jīng)過NAT后,會導致IKE協(xié)商的失敗。
IKE協(xié)議使用固定目的端口500,當NAPT設備后的多個主機向同一響應者發(fā)起SA協(xié)商時,為了實現(xiàn)多路分發(fā)返回的IKE包,NAPT修改外出的IKE包的UDP源端口。因此,響應者應該能處理端口號并非500的IKE協(xié)商請求,但往往NAPT對UDP端口的映射很快會被刪除,再協(xié)商的過程就將出現(xiàn)一些不可預見的問題,很容易導致NAPT設備無法將協(xié)商包送到正確的目的地。
綜上所述,IPSec組件對NAT的支持能力如表1所示從表1中可以看出,只有在隧道模式和地址轉(zhuǎn)換情況下才可以實現(xiàn)IPSec數(shù)據(jù)流的NAT穿越。這一方法既降低了IPSec協(xié)議的安全性,又限制了NAT的工作方式,因此在實際應用中可行度較差。
4IPSec與NAT的兼容性要求
在現(xiàn)有的條件下,為了推動基于IPSec的VPN的發(fā)展,IPSec和NAT兼容性解決方案需要滿足下列要求:
1)可部署性
IPSec和NAT兼容性解決方案作為一個過渡的解決辦法必須比IPv6易于部署。應該只需修改主機,無需改變路由器,在短時間內(nèi)能與現(xiàn)存的路由器和NAT產(chǎn)品協(xié)同工作。
2)遠程訪問
IPSec的一個重要應用是遠程訪問公司的內(nèi)部網(wǎng)絡。NAT穿越方案必須考慮遠程客戶端與VPN網(wǎng)關(guān)之間存在多個NAT的情況。
3)防火墻兼容性
IPSec和NAT兼容性方案應該避免對IKE或IPSec目的端口的動態(tài)分配,使防火墻管理員進行簡單的配置,就可以控制穿越NAT的IPSec數(shù)據(jù)流。
4)可擴展性
IPSec和NAT兼容性方案應具有良好的擴展性,必須保證在大規(guī)模遠程訪問的環(huán)境中,在大量遠程接入的環(huán)境下,同一時間段多個主機和遠程安全網(wǎng)關(guān)建立連接。
5)后向兼容性
IPSec和NAT兼容性方案中必須能與已有的IPSec實現(xiàn)互操作。穿越方案應該能自動檢測是否存在NAT,能判斷通信對方的IKE實現(xiàn)是否支持NAT穿越。
6)安全性
IPSec和NAT兼容性解決方案的引入必須保證不得帶來新的安全漏洞。
5利用UDP封裝法實現(xiàn)NAT的穿透
本文中的解決方案是采用UDP封裝法實現(xiàn)NAT的透明穿透,不需要修改現(xiàn)有的NAT網(wǎng)關(guān)和路由器。所以該方案具有簡單且易于實現(xiàn)的優(yōu)點,缺點是由于添加了一個UDP報文頭,而加大了帶寬開銷,但相對于目前持續(xù)擴大的傳輸帶寬來說,這個UDP報文頭的帶寬開銷可以忽略不計。下面詳細討論其原理和實現(xiàn)過程。
5.1封裝格式
UDP封裝法是在原有的IP包的IP頭和AH/ESP的數(shù)據(jù)之間再封裝一個UDP頭,這樣封裝后的數(shù)據(jù)包端口值對NAT可見,就可以正確的實現(xiàn)端口轉(zhuǎn)換。UDP封裝格式如圖1所示。
另外,由于IKE已經(jīng)使用了UDP的500端口,為了簡化配置和避免多個端口帶來的安全隱患,UDP封裝的ESP也使用該端口。這樣就需要采取一定的方法來區(qū)分端口500的數(shù)據(jù)包是IKE消息還是UDP封裝的ESP。為了區(qū)分兩者,我們采用在IKE報頭添加Non-ESP標記。在確定存在一個中間NAT之后,支持IPSecNAT-T的對話方開始使用新的IKE報頭。
5.2IKE協(xié)商過程
IPSec通信實體雙方是否采用UDP封裝取決于對話對方是否支持該方法以及是否存在NAT設備,這個過程通過IKE協(xié)商來完成。在IKE協(xié)商過程中增添了新的NAT-D和NAT-OA有效載荷和以及UDP通道類型。
1)新的NAT-Discovery(NAT-D)有效載荷
這個新的有效載荷包含一個散列值,它整合了一個地址和端口號。在主模式協(xié)商期間,即IKE協(xié)商第一階段第三、四條消息中,IPSec對話方包括兩個NAT-Discovery有效載荷——一個用于目標地址和端口,另一個用于源地址和端口。接收方使用NAT-Discovery有效載荷來發(fā)現(xiàn)NAT之后是否存在一個經(jīng)NAT轉(zhuǎn)換過的地址或端口號,并基于被改變的地址和端口號來確定是否有對話方位于NAT之后。
2)新的NAT-OriginalAddress(NAT-OA)有效載荷:這個新的有效載荷包含IPSec對話方的原始地址。對于UDP封裝的ESP傳輸模式,每個對話方在快速模式協(xié)商期間發(fā)送NAT-OA有效載荷。接收方將這個地址存儲在用于SA的參數(shù)中。
3)用于UDP封裝的ESP傳輸模式和隧道模式的新的封裝模式
這兩種新的封裝模式是在快速模式協(xié)商期間指定的,用于通知IPSec對話方應該對ESP使用UDP封裝。
5.3地址通告和Keepalive包
由于用UDP來封裝IPSec分組的思想只解決了NAPT設備不支持AH和ESP通信的問題。例如TCP校驗和錯誤、UDP端口映射的保持等問題還需要輔助方法來解決。
為保證校驗和正確無誤,通信雙方需將自身的原始IP地址和端口發(fā)送給對方,即實現(xiàn)地址通告。地址通告的實現(xiàn)通過IKE第二階段的前兩條消息中的NAT-OA有效載荷。因為NAT-OA有效載荷中包含IPSec對話方的原始地址,為此,接收方就擁有了檢驗解密之后的上層校驗和所需的信息。
消息發(fā)起者在NAT中創(chuàng)建了一個UDP端口映射,它在初始主模式和快速模式IKE協(xié)商期間使用。然而,NAT中的UDP映射通常超過一定時間沒用就會被刪除掉。如果響應者隨后向發(fā)起者發(fā)送IKE消息卻沒有提供UDP端口映射,那么這些消息將被NAT丟棄。這個問題的解決辦法是通過定期發(fā)送Keepalive包,用于后續(xù)IKE協(xié)商和UDP封裝的ESP的UDP端口映射同時在NAT中得到刷新,從而保證通信的正常運行。
6結(jié)束語
IPSec作為網(wǎng)絡層的安全協(xié)議,目前的應用越來越廣泛,已成為構(gòu)建VPN的基礎(chǔ)協(xié)議之一。而由于IPv6取代IPv4將是一個漫長的過程,NAT設備的廣泛存在極大地限制了IP層安全協(xié)議IPSec的推廣,因此在目前的條件下,UDP封裝方法無疑是一種在當前環(huán)境下無需修改NAT網(wǎng)關(guān)和路由器、簡單可接受的解決IPSec和NAT兼容性的方法,具有一定的現(xiàn)實意義。但是該方案還不完善,有待進一步討論和研究。
參考文獻
[1]RFC3022-2001.TraditionalIPnetworkaddresstranslator(TraditionalNAT)[S].
[2]RFC2401-1998.SecurityArchitectureoftheInternetProtocol[S].
[3]RFC2402-1998.IPAuthenticationHeader[S].
[4]RFC2406-1998.IPEncapsulatingSecurityPayload(ESP)[S].
[5]RFC2409-1998.TheInternetKeyExchange(IKE)[S].
[6]RFC3103-2001.RealmSpecificIPProtocolSpecification[S].
[7]AbobaB,WilliamDixon.IPSec-NATcompatibilityrequirements[Z].Internetdraft,draft-ietf-ipsec-nat-reqtstxt,2001
1.1計算機軟件C語言的編程技巧
計算機軟件C語言的編程中,最主要的依據(jù)是指針應用,C語言指針能夠根據(jù)軟件程序的編寫需求,構(gòu)建可行的函數(shù),而程序員在設計函數(shù)編程的過程中,即可通過函數(shù)參數(shù)的具體分配,設置C語言的指令控制。程序員利用C語言編寫軟件程序時,不僅要準確地控制指令,更重要的是編制C語言的算法。C語言的算法內(nèi),體現(xiàn)出諸多應用技巧,利用流程表示的方法規(guī)劃操作位置,以此來提高C語言的流程算法。程序員編程軟件C語言時,需要注意語言設置,首先確定C語言在軟件編寫中的對象,如程序運算,保障C語言在編程實驗中的對象;然后分類計算機軟件編程所需的文件,完善文件之間的關(guān)聯(lián)性,設定C語言編程文件的相關(guān)步驟;最后全面檢查軟件C語言編程中涉及的數(shù)據(jù),方便編程中的數(shù)據(jù)查找。
1.2計算機軟件C語言的程序應用
計算機軟件C語言編程實驗中的程序應用,分為函數(shù)、算法和運算三個部分。分析如:
(1)C語言在軟件編程中的函數(shù),軟件編程的函數(shù),負責不同的軟件功能,程序員通過C語言定義編程中的函數(shù),由于C語言可以實現(xiàn)編譯,因此軟件編程所需要的函數(shù),可以在系統(tǒng)內(nèi)直接調(diào)用,程序員操作“#include指令”,關(guān)聯(lián)所有的應用文件,如程序員使用C語言中的sqrt函數(shù),還需引入頭文件#include“string.h”;
(2)算法是計算機軟件編程的核心,C語言在基礎(chǔ)算法的作用下,實現(xiàn)程序表達,程序員需要掌握程序算法,才能保障C語言在計算機軟件中合理性,程序員還要在算法的過程中,添加流程圖,利用流程符號協(xié)助算法運行,提高C語言編程的效率;
(3)運算是C語言編程實驗的特色,其對象是二進制,按照計算機軟件的C語言編程,設計程序運算,軟件的C語言編程中包括諸多基礎(chǔ)文件,此類文件是軟件編程的重要部分,程序員將編寫程序存儲到相關(guān)的語言內(nèi),有利于運算過程中的語言查詢。
2計算機軟件C語言編程的案例
計算機軟件C語言的程序設計比較復雜,以混合軟件編程為例,分析C語言的編程。首先程序員應該根據(jù)計算機軟件的運行目的,將運行語句編寫到C語言中,形成源代碼,程序員需要連接C語言中的匯編語句,如:Main(){asm{Movah,2Movbh,5Int10h}}整個編程實驗案例中,C語言的語句匯編存在格式要求,而且格式較為固定,因此,程序員應遵循一定要求,如:檢查語句中是否具備asm,如果缺少asm需重新設定在語句前;確定匯編語句能夠正常嵌入C語言內(nèi);注意C語言的分隔符,分隔符必須正確。然后設置編譯代碼,此項模塊需要具備單獨編程,待C語言編程完成后,利用鏈接的方式聯(lián)合代碼和編程。混合軟件編程中的C語言,函數(shù)部分能夠被匯編使用,多個編程共同組成一項語言任務,而且C語言傾向于獨立編程,基本是以函數(shù)的狀態(tài)實現(xiàn)軟件的編程實驗。編譯代碼的應用,提高C語言在計算機軟件中的編程能力,保障C語言編程的準確度,強化計算機軟件的實踐性。最后程序員在混合軟件C語言編程實驗中,需注重已經(jīng)出現(xiàn)的編程問題,尤其是參數(shù)、存儲等問題,排除C語言編程的因素干擾。例如C語言編程實驗中出現(xiàn)的參數(shù)問題,實際匯編中無法實現(xiàn)正常的參數(shù)傳遞,導致參數(shù)堆棧傳輸時出現(xiàn)問題,不能正常匯編到C語言的程序內(nèi),因此還需在匯編中增加兩類指令,如:sp、pushbppopbp。混合軟件C語言中添加匯編方式,可以提升計算機軟件程序的運行速度,完善軟件編程。
3結(jié)語
關(guān)鍵詞:BEC;存在問題;措施
一、BEC商務英語的概念
劍橋商務英語證書(BEC)考試是教育部考試中心和英國劍橋大學考試委員會合作舉辦的權(quán)威性考試。目前分為(BEC1)、中(BEC2)、高(BEC3)三個級別。這三個考試是針對英語為非母語國家的需求而設計的主要在經(jīng)濟迅速發(fā)展、國際交流日益增多的國家和地區(qū)實施,具有更廣泛的適用性,因而在國際上受到普遍歡迎。目前已有28個亞洲和歐洲國家或地區(qū),包括一些經(jīng)濟發(fā)達國家已開始舉辦BEC考試。該系列考試是一項水平考試,它根據(jù)商務工作的實際需要,從聽、說、讀、寫四個方面對考生在商務和一般生活環(huán)境下使用英語的能力進行全面考查,對成績及格者提供由英國劍橋大學考試委員會頒發(fā)的標準統(tǒng)一證書。由于該證書的權(quán)威性,已成為在所有舉辦該考試的一百多個國家和地區(qū)求職的“通行證”。
二、我國考生通過率情況
在各種英語類通行證中,中國考生向來以高通過率而著稱。與此相比,中國的BEC考試通過率卻顯得有些尷尬。
劍橋大學ESOL考試委員會的BEC成績報告顯示:中國考生的通過率明顯低于其他非英語國家考生通過率。2006年5月全球BEC平均通過率是43%,中國考區(qū)只有37%,而除中國以外的全球通過率為57—58%。
近幾年來,中國BEC考試報名率以每年300%的速度瘋狂飆升,中國考區(qū)的通過率卻一直處于低迷徘徊階段,嚴重拖累了世界的BEC通過率。為什么中國BEC的通過率低于世界水平?BEC考試由寫作、聽力、閱讀、口試四個部分組成,只有A、B、C三類為有效成績。如果有兩個部分為D,那么總體成績就是D,即為無效成績。劍橋大學考試部授權(quán)的中國培訓官陳雪翎指出:中國學生寫作、聽力、閱讀、口試的成績往往不在同一個標準上。
三、目前聽力口語教學存在問題
1.缺乏相關(guān)商務知識。中國學生之所以在聽力方面常常“敗北”,原因就在于這兩部分對于專業(yè)的商務知識要求較高。首先,口話話題往往都是商務方面的,在表述中需運用專業(yè)術(shù)語、專業(yè)語境,如果這方面欠缺,成績自然大受影響。
2.非標準化的英語表達法。由于《新編劍橋商務英語》(中級)為原版引進,沒有中文說明和解釋,所以對于文化背景不同、英語能力有限、商務知識欠缺的廣大中國考生來說,難免感到困難,特別在聽力部分融合了大量口語化的表示法、俚語以及行業(yè)術(shù)語,與學生平時聽到的標準化的發(fā)音迥然不同,加之口音問題,更增加了一定的難度。
3.缺乏相關(guān)跨文化背景知識。各民族語言含有大量的文化因素,這是構(gòu)成民族文化的要素之一。不同的文化之間自然會呈現(xiàn)不同的文化形態(tài),這種文化形態(tài)差異反映到語言層面上,則表現(xiàn)為語言差異。傳統(tǒng)商務英語教材以語法操練為主,教學內(nèi)容單一、陳舊、跟不上現(xiàn)代英語的發(fā)展。四、BEC商務英語口語聽力教學的幾項措施
1.針對教材聽力資料。熟悉聽力材料,弄懂段落中所涉及的商務詞匯概念及其Mainidea。在足夠熟悉此段落中的內(nèi)容后,脫離文字材料先聽一遍磁帶,此時絕對不允許照著文字材料聽,看看自己究竟能聽懂多少,然后把聽不懂或容易出問題的部分特別列出,再聽一遍,此次應特別留心其詞義的語音及商業(yè)內(nèi)涵。尤其是俚語以及行業(yè)術(shù)語。然后再反復使用錄音機上的重復鍵,盡最大努力聽懂全文內(nèi)容。
2.朗讀聽力部分的內(nèi)容。實際上,如果留意,我們不難發(fā)現(xiàn),本教材的聽力材料實際上就是商務化的口語,無論從語音的標準化程度、語法的準確度以及大量語氣詞的運用,都可以說明這一點。所以,這就為我們將聽力與口語結(jié)合學習訓練提供了較好的機會和可能。
3.具體到課堂
(1)商務背景知識介紹。由于文化的差異及學生知識結(jié)構(gòu)的問題,加之中外企業(yè)管理模式和操作流程的不同,致使學生不了解每個單元所涉及主題的詳細內(nèi)容。(2)口語的練習。在我國,對于大部分大學生而言,對英語的學習普遍存在比較突出的問題是:語法及詞匯量不是問題,關(guān)鍵是聽力及口語。針對這一現(xiàn)象,并結(jié)合BEC考試對口語的要求,筆者除每單元中涉及到的Speaking部分需要學生在課堂上用英語探討以外,另外在每學期的期末考試中加入口語測試部分,要求學生在本學期學習的商務知識中,任選一個topic,在全班同學面前做一個Presentation.。
五、考前準備
一般說來,應對BEC中級聽力特別是短文聽力,其備考訓練必須抓住豎聽和橫聽兩點結(jié)合來進行。所謂豎聽,是指一套題目從頭聽到尾,從第一題聽到最后一題。所謂橫聽,是指把相同題材和體裁的文章放在一塊對照比較著聽,從而迅速抓住同類型文章的規(guī)律,真正做到以不變應萬變。通過這樣反復對比聽,可以使我們很快掌握各種題材文章的模式和考題思路,在短時間內(nèi)抓住考點,做到舉一反三。
在考前一個月,筆者在此提供一套具體的短文聽力訓練辦法,考生可以從BEC中級歷年考題中選取10篇以上不同題材的文章,橫豎結(jié)合起來,進行精聽訓練,以便在考試中贏得時間,確保其準確性。
考前對于口語的訓練,應注意從商務的不同角度,最少選擇10個以上的topic,與同學結(jié)對訓練,在注意專業(yè)詞匯量積累運用的同時,盡量做到熟練,要言之有物,觀點突出。
總之,BEC中級短文聽力及口語并不可怕,如果我們能夠宏觀把握,平時堅持“用心去聽”,認真練,我們肯定能夠從不同角度、不同層次提高自己的商務英語語言能力,順利通過BEC考試。
參考文獻:
行動導向教學模式是引用德國職業(yè)教育的一種先進的教學理念,這種教學模式從根本上改變了傳統(tǒng)的教學方法,它是一種職業(yè)化的教育模式,是目前高等職業(yè)教育主要采用的一種教學模式。行動導向教學模式在教學具體實施過程中,不是單一的教學方法,也不是簡單的幾種教學方法的結(jié)合,而是由一系列具體的教學方法有效的結(jié)合在一起,相輔相成,揚長避短。項目教學法,是行動導向教學模式中的一種教學方法,是指老師和學生共同完成一個項目,在項目的實現(xiàn)過程中,需要學生獨立完成資料查詢、項目的研究和學習,項目教學法使學生在學習過程中更具有針對性和實用性,為今后就業(yè)所必須的實踐能力、綜合能力、信息交流能力、團隊合作能力、分析問題以及解決問題的能力奠定了基礎(chǔ)。
二、基于行動導向的項目教學法在C語言課程教學中的具體應用
C語言程序設計課程采用項目教學法進行教學改革,其主要目的是培養(yǎng)學生自動學習、解決問題的能力。培養(yǎng)學生具有團隊意識和服務意識,具有良好的職業(yè)道德和職業(yè)素養(yǎng)的技術(shù)技能型人才。按照行動導向項目教學法的實施步驟,C語言課程的整個教學過程中大體分為收集資料階段、制定項目教學計劃階段、項目教學的實施階段、項目教學的檢查評估階段。具體步驟如下:
1.收集資料階段。
老師帶領(lǐng)學生通過問卷調(diào)查、資料查閱、需求分析等手段廣泛深入地進行項目調(diào)研,將調(diào)研數(shù)據(jù)加工整理,篩選出適合高職院校學生特點的項目形成項目庫。主要包括學生管理系統(tǒng)、檔案管理系統(tǒng)、圖書管理系統(tǒng)等10個項目,這些項目的主要特點是貼近學生的生活,學生比較好理解而且參考資料豐富。
2.制定項目教學計劃階段。
先由任課教師討論,制定項目教學課程標準和教學計劃,確定項目教學的步驟和教學使用的項目程序。項目的教學計劃主要包括以下兩方面內(nèi)容:
2.1C語言程序設計課程項目教學的課程標準。
制定C語言程序設計這門課程項目教學法的課程標準要依據(jù)該課程的性質(zhì)、目標以及內(nèi)容等特點,結(jié)合高職院校的實際情況,針對不同層次的學生在知識與技能的掌握、過程與方法的運用等方面提出教學和評價建議。通過課程標準的制定,使學生在經(jīng)過一段時間C語言的學習后,應該知道什么是C語言和C語言能做什么。該課程的課程標準主要包括C語言的課程性質(zhì)、課程目標、學習內(nèi)容、實施建議、考核方式等方面的內(nèi)容。
2.2C語言程序設計課程項目教學授課計劃。
通過授課計劃的編寫,對C語言程序設計這門課程進行整體規(guī)劃,按照項目教學的要求,要有針對性、目的性、可行性的將教學內(nèi)容總的方向、總的結(jié)構(gòu)、課時分配等作出全面安排。授課計劃的編寫要在科學的教育理論指導下,深入研究教材和《課程標準》,靈活安排教學內(nèi)容,實現(xiàn)教學目標。
3.項目教學的實施階段。
3.1項目教學法的課前準備。
根據(jù)項目教學計劃和學生本身的特點,任課教師在上課前應做好充分的準備,按照教學計劃準備教學課件、教案、教學材料,按照項目教學法對學生進行分組設計,分組時,根據(jù)學生的學習水平的差異,好壞混合搭配,勢力均衡,目的是好同學帶動壞同學。
3.2項目教學法的任務分配。
教師根據(jù)項目中的情景,布置任務。首先由教師引導學生分析任務,提出完成任務的相關(guān)知識點、設想或探索的路徑供學生參考,然后根據(jù)學生實際情況分組討論,根據(jù)教師提供的信息,查閱資料或?qū)で蠼處煹闹笇В罱K完成任務。
3.3項目教學法的任務實現(xiàn)。
該階段的任務是任務教學法最主要的一部分。教師在下達任務階段引導學生掌握完成任務的思路和方法后。在任務完成過程中,以學生為主,每個小組成員根據(jù)教師的指導,學習相關(guān)的理論知識,通過查閱相關(guān)資料、交流討論等方法將理論知識向?qū)嵺`轉(zhuǎn)化,即項目的代碼編寫、調(diào)試和運行,完成分配的任務。
3.4項目教學法的項目成果展示。
在各小組完成學習任務以后,每組選派一名本組成員進行成果展示與交流。其他小組成員可根據(jù)任務相關(guān)的知識點提問疑問或請教交流,豐富彼此的學習體驗。最后,教師對學生完成的項目情況歸納總結(jié)并引導學生對項目完成過程中遇到的問題進行反思以便對下一次的學習設計進行優(yōu)化、改進。
4.項目教學的檢查評估。
C語言程序設計這門課程項目教學的考核應根據(jù)課程標準中的目標和要求,結(jié)合項目教學的過程和成果,進行綜合打分。考核評價過程主要分為平時考核和期末考核,其中,平時考核包括平時上課學生完成每個學習情境的情況和出勤情況,先由學生對自己完成的情景任務進行答辯,再由教師檢查評分,其成績占總成績的50%;期末考核為上機操作考試,其成績占總成績的50%,考試題目通過抽簽選取,題目的內(nèi)容為學習情境中的同類型任務。最終成績是平時考核成績和期末考核成績的總和。使對學習過程和對學習結(jié)果的評價達到和諧統(tǒng)一的目標。
三、基于行動導向的項目教學法在c語言課程教學實施過程中面臨的困難與對策
C語言是一種計算機程序設計語言,是計算機匯編語言的重要組成部分。其實質(zhì)就是通過對語言進行編寫和翻譯,使其產(chǎn)生一種與社會相銜接的語言,讓人和計算之間通過這種語言能夠進行簡單的交流。C語言是在1972年由美國貝爾研究所提出,1978年先后被運用到各種機型中。C語言具有雙重性,具備高級語言的特點和匯編語言的優(yōu)越性,不僅能對系統(tǒng)應用程序進行編寫,而且能對不依靠計算機硬件的應用程序進行編寫。同時C語言也具有廣泛的應用性,能在多個計算機的操作系統(tǒng)中運用,大大提高了計算機軟件編程的效率。隨著計算機的日益普及,C語言的應用領(lǐng)域越來越寬,成為目前較為流行的高級程序設計語言之一,在許多大型的軟件編程中被廣泛的應用。C語言具有如下的特點:
1.1模塊化思想模塊化的基本思想就是運用C語言在進行計算機軟件編程設計時,按功能作用的不同將一個較大的程序分割成為許多小的子模塊,使每個小的子模塊成為一個功能單一、理解簡單和結(jié)構(gòu)合理的小程序。
1.2簡潔性強C語言具有語言簡潔、結(jié)構(gòu)緊湊、使用方便、靈活的優(yōu)勢。C語言包含了32個關(guān)鍵字和9條控制語句,源程序書寫方式較自由靈活,因此在計算機軟件編程中要選擇使用小寫字母,壓縮掉所有不重要的部分。
1.3運算范圍廣C語言總共具有34種運算符,其運算符號十分豐富且對運輸結(jié)果能采用各種各樣的表達形式,因此C語言的數(shù)據(jù)處理能力強,可以為各類數(shù)據(jù)結(jié)構(gòu)進行復雜的運算,進行一些高級語言較難實現(xiàn)的運算功能。
1.4移植泛用性C語言在進行軟件編程中基本上不需要做任何的修改,就能運用于各種不同型號的計算機和操作系統(tǒng)環(huán)境上,從而形成很多不同版本的C語言。
1.5應用效率高C語言的應用結(jié)構(gòu)簡單清晰,能夠?qū)?nèi)存中的相應地址進行直接的訪問,操作十分方便,被稱為高級語言中的低級語言。同時能夠直接調(diào)用系統(tǒng)功能,直接操作硬件,具備許多高級語言所不具備的高效率。
2.C語言在計算機軟件編程中的技巧
C語言具有模塊化的特點,因此在計算機軟件程序編程中,充分發(fā)揮C語言的靈活性和方便性,提高軟件編程的技巧性,能夠優(yōu)化軟件程序編輯和提高軟件開發(fā)的效率和質(zhì)量。
2.1變量數(shù)據(jù)和運算模式的合理設置設置變量數(shù)據(jù)時,要在最大限度滿足計算機軟件編程需要的前提下,盡可能合理的設置變量數(shù)據(jù),使用無符號的最小數(shù)據(jù)類型,這樣能減少程序代碼,從而促進計算機軟件編程的有效運行。同時在設置運算模式時,要盡量運用定點運算,避免運用浮點運算。
2.2變量存貯器類型的合理定義在計算機軟件編程中,采用和操作不同類型的變量存貯器時,會造成編譯后的代碼執(zhí)行效率各不相同,只有合理定義變量存貯器類型,才能不斷提高程序的執(zhí)行效率。因此在定義變量存貯器類型時,應在滿足條件的情況下盡量選用內(nèi)部直接尋址存貯器。
2.3變量存貯類型的靈活設置在計算機軟件編程中,C語言具有模塊化思想,正確函數(shù)變量的傳遞在編程中十分重要,因此子程序模塊使用的變量常采用局部變量,而整個程序模塊使用的變量要采用全局變量。另外在C語言中靈活使用指針、結(jié)構(gòu)和聯(lián)合,也便于數(shù)據(jù)的傳遞,提高軟件編程的效率。
2.4設計軟件編程與C語言的接口C語言具有程序執(zhí)行速度快和直接操作硬件的優(yōu)勢,在進行數(shù)據(jù)采集、中斷服務器處理和實時控制時,可以將C語言程序運用到計算機軟件編程中,自行控制數(shù)據(jù)的傳遞,從而能夠精確控制任務,加快實時響應。
2.5編譯控制指令的正確選擇C語言能為計算機的軟件編程提供了20多條控制指令,總體可分為首要控制指令和一般控制指令,首要控制指令的選擇只能用一次,要放在源程序的開始處,以防止重復而導致停止編譯,而一般控制指令的選擇可以多次。因此選擇正確的控制指令,能加速程序調(diào)試過程。
3.C語言在計算機軟件編程中的應用
C語言具有很強的優(yōu)越性,可以適用于計算機軟件編程實驗研究,這就需要對C語言在計算機軟件編程中的應用有一個全面的認識,避免在以后的程序設計過程中出現(xiàn)基礎(chǔ)不足的情況。
3.1指針的應用C語言中的指針代表相關(guān)變量、相應函數(shù)的地址和地址相對應的存儲內(nèi)容。在進行軟件編程時,如果一個相應的變量聲明前面,出現(xiàn)“*”號,那就表示這個內(nèi)存地址相對應的存儲內(nèi)容。通常情況下C語言的一個指針代表著一個相應函數(shù)的地址,是一個常量。此外,C語言的指針可以在調(diào)用函數(shù)時得到幾個不同于return(z)的返回值。
3.2字符串在C語言中,字符串是一種以ASCII的UNL作為數(shù)組退出的一種chair型的數(shù)組,在計算機軟件編程中,字符串的使用一般不需要引用庫。但在C標準庫中包含著一些函數(shù)可以操作相應的字符串,在使用這些函數(shù)時,需要運用相對應的頭文件進行引用。
3.3C語言結(jié)構(gòu)C語言主要包括三種結(jié)構(gòu)模式即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)在C語言中是按照先后次序進行操作,通過構(gòu)建一個相對簡單和完整的程序,進行相對獨立的運用。循環(huán)結(jié)構(gòu)是在進行各種數(shù)據(jù)運算和處理時,需要對其中的一些語句進行反復的執(zhí)行,這在一定程度上簡化了程序的長度,使程序變得簡潔。選擇結(jié)構(gòu)是根據(jù)相關(guān)的分支條件選擇相應的執(zhí)行路徑,在計算機軟件編程中要選擇具有較強適應性執(zhí)行路徑。
論文關(guān)鍵詞:函數(shù),指針
0 引言
隨著計算機技術(shù)的飛速發(fā)展及應用領(lǐng)域的擴大,熟練掌握一門語言已變的尤為關(guān)鍵。C語言這門課程在計算機的基礎(chǔ)教學中一直占有比較重要的地位,然而要想突破C語言的學習,對函數(shù)和指針的掌握是非常重要的,本文將具體針對函數(shù)和指針的關(guān)系做詳盡的介紹。
1 函數(shù)的有關(guān)概念
為了使程序的編寫更加清晰、直觀且易于修改,C語言中引用了函數(shù)。所謂函數(shù),就是一個程序模塊,該模塊用來完成一個特定的程序功能。引用一個函數(shù)時,需要包括對函數(shù)的定義、聲明,繼而調(diào)用。此外,函數(shù)主要包括庫函數(shù)和用戶定義函數(shù),調(diào)用庫函數(shù)時,要用#include命令將相關(guān)的頭文件包含進來。在掌握函數(shù)相關(guān)概念的同時,有以下幾點需要注意:
(1) 函數(shù)的定義是平行的,不能在一個函數(shù)的內(nèi)部再定義函數(shù),而只能在一個函數(shù)中調(diào)用另外一個函數(shù),例如:
int A(int a,…)
{
聲明部分;
int B(int b,…)
{
聲明部分; 執(zhí)行部分;
}
執(zhí)行部分;
}
(例1-1)
顯然畢業(yè)論文ppt,這種定義函數(shù)的方法是錯誤的,在函數(shù)A中不能包括對函數(shù)B的定義。正確的定義方法如下:
int A(int a,…)int B(int b,…)
{{
聲明部分; B(a,…); 執(zhí)行部分;聲明部分; 執(zhí)行部分;
}}
(例1-2)
其中,函數(shù)A中是可以調(diào)用函數(shù)B的。
(2) 調(diào)用函數(shù)和被調(diào)用函數(shù)
由上例1-2可以看出,函數(shù)A在執(zhí)行的過程中包括了對函數(shù)B的調(diào)用,則函數(shù)A稱為調(diào)用函數(shù)(調(diào)用函數(shù)B),而函數(shù)B被函數(shù)A調(diào)用,稱為被調(diào)用函數(shù)論文開題報告。
(3) 實參和形參
調(diào)用函數(shù)中定義的變量是實參,被調(diào)用函數(shù)中定義的變量是形參。如例1-2,函數(shù)A中的變量a是實參,函數(shù)B中的變量b是形參。
(4) 實參變量和形參變量之間的獨立性
實參變量和形參變量之間只存在值的傳遞過程,實參變量的存儲空間在調(diào)用函數(shù)中分配,而形參變量的存儲空間在被調(diào)用函數(shù)中分配,被調(diào)用函數(shù)執(zhí)行完畢后,其所分配的存儲空間被釋放,即形參變量的存儲空間被釋放,它不會返回值給實參變量,也不會參與調(diào)用函數(shù)的繼續(xù)執(zhí)行。例如(實現(xiàn)兩個數(shù)的交換):
main( ) voidswap(int a, int b)
{{
int a, b; intc;
swap(a,b); c=a;a=b; b=c;
printf(“%d,%d”,a,b);printf(“%d,%d”,a,b);
}}
(例1-3)
顯然,函數(shù)main是調(diào)用函數(shù)(調(diào)用函數(shù)swap),函數(shù)swap是被調(diào)用函數(shù)。main函數(shù)中的a,b由main函數(shù)分配存儲空間,而swap函數(shù)中的a,b由swap函數(shù)分配存儲空間。main函數(shù)執(zhí)行到swap函數(shù)時,調(diào)用swap函數(shù),swap函數(shù)為其變量分配存儲空間,然后實現(xiàn)了swap函數(shù)中變量a,b的值交換,執(zhí)行完畢后即釋放其分配變量的存儲空間。繼而,main函數(shù)繼續(xù)執(zhí)行,但其變量a,b沒有做任何改變,即main函數(shù)不能實現(xiàn)a,b的交換。由上例可以看出,若單純的使用變量,則被調(diào)用函數(shù)無法改變調(diào)用函數(shù)中的變量值,即swap函數(shù)無法實現(xiàn)main函數(shù)中變量a,b的交換。
2 指針的有關(guān)概念
指針是C語言中功能最強大,使用最廣泛的一種數(shù)據(jù)類型,主要用于描述存儲單元的地址。通過使用指針,可以在函數(shù)中進行傳址調(diào)用;規(guī)范的使用指針,可以使程序簡潔、緊湊、高效。
(1) 指針變量的定義
定義指針變量的一般形式:類型標識符 *變量名;其中畢業(yè)論文ppt,變量名前的符號“*”表示將要定義的變量,類型說明符表示該指針變量所指向數(shù)據(jù)的類型。例如:
int *p1; char *p2;float *p3;
分別定義了整形指針變量p1,字符形指針變量p2,以及浮點形指針變量p3。
(2) 指針變量的引用
&為取地址運算符,該運算符是一個單目運算符,運算結(jié)合性為自右至左,它返回其右邊變量在內(nèi)存中的地址。其一般形式為:&變量名,例如:
int x=3,*p; p=&x;指針變量p指向變量x。
在使用x的值時,可以直接使用x,也可以用*p來代替使用x。此外,指針變量一定是和它所對應的變量相互引用,即指針變量在使用時一定要有明確的指向,必須賦予具體的值,否則將可能導致錯誤。
3 指針與函數(shù)的關(guān)系
在函數(shù)的編寫過程中,若單純的只用變量參數(shù),則無法實現(xiàn)被調(diào)用函數(shù)改變調(diào)用函數(shù)中變量值的目的。而為了實現(xiàn)這一目的,就需要函數(shù)和指針之間的結(jié)合使用論文開題報告。
(1) 引用指針,可以實現(xiàn)調(diào)用函數(shù)和被調(diào)用函數(shù)中的指針變量共同指向調(diào)用函數(shù)中的存儲單元,從而實現(xiàn)被調(diào)用函數(shù)改變調(diào)用函數(shù)中變量值的目的。例如:
main()void change(int *p2)
{{
int a,*p1;*p2=3;
a=2; p1=&a;}
change(p1);
printf(“the value of a is:%d”,a);
}
由上例可以看出,在調(diào)用函數(shù)(main函數(shù))中定義了變量a和指針變量p1,被調(diào)用函數(shù)(change函數(shù))中定義了指針變量p2。程序首先從main函數(shù)開始執(zhí)行,分配變量a和指針變量p1的存儲單元,此時指針變量p1指向變量a(p1=&a)。當程序執(zhí)行到change函數(shù)時,程序跳轉(zhuǎn)到change函數(shù)執(zhí)行其函數(shù)體,change函數(shù)為其指針變量p2分配存儲單元,同時p2也得到了p1傳過來的值(變量a的地址),此時p2也指向了調(diào)用函數(shù)中的變量a,即實現(xiàn)了p1和p2共同指向了調(diào)用函數(shù)中的存儲單元(變量a的存儲單元),change函數(shù)執(zhí)行其函數(shù)體(*p2=3),即使a的值變?yōu)?。change函數(shù)執(zhí)行完畢后,釋放其變量的存儲空間,轉(zhuǎn)而繼續(xù)執(zhí)行main函數(shù),此時a的值已經(jīng)發(fā)生改變(由2變?yōu)?),實現(xiàn)了被調(diào)用函數(shù)改變調(diào)用函數(shù)中變量值的目的。
(2) 調(diào)用函數(shù)和被調(diào)用函數(shù)中實參和形參之間的關(guān)系圖
被調(diào)用函數(shù)執(zhí)行完畢后畢業(yè)論文ppt,釋放它所分配的存儲單元,而調(diào)用函數(shù)分配的存儲單元仍繼續(xù)使用。此外,只有當調(diào)用函數(shù)中傳指針值(即實參是指針值),而被調(diào)用函數(shù)中引用變量(即形參收到指針值后,在函數(shù)體內(nèi)引用變量值),才能達到改變的目的。
例如,實現(xiàn)變量a和b的交換,程序如下:
main()
{
inta,b,*x,*y;
a=2; b=5;
x=&a;y=&b;
swap(x,y);
printf(“%d,%d”,a,b);
}
void swap(int *x, int *y)void swap(int *x, int *y)
{ {
int *t; int*t;
t=x; x=y; y=t;*t=*x; *x=*y; *y=*t;
} }
(例1) (例2)
例1雖然傳的是指針值,但在函數(shù)體的執(zhí)行過程中引用的仍然是指針值(引用x和y),所以不能實現(xiàn)a和b的交換;例2程序傳指針值后,引用變量(*x和*y,即a和b),所以能實現(xiàn)a和b的交換。
4 結(jié)束語
在以后的編程過程中,若遇到想通過被調(diào)用函數(shù)改變調(diào)用函數(shù)中變量值的目的,則可以把該變量的地址值傳給被調(diào)用函數(shù),從而達到改變的目的。鑒于文章篇幅及個人能力有限,本文肯定還存在許多不足之處,僅供大家學習和參考。
參考文獻
[1]譚浩強.C程序設計(第二版).清華大學出版社,2004.
[2]杜友福.C語言程序設計(第二版).科學出版社,2007.
[3]陳志泊,王春玲.面向?qū)ο蟮某绦蛟O計語言――C++.人民郵電出版社,2002.