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