基于組態(tài)王的單容水箱液位控制系統(tǒng)_第1頁(yè)
基于組態(tài)王的單容水箱液位控制系統(tǒng)_第2頁(yè)
基于組態(tài)王的單容水箱液位控制系統(tǒng)_第3頁(yè)
基于組態(tài)王的單容水箱液位控制系統(tǒng)_第4頁(yè)
基于組態(tài)王的單容水箱液位控制系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、內(nèi)蒙古科技大學(xué)信息工程學(xué)院測(cè)控專業(yè)畢業(yè)實(shí)習(xí)報(bào)告題 目:基于組態(tài)王的單容水箱液位控制系統(tǒng)學(xué)生姓名:學(xué) 號(hào):專 業(yè):測(cè)控技術(shù)與儀器班 級(jí):測(cè)控2009-1指導(dǎo)教師:李文濤 教授前 言隨著科學(xué)技術(shù)的發(fā)展,現(xiàn)代工業(yè)生產(chǎn)中的控制問(wèn)題也日趨復(fù)雜。在人們的生活中以及某些化工和能源的生產(chǎn)過(guò)程中,常常涉及一些液位或流量控制的問(wèn)題。比如,在石油、化工、輕工等工業(yè)生產(chǎn)過(guò)程中,有許多貯罐作為原料、半成品的貯液罐,前一道工序的成品或半成品不斷地流入下一道工序的貯液罐進(jìn)行加工和處理,為保證生產(chǎn)過(guò)程能連續(xù)進(jìn)行,必須對(duì)貯罐的液位進(jìn)行控制。此外,居民生活用水的供應(yīng),通常需要使用蓄水池,蓄水池中的液位需要維持合適的高度。還有一些

2、水處理的過(guò)程也需要對(duì)蓄水池中的液位實(shí)施控制。這些實(shí)際問(wèn)題都可以抽象為某種水箱的液位控制。因此,液位控制系統(tǒng)是過(guò)程控制的重要研究模型,對(duì)液位控制系統(tǒng)的研究具有顯著的理論和實(shí)際意義。本課題主要以單容水箱作為研究對(duì)象,運(yùn)用研華PCI1710及1720板卡進(jìn)行單容水箱對(duì)象特性的測(cè)試,從而求得其數(shù)學(xué)模型,并利用MATLAB軟件進(jìn)行了控制系統(tǒng)的仿真及分析,并確定出一組合適的PID參數(shù)對(duì)其進(jìn)行控制。其次,采用組態(tài)王進(jìn)行系統(tǒng)監(jiān)控,通過(guò)對(duì)調(diào)節(jié)器PID參數(shù)的整定,實(shí)現(xiàn)了水箱液位的閉環(huán)控制,使水箱液位穩(wěn)定在設(shè)定值,滿足設(shè)計(jì)要求。一、總體方案設(shè)計(jì) 該設(shè)計(jì)方案硬件部分由計(jì)算機(jī),水泵,電磁閥,液位變送器,PCI-1710

3、與1720板卡組成,軟件部分以組態(tài)王來(lái)實(shí)現(xiàn)編程控制。組態(tài)王通過(guò)從 PCI-1710與1720板卡兩個(gè)I/ O模塊與外界硬件設(shè)備通訊,對(duì)采集的數(shù)據(jù)進(jìn)行處理來(lái)實(shí)時(shí)監(jiān)控。系統(tǒng)啟動(dòng)后,水泵由水源抽水,通過(guò)管道將水送到上水箱,液位變送器測(cè)得水箱液位通過(guò)板卡PCI-1710轉(zhuǎn)換為數(shù)字信號(hào)輸入計(jì)算機(jī),組態(tài)監(jiān)控中心對(duì)測(cè)得信號(hào)進(jìn)行處理,通過(guò)PID運(yùn)算,輸出控制信號(hào)由板卡PCI-1720進(jìn)行D/A轉(zhuǎn)換,傳送給電磁閥,進(jìn)而控制水的流量實(shí)現(xiàn)對(duì)水箱液位控制。系統(tǒng)方框圖如圖1.1所示。圖1.1系統(tǒng)方框圖二、單容水箱對(duì)象特性測(cè)試及分析2.1被控對(duì)象動(dòng)態(tài)特性概述被控對(duì)象的動(dòng)態(tài)特性是指被控對(duì)象的輸入發(fā)生變化時(shí),其輸出(被調(diào)量)

4、隨時(shí)間變化的規(guī)律。研究動(dòng)態(tài)特性的原因是控制系統(tǒng)的設(shè)計(jì)方案都是依據(jù)被控對(duì)象的動(dòng)態(tài)特性進(jìn)行的,特別是調(diào)節(jié)器參數(shù)的整定也是依據(jù)對(duì)象的動(dòng)態(tài)特性進(jìn)行的。從控制觀點(diǎn)看,被控對(duì)象本質(zhì)上都有相同之處,分析被控對(duì)象的動(dòng)態(tài)特性,可知被控對(duì)象控制的難易程度與調(diào)節(jié)過(guò)程的快慢。要評(píng)價(jià)一個(gè)系統(tǒng)的工作質(zhì)量,只看穩(wěn)態(tài)是不夠的,還應(yīng)看動(dòng)態(tài)過(guò)程中被調(diào)量隨時(shí)間的變化情況。因此,研究系統(tǒng)的動(dòng)態(tài)特性就顯得特別重要。2.2被控對(duì)象數(shù)學(xué)模型的建立建立被控對(duì)象數(shù)學(xué)模型的方法主要有三種,分別是機(jī)理法、實(shí)驗(yàn)法、機(jī)理法與實(shí)驗(yàn)法相結(jié)合的混合法。機(jī)理法根據(jù)被控過(guò)程的內(nèi)部機(jī)理,運(yùn)用已知的靜態(tài)或動(dòng)態(tài)平衡關(guān)系,用數(shù)學(xué)解析的方法求取被控過(guò)程的數(shù)學(xué)模型。實(shí)驗(yàn)法

5、是先給被控過(guò)程人為地施加一個(gè)輸入作用,然后記錄過(guò)程的輸出變化量,得到一系列實(shí)驗(yàn)數(shù)據(jù)或曲線,最后再根據(jù)輸入輸出實(shí)驗(yàn)數(shù)據(jù)確定其模型的結(jié)構(gòu)(包括模型形式、階次與純滯后時(shí)間等)與模型的參數(shù)。混合法是機(jī)理演繹法與實(shí)驗(yàn)辯識(shí)法相互交替使用的一種方法。2.2.1機(jī)理法建立單容水箱的數(shù)學(xué)模型從機(jī)理出發(fā),依據(jù)物料平衡和能量平衡的關(guān)系,用理論的方法推導(dǎo)被控對(duì)象的數(shù)學(xué)模型。單容水箱的模型如下圖2.1所示:圖2.1單容水箱模型圖其中:被控參數(shù)-h;輸入量-Qi;干擾量-Qo 分析水位在調(diào)節(jié)閥1開(kāi)度擾動(dòng)下的動(dòng)態(tài)特性,即確定hQi之間的數(shù)學(xué)關(guān)系根據(jù)動(dòng)態(tài)物料平衡關(guān)系,在任何時(shí)刻水位的變化均滿足在起始的穩(wěn)定平衡工況下有如下關(guān)系

6、式:(式2-1)(式2-2)兩式相減得增量形式的平衡方程:(式2-3)假設(shè)(式2-4)則單容液位過(guò)程的微分方程增量式 (式2-5)傳遞函數(shù)為 (式2-6)T-被控過(guò)程的時(shí)間常數(shù)T=RC; K-被控過(guò)程的放大系數(shù),K=R;C-被控過(guò)程的容量系數(shù),C=A有些被控過(guò)程存在純滯后,則具有純滯后的單容過(guò)程相應(yīng)的傳遞函數(shù)為 (式2-7)其階躍響應(yīng)曲線與無(wú)滯后的曲線形狀相同,只是在時(shí)間上推遲了。由此可見(jiàn),用機(jī)理法建立數(shù)學(xué)模型的首要條件是被控過(guò)程的機(jī)理必須為人們充分掌握,并且可以比較確切的加以數(shù)學(xué)描寫(xiě)。考慮到參數(shù)測(cè)量的準(zhǔn)確性與復(fù)雜性,排除機(jī)理法的使用。2.2.2階躍響應(yīng)曲線法建立單容水箱的數(shù)學(xué)模型階躍響應(yīng)曲線

7、法是實(shí)驗(yàn)法的一種,即對(duì)被控對(duì)象施加一階躍信號(hào),并且階躍響應(yīng)獲取應(yīng)注意以下的問(wèn)題:(1)合理選擇階躍擾動(dòng)的幅度(一般約為額定負(fù)荷的10%20%)(2)實(shí)際閥門只能以有限速度移動(dòng)(3)一般認(rèn)為階躍信號(hào)是在t1 /2時(shí)加入(4)試驗(yàn)前確保被控對(duì)象處于穩(wěn)定工況(5)考慮過(guò)程的非線性特性,應(yīng)進(jìn)行多次測(cè)試。(6)若過(guò)程不允許同一方向擾動(dòng)加入,則采用矩形脈沖擾動(dòng),可從脈沖響應(yīng)曲線求出所需的階躍響應(yīng)。 根據(jù)以上原則,經(jīng)過(guò)多次測(cè)量,得出在階躍擾動(dòng)為穩(wěn)態(tài)值的10%時(shí),時(shí)間與液位高度的對(duì)應(yīng)關(guān)系如下表2.1所示(t=10輸出無(wú)變化):表2.1液位過(guò)程的階躍響應(yīng)數(shù)據(jù)t/s102040608010014018025030

8、0400500600h/mm02820365488118144166184192196由于是單容水箱,則其數(shù)學(xué)模型可以用一階慣性環(huán)節(jié)加純延遲的傳遞函數(shù)即 (式2-8)來(lái)近似,確定參數(shù)k、T、有兩種方法:作圖法、參數(shù)兩點(diǎn)法。 用作圖法求參數(shù)時(shí)需注意:(1)t1/2處為擾動(dòng)起點(diǎn)(2)在s型響應(yīng)曲線找拐點(diǎn),并作切線。T、值如下且 圖2.2(a)階躍信號(hào) 圖2.2(b)一階慣性環(huán)節(jié)加純延遲顯然,用這種方法求直線效果是很差的。首先,與式(2-8)所對(duì)應(yīng)的階躍響應(yīng)是一條向后平移了時(shí)刻的指數(shù)曲線,它不可能完美的擬合成S型的曲線,再次,在做圖中,切線的畫(huà)法也有很大的隨意性,這將直接關(guān)系到和T的取值,因此,參數(shù)

9、的確定排除用此方法,選用參數(shù)兩點(diǎn)法,首先,將響應(yīng)曲線標(biāo)幺 (式2-9) (式2-10)取y*(t1)=0.39,取y*(t2)=0.63,記t1和t2則 (式2-11) (式2-12)取 驗(yàn)證 基于以上原理,用Matlab編程,程序見(jiàn)附錄A,并且在誤差的范圍之內(nèi),可以接受。則數(shù)學(xué)模型為: (式2-13)2.2.3利用simulink工具箱驗(yàn)證模型的準(zhǔn)確性在matlab中打開(kāi)simulink,編寫(xiě)以下程序并在命令窗口對(duì)曲線進(jìn)行處理,程序見(jiàn)附錄A:圖2.3 廣義對(duì)象階躍響應(yīng)框圖則用數(shù)據(jù)擬合出的曲線(原系統(tǒng))與建立模型后的曲線(近似曲線)如下圖2.4所示:圖2.4 單容水箱階躍響應(yīng)曲線對(duì)比2.2.4

10、 PID控制器校正單容水箱系統(tǒng)利用Simulink仿真模塊集在模型編輯窗口建立PID控制器,如下圖2.5所示:圖2.5 PID控制子模塊之后,點(diǎn)擊EditMask Subsystem,對(duì)其進(jìn)行封裝。其封裝圖如圖2.6所示。圖2.6 PID控制器的封裝加入PID調(diào)節(jié)器后,系統(tǒng)方框圖如下圖2.7所示:圖2.7系統(tǒng)方框圖 此后,反復(fù)調(diào)試PID參數(shù),得到如下較為理想的曲線。因?yàn)槲⒎謱?duì)純延遲環(huán)節(jié)不起作用,則純延遲部分始終無(wú)法消除,其參數(shù)設(shè)計(jì)如圖2.8所示.圖2.8 PID參數(shù)對(duì)應(yīng)的階躍響應(yīng)曲線如下圖2.9所示。圖2.9 理想PID參數(shù)下的階躍響應(yīng)曲線三、單容水箱監(jiān)控畫(huà)面的設(shè)計(jì) 3.1組態(tài)王設(shè)計(jì)步驟建立新

11、工程項(xiàng)目:在運(yùn)行組態(tài)王程序時(shí),彈出組態(tài)王工程管理器畫(huà)面,此時(shí)建立一個(gè)新工程,執(zhí)行以下的操作步驟: (1)在工程管理器中選擇菜單“文件/新建工程”,彈出“新建工程向?qū)б粴g迎使用本向?qū)А睂?duì)話框。(2)點(diǎn)擊“下一步”,彈出“新建工程向?qū)Фx擇工程所在路徑”對(duì)話框。從對(duì)話框中選擇或指定工程所在路徑,倘若用戶需要更改工程路徑,請(qǐng)單擊“瀏覽”按鈕;如果路徑或文件夾不存在,請(qǐng)選擇創(chuàng)建。(3)點(diǎn)擊“下一步”,彈出 “新建工程向?qū)こ堂Q和描述”對(duì)話框。往對(duì)話框中輸入工程名稱:水箱液位控制界面。(4)點(diǎn)擊“完成”,再點(diǎn)擊“是”,將新建的工程設(shè)為組態(tài)王當(dāng)前工程,此時(shí)組態(tài)王工程管理器中出現(xiàn)新建的工程。制作動(dòng)態(tài)畫(huà)面

12、:按照實(shí)際工程的要求繪制監(jiān)控畫(huà)面,并使靜態(tài)畫(huà)面隨著過(guò)程控制對(duì)象產(chǎn)生動(dòng)態(tài)效果。(1)新建畫(huà)面命名:?jiǎn)稳菟湟何豢刂?,選擇畫(huà)面風(fēng)格“大小可變”和“覆蓋式”。單擊確定后進(jìn)入開(kāi)發(fā)系統(tǒng)新畫(huà)面進(jìn)行設(shè)計(jì)。點(diǎn)擊工具欄中的“打開(kāi)圖庫(kù)”,選擇需要的圖素。水箱液位監(jiān)控畫(huà)面如圖3.1所示。 圖3.1 水箱液位監(jiān)控畫(huà)面3.2動(dòng)態(tài)畫(huà)面的連接畫(huà)面設(shè)置完之后,要定義板卡及變量的信息,接下來(lái)就要實(shí)現(xiàn)動(dòng)畫(huà)的連接。其中這部分連接包括儀表對(duì)象、當(dāng)前液位值顯示文本對(duì)象、實(shí)時(shí)趨勢(shì)曲線、數(shù)據(jù)報(bào)表、報(bào)警窗口、退出界面等。連接之后,接下來(lái)就是編寫(xiě)命令語(yǔ)言。3.3 水箱液位PID參數(shù)控制界面用上述同樣的方法可以對(duì)KP、KI、Kd、SV、UK、P

13、v后的”#”,進(jìn)行動(dòng)畫(huà)連接。水箱液位PID參數(shù)控制界面運(yùn)行畫(huà)面如下圖所示。圖3.2 水箱液位PID參數(shù)設(shè)置畫(huà)面 總 結(jié)本設(shè)計(jì)用組態(tài)軟件實(shí)現(xiàn)了水箱液位的監(jiān)控,并且能夠通過(guò)PID參數(shù)的設(shè)計(jì)達(dá)到控制液位的目的。本次畢業(yè)設(shè)計(jì),增加了我對(duì)專業(yè)知識(shí)的認(rèn)識(shí)和了解,尤其是過(guò)程控制和智能儀器知識(shí)的運(yùn)用。經(jīng)過(guò)大量相關(guān)資料的查閱,包括控制系統(tǒng)工作原理以及如何利用過(guò)程控制及智能調(diào)節(jié)器實(shí)現(xiàn)各種功能,我不僅學(xué)會(huì)了許多知識(shí),而且培養(yǎng)了我獨(dú)立解決問(wèn)題的能力,同時(shí)在對(duì)硬件設(shè)計(jì)的過(guò)程中,鞏固了我的專業(yè)課知識(shí),使我受益匪淺。總之,通過(guò)本次設(shè)計(jì)不僅進(jìn)一步強(qiáng)化了專業(yè)知識(shí),還掌握了設(shè)計(jì)系統(tǒng)的方法、步驟等,為今后的工作和學(xué)習(xí)打下了堅(jiān)實(shí)的基

14、礎(chǔ)。再者,我對(duì)Matlab比較感興趣,并且經(jīng)過(guò)上學(xué)期的學(xué)習(xí)有了一定的基礎(chǔ),上手比較容易,首先經(jīng)過(guò)對(duì)資料的整理、理解和消化,我對(duì)自己的設(shè)計(jì)內(nèi)容思路清晰了,仿真達(dá)到預(yù)期效果時(shí),我就開(kāi)始整理自己的思路,最終明確了參數(shù)的影響。達(dá)到了課設(shè)的目的。這次畢業(yè)設(shè)計(jì)不但鞏固我所學(xué)的基礎(chǔ)知識(shí),而且提高我的動(dòng)手能力和動(dòng)腦能力。所以總的來(lái)說(shuō),這次畢業(yè)設(shè)計(jì)我學(xué)到很多!參考文獻(xiàn)李文濤.過(guò)程控制M.北京:科學(xué)出版社,2012.2雄偉.工控組態(tài)軟件及應(yīng)M.北京:中國(guó)電力出版社,2011.3PCI-1710/1710HG快速安裝手冊(cè).4潘海.基于組態(tài)王的水箱液位控制系統(tǒng)設(shè)計(jì)J.科技資訊,2009(26).5張玲霞,李學(xué)軍,李杰

15、.基于組態(tài)王的液位控制系統(tǒng)仿真實(shí)驗(yàn)J. 長(zhǎng)春大學(xué)學(xué)報(bào),2010(04).6袁榮華,黃世釗,馮釧山,潘樹(shù)林.基于組態(tài)王的水箱液位監(jiān)控系統(tǒng)設(shè)計(jì)及測(cè)試J.廣西大學(xué)學(xué)報(bào),2008(01).7陳曦,丁躍澆,肖翀.基于PLC和組態(tài)王的單容水箱液位定值控制實(shí)驗(yàn)J.湖南理工學(xué)院學(xué)報(bào),2011(01).8崔成梅,陳金艷,馬永青.工業(yè)過(guò)程控制的模塊化設(shè)計(jì)方法J. 黑龍江科技信息, 2008(17).9石浩旭.基于組態(tài)王的遠(yuǎn)程過(guò)程控制系統(tǒng)的設(shè)計(jì)J.科技致富向?qū)? 2011(15).10王樹(shù)青.工業(yè)過(guò)程控制工程M.北京:化學(xué)工業(yè)出版社,2003.11吳祚武.液位控制系統(tǒng)M.北京:化學(xué)工業(yè)出版社,2006.12何玉樵.

16、化工過(guò)程控制及儀表M.成都:成都科技大學(xué)出版社 ,1991.13邵世煌.計(jì)算機(jī)控制技術(shù)M.北京: 紡織工業(yè)出版社,1991.14關(guān)業(yè)偉,魯凱生.組態(tài)王和MATLAB的DDE應(yīng)用研究J. 船海工程, 2005(06).15房向榮,施仁.組態(tài)王與智能儀器的動(dòng)態(tài)數(shù)據(jù)交換J.工業(yè)儀表與自動(dòng)化裝置,2005(03).附錄A/ 求取參數(shù)k、T、tw=10;%輸出無(wú)變化的時(shí)間t=10,20,40,60,80,100,140,180,250,300,400,500,600-tw;h=0,2,8,20,36,54,88,118,144,166,184,192,196;h=h/h(length(h);h1=0.3

17、9;t1=interp1(h,t,h1)+tw;%利用一維線性插值計(jì)算h=0.39時(shí)的時(shí)間t1h2=0.63;t2=interp1(h,t,h2)+tw;%利用一維線性插值計(jì)算h=0.63時(shí)的時(shí)間t2T=2*(t2-t1),tao=2*t1-t2得出:T =136.7077 tao =58.0462t3=0.8T+tao=167.41236 t4=2T+tao=331.4616時(shí)h3= interp1(t,h,167.41236)時(shí)得 0.5921而理論值為0.55h4= interp1(t,h,331.4616)時(shí)得0.8850而理論值為0.87 k=200/10=20/對(duì)曲線進(jìn)行處理tw=

18、10;%輸出無(wú)變化的時(shí)間t1=10,20,40,60,80,100,140,180,250,300,400,500,600-tw;h1=0,2,8,20,36,54,88,118,144,166,184,192,196; t2,x2,h2=sim(sy3_3_2,600);plot(t1,h1,t2,h2) plot(t1,h1,:,t2,h2,-) legend(原系統(tǒng),近似系統(tǒng)) xlabel(t/s) ylabel(h/mm) title(單容水箱階躍響應(yīng)曲線對(duì)比) grid附錄資料:不需要的可以自行刪除Pascal/C/C+語(yǔ)句對(duì)比(補(bǔ)充版)一、Hello world 先看三種語(yǔ)言的樣

19、例:Pascalbegin writeln(Hello world);end.C#include int main() printf(Hello world!n); return 0;C+#include using namespace std;int main()cout Hello world! endl; return 0; 從這三個(gè)程序可以看到一些最基本的東西。在Pascal中的begin和end,在C/C+里就是;Pascal主程序沒(méi)有返回值,而C/C+返回0(好像在C中可以為NULL)。在C/C+中,main函數(shù)以前的是頭文件,樣例中C為stdio.h,C+除了iostream還有

20、第二行的using namespace std,這個(gè)是打開(kāi)命名空間的,NOIP不會(huì)考這個(gè),可以不管,只要知道就行了。 此外說(shuō)明 注釋單行用/,段落的話Pascal為,C/C+為/* */。* 常用頭文件(模板)#include #include #include #include #include #include using namespace std;int main() system(“pause”);return 0;二、數(shù)據(jù)類型及定義 這里只列出常用的類型。1、整型PascalC/C+范圍shortint-128 127integershort-32768 32767longintI

21、nt -2147483648 2147483647int64long long-9223372036854775808 9223372036854775807byte-0 255wordunsigned short0 65535longwordunsigned int0 4294967295qwordunsigned long long0 18446744073709551615 * 當(dāng)對(duì)long long 變量賦值時(shí),后要加LLLong long x=6327844632743269843LL* 如果位移 x2LL* Linux: printf(“%lldn”,x);* Windows: p

22、rintf(“%I64dn”,x);2、實(shí)型PascalC/C+范圍realfloat2.9E-39 1.7E38single-1.5E-45 3.4E38doubledouble5.0E-324 1.7E3083、字符即字符串 字符在三種語(yǔ)言中都為char,C里沒(méi)有字符串,只有用字符數(shù)組來(lái)代替字符串,Pascal和C+均為string。Pascal中字符串長(zhǎng)度有限制,為255,C+則沒(méi)有。 字符串和字符在Pascal中均用單引號(hào)注明,在C/C+中字符用單引號(hào),字符串用雙引號(hào)。4、布爾類型 Pascal 中為 boolean,C/C+ 為 bool。值均為True 或 False。C/C+中除

23、0外bool都為真。5、定義 常量的定義均為 const,只是在C/C+中必須要注明常量的類型。在C/C+中還可以用宏來(lái)定義常量,此時(shí)不注明類型。PascalC/C+const a = 60; b = -a + 30; d = ;const int a = 60;const int b = - a + 30;const string d = “”;define MAXN 501 /這個(gè)是宏 * 宏定義其實(shí)就是直接在程序相應(yīng)的位置替換: #define randomize srand(unsigned time(NULL) #define wait for(int w=0;w a;cout a;

24、cout a endl;特別說(shuō)明C+中cin一個(gè)字符的話會(huì)自動(dòng)跳過(guò)空格和回車,Pascal和C則會(huì)讀入空格和回車。在Pascal中writeln(a:n:m) 表示在n個(gè)字符寬的輸出域上輸出a保留m位小數(shù)。例如:pascal write(a:6) c/c+ printf(“%6d”,a) Pascal write(a:6:2) c/c+ printf(“%6.2f”,a) C+ 如果用 cout ? (繁瑣!) 需要加頭文件 #inlude cout setprecision(2)a; /作用永久 cout setw(6)a; /作用臨時(shí) 以下三個(gè)進(jìn)制設(shè)定都是永久作用: cout deca;

25、相當(dāng) printf(“%d”,a); /十進(jìn)制 cout hexa; 相當(dāng) printf(“%X”,a); /十六進(jìn)制 cout octa; 相當(dāng) printf(“%o”,a); /八進(jìn)制例如:cout 12hex12oct1212endl;輸出:12c1414 C 的輸入輸出里面的字符串中%表示變量,%后面的字目表示變量類型。下面是類型表:%hd1個(gè)short型整數(shù)%d1個(gè)int型整數(shù)%u1個(gè)unsigned int型整數(shù)%I64d1個(gè)long long型整數(shù)%c1個(gè)字符%s1個(gè)C字符串%f1個(gè)float型實(shí)數(shù)%lf1個(gè)double型實(shí)數(shù)%10.4f輸出1個(gè)總寬度為10,保留4位小數(shù)的實(shí)數(shù)

26、文件輸入輸出:Pascalassign(input, test.in);assign(output, test.out);reset(input);rewrite(output);read(a, b);writeln(a, b);close(input);close(output);CFILE *fin = fopen(“test.in”, “r”);FILE *fout = fopen(“test.out”, “w”);fscanf(fin, “%d%d”, &a, &b);fprintf(fout, “%d%d”, a, b);fclose(fin); fclose(fout);C+#in

27、clude using namespace std;ifstream fin(“test.in”);ofstream fout(“test.out”);fin a b;fout a b endl;fin.close(); fout.close();因?yàn)镃+的讀入較慢,個(gè)人建議C+的話使用C的輸入方式。當(dāng)然也有人用C的讀入,C+的輸出的,這種方式我們稱之為城鄉(xiāng)結(jié)合。*中國(guó)計(jì)算機(jī)學(xué)會(huì)競(jìng)賽須知發(fā)布的C讀寫(xiě)程序:(C+ 也能用,cin,cout,scanf,printf 可混用)#include int main() int a,b; freopen(“sum.in”,”r”,stdin);freop

28、en(“sum.out”,”w”,stdout); scanf(“%d%d”,&a,&b); printf(“%dn”,a+b); return 0; 或者:freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout);ios:sync_with_stdio(false); 取消同步,cin,cout的速度就不慢了! cinab;couta+bendl; return 0;以下擴(kuò)充c/c+混用是可行的:#include #include using namespace std;int main() int a,b,c,d; freopen(

29、sum.in,r,stdin); freopen(sum.out,w,stdout); scanf(%d%d,&a,&b); cincd; printf(%dn,a+b); couta+b+c+dsn).Cwhile(scanf(%s%d,s,&n)!=EOF).四、賦值語(yǔ)句及運(yùn)算符號(hào) 一一對(duì)應(yīng)的關(guān)系PascalC/C+賦值運(yùn)算賦值:=基本運(yùn)算加+減-乘*除(實(shí)數(shù))/ (double)除法取整div(int) / (int)取余mod%比較等于=不等于!=大于大于等于=小于小于等于=邏輯且and&或or|非not!位運(yùn)算左移(*2)shl且and&或or|非not異或xor其他增一inc(x)

30、x+減一dec(x)x- 在C/C+中對(duì)某個(gè)變量自身進(jìn)行運(yùn)算可以簡(jiǎn)寫(xiě)為 變量名 運(yùn)算符號(hào)= 改變量 如 x += 8 就表示 x = x + 8, 即 inc(x, 8)。 在 C/C+里還存在一種三目運(yùn)算 變量名 = 條件 ? 值A(chǔ) : 值B 如 x = x 0 ? x : -x; /表示若x 0 則取 x, 否則取 x, 同 if x 0 then x := x else x := -x;五、條件語(yǔ)句1、if C/C+中if 語(yǔ)句的條件必須要用括號(hào)括起來(lái),后面不使用then。PascalC/C+if a b then flag := true else flag := false;if (

31、a b) flag = true;else flag = false;2、多種分支 C/C+中為switch,Pascal為case:PascalC/C+case x of 1: inc(x); 2: dec(x); else x := x * x;end;switch (x) case 1: x +; break; case 2: x -; break; default: x *= x; 切記C/C+中一定要寫(xiě)break,后果你可以去掉break,運(yùn)行看看就知道了。六、循環(huán)語(yǔ)句1、forPascalC/C+for 變量名 := 初始值 to(downto) 終止值 dofor (變量名=初始

32、值;條件;改變方式)for i := 5 to 10 do dec(a);/終止值大于初始值用 tofor i := 5 downto 1 do dec(a);/終止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 滿足條件就會(huì)一直循環(huán)。C/C+中i是實(shí)數(shù)、指針都可以*/C/C+中for的特殊用法:/變量為實(shí)數(shù)for (double i = 1; i 符號(hào)為間接引用,后面會(huì)提到。for (type1 *p = head - next; p; p = p - next) printf(“%d”, p - k);2、whilePascalC/C+whil

33、e 條件 dowhile (條件)while i 0 do dec(i);while (i != 0) i-;/也可寫(xiě)作 while (i) i-;/在C/C+中非0即為真。3、repeat-until & do-whilePascalC/C+repeat 語(yǔ)句 until 結(jié)束條件;do while (運(yùn)行條件)repeat int(i) until i 100;do i+; while (i = 100);七、數(shù)組 Pascal中數(shù)組的下標(biāo)可以隨意定義,而C/C+下標(biāo)始終為從0開(kāi)始到(數(shù)組大小1)。PascalC/C+定義a : array 1.100 of integer;b :arra

34、y 1.10,1.10 of int64;int a100;int b1010;含義a 為大小為100的integer數(shù)組,合法下標(biāo)為1到100b 為大小為10*10的int64數(shù)組,合法下標(biāo)為1,1到10,10a 為大小為100的int數(shù)組,合法下標(biāo)為0到99b 為大小為10*10的int數(shù)組,合法下標(biāo)為0,0到9,9;使用inc(a21);b2,2:=b1,1+b1,2+b2,1;a21+;b11=b01+b00+b10; 數(shù)組清零PascalC/C+Fillchar(a, sizeof(a), 0);memset(a, 0, sizeof(a);/頭文件包含 string.h*如果要填最

35、大: memset(a,127,sizeof(a) (但達(dá)不到 INT_MAX) 如果要填最?。?memset(a,128,sizeof(a) (但達(dá)不到 INT_MIN) 如果填0: memset(a,0,sizeof(a) 如果填-1: memset(a,-1,sizeof(a)八、字符串 C風(fēng)格的字符串就是字符數(shù)組。 C+和Pascal的字符串使用基本相同,只是C+中字符串下標(biāo)以0開(kāi)始,Pascal以1開(kāi)始。字符串處理很多這里不一一列舉,只寫(xiě)最常用的幾個(gè)。PascalC (包含)定義用:char sC+(包含)定義用:string s輸入輸出Readln(s);Writeln(s);Sc

36、anf(“%s”,s);Printf(“%sn”,s);注:不能輸入輸出c+的字符串Cins;Couts = s 的區(qū)別: getline(cin,s)cins一次性整行讀入,直至行末尾。只讀入一個(gè)“單詞”,遇空格和行末停止。例如輸入;How are you?s=” How are you?”讀入整串含空格例如輸入;How are you?s=”How”如果三個(gè)都讀:cins1s2s3*C+ 數(shù)字與數(shù)值之間的轉(zhuǎn)換:#include #include #include /必須加入using namespace std;int main() string text = 152; int numbe

37、r; stringstream ss;ss number; /string - int coutnumber+100endl; ss string string str = ss.str(); return 0;九、過(guò)程和函數(shù)1、過(guò)程 在C/C+中沒(méi)有過(guò)程,但可以把返回值為“空”的函數(shù)理解為過(guò)程。PascalC/C+無(wú)參過(guò)程procedure 過(guò)程名;說(shuō)明部分begin 語(yǔ)句部分 end;/說(shuō)明部分、begin、end語(yǔ)句部分統(tǒng)稱為過(guò)程體void 函數(shù)名(); 主體部分; return ;帶參過(guò)程procedure 過(guò)程名(形參表)過(guò)程體void 函數(shù)名(形參表)過(guò)程體 值傳和址傳:當(dāng)一個(gè)參數(shù)

38、是值傳時(shí),形參在子過(guò)程中相當(dāng)于一個(gè)局部變量,對(duì)它的改變不影響實(shí)在的參數(shù)值。址傳則會(huì)影響。下例中a為值傳,b為址傳。初始a = 5,b = 5,運(yùn)行后a = 5,b = 10;PascalC/C+var a, b:integer;procedure doit(a:integer; var b:integer);begin b := a + b; a := a + b;end;begina := 5;b := 5;doit(a, b);writeln(a, , b);end.void doit(int a, int &b) HYPERLINK a a認(rèn)為值參,b認(rèn)為變量傳參 b += a; a +

39、= b; return ;int main()int a = 5, b = 5;doit(a, b);cout a b;return 0;* 用若干地址傳參可以給調(diào)用者傳回若干值 Void tryit(int &x,int &y,int &z) 調(diào)用時(shí): tryit(a,b,c) ,可以傳回 a,b,c的值。* 用數(shù)組名(也是地址)傳參可以傳回整組的數(shù)據(jù) Void tryit( int a) 調(diào)用時(shí): tryit(x),可以傳回整個(gè)數(shù)組。例如:void tryit(int a) for(int i=0;i=10;i+) ai=i*2; return; int main() int x10; t

40、ryit(x); for(int i=0;i=10;i+) coutxiendl; system(pause); return 0;*用指向函數(shù)的指針作為參數(shù),可以執(zhí)行指定的函數(shù)。(略)STL 的兩個(gè)應(yīng)用:* C+ 快排函數(shù)#include Bool com(int a,int b) Return ab;Int main() Int a10=5,7,3,2,6,8,4,3,5,7;Sort(a,a+10,com); /如果升序可以省略com.For(int i=0;i10;i+) Coutai” “;* 優(yōu)先隊(duì)列(以堆排為例)#include #include using namespace

41、std;priority_queue Q;int main() int n,a; cinn; while (n-) cina; Q.push(a); while (!Q.empty() cout Q.top() ; Q.pop(); return 0;* 隊(duì)列、棧、優(yōu)先隊(duì)列 三種數(shù)據(jù)結(jié)構(gòu)匯總:#include #include priority_queue Q;queue Q1;stack S;int main()Q.push(5); x = Q.top(); Q.pop();Q.empty();Q.size()Q1.push(5); Q1.size(); Q1.front(); Q1.empty(); Q1.pop();S.push(5); S.size(); S.top(); S.emtpy(); S.pop();2、函數(shù) . PascalC/C+funtion 函數(shù)名(形參表):返回值類型;函數(shù)體返回值類型 函數(shù)名(形參表) 主體; return 返回值;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論