前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇c語言編程范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
摘要:現(xiàn)在單片機的程序設(shè)計,C51已經(jīng)得到廣泛的推廣和應(yīng)用,算是單片機的主流設(shè)計程序,甚至可以說作為單片機開發(fā)人員必須要掌握的一門語言了。本文簡要介紹了Franklin C51交叉編譯器的特點,較詳細地討論了C51語言程序設(shè)計的基本技巧及其與匯編語言程序的混合編程、中斷處理過程等實際問題。
關(guān)鍵詞:C51;C語言;編程
在研制單片機應(yīng)用系統(tǒng)時,匯編語言是一種常用的軟件工具。它能直接操作硬件,指令的執(zhí)行速度快。但其指令系統(tǒng)的固有格式受硬件結(jié)構(gòu)的限制很大,且難于編寫與調(diào)試,可移植性也差。隨著單片機硬件性能的提高,其工作速度越來越快,因此在編寫單片機應(yīng)用系統(tǒng)程序時,更著重于程序本身的編寫效率。而Franklin C51交叉編譯器是專為80C51系列單片機設(shè)計的一種高效的C語言編譯器,使用它可以縮短開發(fā)周期,降低開發(fā)成本,因此目前它已成為開發(fā)80C51系列單片機的流行工具。
一、C51的編程規(guī)范
(一)注釋
1.開始的注釋:
文件(模塊)注釋內(nèi)容:
公司名稱、版權(quán)、作者名稱、修改時間、模塊功能、背景介紹等,復(fù)雜的算法需要加上流程說明;
函數(shù)開頭的注釋內(nèi)容:
函數(shù)名稱、功能、說明 輸入、返回、函數(shù)描述、流程處理、全局變量、調(diào)用樣例等,復(fù)雜的函數(shù)需要加上變量用途說明 ;
2.程序中的注釋內(nèi)容:
修改時間和作者、方便理解的注釋等。注釋內(nèi)容應(yīng)簡煉、清楚、明了,一目了然的語句不加注釋。
(二)命名:
命名必須具有一定的實際意義。
1.常量的命名:全部用大寫。
2.變量的命名:
3.結(jié)構(gòu)體命名:
4.函數(shù)的命名:
函數(shù)名首字大寫,若包含有兩個單詞的每個單詞首字母大寫。
函數(shù)原型說明包括:引用外來函數(shù)及內(nèi)部函數(shù),外部引用必須在右側(cè)注明函數(shù)來源: 模塊名及文件名, 內(nèi)部函數(shù),只要注釋其定義文件名 ;
1.縮進:縮進以Tab為單位,一個Tab為四個空格大小。預(yù)處理語句、全局數(shù)據(jù)、函數(shù)原型、標題、附加說明、函數(shù)說明、標號等均頂格書寫。語句塊的“{”“}”配對對齊,并與其前一行對齊;
2.空格:數(shù)據(jù)和函數(shù)在其類型,修飾名稱之間適當(dāng)空格并據(jù)情況對齊。關(guān)鍵字原則上空一格,如:
if ( ... ) 等,運算符的空格規(guī)定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正負號),“&”(取址或引用)、“*”(指使用指針時)等幾個運算符兩邊不空格(其中單目運算符系指與操作數(shù)相連的一邊),其它運算符(包括大多數(shù)二目運算符和三目運算符“?:”兩邊均空一格,“(”、“)”運算符在其內(nèi)側(cè)空一格,在作函數(shù)定義時還可據(jù)情況多空或不空格來對齊,但在函數(shù)實現(xiàn)時可以不用。
3.空行:程序文件結(jié)構(gòu)各部分之間空兩行,若不必要也可只空一行,各函數(shù)實現(xiàn)之間一般空兩行
4.修改:版本封存以后的修改一定要將老語句用/* */ 封閉,不能自行刪除或修改,并要在文件及函數(shù)的修改記錄中加以記錄。
二、C51語言程序設(shè)計的基本技巧
C語言是一種高級程序設(shè)計語言,它提供了十分完備的規(guī)范化流程控制結(jié)構(gòu)。因此采用C51語言設(shè)計單片機應(yīng)用系統(tǒng)程序時,首先要盡可能地采用結(jié)構(gòu)化的程序設(shè)計方法,這樣可使整個應(yīng)用系統(tǒng)程序結(jié)構(gòu)清晰,易于調(diào)試和維護。對于不同的功能模塊,分別指定相應(yīng)的入口參數(shù)和出口參數(shù),而經(jīng)常使用的一些程序最好編成函數(shù),這樣既不會引起整個程序管理的混亂,還可增強可讀性,移植性也好。
在程序設(shè)計過程中,要充分利用C51語言的預(yù)處理命令。對于一些常用的常數(shù),如TRUE,F(xiàn)ALSE,PI以及各種特殊功能寄存器,或程序中一些重要的依據(jù)外界條件可變的常量,可采用宏定義"#define"或集中起來放在一個頭文件中進行定義,再采用文件包含命令"#include"將其加入到程序中去。這樣當(dāng)需要修改某個參量時,只須修改相應(yīng)的包含文件或宏定義,而不必對使用它們的每個程序文件都作修改,從而有利于文件的維護和更新。
三、C51語言與匯編語言程序的混合編程
C51編譯器能對C語言源程序進行高效率的編譯,生成高效簡潔的代碼,在絕大多數(shù)場合采用C語言編程即可完成預(yù)期的目的。但有時為了編程直觀或某些特殊地址的處理,還須采用一定的匯編語言編程。它們必須有完整的約定,否則數(shù)據(jù)的交換就可能出錯。下面就以力源公司的10位串行A/D轉(zhuǎn)換器TLC1549 為例說明C語言程序與匯編語言程序的調(diào)用。
四、C51中斷處理過程
C51編譯器支持在C源程序中直接開發(fā)中斷過程,因此減輕了使用匯編語言的繁瑣工作,提高了開發(fā)效率。中斷服務(wù)函數(shù)的完整語法如下:
void函數(shù)名(void)[模式]
[再入]interrupt n [using r]
其中n(0~31)代表中斷號。C51編譯器允許32個中斷,具體使用哪個中斷由80C51系列的芯片決定。r(0~3)代表第r組寄存器。在調(diào)用中斷函數(shù)時,要求中斷過程調(diào)用的函數(shù)所使用的寄存器組必須與其相同。"再入"用于說明中斷處理函數(shù)有無"再入"能力。C51編譯器及其對C語言的擴充允許編程者對中斷所有方面的控制和寄存器組的使用。這種支持能使編程者創(chuàng)建高效的中斷服務(wù)程序,用戶只須在C語言下關(guān)心中斷和必要的寄存器組切換操作。
四、結(jié)語
C51編譯器不但可以縮短單片機控制系統(tǒng)的開發(fā)周期,而且易于調(diào)試和維護。此外,C51語言還有許多強大的功能,如提供豐富的庫函數(shù)供用戶直接調(diào)用,完整的編譯控制指令為程序調(diào)試提供必要的符號信息等等。總之,C51語言是廣大單片機開發(fā)人員的強有力的工具。
參考文獻:
[1]周立功.單片機實驗與實踐教程(三)[M].北京:北京航天航空大學(xué)出版社.2006
[2]柴鈺.單片機原理及應(yīng)用[M].北京:西安電子科技大學(xué)出版社.2009
關(guān)鍵詞:計算機C語言 計算機編程 實驗教學(xué) 改革措施 分析 探討
中圖分類號:TP312.1-4 文獻標識碼:A 文章編號:1007-9416(2012)11-0229-01
1、計算機C語言教學(xué)特點分析
計算機C語言是進行計算機程序編寫設(shè)計使用的一種計算機程序代碼語言,在進行計算機程序編寫設(shè)計應(yīng)用中,C語言具有語言簡練、數(shù)據(jù)類型豐富以及邏輯性強、完全結(jié)構(gòu)化的特征,在計算機程序編寫設(shè)計中應(yīng)用十分廣泛和普遍。同時,計算機C語言是高等院校計算機專業(yè)的基礎(chǔ)學(xué)科中的一門基本語言,也是進行計算機數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)庫部分知識內(nèi)容教學(xué)的重要基礎(chǔ)教學(xué)部分,是進行計算機程序設(shè)計學(xué)習(xí)的入門學(xué)習(xí)課程。在進行計算機C語言教學(xué)過程中,由于C語言的基礎(chǔ)入門學(xué)科特點以及數(shù)據(jù)類型豐富、多樣特征,對于C語言教學(xué)的實踐性要求尤其高,對于計算機C語言課程知識的教學(xué)以及對于學(xué)生掌握情況的檢查,都需要通過學(xué)生上機的實際編程操作進行實現(xiàn)。因此,對于計算機C語言教學(xué)來講,在進行C語言理論性教學(xué)過程中,也應(yīng)注意加強對于C語言實驗的教學(xué)開展,以培養(yǎng)學(xué)生C語言課程的相關(guān)能力和素質(zhì)。
2、計算機C語言實驗教學(xué)中存在的問題
在進行計算機C語言實驗教學(xué)中,由于計算機C語言實驗教學(xué)內(nèi)容比較難以理解和掌握,而對于C語言實驗教學(xué)的模式不當(dāng),導(dǎo)致初學(xué)者對于C語言實驗教學(xué)部分逐漸失去學(xué)習(xí)興趣,或者是學(xué)習(xí)興趣不大。比如,一些C語言初學(xué)者,在進行實驗教學(xué)內(nèi)容部分的學(xué)習(xí)過程中,由于缺乏相應(yīng)的對于C語言實驗教學(xué)內(nèi)容學(xué)習(xí)的思維模式,導(dǎo)致在學(xué)習(xí)過程中無法進行C語言與實踐解決問題之間的轉(zhuǎn)換與描述,導(dǎo)致C語言編程設(shè)計任務(wù)無法完成,從而逐漸形成一定的學(xué)習(xí)問題與壓力,逐漸失去C語言實驗教學(xué)的學(xué)習(xí)興趣。其次,在進行C語言實驗教學(xué)開展過程中,由于進行C語言實驗教學(xué)的教學(xué)應(yīng)用設(shè)備比較落后,導(dǎo)致實驗教學(xué)開展中,設(shè)備無法滿足一些實驗教學(xué)的需求,從而對于正常的計算機C語言實驗教學(xué)活動的開展造成不利影響,從而對于C語言實驗教學(xué)目標以及教學(xué)效果造成影響。再次,進行計算機C語言實驗教學(xué)開展過程中,由于進行C語言實驗教學(xué)的方式比較單一,也是目前計算機C語言實驗教學(xué)中存在一個重要問題,對于實驗教學(xué)的效果以及教學(xué)目標、任務(wù)等的實現(xiàn),都有很大的不利影響和作用。最后,在進行計算機C語言實驗教學(xué)過程中,主要是為了通過上機的計算機編程設(shè)計實驗,鍛煉與培養(yǎng)學(xué)生的實踐動手能力與解決實際問題的能力,對于學(xué)生掌握知識情況進行檢測。但是,目前C語言的實驗教學(xué)中,存在著對于C語言教學(xué)上機實踐的考核措施與機制,這也對于老師進行實驗教學(xué)成果的檢驗以及學(xué)生對于實驗教學(xué)的真正掌握情況了解,有很大的不利影響,從而對于實驗教學(xué)計劃與教學(xué)開展設(shè)計、教學(xué)效果等都有很大的影響。
3、計算機C語言實驗教學(xué)改革的有效措施
針對上述計算機C語言教學(xué)過程中存在的問題,以及對于C語言實驗教學(xué)的影響作用,在進行計算機C語言實驗教學(xué)的開展過程中,應(yīng)注意從以下幾個方面對于C語言實驗教學(xué)的方式以及內(nèi)容進行改革推進,以提高C語言實驗教學(xué)的效果與水平。首先,在進行計算機C語言的實驗教學(xué)過程中,可以通過合適實驗教學(xué)方式,來提高學(xué)生對于C語言實驗教學(xué)的學(xué)習(xí)興趣。比如,通過錯誤案例的分析教學(xué)法,將學(xué)生編程設(shè)計中容易出現(xiàn)的錯誤問題,提前進行教學(xué)設(shè)計,并通過教學(xué)分析,在吸引學(xué)生興趣同時,加深學(xué)生對于知識內(nèi)容的記憶、理解。其次,應(yīng)注意結(jié)合現(xiàn)代多媒體信息技術(shù),開展多媒體網(wǎng)絡(luò)的計算機C語言實驗教學(xué),并且主要在實驗教學(xué)過程中改進教學(xué)方法,提高計算機C語言教學(xué)的效果,培養(yǎng)學(xué)生計算機C語言編程設(shè)計的相關(guān)實踐能力與水平,推進計算機C語言的教學(xué)發(fā)展。
如下,是使用計算機C語言進行循環(huán)冗余校驗碼的實驗教學(xué)應(yīng)用過程。在進行這一部分的教學(xué)中,首先使用計算機C語言進行多項式除法的程序模擬設(shè)計,具體設(shè)計過程如下:
計算機程序的函數(shù)名稱:polydiv;
計算機程序函數(shù)原型位置:CRC.H;
所屬計算機數(shù)據(jù)庫:CRC.LIB
在使用C語言進行函數(shù)計算設(shè)計過程中,會產(chǎn)生一個余數(shù),余數(shù)存放在remainder文件中。
其中,計算機C語言多項式除法模擬設(shè)計中,頭文件為siodef.h
USHORT polydiv (USHORT data,USHORT divisor,USHORT remainder)
{
static USHORT quotient,i;
for(i=8;i>0;I-)
return remainder
}
在進行上述應(yīng)用計算機C語言進行多項式除法程序的模擬設(shè)計基礎(chǔ)上,在使用CRC函數(shù)進行CRC測試程序設(shè)計實現(xiàn),就可以實現(xiàn)計算機C語言對于循環(huán)冗余校驗碼的設(shè)計實現(xiàn),并在教學(xué)過程中通過學(xué)生的實驗操作,進行教學(xué)實現(xiàn)。
4、結(jié)語
總之,計算機C語言課程教學(xué)是一門實踐性比較強的教學(xué)課程,教學(xué)過程中尤其重視對于學(xué)生實踐動手以及實驗設(shè)計能力的培養(yǎng)鍛煉,因此,進行計算機C語言實驗教學(xué)改革的分析與探討,有利于對于當(dāng)前實驗教學(xué)中存在的問題進行避免與控制,取得較好的C語言實驗教學(xué)效果。
參考文獻
[1]卜登立,彭嵩松,唐衛(wèi)東,龍侃.“匯編語言程序設(shè)計”課程教學(xué)改革研究與探討.井岡山大學(xué)學(xué)報,2009(5).
[2]方艷紅,趙海龍.計算機高級語言程序設(shè)計類課程實踐教學(xué)改革研究.中國科技信息,2008(19).
[3]朱旻如,郭劍,朱立華.計算機語言課程中案例實驗教學(xué)法的實施探討.計算機教育,2008(18).
關(guān)鍵詞:c語言;計算機;軟件編程;技巧
中圖分類號:TP311
文獻標識碼:A
文章編號:1009-3044(2017)10-0071-01
1.C語言概述
c語言是經(jīng)由B語言不斷完善、發(fā)展而來的。隨著現(xiàn)代信息技術(shù)的發(fā)展,原有的計算機語言系統(tǒng)逐漸無法滿足計算機編程的需求,因此,人們開始對原有的B語言進行不斷的豐富和完善,于1972年推出了C語言,自1978年以后,C語言逐漸被移植到計算機中,成為計算機編程系統(tǒng)語言,為計算機軟件編程提供了條件。
2.c語言環(huán)境下計算機軟件編程技巧
C語言具有模塊化的特點,在計算機軟件編程工作中,應(yīng)當(dāng)注重軟件編程的技巧性,充分發(fā)揮C語言的便捷性和靈活性特點,不斷優(yōu)化軟件編程,提高軟件的質(zhì)量和使用效率。
2.1計算機軟件編程函數(shù)運用技巧
在C語言計算機軟件編程中,還會涉及函數(shù)的運用。事實上,每個函數(shù)都有其相應(yīng)的功能,函數(shù)的功能可暮數(shù)的名稱上進行判斷。在編程工作中,需要程序員定義函數(shù)參數(shù)值、返回值以及函數(shù)名稱,但事實上,C語言系統(tǒng)自帶函數(shù)數(shù)據(jù)庫,程序員只需要充分利用"#include指令和頭文件,即可調(diào)用數(shù)據(jù)庫中的函數(shù),提高軟件編程效率。例如,在實際編程工作中,需要運用到sqrt函數(shù),其調(diào)用函數(shù)的指令如下:#include"string.h"。
2.2變量存儲類型定義和設(shè)置技巧
變量存儲器的選取和操作,會對軟件編程代碼的執(zhí)行效率產(chǎn)生一定影響。只有實現(xiàn)變量存儲器的合理定義,軟件的執(zhí)行效率才能得以提高。程序在定義變量存儲器時,應(yīng)當(dāng)在充分考慮編程實際情況的前提下,采用內(nèi)部直接尋址存儲器。另外,在c語言編程中,函數(shù)變量的正確傳遞也非常重要,子程序模塊和整個程序模塊在選擇變量時,有一定的區(qū)別。整個程序應(yīng)當(dāng)選取全局變量,而子程序則選取局部變量。
2.3設(shè)計合理的c語言和軟件編程的接口
C語言的執(zhí)行速度快,還可實現(xiàn)對硬件的直接操作。在實際操作中,可將C語言運用到計算機軟件的編程操作中,實現(xiàn)對數(shù)據(jù)的采集、處理服務(wù)器中斷、實時控制等操作,實現(xiàn)數(shù)據(jù)傳遞和控制的自動化,進而提高控制任務(wù)的操作準確性,加速程序的實時響應(yīng)。
3.C語言和匯編語言的結(jié)合
C語言雖然能夠產(chǎn)生快速又緊湊的目標代碼,但是若要產(chǎn)生高質(zhì)量的目標代碼,仍需要借助匯編語言來實現(xiàn)。在某些方面,匯編語言比C語言更具優(yōu)勢,但是對某些程序的編程又不得不使用C語言。因此,在計算機軟件編程中,兩種語言經(jīng)常會混合使用。匯編語言和C語言的混合,通常可采用以下兩種方法實現(xiàn):第一,在C語言編程中嵌入?yún)R編語言。第二,分別編輯c語言和匯編語言,再進行目標模塊的鏈接。
3.1在c語言中嵌入?yún)R編語言
匯編語言的AMS指令在c語言中為合法指令,因此,在c語言中嵌入?yún)R編語言主要利用這一指令進行操作。在C語言中嵌入?yún)R編語言的格式如下:”ASMf“匯編語句”)”,即將匯編語句用雙引號和括號括起,并在括號前加上關(guān)鍵字ASM,需要強調(diào)的是,匯編指令與前一雙引號之間要預(yù)留空格。比如,在C語言中嵌入?yún)R編語言INTM指令(中斷指令),其指令為"ASMf“INTM”)”。在C語言中嵌入?yún)R編語言時,應(yīng)當(dāng)遵守以下原則:第一,被嵌人的匯編指令在結(jié)束時不需要輸入(;)。第二,ASM塊中的分號(;)是匯編代碼的注釋。第三,在ASN塊中返回指令為return。第四,在嵌入c語言時,應(yīng)用匯編語言中所使用的C語言進行初始化處理,并明確匯編的類型。第五,匯編語言中如db等偽指令被禁止嵌入C語言中。事實上,在C語言中嵌入?yún)R編語句的方式,雖然較為簡單便捷,但是在嵌入的過程中,有可能導(dǎo)致C語言本身的語言環(huán)境受到破壞,導(dǎo)致程序運行結(jié)果出錯。因此,不建議在C語言中嵌入大段功能完整的匯編語言。
關(guān)鍵詞 可視化編程環(huán)境;人機交換界面;詞法分析;語法糾正
中圖分類號:TP311 文獻標識碼:A 文章編號:1671-7597(2014)01-0042-01
計算機的普及過程中,為了讓計算機程序更好的服務(wù)于公眾,對于程序的語言的要求就尤為突出,合理有效的建立起良好的語言環(huán)境是研究者的任務(wù),也是在本文中著重提出的議題。我們通過在使用C語言環(huán)境下的人機交換系統(tǒng)來實現(xiàn)計算機系統(tǒng)程序的可視化管理,在對程序設(shè)計的過重中將設(shè)計的方案確實的實現(xiàn)出來,有效的體現(xiàn)出程序化進程管理的優(yōu)勢。
1 人機交換模式的意義
在系統(tǒng)的交流過程中,以往是采取人為發(fā)出指令,使用計算機的匯編語言和更為完善的C語言進行命令的編輯,改變了機器和人之間存在的間隙。這套人機交換模式最為主要的就是可視化技術(shù),技術(shù)在現(xiàn)有的環(huán)境中實現(xiàn)了可視化的操作模式,對于人直接命令機器起到了關(guān)鍵的作用。人機交換模式在使用中的原理是:可視化系統(tǒng)在程序運行的過程中,將數(shù)據(jù)整理編程成結(jié)構(gòu)化的模式,由抽象的數(shù)字概念轉(zhuǎn)換為具體形象的可視化模型結(jié)構(gòu)。基于獲取計算機模型信息在使用中較為復(fù)雜,完全可以考慮使用二維圖像對于圖像可視化生產(chǎn),這些都需要通過計算機對于數(shù)據(jù)進行采集,利用視覺信息定位處理的加工方法,對編程可視化進行完善,這就在很大程度上解決了在可視化圖像采集中出現(xiàn)程序混亂的現(xiàn)象。
在所提到的計算機編程可視化圖像采集裝置中最為主要的電腦原件就是高靈敏度的光學(xué)構(gòu)件,它使用的是光學(xué)的耦合技術(shù),在QQSDE模式下快速的采集圖片,形成的還原圖像與真實的圖像像素大致相同。再把光學(xué)原件收集的檢測信息發(fā)送到信號轉(zhuǎn)換裝置當(dāng)中,利用信號發(fā)射的原理將圖像轉(zhuǎn)變成圖像信號。在計算機程序接收信號的同時,對于信號進行分析,把原有的加密進行破解,快速的從信號當(dāng)中需找圖像信息,并將破解出的信息提取出來再次轉(zhuǎn)換成模型,對于目標表征較為明顯的圖片可以直接進行直接的編程處理。如果遇到較為輔復(fù)雜的表征形式,可以將數(shù)據(jù)的格式存儲記錄到數(shù)據(jù)庫中,與原有數(shù)據(jù)進行比對,得出最為相似的數(shù)據(jù)進行分析提取,并將最終得到的數(shù)據(jù)指令下達到每一個數(shù)據(jù)終端當(dāng)中。
2 可視化編程環(huán)境設(shè)計的內(nèi)容
直觀有效的可視化系統(tǒng)是在程序設(shè)計中提高效率的重要方式,對于計算機程序后期的檢測也起到了關(guān)鍵的作用,對于圖像的界面設(shè)置,在程序的整體結(jié)構(gòu)中,減少了操作人員在交流中的成本,縮短了操作的時間,降低了操作的復(fù)雜性,同時C語言的介入可以使得程序中的語言內(nèi)容更加的完善,改變了以往語言出現(xiàn)的細節(jié)上的錯誤,完全實現(xiàn)了設(shè)計的可視化模式。
C語言的在編程過程中,會在錯誤的狀態(tài)下有系統(tǒng)的提示,這就是可視化的作用,在語言的編輯程序中,將設(shè)置和編輯形成連接關(guān)系,最后在關(guān)系的確立后形成具體的操作過程。在實施的每個階段C語言的源代碼程序會發(fā)生一定的規(guī)律性轉(zhuǎn)變,在表示方式的不同中,會出現(xiàn)一定的語言語法錯誤和語言意思的不明確,對于在可視化編程的中的C語言環(huán)境可分為語言的分析判斷、代碼的轉(zhuǎn)換和命令的執(zhí)行三個過程。對于語言的判斷中,設(shè)計者在非操作的狀態(tài)下,由計算機自身的識別方式上的工作狀態(tài),對于編程環(huán)境中的語言出現(xiàn)的問題和錯誤及時的糾正,在發(fā)現(xiàn)系統(tǒng)無法解決的問題時,系統(tǒng)會發(fā)出對話框提示對于編程語言進行人工的處理。數(shù)據(jù)源中的信息在讀取過程中直接傳送到緩沖接收裝置中,這就進行第二相內(nèi)容,就是代碼的轉(zhuǎn)換過程,原有的信號源會在轉(zhuǎn)換器中經(jīng)過變換,生成新的數(shù)據(jù)形式,在正確的語法的指示下,系統(tǒng)記錄下代碼生成的具體標記。再結(jié)合原有的C語言的環(huán)境模式進行比對,對于無關(guān)的代碼進行刪除的預(yù)處理,剔除一些無關(guān)錯位的信息,并保留和存儲新生成的文字、標點和符號。最后一個階段就是根據(jù)新生成的編程代碼設(shè)計在計算機程序中實現(xiàn)操作指令的過程,完成整個可視化編程操作環(huán)境的使用。
3 可視化編程的實例介紹
在可視化編程的實現(xiàn)中,對于數(shù)據(jù)的分析是設(shè)計中的關(guān)鍵項目,對于語言的掃描器會根據(jù)C語言的具體規(guī)則(如關(guān)鍵字、運算符、數(shù)據(jù)類型和程序語句結(jié)構(gòu)等)從詞法預(yù)處理器產(chǎn)生的原始Token中依次讀取原始Token信息進行分析,產(chǎn)生最終給語法分析器使用的記號流信息,并為每一個Token定義相應(yīng)的類型信息。Token的數(shù)據(jù)結(jié)構(gòu)設(shè)置如下根據(jù)系統(tǒng)設(shè)計的原理。根據(jù)原理的改變方式構(gòu)建程序代碼的可視化可以實現(xiàn)計算機指令系統(tǒng)和運行機制研究的可視直觀性,為研究提高計算機的性能提供了一個可靠的虛擬平臺。通過數(shù)字模擬圖形的結(jié)構(gòu)方式將程序虛擬運行的內(nèi)部工作過程進行現(xiàn)實展示,可以大大提高C語言環(huán)境下對計算機系統(tǒng)內(nèi)部結(jié)構(gòu)優(yōu)化的研究,對于語言環(huán)境中的技術(shù)和語法的檢驗在程序內(nèi)部進行,可以有效的講計算機程序完善。并且考慮到關(guān)于可編程環(huán)境下的語義的詮釋,以及提供對系統(tǒng)的可擴展能力的研究,真正做到研究CPU程序中關(guān)于C語言技術(shù)的提高。
語法分析階段是整個編譯過程中繼詞法分析后的第二個階段,該過程是實現(xiàn)可視化的關(guān)鍵階段。它與編譯程序中的語法分析器略有不同,區(qū)別主要在算法和輸出結(jié)果上。編譯程序的語法分析是在詞法分析得出的單詞序列的基礎(chǔ)上得出相應(yīng)的語法樹,進而為下階段的語義分析做準備,確保可編程環(huán)境下的語義完整。
在對于語法的判別和解釋的過程中,尤其是對于代碼和單詞符號的辨別,分析出已有的單詞的語境和構(gòu)詞方式,將已有的單詞符號串聯(lián)起來。在通過規(guī)范中的分析方法形成分析樹,并通過語法分析器具體的表現(xiàn)出來,其具體的過程為:利用CParser相關(guān)聯(lián)的詞語對詞法分析產(chǎn)生的Token進行分析判斷(也即調(diào)用CScaner相關(guān)聯(lián)詞語),然后通過單詞的使用方式及相應(yīng)規(guī)則建立語法樹。在語法分析中,根據(jù)傳入的Token值情況進行分析,調(diào)用相應(yīng)的執(zhí)行函數(shù)進行分析判斷,每個函數(shù)產(chǎn)生相應(yīng)的語法樹,直到最后所有的Token處理完成以后,整個C語言程序產(chǎn)生一棵總體的語法樹。
4 結(jié)束語
在計算機的可視化環(huán)境中,實現(xiàn)人機的交流是提高計算機運行效率的關(guān)鍵手段,在提供這樣的交流平臺的過程中實現(xiàn)圖像的可視化,將虛擬狀態(tài)下的數(shù)據(jù)資源系統(tǒng)的轉(zhuǎn)變?yōu)榭梢暬木唧w操作過程,其中結(jié)合有C語言的環(huán)境設(shè)置,對于在程序編程過程中出現(xiàn)的錯誤和優(yōu)化檢測中,了解和發(fā)現(xiàn)語言語義和語法的正確與否是實現(xiàn)結(jié)構(gòu)自身優(yōu)化的一種方式,在對于編程環(huán)境的不斷優(yōu)化設(shè)計中,完善程序內(nèi)部的環(huán)境狀態(tài),在實現(xiàn)程序化設(shè)計的過程中更加的順利,借此來達到計算機程序智能化、方便操作的目的。
參考文獻
[1]蔡勇,劉學(xué)慧,吳恩華.基于圖像繪制的虛擬現(xiàn)實系統(tǒng)環(huán)境[J].軟件學(xué)報,2007,8(10):721-728.
關(guān)鍵詞:圓曲線;主點放樣;c#語言
中圖分類號:TP文獻標識碼:A文章編號:1672-3198(2008)08-0359-03
無論是采用傳統(tǒng)光學(xué)儀器放樣圓曲線主點,還是采用全站儀放樣圓曲線主點,圓曲線要素、圓曲線主點里程均是必須計算出來的,它們的數(shù)學(xué)模型分別為:
圓曲線要素切線長:T=Rtgα2
曲線長:L=π180•α•R
外矢距:E=R(secα2-1)
切曲差:q=2T-L
圓曲線主點里程計算:
ZY里程=JD里程-T
YZ里程=ZY里程+L
QZ里程=YZ里程-L2(假設(shè)JD里程已知)
JD里程=QZ里程+q2(檢核)
各點平面坐標的計算:x=Li-li36R2+li5120R4(QZ點:Li=L2;YZ點:Li=L)y=li22R-Li424R3+L6i720R5
假定我們在進行圓曲線放樣時,建立如下坐標系統(tǒng)(圖1)。
圖1
I――測站點
JD――交點
ZY――直線段公路與曲線段公路的轉(zhuǎn)折點
QZ――圓曲線中點
YZ――曲線段公路與直線段公路的轉(zhuǎn)折點
α――曲線轉(zhuǎn)角(實測或已知)
R――圓曲線設(shè)計半徑(已知)
下面是圓曲線主點放樣要素計算基于c#語言編程實現(xiàn)的主要源代碼,考慮到文章的篇幅,對于窗口通用的最大化、最小化、關(guān)閉的代碼就沒有再一一列出。
namespace 測量計算器 //程序命名空間
{
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgse)
{
//主要的計算過程就在這里了
//按照計算要求,輸入各已知量,已知量包括:
//轉(zhuǎn)向角,轉(zhuǎn)向方向,曲線半徑,曲線主點里程和測站點坐標。
//首先輸入主點里程
int DisMiles;
double DisMeters;
double Distance;
DisMiles = Convert.ToInt32(txtmiles.Text);
DisMeters = Convert.ToDouble(txtmeters.Text);
Distance = 1000 * DisMiles + DisMeters;//得到已知里程
//輸入角度,包括度、分、秒;
int drg = 0, mnt = 0, snd = 0;
drg = int.Parse(txtdeg.Text);
mnt = int.Parse(txtmin.Text);
snd = int.Parse(txtsec.Text);
double vbanjing = double.Parse(txtrd.Text); //輸入曲線半徑
//角度換成弧度:
double grdvalue = ((drg + mnt / 60.0 + snd / 3600.0) / 180.0) * Math.PI;
double valueIX, valueIY;//IY,IX分別是I點的坐標,這個坐標一般已經(jīng)給出
double valueT,valueL,valueE,valueq; //表示各曲線要素
double valueZY,valueYZ,valueQZ,valueJD; //表示各主點里程
double valueXQZ, valueYQZ, valueXYZ, valueYYZ, valueXJD, valueYJD;//QZ,YZ,JD 3點的坐標
valueIX = Convert.ToDouble(txtx.Text);
valueIY = Convert.ToDouble(txty.Text);
valueT = vbanjing * Math.Tan(grdvalue/2);//算出T
txtT.Text = Math.Round(valueT,3).ToString();
valueL = grdvalue * vbanjing;//算出L;
txtL.Text =Math.Round( valueL,3).ToString();
valueE=vbanjing*((1/Math.Cos(grdvalue/2))-1);//算出E
txte.Text =Math.Round( valueE,3).ToString();
valueq = 2 * valueT - valueL;//算出q;
txtq.Text =Math.Round( valueq,3).ToString();
//接下來計算各主點里程里程
valueZY = Distance + valueL-valueL/2 + valueq/2-valueT;
valueYZ = valueZY + valueL;
valueQZ = valueYZ - valueL/2;
valueJD = valueQZ +valueq/2;
// 定義中間量方便計算轉(zhuǎn)換
int vzy, vyz, vqz, vjd;
vzy = (int)valueZY / 1000;
vyz = (int)valueYZ / 1000;
vqz = (int)valueQZ / 1000;
vjd = (int)valueJD / 1000;
txtzy1.Text = vzy.ToString();
txtzy2.Text = Convert.ToString(Math.Round((valueZY - 1000 * vzy),3));
txtyz1.Text = vyz.ToString();
txtyz2.Text = Convert.ToString(Math.Round((valueYZ - 1000 * vyz),3));
txtqz1.Text = vqz.ToString();
txtqz2.Text = Convert.ToString(Math.Round((valueQZ - 1000 * vqz),3));
txtjd1.Text = vjd.ToString();
txtjd2.Text = Convert.ToString(Math.Round((valueJD - 1000 * vjd),3));
//首先確定JD點的坐標
valueXJD = valueT;
valueYJD = 0;
//接下來計算4個坐標值:
//注意,在計算4個坐標時,Y坐標的正負由轉(zhuǎn)向角方向決定,假如向左,Y為負,否則,為正
//所以先定義一個這樣的標量:
int leftORright;
leftORright =left.Checked? -1 : 1; //判斷是否為向左
double LQZ = valueL / 2; //這是計算的之間量!
valueXQZ=LQZ-(LQZ*LQZ*LQZ)/(6*vbanjing*vbanjing)+Math.Pow(LQZ,5)/(120*Math.Pow(vbanjing,4));
txtxqz.Text = Math.Round(valueXQZ,3).ToString(); //計算坐標值
valueYQZ=leftORright*((LQZ*LQZ)/(2*vbanjing)-Math.Pow(LQZ,4)/(24*Math.Pow(vbanjing,3))+Math.Pow(LQZ,6)/(720*(Math.Pow(vbanjing,5))));
txtyqz.Text=Math.Round(valueYQZ,3).ToString();
valueXYZ=valueL-(valueL*valueL*valueL)/(6*vbanjing*vbanjing)+Math.Pow(valueL,5)/(120*Math.Pow(vbanjing,4));
txtxyz.Text = Math.Round(valueXYZ,3).ToString();
valueYYZ=leftORright*((valueL*valueL)/(2*vbanjing)-Math.Pow(valueL,4)/(24*Math.Pow(vbanjing,3))+Math.Pow(valueL,6)/(720*(Math.Pow(vbanjing,5))));
txtyyz.Text=Math.Round(valueYYZ,3).ToString();
//最后進行各點放樣數(shù)據(jù)的計算,主要包括了方位角計算
//,水平角計算以及三個距離的計算。
//在計算過程中,需要判斷曲線書左向還是右向,因為方向的不同會導(dǎo)致計算結(jié)果的不一樣。
//首先定義水平角AIZY:
double AIZY;
if (left.Checked)
AIZY = (270 / 180.0) * Math.PI;
else
AIZY =( 90 / 180.0) * Math.PI;
//下面。根據(jù)轉(zhuǎn)向角的方向確定方位角:
//三個方位角:αIJD, αIQZ, αIYZ,分別是I點到JD、QZ、YZ的方位角
double αIJD, αIQZ, αIYZ;
//在確定方位角后,就可進行放樣要素的計算了,這主要包括2個內(nèi)容:距離D,以及夾角β:
//首先求得夾角B:βIJD,βIQZ,βIYZ:
double βIJD, βIQZ, βIYZ;
//假如為左:
if (left.Checked)
{
αIJD = 2 * Math.PI - Math.Atan(Math.Abs((valueYJD - valueIY) / (valueXJD - valueIX)));
αIQZ = 2 * Math.PI - Math.Atan(Math.Abs((valueYQZ - valueIY) / (valueXQZ - valueIX)));
αIYZ = 2 * Math.PI - Math.Atan(Math.Abs((valueYYZ - valueIY) / (valueXYZ - valueIX)));
βIJD = αIJD - αIZY;
βIQZ = αIQZ - αIZY;
βIYZ = αIYZ - αIZY;
}
//假如為右
else
{
αIJD = Math.Atan(Math.Abs((valueYJD - valueIY) / (valueXJD - valueIX)));
αIQZ = Math.Atan(Math.Abs((valueYQZ - valueIY) / (valueXQZ - valueIX)));
αIYZ = Math.Atan(Math.Abs((valueYYZ - valueIY) / (valueXYZ - valueIX)));
βIJD = -(αIJD - αIZY);
βIQZ = -(αIQZ - αIZY);
βIYZ = -(αIYZ - αIZY);
}
//轉(zhuǎn)換成角度(包含度,分,秒)
//定義度,分,秒以及弧度的中間量
//利用Converting()函數(shù)實現(xiàn)角度轉(zhuǎn)變
TXTαIJD.Text = Converting(αIJD / Math.PI * 180.0);
TXTαIQZ.Text = Converting(αIQZ / Math.PI * 180.0);
TXTαIYZ.Text = Converting(αIYZ / Math.PI * 180.0);
//轉(zhuǎn)換成角度(包含度,分,秒)
βIJD = βIJD / Math.PI * 180.0;
βIQZ = βIQZ / Math.PI * 180.0;
βIYZ = βIYZ / Math.PI * 180.0;
TXTβIJD.Text = Converting(βIJD);// βIJD.ToString();
TXTβIQZ.Text = Converting(βIQZ); //βBIQZ.ToString();
TXTβIYZ.Text = Converting(βIYZ);// βIYZ.ToString();
//最后,計算出點間距離:
double DIJD, DIQZ, DIYZ;
DIJD=Math.Sqrt((valueYJD-valueIY)*(valueYJD-valueIY)+(valueXJD-valueIX)*(valueXJD-valueIX));
DIQZ=Math.Sqrt((valueYQZ-valueIY)*(valueYQZ-valueIY)+(valueXQZ-valueIX)*(valueXQZ-valueIX));
DIYZ=Math.Sqrt((valueYYZ-valueIY)*(valueYYZ-valueIY)+(valueXYZ-valueIX)*(valueXYZ-valueIX));
TXTDIJD.Text = Math.Round(DIJD,3).ToString();
TXTDIQZ.Text = Math.Round(DIQZ,3).ToString();
TXTDIYZ.Text = Math.Round(DIYZ,3).ToString();
}
private string Converting(double jiao)//轉(zhuǎn)換函數(shù)
{
intdu, fen, miao;
string jiaodu;
du =(int) Math.Floor(jiao);
fen =(int) Math.Floor((jiao - du) * 60);
miao =(int)( Math.Round ((((jiao - du) * 60 - Math.Floor((jiao - du) * 60)) * 60),1));
jiaodu = Convert.ToString(du) + ”?“ + Convert.ToString(fen) + ”\'“ + Convert.ToString(miao) + ”\””;
return jiaodu;
}
}
}
據(jù)此源代碼,進行窗口設(shè)計的最終效果圖(如圖2),可供讀者進行參考設(shè)計。