oop(c++)附錄電子書-程序設(shè)計教程-c++語言描述_第1頁
oop(c++)附錄電子書-程序設(shè)計教程-c++語言描述_第2頁
oop(c++)附錄電子書-程序設(shè)計教程-c++語言描述_第3頁
oop(c++)附錄電子書-程序設(shè)計教程-c++語言描述_第4頁
免費預(yù)覽已結(jié)束,剩余189頁可下載查看

下載本文檔

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

文檔簡介

程序設(shè)計教程 用C++語言實現(xiàn)或—用C++語言描述或—用C++語言編程陳家駿,鄭滔編著隨著計算機應(yīng)用領(lǐng)域的不斷擴大、應(yīng)用層次的不斷加深,社會對計算機軟件的需求急劇增長,這就導致了軟件的規(guī)模不斷擴大、復(fù)雜程度不斷提高。如何設(shè)計出大量的滿足用戶需求的高質(zhì)量軟件是軟件工作者所面臨的嚴峻挑戰(zhàn)。作為計算機軟件的主要表現(xiàn)形式,計算機程序不同于其它程序(如:音樂會程序),它是由計算機來執(zhí)行的。這就使得計算機程序的編制(程序設(shè)計)不能完全以人的思維模式和習慣來進行,它往往要受到計算機解決問題的方式和特點的限制。除此之外,要編制出解決各種問題的程序,程序設(shè)計者往往還需要了解與問題領(lǐng)域有關(guān)的知識。這些都給程序設(shè)計帶來一定的難度。有人認為程序設(shè)計是ー門藝術(shù),而藝術(shù)基于的是人的靈感和天賦。對于ー些小型程序的設(shè)計而言,上述的說法可能有一些道理。但是,對于大型、復(fù)雜的程序設(shè)計問題,靈感和天賦是不能很好地解決問題的,幾十年的程序設(shè)計實踐已證明了這一點。不可否認,程序設(shè)計需要靈感和天賦,它們往往在程序的ー些局部設(shè)計上發(fā)揮著作用。但從總體上講,程序設(shè)計是ー門科學,它是有規(guī)律和步驟可循的。通過對程序設(shè)計的基本思想、概念和技術(shù)的學習,再加上必要的訓練和實踐,程序設(shè)計的規(guī)律和步驟是可以掌握的。從程序設(shè)計的發(fā)展歷史來看,程序設(shè)計經(jīng)歷了從采用低級語言到采用高級語言、從以編碼為中心到涉及軟件生存周期的軟件工程、從過程式到面向?qū)ο蟮陌l(fā)展過程。這ー過程體現(xiàn)了人們對程序設(shè)計活動的不斷認識和改進的過程,特別是從過程式程序設(shè)計到面向?qū)ο蟪绦蛟O(shè)計的發(fā)展,體現(xiàn)了人們對以自然的方式來描述和解決問題的需求,它使得解題過程更接近于人的思維方式。本教程以介紹基本的程序設(shè)計思想、概念和技術(shù)為中心,強調(diào)了數(shù)據(jù)結(jié)構(gòu)、算法、過程抽象以及數(shù)據(jù)抽象等重要的程序設(shè)計思想。所介紹的具體內(nèi)容包括:數(shù)據(jù)類型、表達式、循環(huán)、子程序、遞歸、類/對象、繼承、類屬、輸入崎出以及異常處理等。雖然本教程介紹的大部分程序設(shè)計思想、概念和技術(shù)是與語言無關(guān)的,但離開了具體的實現(xiàn)語言,很多內(nèi)容會顯得太抽象,無法體現(xiàn)具體實施過程及其所產(chǎn)生的實際效果。因此,本教程選擇C++作為程序設(shè)計的實現(xiàn)語言。關(guān)于C++語言是否適合作為介紹程序設(shè)計時的實現(xiàn)語言,目前存在不同的看法。有人認為C++太靈活,以至于會使得初學者感到無所適從。本教程之所以選擇C++語言作為實現(xiàn)語言,苜先是因為C++語言是ー種流行的高級語言,很多大都在用C++編寫實際的程序;其次,C++支持大部分基本的程序設(shè)計思想、概念和技術(shù),其中包括對過程式及面向?qū)ο髢煞N程序設(shè)計范型的支持。再有,與其它高級語言相比,C++語言具有簡潔、靈活和高效等特點,這使得一些程序設(shè)計思想、概念和技術(shù)能夠更好的實現(xiàn)。本教程是以介紹基本的程序思想、概念和技術(shù)為主旨,C++服務(wù)于這個主旨,而不是相反,這樣,初學者在使用C++時能夠做到有的放矢。因此,本教程對C++的ー些特殊的、用于解決非主流的程序設(shè)計問題的成分和技巧不予重點介紹。特別地,本教程對一些屬于C++語言“文化”范疇的內(nèi)容不予過分強調(diào)。另外,由于篇幅有限,本教程也不對屬于C++標準庫的內(nèi)容作詳細介紹。本教程既適合于程序設(shè)計的初學者使用,同時,對具有一些程序設(shè)計經(jīng)驗的人也有一定的參考價值。本教程的內(nèi)容分成兩大部分:第一章至第五章為第一部分,它們主要對ー些基本的程序設(shè)計思想、概念和技術(shù)以及過程式程序設(shè)計的基本內(nèi)容進行介紹;第六章至第十二章為第二部分,它們重點介紹面向?qū)ο蟪绦蛟O(shè)計的基本內(nèi)容。第1章介紹ー些與程序設(shè)計有關(guān)的計算機基礎(chǔ)知識,包括計算機的工作模型、軟件開發(fā)的基本過程、程序設(shè)計范型、程序設(shè)計語言等內(nèi)容。另外,還對C++的基本特點和詞法進行了介紹。第2章對作為程序主要成分之一的數(shù)據(jù)及其基本操作進行介紹,包括:基本數(shù)據(jù)類型、常量、變量、操作符及表達式等內(nèi)容。第3章介紹程序的基本流程控制,包括:順序、分支及循環(huán)等控制結(jié)構(gòu),重點對循環(huán)程序設(shè)計進行了深入的闡述。另外,還對程序設(shè)計風格及結(jié)構(gòu)化程序設(shè)計概念進行了介紹。第4章重點介紹?種重要的程序抽象機制:子程序,以及子程序?qū)δ芊纸狻⒅鸩骄绦蛟O(shè)計技術(shù)的支持。內(nèi)容包括:過程抽象、子程序的參數(shù)傳遞機制、變量的局部性與生存期、標識符的作用域、遞歸以及函數(shù)名重載等概念。另外,還對基于多種環(huán)境的程序編寫和程序調(diào)試技術(shù)進行了簡要介紹。第5章介紹用于程序自定義類型的數(shù)據(jù)類型構(gòu)造機制,包括:枚舉、數(shù)組、結(jié)構(gòu)與聯(lián)合、指針和引用等。其中,重點討論了指針類型的作用和使用原則。第6章對作為面向?qū)ο蟪绦蛟O(shè)計核心內(nèi)容的數(shù)據(jù)抽象機制:類/対象進行介紹。主要內(nèi)容包括:什么是面向?qū)ο蟪绦蛟O(shè)計、面向?qū)ο蟪绦蛟O(shè)計的優(yōu)勢、類的定義、類成員的訪問控制、對象的初始化和消亡處理、常量成員、靜態(tài)成員以及友元等。第7章介紹程序設(shè)計語言的ー種重要的多態(tài)機制:操作符重載。主要內(nèi)容包括:操作符重載的需要性和基本原則、操作符重載的方法以及對C++語言的ー些特殊操作符的重載。第8章介紹面向?qū)澫蟪绦蛟O(shè)計對軟件復(fù)用的支持機制:繼承。主要內(nèi)容包括:繼承的作用、單繼承、繼承方式、虛函數(shù)(成員函數(shù)的動態(tài)綁定)、抽象類、多繼承以及面向?qū)澫蟪绦蛟O(shè)計対模塊的支持。第9章重點介紹類屬(泛型)程序設(shè)計的基本內(nèi)容,包括函數(shù)模板和類模板。第10章対程序的輸入/輸出操作進行介紹。主要內(nèi)容包括:基于I/O函數(shù)庫的過程式的輸入/輸出和基于I/O類庫的面向?qū)澫蟮妮斎胼喅觥5?I章対C++的能夠提高程序魯棒性的異常處理機制進行介紹。第12章基于MFC類庫,介紹了面向?qū)澫蟮腤indows應(yīng)用程序基本框架,從中體會面向?qū)澫蟪绦蛟O(shè)計思想和技術(shù)的實際應(yīng)用。本教程中加“*”標記的節(jié)在初次閱讀時可以跳過。本教程的編寫和完成與很多人的幫助是分不開的。首先,要感謝鄭國梁教授対本教程編寫工作的精心指導。在教程內(nèi)容的選取、安排、用語的規(guī)范性等方面,鄭老師都事無巨細地給予了考慮,并檢查了全文(包括教程中的每個例子程序)。還值得一提的是,作者編寫本教程所必備的專業(yè)知識和專業(yè)素質(zhì)是在鄭老師的長期熏陶下獲得的,這些知識和素質(zhì)使得作者能夠完成本教程的編寫。其次,非常感謝尹存燕老師和戴新宇博上在本教程習題的設(shè)計和文字易讀性方面所做的大量工作:非常感謝孫明欣同學對教程內(nèi)容所做的檢查工作,特別是對本教程初稿中一些概念上的模糊與謬誤、內(nèi)容安排的合理性與易讀性以及在遵守C++標準規(guī)范方面所提出的建議;感謝胡吳博士和徐鋒博士,作者對ー些基本概念的理解是在與他們就相關(guān)問題的討論中獲得的。另外,還要感謝機械工業(yè)出版社的溫麗芳總編輯對本教程編寫工作的鼓勵和支持。最后,要感謝我們的家人對本教程編寫工作的理解和支持,教程的編寫占用了大量的本應(yīng)屬于與他們在ー起歡度家庭快樂的時間。感謝所有支持和幫助過本教程編寫工作的人們。由于作者水平有限,加之時間倉促,書中內(nèi)容的錯誤和疏漏在所難免,懇請讀者不吝指出,以便于我們在今后的版本中進行改進。陳家駿南京大學計算機科學與技術(shù)系chenjj@鄭滔南京大學軟件學院zt@2004年4月目錄TOC\o"1-5"\h\z前言 i\o"CurrentDocument"第1章概述 1\o"CurrentDocument".!計算機的工作模型 1硬件結(jié)構(gòu) 1軟件 3\o"CurrentDocument"程序設(shè)計 4\o"CurrentDocument"程序設(shè)計范型 4\o"CurrentDocument"程序設(shè)計語言 5\o"CurrentDocument"程序設(shè)計的步驟 7\o"CurrentDocument"C++語言 9\o"CurrentDocument"C++的特點 10C++程序的基本結(jié)構(gòu) 10C++語言的詞法 11C++程序設(shè)計環(huán)境 14\o"CurrentDocument"小結(jié) 15\o"CurrentDocument"習題 16\o"CurrentDocument"第2章基本數(shù)據(jù)類型和表達式 17\o"CurrentDocument"數(shù)據(jù)類型概述 17\o"CurrentDocument"CII基本數(shù)據(jù)類型 18\o"CurrentDocument"數(shù)據(jù)的表現(xiàn)形式 20常量 21變量 24\o"CurrentDocument"變莖值的輸入 26\o"CurrentDocument"操作符(運算符) 27\o"CurrentDocument"算術(shù)操作符 27\o"CurrentDocument"關(guān)系與邏輯操作符 30位操作符 33\o"CurrentDocument"賦值操作符 36\o"CurrentDocument"其它操作符 37\o"CurrentDocument"表達式 38\o"CurrentDocument"表達式的構(gòu)成與分類 39\o"CurrentDocument"操作符的優(yōu)先級和結(jié)合性 39\o"CurrentDocument"表達式中的類型轉(zhuǎn)換 41\o"CurrentDocument"表達式的副作用問題 42\o"CurrentDocument"表達式結(jié)果的輸出 42\o"CurrentDocument"小結(jié) 43\o"CurrentDocument"習題 43\o"CurrentDocument"第3章程序的流程控制ーー語句 45\o"CurrentDocument"語句的分類 45\o"CurrentDocument"表達式語句 46\o"CurrentDocument"復(fù)合語句 47\o"CurrentDocument"選擇語句 48\o"CurrentDocument"ifin’句 48\o"CurrentDocument"switch格句 54\o"CurrentDocument"循環(huán)(重復(fù))語句 57\o"CurrentDocument"while語’ロJ 57\o"CurrentDocument"do-while用句 58\o"CurrentDocument"for語句 59\o"CurrentDocument"三種循環(huán)語句的使用原則 61\o"CurrentDocument"循環(huán)程序設(shè)計實例 64\o"CurrentDocument"轉(zhuǎn)移語句 70\o"CurrentDocument"break語句 70\o"CurrentDocument"continue格句 71\o"CurrentDocument"goto語句 73\o"CurrentDocument"空語句 74\o"CurrentDocument"程序設(shè)計風格 75\o"CurrentDocument"結(jié)構(gòu)化程序設(shè)計 76關(guān)于goto語句 76\o"CurrentDocument"小結(jié) 77\o"CurrentDocument"習題 78\o"CurrentDocument"第4章過程抽象 函數(shù) 80\o"CurrentDocument"子程序 80過程抽象 80\o"CurrentDocument"子程序間的數(shù)據(jù)傳輸 81\o"CurrentDocument"函數(shù) 82\o"CurrentDocument"函數(shù)的定義 82\o"CurrentDocument"函數(shù)的調(diào)用 85\o"CurrentDocument"函數(shù)的荽數(shù)傳遞 87\o"CurrentDocument"變量的局部性 89\o"CurrentDocument"全局變量與局部變量 89\o"CurrentDocument"變量的存儲分配(生存期) 90\o"CurrentDocument"?基于棧的函數(shù)調(diào)用的實現(xiàn) 93C++程序的多模塊結(jié)構(gòu) 95\o"CurrentDocument"懷識符的作用域 97\o"CurrentDocument"名空間(namespace) 103\o"CurrentDocument"遞歸函數(shù) 105\o"CurrentDocument"遞歸函數(shù)的定義 105\o"CurrentDocument"遞歸函數(shù)的作用 106\o"CurrentDocument"遞歸與循環(huán)的選擇 108\o"CurrentDocument"遞歸困數(shù)買例 109\o"CurrentDocument"函數(shù)名重載 111\o"CurrentDocument"帶缺省值的形式參數(shù) 114\o"CurrentDocument"內(nèi)聯(lián)函數(shù) 116\o"CurrentDocument"條件編譯 119\o"CurrentDocument"基于多環(huán)境的程序編制 119程丿于調(diào)試 122\o"CurrentDocument"標準庫函數(shù) 123\o"CurrentDocument"小結(jié) 124\o"CurrentDocument"習題 125\o"CurrentDocument"第5章 構(gòu)造數(shù)據(jù)類型 127\o"CurrentDocument"枚舉類型 127\o"CurrentDocument"數(shù)組類型 130一ー維數(shù)組 131二維數(shù)組 137\o"CurrentDocument"數(shù)組的應(yīng)用 141結(jié)構(gòu) 148\o"CurrentDocument"聯(lián)合(共同體) 154\o"CurrentDocument"指針類型 158\o"CurrentDocument"指針的基本概念 158\o"CurrentDocument"指針作為形參類型 164指針與動態(tài)變量 169\o"CurrentDocument"指針與數(shù)組 177函數(shù)指針 180?多級指針 182\o"CurrentDocument"引用類型 184\o"CurrentDocument"小結(jié) 186\o"CurrentDocument"習題 186第6章數(shù)據(jù)抽象ーー類 錯誤!未定義書簽。從面向過程到面向?qū)ο?錯誤!未定義書簽。什么是面向?qū)ο蟪绦蛟O(shè)計 錯誤!未定義書簽。為什么要面向?qū)ο?錯誤!未定義書簽。面向?qū)ο蟪绦蛟O(shè)計的基本內(nèi)容 錯誤!未定義書簽。類的定義 錯誤!未定義書簽。數(shù)據(jù)成員 錯誤!未定義書簽。成員函數(shù) 錯誤!未定乂書簽。成員的訪問控制:信息隱藏 錯誤!未定義書簽。對象 錯誤!未定義書簽。對象的創(chuàng)建和標識 錯誤!未定義書簽。對象的操作 錯誤!未定義書簽。this指針 錯誤!未定義書簽。對象的初始化和消亡前處理 錯誤!未定義書簽。構(gòu)造函數(shù)與析構(gòu)函數(shù) 錯誤!未定義書簽。成員對象的初始化 錯誤!未定義書簽。拷貝構(gòu)造函數(shù) 錯誤!未定義書簽。const成員函數(shù) 錯誤! 未定義書簽。靜態(tài)成員 錯誤!未定義書簽。友元 錯誤!未定義書簽。小結(jié) 錯誤!未定義書簽。習 4."^^! 乂45^^0第7章操作符重載 錯誤!未定義書簽。操作符重載的需要性和基本原則 錯誤!未定義書簽。作為成員函數(shù)重載操作符 錯誤!未定義書簽。作為全局(友元)函數(shù)重載操作符 錯誤!未定義書簽。幾個特殊操作符的重載 錯誤!未定義書簽。賦值操作符= 錯誤!未定義書簽。數(shù)組元素訪問操作符(或下標操作符)ロ 錯誤!未定義書簽。類成員訪問操作符ー〉 錯誤!未定義書簽。動態(tài)存儲分配與去配操作符new與delete 錯誤!未定義書簽。自定義類型轉(zhuǎn)換操作符 錯誤!未定義書簽。函數(shù)調(diào)用操作符〇 錯誤!未定義書簽。,]、纟ロ 4ロ?^^! 7^,定義習題 錯誤!未定義書簽。第8章繼承ーー派生類 錯誤!未定義書簽。繼承的概念 錯誤!未定義書簽。單繼承 錯誤!未定義書簽。單繼承的定義 錯誤!未定義書簽。在派生類中對基類成員的訪問 錯誤!未定義書簽。繼承方式 錯誤!未定義書簽。派生類對象的初始化和賦值操作 錯誤!未定義書簽。單繼承的實例 錯誤!未定義書簽。虛函數(shù) 錯誤!未定義書簽。多態(tài)性 錯誤!未定義書簽。虛函數(shù) 錯誤!未定義書簽。純虛函數(shù)和抽象類 錯誤!未定義書簽。?虛函數(shù)動態(tài)綁定的實現(xiàn) 錯誤!未定義書簽。多繼承 錯誤!未定義書簽。多繼承的需要性 錯誤!未定義書簽。多繼承的定義 錯誤!未定義書簽。名沖突 錯誤!未定義書簽。重復(fù)繼承ーー虛基類 錯誤!未定義書簽。類作為模塊 錯誤!未定義書簽。類模塊的組成 錯誤!未定義書簽。*Demeter法則 錯誤!未定義書簽。小結(jié) 錯誤!未定義書簽。習題 錯誤!未定義書簽。第9章類屬設(shè)施ーー模板 錯誤!未定義書簽。函數(shù)模板 錯誤!未定乂書簽。類模板 錯誤!未定義書簽。模板的復(fù)用 錯誤!未定義書簽。小結(jié) 錯誤!未定義書簽。習題 錯誤!未定義書簽。第10章輸入/輸出(I/O) 錯誤!未定義書簽。概述 錯誤!未定義書簽。控制臺I/O 錯誤!未定義書簽。基于I/O函數(shù)庫的控制臺I/O 錯誤!未定義書簽。基于I/O類庫的控制臺I/O 錯誤!未定義書簽。文件I/O 錯誤!未定義書簽。基于I/O函數(shù)庫的文件I/O 錯誤!未定義書簽。基于1/O類庫的文件I/O 錯誤!未定義書簽。字符串I/O 錯誤!未定義書簽。小結(jié) 錯誤!未定義書簽。第11章;常處理 錯誤!未定義書簽。異常的概念 錯誤!未定義書簽。C++異常處理機制 錯誤!未定義書簽。try、throw以及cateh語句 錯誤!未定義書簽。異常處理的嵌套 錯誤!未定義書簽。小結(jié) 錯誤!未定義書簽。習題 錯誤!未定義書簽。第12章實例ーー面向?qū)ο蟮腤indows應(yīng)用程序框架 錯誤!未定義書簽。Windows應(yīng)用程序的基本結(jié)構(gòu) 錯誤!未定義書簽。應(yīng)用程序的用戶界面 錯誤!未定義書簽。消息驅(qū)動的程序結(jié)構(gòu) 錯誤!未定義書簽。MFC類庫(MicrosoftFoundationClasslibrary) 錯誤!未定義書簽。面向?qū)ο蟮腤indows應(yīng)用程序結(jié)構(gòu) 錯誤!未定義書簽。MFC對面向?qū)ο蟮腤indows應(yīng)用程序的支持 錯誤!未定義書簽。VisualC++的應(yīng)用向?qū)?AppWizard)和類向?qū)?ClassWizard)錯誤!未定義書簽。小結(jié) 錯誤!未定義書簽。習題 錯誤!未定義書簽。圖表索引 錯誤!未定義書簽。參考文獻 錯誤!未定義書簽。附錄ーASCII字符集及其編碼 錯誤!未定義書簽。第1章概述自1946年第一臺電子計算機(ENIAC)問世以來,計算機在理論、技術(shù)以及應(yīng)用等方面有了很大的發(fā)展。特別是計算機的應(yīng)用,它已從早期的數(shù)值計算應(yīng)用拓廣到現(xiàn)在的大量的非數(shù)值計算應(yīng)用,如:管理信息系統(tǒng)、文字處理系統(tǒng)、基于Internet的Web瀏覽器等。現(xiàn)在,計算機已經(jīng)滲透到人類社會活動的各個領(lǐng)域并發(fā)揮著巨大的作用。一臺計算機由硬件和軟件兩部分構(gòu)成。硬件是指計算機的物理構(gòu)成,即構(gòu)成計算機的元器件和設(shè)備。軟件是指計算機程序以及相關(guān)的文檔。硬件是計算機的物質(zhì)基礎(chǔ),軟件是計算機的靈魂。沒有硬件就沒有計算機,但是,如果只有硬件沒有軟件,可以說計算機什么事情也做不了。要想用計算機來解決各種問題,必須要有相應(yīng)的軟件。從某種意義上講,一臺計算機的性能主要山硬件決定,而它的功能則主要是由軟件來提供。隨著計算機應(yīng)用領(lǐng)域的不斷擴大、應(yīng)用層次的不斷加深,社會對計算機軟件的需求急劇增長,這就導致了軟件的規(guī)模不斷擴大、復(fù)雜程度不斷提高。如何設(shè)計出大量的滿足用戶需求的髙質(zhì)量軟件是軟件工作者所面臨的嚴峻挑戰(zhàn)。計算機的工作模型計算機程序不同于其它程序(如:音樂會程序),它是由計算機來執(zhí)行的,計算機程序的編制(程序設(shè)計)通常要考慮到計算機解決問題的方式和特點。因此,要進行程序設(shè)計,就必要對計算機的工作模型有一定的了解。硬件結(jié)構(gòu)雖然現(xiàn)在計算機硬件所提供的計算能力與早期的計算機相比有了很大的提高,但是,目前大部分計算機基本上采用的還是傳統(tǒng)的馮?諾依曼(vonNeumann)體系結(jié)構(gòu),即存儲程序式結(jié)構(gòu)。圖1-1給出了馮?諾依曼計算機的硬件構(gòu)成。圖1-1典型的計算機硬件組成1、中央處理器(CentralProcessingUnit)?簡稱CPUCPU構(gòu)成了計算機的核心部件,它用于執(zhí)行計算機指令以完成計算任務(wù)。CPU由控制器、運算器以及寄存器等構(gòu)成。控制器負責從內(nèi)存中取指令并根據(jù)指令發(fā)出控制信號以引起其它部件的動作。運算器執(zhí)行運算指令所規(guī)定的運算。寄存器主要用于記錄下一條指令的內(nèi)存地址、當前指令的執(zhí)行狀態(tài)以及暫時保存指令的計算結(jié)果供下ー(幾)條指令使用,其作用主要是減少訪問內(nèi)存的次數(shù),提高指令的執(zhí)行效率。2、內(nèi)部存儲器或主存儲器(Memory),簡稱內(nèi)存內(nèi)存用于存儲計算機程序(指令和數(shù)據(jù))。內(nèi)存由許多存儲單元構(gòu)成,存儲單元的大小視計算機的規(guī)格而定。對于微型計算機而言,內(nèi)存單元的大小一般為ー個字節(jié)(Byte,8位二進制數(shù))。每個存儲單元都有一個地址,對存儲單元的訪問(使用)是通過其地址來進行的。與CPU內(nèi)的寄存器相比,內(nèi)存的容量(內(nèi)存單元的數(shù)目)要大得多,但指令訪間內(nèi)存單元所花費的時間比訪問寄存器要多得多。3、外圍設(shè)備(PeripheralDevices)1簡稱外設(shè)外設(shè)提供了計算機與外界的接口,主要用于計算機的輸入/輸出以及為計算機提供大容量的信息存儲。外設(shè)包括:輸入設(shè)備、輸出設(shè)備以及外部存儲器。鍵盤和鼠標器等屬于輸入設(shè)備;顯示器和打印機等屬于輸岀設(shè)備。外部存儲器(簡稱外存)是大容量的低速存儲部件(與內(nèi)存相比),用于永久性地存儲程序、數(shù)據(jù)以及各種文檔等信息。外存包括:軟盤、硬盤、光盤、磁帶等。存儲在外存中的信息通常以文件形式進行組織和訪問。外存與內(nèi)存除了在容量和速度上不同外,它們的另一個區(qū)別在于:內(nèi)存中存儲的是正在運行的程序和正在使用的數(shù)據(jù),而外存中存儲的則是大量的、不正在使用程序和數(shù)據(jù)。馮?諾依曼計算機的工作模型是:待執(zhí)行的程序從外存裝入到內(nèi)存中,CPU從內(nèi)存中逐條地取程序中的指令執(zhí)行;程序執(zhí)行中所需要的數(shù)據(jù)從內(nèi)存或從外設(shè)中獲得,程序執(zhí)行中產(chǎn)生的中間結(jié)果保存在內(nèi)存中,程序的執(zhí)行結(jié)果通過外設(shè)輸出。上述計算過程的本質(zhì)是通過不斷地改變程序的狀態(tài)來實現(xiàn)計算,程序的狀態(tài)由內(nèi)存單元的數(shù)據(jù)構(gòu)成,狀態(tài)的轉(zhuǎn)換是由指令來實現(xiàn)。CPU所能執(zhí)行的指令通常有:算術(shù)指令。實現(xiàn)加、減、乘、除等運算。比較指令。比較兩個操作數(shù)的大小。數(shù)據(jù)傳輸指令。實現(xiàn)CPU的寄存器、內(nèi)存以及外設(shè)之間的數(shù)據(jù)傳輸。執(zhí)行流程控制指令。用于確定下一條指令的內(nèi)存地址,包括轉(zhuǎn)移、循環(huán)以及子程序調(diào)用/返回等指令。通常情況下,CPU從某個內(nèi)存地址開始依次取指令來執(zhí)行,執(zhí)行流程控制指令可以用來改變程序順序執(zhí)行的行為。由于構(gòu)成計算機的各個部件存在速度上的差別,快速部件往往要花費大量的時間等待慢速部件的操作,因此,在馮?諾依曼計算機中存在著幾個影響程序執(zhí)行效率的瓶頸,它主要體現(xiàn)在CPU與內(nèi)存之間以及內(nèi)存與輸入輪出設(shè)備之間的數(shù)據(jù)傳輸。現(xiàn)在的計算機中往往利用程序執(zhí)行和対數(shù)據(jù)訪問所具有的局部性特征,通過緩存機制來解決部件之間速度不匹配問題,從而提高計算機的整體性能。緩存中存儲的是近期用過的、今后可能還要用到的ー些內(nèi)容。例如,現(xiàn)代的計算機大都在CPU中為內(nèi)存提供高速緩存(memorycache);在內(nèi)存中為外存提供髙速緩存(diskcache)。軟件計算機硬件只是提供了執(zhí)行存儲在內(nèi)存中指令的能力,而執(zhí)行的指令是需要人來提供的。也就是說,計算機硬件為計算機提供了物質(zhì)基礎(chǔ),但它必須通過計算機軟件來發(fā)揮作用。計算機軟件是計算機系統(tǒng)中的程序以及有關(guān)的文檔。程序是對計算任務(wù)的處理對象(數(shù)據(jù))與處理規(guī)則(算法)的描述;文檔是為了便于人理解程序所需的資料說明,供程序開發(fā)與維護使用。軟件可以分為;系統(tǒng)軟件、支撐軟件和應(yīng)用軟件。系統(tǒng)軟件居于計算機系統(tǒng)中最靠近硬件的ー級,它與具體的應(yīng)用領(lǐng)域無關(guān),其它軟件一般要通過系統(tǒng)軟件發(fā)揮作用,如操作系統(tǒng)就屬于系統(tǒng)軟件。支撐軟件是指支持軟件開發(fā)與維護的軟件,一般由軟件開發(fā)人員使用,如軟件開發(fā)環(huán)境就是典型的支撐軟件。應(yīng)用軟件是指用于特定領(lǐng)域的專用軟件,如;人口普查軟件、財務(wù)軟件等。圖1-2給出了計算機軟件的分類。圖1-2計算機軟件的分類ー個軟件從無到有,一直到最后的消亡(報廢),通常要經(jīng)歷ー個過程,這個過程稱為軟件的生存周期。軟件生存周期分成若干階段:軟件需求分析、軟件設(shè)計、編程實現(xiàn)、測試以及運行與維護。軟件需求分析的主要任務(wù)是明確待實現(xiàn)的軟件要解決什么問題,即做什么,給出軟件的需求說明。軟件設(shè)計是根據(jù)軟件的需求說明給出抽象的解決方案(設(shè)計說明),它包括概要設(shè)計和詳細設(shè)計。概要設(shè)計是指軟件的整體結(jié)構(gòu)設(shè)計;詳細設(shè)計是指抽象的數(shù)據(jù)結(jié)構(gòu)和算法描述。編程實現(xiàn)是指根據(jù)軟件設(shè)計說明,采用某種程序設(shè)計語言書寫程序。測試是對書寫好的程序進行測試,確認其是否滿足所規(guī)定的需求。運行與維護是指使用軟件并在使用過程中發(fā)現(xiàn)和改正程序中的錯誤。值得一提的是,在維護工作上的投入往往要占整個軟件生存周期的很大一部分,這是因為只要軟件在使用,就需要對它進行維護。早期的軟件開發(fā)工作主要花費在編程實現(xiàn)階段,并且采用的是個體的小作坊開發(fā)模式。隨著計算機應(yīng)用領(lǐng)域的不斷擴大和應(yīng)用層次的不斷加深,使得軟件的規(guī)模不斷擴大、軟件的復(fù)雜度不斷提高,早期的軟件開發(fā)模式難以駕馭軟件開發(fā)過程,程序的正確性難以保證,軟件生產(chǎn)率急劇下降,出現(xiàn)了“軟件危機”。為了解決軟件危機,軟件工程概念應(yīng)運而生,其主要思想是采用工程方法來開發(fā)軟件。在軟件工程中,軟件開發(fā)工作的中心從實現(xiàn)階段轉(zhuǎn)移到軟件需求分析、設(shè)計和維護階段,并且強調(diào)對軟件開發(fā)過程的管理和加強各個階段的文檔制作。方法和工具構(gòu)成了軟件工程的兩大支柱,它們貫穿于軟件開發(fā)過程,對軟件工程思想提供具體的支持。程序設(shè)計簡單地說,程序設(shè)計就是為計算機編制程序的過程,它涉及程序設(shè)計方法和程序設(shè)計語言等方面的內(nèi)容。從現(xiàn)代軟件工程的角度來講,程序設(shè)計是指軟件生存周期中編程實現(xiàn)階段的工作。而實際上,由于程序設(shè)計概念的出現(xiàn)早于軟件工程,因此,通常所說的程序設(shè)計包含了軟件生存周期中其它階段的ー些工作,只是更多地考慮實現(xiàn)技術(shù)而已。因此,不能把程序設(shè)計僅僅理解成用某種語言來實現(xiàn)設(shè)計好的軟件,其中還必須考慮需求分析、軟件設(shè)計、測試以及維護等ー些問題。程序設(shè)計范型程序設(shè)計的本質(zhì)就是對計算進行描述,這里所講的計算是指廣義上的計算,而不是簡單地指加、減、乘、除等算術(shù)運算。以不同的計算模型來對計算進行描述就形成了不同的程序設(shè)計范型(ProgrammingParadigms),目前存在若干種程序設(shè)計范型,典型的程序設(shè)計范型有:過程式、對象式(面向?qū)ο螅⒑瘮?shù)式以及邏輯式等。1、過程式過程式程序設(shè)計是ー種以功能為中心、基于功能分解的程序設(shè)計范型。ー個過程式程序由一些子程序構(gòu)成,每個子程序?qū)?yīng)ー個子功能,它實現(xiàn)了功能抽象。子程序描述了一系列的操作,它是操作的封裝體。過程式程序的執(zhí)行過程體現(xiàn)為ー系列的子程序調(diào)用。在過程式程序中,數(shù)據(jù)處于附屬地位,它獨立于子程序,在子程序調(diào)用時作為參數(shù)傳給子程序使用。下面的經(jīng)典公式刻劃了過程式程序設(shè)計的本質(zhì)特征:程序=算法+數(shù)據(jù)結(jié)構(gòu)上述公式中的算法是指對數(shù)據(jù)的加工步驟的描述,面數(shù)據(jù)結(jié)構(gòu)則是對算法所加工的數(shù)據(jù)描述。早期的程序設(shè)計大都采用了過程式程序設(shè)計范型,它與馮?諾依曼計算模型有著直接的對應(yīng)。過程式程序設(shè)計對程序功能的描述比較清晰,所描述的計算過程容易理解。過程式程序設(shè)計的不足之處在于:數(shù)據(jù)與操作分離,缺乏對數(shù)據(jù)的保護;功能會隨著需求的改變而發(fā)生變化,而功能的變化往往會導致整個程序結(jié)構(gòu)的變動;子程序往往是針對某個應(yīng)用而設(shè)計的,它們很難用于其它應(yīng)用程序,導致程序難以復(fù)用。另外,過程式程序設(shè)計難以駕馭大型、復(fù)雜系統(tǒng)的設(shè)計、實現(xiàn)和維護。2,對象式(面向?qū)ο螅ο笫匠绦蛟O(shè)計是ー種以數(shù)據(jù)為中心、基于數(shù)據(jù)抽象的程序設(shè)計范型。對象式程序設(shè)計通常稱為面向?qū)ο蟪绦蛟O(shè)計。ー個面向?qū)ο蟪绦蛴?些對象構(gòu)成,對象是由一些數(shù)據(jù)及可施于這些數(shù)據(jù)上的操作所構(gòu)成的封裝體。對象的特征由相應(yīng)的類來描述,ー個類可以從其它的類繼承。面向?qū)ο蟪绦虻膱?zhí)行過程體現(xiàn)為各個對象之間相互發(fā)送和處理消息。面向?qū)ο蟪绦蚩珊唴g地表示成下面的公式:程序=對象/類+對象/類+...對象/類=數(shù)據(jù)+操作在面向?qū)ο蟪绦蛟O(shè)計中,把數(shù)據(jù)和對數(shù)據(jù)的操作封裝在?起,對數(shù)據(jù)的操作必須通過相應(yīng)的對象來進行,從而加強了數(shù)據(jù)的保護。對象是相對穩(wěn)定的實體,由對象構(gòu)成的程序能夠適應(yīng)軟件需求的變化,易于維護。某個領(lǐng)域中的對象往往具有通用性,它們可以用于該領(lǐng)域中類似的系統(tǒng)中,因此,面向?qū)ο蟪绦蛟O(shè)計對軟件復(fù)用有較好的支持。另外,面向?qū)ο蟪绦蛟O(shè)計范型是對問題領(lǐng)域活動的直接模擬,其中的對象往往對應(yīng)著問題空間中的有形或無形的實體,它使得解題空間與問題空間有自然的對應(yīng)關(guān)系,從而有利于對大型、復(fù)雜問題給出解決方案,使得程序容易設(shè)計、理解與維護。面向?qū)ο蟪绦蛟O(shè)計的不足之處在于:對程序的整體功能描述不明顯;程序會包含較多的冗余信息,這對小型應(yīng)用系統(tǒng)有時不合適:程序效率有時不高。3、函數(shù)式與邏輯式函數(shù)式程序設(shè)計是圍繞函數(shù)及函數(shù)應(yīng)用(FunctionApplication)來進行,它基于了遞歸函數(shù)理論和lambda演算,其中,函數(shù)也被作為值來看待。邏輯程序設(shè)計是把程序組織成一組事實和一組推理規(guī)則,它基于的是謂詞演算(PredicateCalculus),上述兩種程序設(shè)計范型常用于人工智能領(lǐng)域的程序開發(fā)。目前,使用較廣泛的是過程式和面向?qū)ο筮@兩種程序設(shè)計范型,它們已成為現(xiàn)在的主流程序設(shè)計范型,適合于解決大部分的實際應(yīng)用問題,已被廣大的程序設(shè)計者所熟悉和采用。因此,本教程重點圍繞這兩種程序設(shè)計范型介紹程序設(shè)計的基本思想和技術(shù)。函數(shù)式與邏輯式程序設(shè)計范型將在計算機專業(yè)的ー些后續(xù)課程(如:人工智能)中進行介紹。程序設(shè)計語言程序設(shè)計的結(jié)果必然要用ー種能被計算機接受的語言表示出來,即編程實現(xiàn)。現(xiàn)在的程序語言(用于編程的語言)有很多,根據(jù)它們與計算機指令系統(tǒng)和人們解決問題所采用的描述語言(如:數(shù)學語言)的接近程度,常常把程序語言分為:低級語言和高級語言。1、低級語言低級語言是指與特定計算機體系結(jié)構(gòu)密切相關(guān)的程序語言,即,它是指特定計算機能夠直接理解的語言(或與之直接對應(yīng)的語言),如:機器語言和匯編語言。機器語言采用指令編碼和數(shù)據(jù)的存儲位置來表示操作以及操作數(shù);而匯編語言是用符號名來表示操作和操作數(shù)位置,以增加程序的易讀性。用機器語言寫的程序可以直接在計算機上執(zhí)行,而用匯編語言寫的程序必須翻譯成機器語言程序才能執(zhí)行,翻譯工作可由一個計算機程序來自動完成,該翻譯程序被稱為匯編程序。早期的程序設(shè)計大都采用低級語言來進行。低級語言的優(yōu)點在于:寫出的程序效率比較高,包括執(zhí)行速度快和占用空間少。其缺點是:程序難以設(shè)計、理解與維護,難以保證程序的正確性。另外,低級語言程序難以從ー種型號的計算機拿到(移植)另一種型號的計算機上運行,這是因為不同型號計算機的指令系統(tǒng)是有差別的。2、高級語言高級語言是指人容易理解和有利于人對解題過程進行描述的程序語言,通常所講的程序設(shè)計語言往往指的是高級語言。例如,對于計算a+b*c-d的值,用匯編語言可寫成:movax,bmulax,caddax,asubax,dmovr,ax而用高級語言可寫成:r=a+b*c-d可見,用高級語言來書寫程序比較簡潔,同時也使得程序容易設(shè)計和理解。程序設(shè)計者不必考慮很多計算機硬件所基于的概念,如寄存器等,而是以熟悉的數(shù)學公式來表達程序設(shè)計的結(jié)果。用高級語言書寫的程序須翻譯成機器語言程序才能在計算機上運行。翻譯方式有兩種:編譯與解釋。編譯是指把高級語言程序(稱為源程序)首先翻譯成功能上等價的機器語言程序(稱為目標代碼程序)或匯編語言程序(再通過匯編程序把它翻譯成目標代碼程序),然后執(zhí)行目標代碼程序,在目標代碼程序的執(zhí)行中不再需要源程序。解釋則是指對源程序中的語句進行逐條翻譯并執(zhí)行,翻譯完了程序也就執(zhí)行完了,這種翻譯方式不產(chǎn)生目標程序。一般來說,編譯執(zhí)行比解釋執(zhí)行效率要高。把高級語言程序翻譯成機器語言程序的工作一般由程序來實現(xiàn),根據(jù)翻譯方式可把翻譯程序分為編譯程序和解釋程序。高級語言的優(yōu)點在于:程序容易設(shè)計、理解與維護,容易保證程序正確性。特別地,用高級語言寫的程序與所采用的具體計算機的指令系統(tǒng)無關(guān),因此,容易把它們移植到其它不同型號的計算機中執(zhí)行,當然,目標計算機中必須要有相應(yīng)語言的編譯或解釋程序。高級語言的缺點是:用其編寫的程序相対于用低級語言編寫的程序效率要低。程序的效率對于早期的計算機是非常重要的。因為,早期的計算機硬件速度慢、存儲空間小,程序的效率必須通過對程序精雕細琢來提高。由于早期的計算機應(yīng)用面窄、復(fù)雜度低,用低級語言編制程序的潛在缺陷未能體現(xiàn)出來。當程序規(guī)模和復(fù)雜度增大以后,程序設(shè)計的難易程度和程序的正確性及易維護性問題逐漸顯現(xiàn)出來,對于?個難以設(shè)計、經(jīng)常出錯和難以維護的程序,盡管它的效率很高,也是不會被接受的。另外,用高級語言進行程序設(shè)計也可使得設(shè)計者能以ー種不同于計算機硬件所提供的計算模型來給出解決方案的描述,即基于ー種虛擬機來進行程序設(shè)計,翻譯程序?qū)崿F(xiàn)從虛擬機模型到實際計算機模型之間的語義(概念)轉(zhuǎn)換。目前,典型的高級語言有:FORTRAN,COBOL,Basic,Pascal,C,Ada、Modula-2,Lisp、Prolog>Simula,Smalltalk,C++,Java等。從不同的角度,可對這些語言進行分類,例如:按照應(yīng)用類型,可分為科學計算語言、商務(wù)處理語言、系統(tǒng)程序語言等;按照所支持的程序設(shè)計范型,可分為:過程式語言、面向?qū)ο笳Z言,函數(shù)式語言、邏輯式語言以及混合式語言等。對于一個程序設(shè)計語言,通常會涉及該語言的設(shè)計、實現(xiàn)以及應(yīng)用。語言的設(shè)計是指語言的定義,包括語言的語法、語義和語用等。其中,語法是指構(gòu)作結(jié)構(gòu)正確的語言成分所需遵循的規(guī)則集合;語義是指用語言各個成分的含義;語用是指語言成分的使用場合及所產(chǎn)生的實際效果。語言的實現(xiàn)是指在某種計算機平臺上寫出語言的翻譯程序,針對某種語言可以有多種實現(xiàn)。語言的應(yīng)用是指用語言來編寫(設(shè)計)解決各種問題的程序。語言的設(shè)計、實現(xiàn)和應(yīng)用是三個相對獨立的工作,它們通常由不同的人來承擔。例如,C++是BjarneStroustrup設(shè)計的,VisualC++和C++Builder分別是Microsoft公司和Borland公司給出的C++語言的兩種實現(xiàn),而由許多人用C++編寫的程序遍布于大量的計算機應(yīng)用領(lǐng)域。雖然語言的設(shè)計、實現(xiàn)和應(yīng)用相對獨立,但它們也存在著聯(lián)系。例如,語言的設(shè)計者在設(shè)計ー個語言的時候,它要考慮所設(shè)計的一些語言成分是否是程序設(shè)計中非常需要的以及是否容易實現(xiàn)等問題;語言的應(yīng)用者在使用某個語言成分時往往需要考慮語言設(shè)計者提供該語言成分的初衷是什么以及該語言成分的實現(xiàn)效率是否高等問題。本教程是關(guān)于程序設(shè)計的,它主要涉及語言的應(yīng)用,但要用一個語言設(shè)計出高質(zhì)量的程序,有時必須要了解語言的設(shè)計思想和實現(xiàn)技術(shù)。3、程序語言的發(fā)展趨勢程序語言作為表達解題過程的工具,往往也規(guī)定了解決問題的方式。雖然高級語言比低級語言更容易描述解題過程,但從本質(zhì)上講,目前的髙級語言大都只是在抽象級上比低級語言略微高了一些而一,它們大都仍然是基于馮?諾依曼計算機的計算模型的,采用這些語言還必須按照計算機解決問題的方式來描述解題過程,程序設(shè)計仍然非常困難。因此,人們還在努力設(shè)計出抽象級更高的語言或讓計算機能夠理解自然語言,使得能夠以更自然的方式來設(shè)計計算機程序。程序設(shè)計的步驟有大認為程序設(shè)計是ー門藝術(shù),而藝術(shù)在很大程度上基于的是大的靈感和天賦,它往往沒有具體的規(guī)則和步驟可循。對于ー些小型程序的設(shè)計,上述的說法可能有一些道理。但是,對于大型、復(fù)雜的程序設(shè)計問題,靈感和天賦是不能很好地解決問題的,幾十年的程序設(shè)計實踐已證明了這一點。程序設(shè)計需要靈感和天賦,它們往往在程序的ー些局部設(shè)計上發(fā)揮著作用。但是,從總體上講,程序設(shè)計是ー門科學,科學的東西是有規(guī)律和步驟可循的。程序設(shè)計一般遵循以下步驟:1、明確問題用計算機來解決實際問題,首先要明確解決什么問題,即:做什么?如果對待解的問題都沒弄清楚或理解錯了,就試圖去解決它,結(jié)果是可想而知的。所以,首先搞清楚要解決的問題并給出問題的明確定義是解決問題的關(guān)鍵。2、系統(tǒng)設(shè)計明確了問題之后,就要考慮如何解決它,即:如何做?由于計算機解決問題方式的本質(zhì)上就是對數(shù)據(jù)進行處理,因此,首先要對待解決的問題進行抽象,抽取出能夠反映出問題本質(zhì)特征的數(shù)據(jù)并對其進行描述,即給出數(shù)據(jù)結(jié)構(gòu)的設(shè)計。然后考慮對設(shè)計好的數(shù)據(jù)如何進行操作從而達到解決問題的目的,即進行算法設(shè)計。不同的程序設(shè)計范型在處置數(shù)據(jù)結(jié)構(gòu)和算法這兩者的關(guān)系上是有所區(qū)別的。在過程式程序設(shè)計中,把數(shù)據(jù)結(jié)構(gòu)設(shè)計和算法設(shè)計分開考慮,程序山算法構(gòu)成,數(shù)據(jù)結(jié)構(gòu)處于附屬地位;而面向?qū)ο蟪绦蛟O(shè)計是把兩者結(jié)合成對象與類來考慮,程序由對象/類構(gòu)成。在本教程后面的內(nèi)容中將會看出:從程序設(shè)計技術(shù)角度講,過程式程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計的本質(zhì)區(qū)別在于,它們從不同的角度對系統(tǒng)進行劃分。過程式程序設(shè)計是從功能的角度劃分系統(tǒng),強調(diào)系統(tǒng)的功能,數(shù)據(jù)處于附屬地位,兩者是分開的。而面向?qū)ο蟪绦蛟O(shè)計則是從對象的角度來進行系統(tǒng)劃分,強調(diào)數(shù)據(jù)的封裝和保護。面向?qū)ο蟪绦蛟O(shè)計中的數(shù)據(jù)封裝、繼承以及多態(tài)等設(shè)施更加有利于程序的設(shè)計、復(fù)用與維護。另外,從待解決的問題中能直接觀察到的往往是ー些對象,以面向?qū)ο竽P蛠斫o出解決方案將會使得解題空間與問題空間有自然的對應(yīng)關(guān)系。一方面,面向?qū)ο蟪绦蛟O(shè)計有利于從問題描述到解決方案的自然過渡,另一方面,它能夠提高解決方案對問題變化的適應(yīng)性。3、用某種語言進行編程在進行數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(或?qū)ο?類設(shè)計)時,往往采用某種與具體程序設(shè)計語言無關(guān)的語言(稱為偽代碼)來進行描述,這樣做的目的是為了避免ー開始就陷入某種程序設(shè)計語言的ー些特殊表示和實現(xiàn)細節(jié)中去。過多地涉及實現(xiàn)細節(jié),不利于從較高抽象層次對問題本質(zhì)的東西進行考慮,它往往會使得對設(shè)計過程難以把握和理解(失去大方向)。當然,用偽代碼描述的解決方案是不能被計算機所接受的,必須要用某種實際的程序語言把它們表示出來,即編程實現(xiàn)。現(xiàn)在的程序設(shè)計語言有很多(上百種),用哪ー種語言來編程呢?從理論上講,雖然各種語言之間存在著或多或少的差別,但它們大多數(shù)都是基于馮?諾依曼體系結(jié)構(gòu)的,它們在表達能力上是等價的,因此,往往對同一個設(shè)計方案,用任何ー種語言都能實現(xiàn)。在實際中,用哪ー種語言來編程往往要受到很多因素的制約。首先,不同的設(shè)計方案往往決定了所采用的語言。例如:對于采用功能分解的設(shè)計方案,用某種過程式程序設(shè)計語言進行編程比較合適;對于面向?qū)ο蟮脑O(shè)計方案,則采用面向?qū)ο蟮某绦蛟O(shè)計語言來實現(xiàn)就顯得比較自然和方便。其次,在眾多語言中,有的效率高、有的容易使用、有的科學計算能力強、有的數(shù)據(jù)處理能力強等等,這些對語言的選擇也有影響。例如;實時系統(tǒng)強調(diào)程序效率;注重開發(fā)周期的應(yīng)用強調(diào)語言的易使用性;天文、氣象等計算密集型應(yīng)用則強調(diào)語言的計算能力;商務(wù)應(yīng)用強調(diào)語言的數(shù)據(jù)處理能力等等。另外,一些非編程技術(shù)上的因素也會影響語言的選擇,這些因素有時往往起決定作用。例如;某公司軟件開發(fā)部門現(xiàn)有的編程、維護人員只熟悉COBOL語言,而待開發(fā)的應(yīng)用可能用C++編程更合適。在這種情況下,有時往往也不選擇C++,這是因為如果選擇C++,則將意味著需要對已有人員進行再培訓或招聘新的編程人員,這些都需要時間和資金投入。如果通過成本估算得出結(jié)論;劃不來,則該公司也會決定放棄C++而采用COBOL。還有,如果用戶指定采用某種語言,那么堅持采用其它語言將預(yù)示項目的告吹。再有,如果采用的計算平臺(計算機)只支持某種語言(有該語言的編譯程序),則選擇其它語言的可能性也不大。選定了語言之后,接著就是要采用該語言把相應(yīng)的設(shè)計具體表示出來,即編程實現(xiàn)。一般來說,普通的程序員就能勝任這一步工作。但是,對于同一個設(shè)計,不同的人會寫出不同風格的程序。風格有好與不好之分,它影響到程序的正確性和易維護性。程序設(shè)計風格取決于編程人員對程序設(shè)計的基本思想、技術(shù)以及語言精髓掌握的程度。良好的程序設(shè)計風格可以通過學習和訓練來獲得。4,測試與調(diào)試程序?qū)懞弥?其中可能含有錯誤。程序錯誤通常有三種:語法錯誤、邏輯(或語義)錯誤以及運行異常錯誤。語法錯誤是指程序沒有按照語言的語法規(guī)則來書寫,這類錯誤可山編譯程序來發(fā)現(xiàn)。邏輯錯誤是指程序沒有完成預(yù)期的功能,運行異常錯誤是指程序?qū)Τ绦蜻\行環(huán)境的非正常情況考慮不足而導致的程序異常終止,這兩類錯誤可能是編程階段導致的,也有可能是設(shè)計階段或問題定義階段的缺陷。程序的邏輯錯誤和運行異常錯誤一般可以通過測試(test)來發(fā)現(xiàn)。測試方法有很多,比如:靜態(tài)測試與動態(tài)測試。靜態(tài)測試是不運行程序,而是通過對程序的靜態(tài)分析,找出邏輯錯誤。動態(tài)測試是利用?些測試數(shù)據(jù),通過運行程序觀察程序的運行結(jié)果是否與預(yù)期的結(jié)果相符。值得注意的是,不管采用何種測試手段,都只能發(fā)現(xiàn)程序有錯,而不能證明程序正確。例如:想要用動態(tài)測試技術(shù)來證明程序沒有錯誤,就必須對所有可能的輸入數(shù)據(jù)來運行程序并觀察運行結(jié)果,這往往是不可能的,并且也沒有必要(所有結(jié)果都知道了還要該程序干什么?)?測試的目的就是要盡可能多地發(fā)現(xiàn)程序中的錯誤。測試工作不一定要等到程序全部編寫完成オ開始進行,可以采取編寫一部分、測試ー部分的方式來進行,最后再對整個程序進行整體測試。即先進行單元測試,再進行集成測試。如果通過測試發(fā)現(xiàn)程序有錯誤,那么就需要找到程序中出現(xiàn)錯誤的位置和原因,即錯誤定位。給錯誤定位的過程稱為調(diào)試(debug)。調(diào)試一般需要運行程序,通過分段觀察程序的階段性結(jié)果來找出錯誤的位置和原因。5,運行維護程序通過測試后就可交付使用了。由于所有的測試手段只能發(fā)現(xiàn)程序中的錯誤,而不能證明程序沒有錯誤,因此,在程序的使用過程中可能會不斷發(fā)現(xiàn)程序中的錯誤。在使用過程中發(fā)現(xiàn)并改正程序錯誤的過程稱為程序的維護。程序維護可分成三類:正確性維護、完善性維護以及適應(yīng)性維護。正確性維護是指改正程序中的錯誤;完善性維護是指根據(jù)用戶的要求使得程序功能更加完善:適應(yīng)性維護是指把程序移植到不同的計算平臺或環(huán)境中。C++語言本教程的主旨是介紹程序設(shè)計的基本思想和技術(shù),C++是介紹這些編程思想和技術(shù)時所采用的工作語言。之所以采用C++,是因為C++是ー個使用廣泛的、支持基本的程序設(shè)計思想和多種范型的程序設(shè)計語言。C++的特點C++是ー個高級語言,它由c語言發(fā)展而來。C語言是一個支持過程式程序設(shè)計的高級語言,它是由貝爾實驗室的DennisRitchie為書寫UNIX操作系統(tǒng)而設(shè)計的?種系統(tǒng)程序設(shè)計語言,由于受到UNIX被廣泛使用的影響,C語言后來成為了一種被普遍地應(yīng)用于各種類型應(yīng)用程序書寫的程序設(shè)計語言。C語言既有高級語言的優(yōu)點,如:提供了類型機制和結(jié)構(gòu)化流程控制成分,同時,它又有低級語言(如匯編語言)才具有的一些描述能力,如:數(shù)據(jù)位操作和內(nèi)存地址操作等。與其它高級語言相比,C語言還具有簡潔、靈活、高效等特點。C++語言是貝爾實驗室的BjarneStroustrup為進行面向?qū)澫蟪绦蛟O(shè)計而設(shè)計的?種語言,它吸收了早期的ー些面向?qū)ο笳Z言(如:Simula和Smalltalk)中許多好的思想。C++保留了C語言的所有成分和特點,并在C語言的基礎(chǔ)上增加了支持面向?qū)ο蟪绦蛟O(shè)計的語言成分。C++語言是C語言的超集,因此,它既支持過程式程序設(shè)計,又支持面向?qū)ο蟪绦蛟O(shè)計,它屬于ー種混合語言。于C語言ー樣,C++語言的主要特點是:靈活和高效。其中的靈活性體現(xiàn)在:對解決同一個問題,C++提供了多種實現(xiàn)方法;其高效體現(xiàn)在:C++的ー些語言成分(如指針等)有利于編譯程序的實現(xiàn)并能產(chǎn)生高效的代碼。另外,C卄很少做運行時刻的合法性檢査(如數(shù)組下標越界等),從而減少了程序運行時的開銷。從某種程度上講,C++的特點又是它的缺點,它對使用者的要求較高。C++的靈活性造成了C++語言不易把握,特別是對程序設(shè)計的初學者,它們往往不知道何時使用何種語言成分來解決何種問題,對語言的使用不當將會造成不良后果。C++的高效也是通過把保證程序正確運行的責任推給了程序設(shè)計者,程序設(shè)計者必須對各種可能導致程序運行錯誤的因素進行仔細考慮和處置。當然,保證程序的正確運行是程序設(shè)計者義不容辭的責任,不過,這要花費程序設(shè)計者很多的精力。而在有些語言中,對可能造成不良后果的ー些做法(如指針運算)就根本不提供,從而減少了產(chǎn)生不正確程序的可能性,當然,這是以犧牲靈活性和效率為代價的。至于如何評價C++語言,本教程作者認為:對掌握了基本程序設(shè)計思想和技術(shù)的程序設(shè)計“高手”來說,它是ー個很好的語言:而對剛剛從事程序設(shè)計的“新手”而言,C++是ー個非常糟糕的語言,即,評價C++應(yīng)該評價使用C++的人的程序設(shè)計素質(zhì)。只有掌握了基本程序設(shè)計思想和技術(shù)的人才能很好地使用C++語言來進行程序設(shè)計。本教程在介紹C++語言時,主要強調(diào)C++對基本程序設(shè)計思想的支持,而對C++的ー些不利于養(yǎng)成良好編程習慣的做法不予重點介紹,尤其是對屬于C++語言“文化”范畸的內(nèi)容不予過分強調(diào)。國際標準化組織(ISO)已于1998年為C++制定了國際標準。本教程中大部分關(guān)于C++的描述是按C++國際標準給出的,有些描述是基于了微軟公司的VisualC++6.0,而該C++的實現(xiàn)并沒有完全按照國際標準來實施,請讀者在閱讀本教程時注意這一點。C++程序的基本結(jié)構(gòu)1、ー個簡單的C++程序為了能對C++程序基本結(jié)構(gòu)有一個總體的印象,下面給出了一個計算兩個數(shù)之和的C++程序://ThisisaC++program#include<iostream>//對使用的C++標準庫中的程序?qū)嶓w進行聲明。usingnamespacestd;//指定使用標準庫的名空間main〇〃主函數(shù){doublex,y;//局部變量定義。cout<<''Entertwofloatnumbers:z/;//輸出至リ顯示器。cin>>x>>y;〃從鍵盤輸入數(shù)據(jù)。doublez=x+y;〃對數(shù)據(jù)進行加法操作。cout<<x<<*+*<<y<<*=1<<z<<endl;//輸出計算結(jié)果。return0;//程序結(jié)朿。}上述程序的運行結(jié)果為:Entertwofloatnumbers:7.29.3Z7.2+9.3=16.52、C++程序的組成邏輯上,ー個C++程序由一些函數(shù)(子程序)、類、全局變量/對象的定義構(gòu)成,其中必須有且僅有一個名字為main的函數(shù)。函數(shù)由函數(shù)名、參數(shù)和返回類型、局部變量/對象的定義以及語句序列構(gòu)成;類由數(shù)據(jù)成員和成員函數(shù)構(gòu)成。變量或?qū)ο蟮亩x可以出現(xiàn)在函數(shù)的外部和內(nèi)部,而語句只能出現(xiàn)在函數(shù)內(nèi)部。C++程序從函數(shù)main開始執(zhí)行。物理上,ー個C++程序可以放在ー個或多個源文件(模塊)中,每個源文件包含ー些函數(shù)、類和外部變量/對象的定義,其中有且僅有一個文件中包含ー個函數(shù)main。每個源文件可以分別編譯。C++語言的詞法ー個語言包括語法、語義和語用,其中的語法包括詞法與句法。詞法是指語言的構(gòu)詞規(guī)則,句法是指由詞構(gòu)成句子(程序)的規(guī)則。下面首先介紹C++的詞法(構(gòu)詞規(guī)則),C++的句法、語義及其語用將在以后的章節(jié)中介紹。1、字符集任何ー個語言都是由一些基本符號構(gòu)成的,這些基本符號的集合就構(gòu)成了相應(yīng)語言的字符集。C++的字符集由26大小寫英文字母、10個數(shù)字以及ー些特殊符號構(gòu)成。(1)大小寫英文字母a?z,A?Z(2)數(shù)字(3)特殊字符4-()[]{}空格橫向制表縱向制表換頁換行2、單詞及詞法規(guī)則單詞由字符集中的字符按照一定規(guī)則構(gòu)成的具有一定意義的最小語法單位。構(gòu)成C++的單詞有:標識符、關(guān)鍵詞、字面常量、操作符以及分隔符等。(1)標識符標識符是由大小寫英文字母、數(shù)字以及下劃線(一)所構(gòu)成的字符序列,第一個字符不能是數(shù)字,如:student,studentnamex_l>_namel等都是合法的標識符。標識符通常用來給程序中的實體命名,程序?qū)嶓w包括:常量、變量、函數(shù)、類型、對象、標號等。在C++程序中,使用一個標識符前必須要對該標識符進行聲明,指出該標識符標識何種程序?qū)嶓w。另外,在使用標識符時應(yīng)注意以下幾點:(a)大小寫字母有區(qū)別,如:abc、Abe與ABC是不同的標識符。(b)下述(2)中的關(guān)鍵詞不能作為用戶自定義的標識符,它們有特殊的作用。(c)具體實現(xiàn)(編譯程序)往往會限制標識符的長度。(d)以兩個下劃線開頭或以ー個下劃線后跟ー個大寫字母開頭的標識符往往在C++語言內(nèi)部實現(xiàn)中用到(如:作為標準庫中的全局標識符),程序中不要用這些標識符作為程序的全局標識符。(e)對不同種類的程序?qū)嶓w最好采用不同風格的標識符,以提高程序的易讀性。關(guān)于上面的(e),不同的編程大員會有不同的命名習慣。下面是本教程所采用的書寫風格:對于符號常量,采用全部大寫的標識符,如:圓周率PI;對于自定義類型,采用單詞的第一個字母大寫,如:StudentType;對于變量/對象和函數(shù),采用小寫字母,如:student、print〇(2)關(guān)鍵詞關(guān)鍵詞是指語言預(yù)定義的標識符,它們有固定的作用和含義,在程序中不能用作其它目的。表1-1列出了C++中的關(guān)鍵詞。除了上述關(guān)鍵詞外,每個C++編譯程序可能還規(guī)定了一些額外的關(guān)鍵詞,在使用C++時必須參考相應(yīng)的語言參考手冊。(3)字面常量(直接量,literal)字面常量用于表示程序中的常量。如:數(shù)值、字符及字符串等。(4)操作符操作符用于描述運算。如:+,-,*,/,>,<,==,!=,>=,<=,||,&&等。(5)分隔符(標點符號)分隔符用于單詞的分割。如:逗號、分號、冒號、卜}等。

表1-1C++關(guān)鍵詞asmautoboolbreakcasecatchcharclassconstconstcastcontinuedefaultdeletedodoubledynamiccastelseenumexplicitexportexternfalsefloatforfriendgotoifinlineintlongmutablenamespacenewoperatorprivateprotectedpublicregisterreinterpretcastreturnshortsignedsizeofstaticstatic_caststructswitchtemplatethisthrowtruetrytypedeftypeidtypenameunionunsignedusingvirtualvoidvolatilewchar_twhile另外,在C++程序的書寫上,上述的單詞有時需要用空白符把它們分開,使得它們在形式上成為獨立的單位。這里的空白符是指:空格符、橫向/縱向制表符、回車符和注釋符,其中,注釋是為了方便程序的理解而加在程序中的文字信息。C++提供了兩種書寫注釋的方法:(a)單行注釋:從符號ッ/’開始到本行結(jié)束。(b)多行注釋:以符號'/*'開始到符號‘*/‘結(jié)束。注釋是給人理解程序用的,它們不構(gòu)成可執(zhí)行程序的一部分,編譯程序在編譯時將忽略程序的注釋部分(多行注釋被看成是ー個空格)。3、語法的形式描述在有些場合下需要對語言語法規(guī)則的精確理解(如語言的定義文本以及編譯程序的實現(xiàn)等),這時就需要對語言的語法規(guī)則進行嚴格地描述。對ー個語言的語法進行精確地描述往往需要采用另ー個形式化語言(稱為元語言)來完成,較常用的形式化語言是ー種稱為BNF(Backus-NaurForm)的描述語言。例如,C++標識符的構(gòu)成規(guī)則可用BNF描述成:<標識符〉::=く非數(shù)字字符〉!<標識符〉く非數(shù)字字符〉!<標識符〉く數(shù)字字符》く非數(shù)字字符>::=_|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|zく數(shù)字字符》::=0111213141516171819其中,“グ,、“〉,,、"「和”:尸,,稱為元語言符號,它們不屬于被描述的語言。“:尸”表示“定義為";“I”表示“或者”;“〈標識符〉”、“〈非數(shù)字〉”以及“〈數(shù)字〉”稱為元語言變量,它們代表被描述語言中的語法實體。另外,BNF也存在ー些擴充形式,例如,在ー些擴充的BNF中增加了:方括號“口”用于表示其中的內(nèi)容可有可無、花括號“{ド用于表示其中的內(nèi)容可以重復(fù)出現(xiàn)多次,等等。由于本教程不是C++的語言定義文本,并且用BNF精確描述的內(nèi)容有時理解起來顯得比較費勁,因此,在本教程中沒有采用嚴格的形式化方法來描述所用到的C++語言成分,而是采用了一種容易理解的混合形式(如:自然語言、流程圖、例子以及簡化了的BNF形式等)來對C++進行描述。C++程序設(shè)計環(huán)境1、C++程序的運行步驟與大多數(shù)程序設(shè)計語言ー樣,要使得一個用C++語言書寫的程序能在計算機上運行,一般要遵循如圖1-3所示的步驟。編輯(.cpp,.h)ラ編譯(.obj)ラ聯(lián)接(.exe)今運行">輸出結(jié)果圖1-3C++程序的運行步驟編輯利用某個編輯程序(如:Windows平臺上的寫字板、記事本、Word等)把C++源程序輸入到計算機中,并作為文件(稱為源文件)保存到外存(如硬盤等)中。C++源文件的文件名通常為:*.cpp和?.h。編譯利用某個C++編譯程序?qū)Ρ4嬖谕獯嬷械腃++源程序進行編譯,編譯結(jié)果作為目標文件保存到外存。目標文件的文件名通常為:*.obj。聯(lián)接由于一個C++程序可以放在多個源文件中,而每個源文件是分別編譯到各自的目標文件的,因此,為了得到ー個完整的可執(zhí)行程序,必須通過ー個聯(lián)接程序把這些目標文件以及程序中用到的一些系統(tǒng)功能所在的目標文件(通常稱為庫文件)聯(lián)接起來,作為ー個可執(zhí)行文件保存到外存。可執(zhí)行文件的文件名通常為:*.exe。運行通過操作系統(tǒng)提供的應(yīng)用程序運行機制,把某個可執(zhí)行文件裝入內(nèi)存,運行其中的可執(zhí)行程序。在上述的編譯、聯(lián)接和運行過程中都有可能發(fā)現(xiàn)程序有錯。如:編譯程序在編譯時發(fā)現(xiàn)源程序中存在語法錯誤;聯(lián)接程序在聯(lián)接目標文件時發(fā)現(xiàn)使用到的函數(shù)或外部變量不存在(外部引用錯);程序運行結(jié)果與預(yù)期的不一致等。這些錯誤都會使得該執(zhí)行過程返回到前面的階段進行修改錯誤,然后從改正錯誤的階段重新開始執(zhí)行過程,這個過程可能要重復(fù)多次,直到程序產(chǎn)生正確結(jié)果為止。2、集成開發(fā)環(huán)境由于上述的C++程序的運行步驟非常麻煩,因此產(chǎn)生了很多集成的C++程序開發(fā)環(huán)境,如:VisualC++,TurboC++,C++Builder等。在這些集成環(huán)境中,往往使用一條命令就能完成所有的步驟,并且,ー些開發(fā)環(huán)境還提供了可視化的程序設(shè)計支持和功能強大的程序動態(tài)調(diào)試等工具。小結(jié)1、計算機由硬件和軟件兩個部分構(gòu)成。硬件是指計算機的物理構(gòu)成,即構(gòu)成計算機的元器件和設(shè)備。軟件是指計算機程序以及相關(guān)的文檔。程序是對計算任務(wù)的處理對象(數(shù)據(jù))與處理規(guī)則(算法)的描述;文檔是為了便于人理解程序所需的資料說明,供程序開發(fā)與維護使用。2、馮?諾依曼(vonNeumann)體系結(jié)構(gòu)計算機由CPU、內(nèi)存以及外設(shè)構(gòu)成,其本質(zhì)是通過CPU執(zhí)行指令(從內(nèi)存獲得)不斷地改變程序的狀態(tài)(內(nèi)存中的數(shù)據(jù))來實現(xiàn)計算的目的。3、軟件可以分為:系統(tǒng)軟件、支撐軟件和應(yīng)用軟件。ー個軟件通常要經(jīng)歷:軟件需求分析、軟件設(shè)計、編程實現(xiàn)、測試以及運行與維護這個生存周期。4、程序設(shè)計就是為計算機編制程序的過程,它涉及程序設(shè)計方法和程序設(shè)計語言等方面的內(nèi)容。5、以不同的計算模型來對計算進行描述就形成了不同的程序設(shè)計范型。典型的程序設(shè)計范型有:過程式、對象式、函數(shù)式以及邏輯式等。目前,使用較廣泛的是過程式和對象式這兩種程序設(shè)計范型。6、程序語言可分為:低級語言和高級語言。低級語言是指與特定計算機體系結(jié)構(gòu)密切相關(guān)的程序語言,它包括機器語言和匯編語言。高級語言是指人容易理解和有利于人對解題過程進行描述的程序語言,通常所講的程序設(shè)計語言往往指的是高級語言。7、與低級語言相比,高級語言的優(yōu)點在于:程序容易設(shè)計、理解與維護,容易保證程序正確性。高級語言程序的執(zhí)行途徑有兩種:編譯與解釋。一般來說,編譯執(zhí)行比解釋執(zhí)行效率要高。8、C++是ー個使用廣泛的、支持基本的程序設(shè)計思想和多種程序設(shè)計范型的程序設(shè)計語言。靈活、高效是它的主要特點。習題1、簡述寄存器、內(nèi)存以及外存的區(qū)別。2、簡述馮?諾依曼計算機的工作模型。3、CPU能執(zhí)行哪些指令?4、什么是軟件?軟件是如何分類的?5、簡述軟件生存周期。6、機器語言、匯編語言以及高級語言的不同之處是什么?7、簡述編譯與解釋的區(qū)別。8、簡述程序設(shè)計的步驟。9、下面哪ー些是合法的C++標識符?extern,_book,Car,car_l,calr,Icar,friend,carl_Car,Car_Type,No.1,12310、簡述C++程序的編譯執(zhí)行過程。在你的C++開發(fā)環(huán)境中運行1.3.2節(jié)中給出的簡單C++程序。第2章基本數(shù)據(jù)類型和表達式數(shù)據(jù)是程序的ー個重要組成部分。從本質(zhì)上講,用計算機解決各種實際問題就是通過用計算機程序?qū)Ψ从硨嶋H問題的一些數(shù)據(jù)進行處理來實現(xiàn)的。為了能在程序中對數(shù)據(jù)進行很好地處理,就必須對所要處理的數(shù)據(jù)的特性進行描述。數(shù)據(jù)的特性包括:數(shù)據(jù)的結(jié)構(gòu)和可施于數(shù)據(jù)的操作(運算)。本章將對C++提供的基本數(shù)據(jù)類型(數(shù)據(jù)的描述)和表達式(數(shù)據(jù)操作的具體實施)進行介紹。數(shù)據(jù)類型概述在程序設(shè)計語言中通過提供數(shù)據(jù)類型機制來描述程序中的數(shù)據(jù)。ー種數(shù)據(jù)類型可以看成由兩個集合構(gòu)成:值集和操作(運算)集。值集描述了該數(shù)據(jù)類型包含哪些值(包括這些值的結(jié)構(gòu));操作集描述了對值集中的值能實施哪些運算。如:整數(shù)類型就是ー種數(shù)據(jù)類型,它的值集就是由整數(shù)所構(gòu)成的集合,它的操作集包括:加、減、乘、除等運算。在計算機上,每ー種數(shù)據(jù)類型的數(shù)據(jù)都有它們特定的存儲方式,由于受到計算機對特定類型數(shù)據(jù)的表示形式和存儲空間的限制,程序設(shè)計語言所提

溫馨提示

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

評論

0/150

提交評論