![Linux環(huán)境C_程序設(shè)計(jì)(板式整齊)_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/15/cd07fad1-8f2b-4abb-89fb-329c3579a6bc/cd07fad1-8f2b-4abb-89fb-329c3579a6bc1.gif)
![Linux環(huán)境C_程序設(shè)計(jì)(板式整齊)_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/15/cd07fad1-8f2b-4abb-89fb-329c3579a6bc/cd07fad1-8f2b-4abb-89fb-329c3579a6bc2.gif)
![Linux環(huán)境C_程序設(shè)計(jì)(板式整齊)_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/15/cd07fad1-8f2b-4abb-89fb-329c3579a6bc/cd07fad1-8f2b-4abb-89fb-329c3579a6bc3.gif)
![Linux環(huán)境C_程序設(shè)計(jì)(板式整齊)_第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/15/cd07fad1-8f2b-4abb-89fb-329c3579a6bc/cd07fad1-8f2b-4abb-89fb-329c3579a6bc4.gif)
![Linux環(huán)境C_程序設(shè)計(jì)(板式整齊)_第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/15/cd07fad1-8f2b-4abb-89fb-329c3579a6bc/cd07fad1-8f2b-4abb-89fb-329c3579a6bc5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1章 Linux系統(tǒng)概述和安裝,Linux系統(tǒng)是一種類UNIX完整的操作系統(tǒng)。它不僅功能強(qiáng)大、運(yùn)行穩(wěn)定,而且用戶可免費(fèi)使用,分析其源代碼。Linux系統(tǒng)支持x86、ARM等大多數(shù)常見硬件架構(gòu)和TCP/IP等主流網(wǎng)絡(luò)協(xié)議,有良好的跨平臺(tái)性能,應(yīng)用面極其廣闊。本章將介紹Linux系統(tǒng)的基本概念,并演示如何安裝一套帶有X window圖形操作界面的Linux系統(tǒng)發(fā)布版。,1.1 引言,計(jì)算機(jī)系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)所組成,軟件系統(tǒng)中最為重要的是操作系統(tǒng).。Linux作為操作系統(tǒng)管理著計(jì)算機(jī)內(nèi)所有的硬件資源和軟件資源,仿佛是計(jì)算機(jī)的靈魂。Linux系統(tǒng)基于GPL協(xié)議發(fā)布,該協(xié)議是GNU項(xiàng)目所創(chuàng)立開放
2、源代碼的公共許可證。要理解Linux系統(tǒng)并以一種全新的方式開發(fā)和發(fā)布軟件,首先則需要了解GNU項(xiàng)目和Linux系統(tǒng)的淵源。,1.1.1 GNU項(xiàng)目簡(jiǎn)介,GNU項(xiàng)目在1983年由理查德斯托曼(Richard Stallman)所創(chuàng)立,最初的目標(biāo)是通過(guò)使用必要的工具從源代碼開始創(chuàng)建一個(gè)自由的類UNIX操作系統(tǒng)。此前的軟件均以源代碼的形式發(fā)布,用戶可以根據(jù)自己需要修改源代碼,但自從那時(shí)起,軟件廠商為了保護(hù)自己的商業(yè)利益,開始使用編譯所得的二進(jìn)制文件發(fā)布軟件,從而使軟件的源代碼變?yōu)椤吧虡I(yè)秘密”。,1.1.2 Linux起源,安德魯塔能鮑姆(Andrew Tanenbaum)出于教學(xué)目的編寫了名為Min
3、ix的類UNIX操作系統(tǒng)。1991年8月,林納斯將自己新設(shè)計(jì)的操作系統(tǒng)內(nèi)核通過(guò)網(wǎng)絡(luò)發(fā)布,命名為L(zhǎng)inux系統(tǒng)。不久之后,Linux系統(tǒng)陸續(xù)推出了多個(gè)版本,并且吸引了更多開發(fā)者加入Linux系統(tǒng)開發(fā)的行列。,1.1.3 Linux發(fā)展現(xiàn)狀,如今,Linux系統(tǒng)內(nèi)核版本已發(fā)布到2.6版,它代表著當(dāng)前操作系統(tǒng)技術(shù)的最前沿,并依然保持?jǐn)?shù)周內(nèi)一次的版本更新。更多的開發(fā)者進(jìn)入到Linux系統(tǒng)開發(fā)的行列中,因此基于Linux系統(tǒng)的軟件資源也十分豐富,而且這些資源同樣能免費(fèi)使用。 Linux系統(tǒng)進(jìn)入我國(guó)的時(shí)間較早,我國(guó)的工程師對(duì)Linux系統(tǒng)的發(fā)展也做出了巨大貢獻(xiàn)。所以,Linux系統(tǒng)在我國(guó)擁有一定的用戶基礎(chǔ)
4、和大量中文資源。,1.1.4 免費(fèi)軟件與開源軟件,免費(fèi)軟件與開源軟件概念并不相同,免費(fèi)軟件通常以二進(jìn)制文件形式發(fā)布,用戶雖然可以免費(fèi)使用,但無(wú)權(quán)對(duì)軟件進(jìn)行任何修改。開源軟件是將軟件以源代碼形式發(fā)布,并遵循GPL等開源協(xié)議,用戶不僅能使用,而且還可對(duì)軟件進(jìn)行改進(jìn)。 Linux系統(tǒng)是開源軟件,所以基于Linux系統(tǒng)開發(fā)必須遵循開源規(guī)則。這種開發(fā)方式最大的優(yōu)勢(shì)是,開發(fā)者能最大限度的利用現(xiàn)有代碼,從而避免重復(fù)工作。,1.2 Linux內(nèi)核與版本,Linux內(nèi)核是該操作系統(tǒng)的核心程序文件,通過(guò)與其他程序文件組合,Linux又構(gòu)成了許多版本。每種Linux版本都有其特點(diǎn),例如嵌入式Linux版本專門用于較
5、小的電子設(shè)備操作,而我們的計(jì)算機(jī)中常用的是Linux桌面版和Linux企業(yè)版。,1.2.1 Linux內(nèi)核介紹,內(nèi)核是操作系統(tǒng)的心臟,系統(tǒng)其他部分必須依靠?jī)?nèi)核這部分軟件提供的服務(wù),內(nèi)核由中斷服務(wù)程序、調(diào)度程序、內(nèi)存管理程序、網(wǎng)絡(luò)和進(jìn)程間通信等系統(tǒng)程序共同組成。,1.2.2 Linux所支持的硬件平臺(tái),Linux系統(tǒng)支持當(dāng)前所有主流硬件平臺(tái),能運(yùn)行在各種架構(gòu)的服務(wù)器,如Intel的IA64、Compaq的Alpha、Sun的Sparc/Sparc64、SGI的Mips、IBM的S396;也能運(yùn)行在幾乎全部的工作站,如Intel的x86、APPLE的PowerPC。更吸引人的是支持嵌入式系統(tǒng)和移動(dòng)
6、設(shè)備,如ARM,Linux內(nèi)核短小精湛且功能全面,可根據(jù)特定硬件環(huán)境裁剪出具備適當(dāng)功能的操作系統(tǒng)。另外,無(wú)論是32位指令集系統(tǒng)還是64位指令集系統(tǒng),都能高效穩(wěn)定運(yùn)行。,1.2.3 常用Linux版本,Linux系統(tǒng)擁有多個(gè)發(fā)行版,它可能是由一個(gè)組織、公司或者個(gè)人發(fā)行。通常一個(gè)發(fā)行版包括Linux內(nèi)核、將整個(gè)軟件安裝到計(jì)算機(jī)的安裝工具、適用特定用戶群的一系列GNU軟件。常用的Linux發(fā)行版本如下: 1Fedora桌面版 2Ubuntu桌面版 3Red Hat服務(wù)器版 4OpenSUSE 5Debian,1.3 系統(tǒng)安裝,Linux系統(tǒng)安裝是將安裝介質(zhì)內(nèi)的系統(tǒng)文件復(fù)制到設(shè)備的硬盤上。安裝前需要對(duì)
7、硬盤進(jìn)行分區(qū),Linux系統(tǒng)擁有專門的分區(qū)結(jié)構(gòu)。安裝過(guò)程中Linux系統(tǒng)還會(huì)進(jìn)行各種程序的配置,本節(jié)將講解Linux發(fā)行版的安裝與配置。,1.3.1 安裝前準(zhǔn)備,安裝Linux系統(tǒng)前,首先可根據(jù)用途和硬件平臺(tái)選擇一個(gè)Linux發(fā)布版本,若讀者具備豐富的Linux知識(shí)亦可從內(nèi)核開始編譯一個(gè)全新的Linux版本。獲得Linux發(fā)布版本可在因特網(wǎng)上直接下載,也可通過(guò)其他途徑獲得Linux發(fā)布版的拷貝,這是GPL協(xié)議中的合法行為。安裝前需詳細(xì)了解該版本對(duì)系統(tǒng)的需求,以及安裝設(shè)備的硬件環(huán)境。Linux系統(tǒng)可自動(dòng)識(shí)別大多數(shù)硬件設(shè)備,并為其找到合適的驅(qū)動(dòng)程序,但難免有些不常見的設(shè)備需要額外準(zhǔn)備驅(qū)動(dòng)程序。,1
8、.3.2 系統(tǒng)需求,各種Linux版本有不同的系統(tǒng)需求,具體需求可在官方網(wǎng)站的安裝說(shuō)明內(nèi)看到。得到系統(tǒng)需求列表后,可與安裝設(shè)備的硬件列表進(jìn)行對(duì)比,通常設(shè)備供應(yīng)商會(huì)提供設(shè)備上的具體硬件型號(hào)列表。下面是當(dāng)前流行的Linux桌面版本最低系統(tǒng)需求: CPU:Intel Pentium兼容CPU,主時(shí)鐘頻率在400MHz以上。 內(nèi)存:256MB以上。 硬盤:至少3G空余空間。 顯卡:VGA兼容或更高分辨率顯卡。 其他:有鼠標(biāo)、鍵盤、光驅(qū)等設(shè)備。,1.3.3 硬盤分區(qū),硬盤是常見的存儲(chǔ)設(shè)備,大多數(shù)計(jì)算機(jī)上都以硬盤作為主要的外儲(chǔ)存器。為了便于管理,Linux系統(tǒng)允許將一塊硬盤劃分為多個(gè)分區(qū),或者將多塊硬盤劃
9、分為一個(gè)分區(qū)。分區(qū)的類型有三種,主分區(qū)(primary-partition)和擴(kuò)展分區(qū)(extended-partition)是頂層的分區(qū)體系,邏輯分區(qū)(logical-partition)是擴(kuò)展分區(qū)下的子結(jié)構(gòu)。同一塊硬盤上最多允許存在4個(gè)主分區(qū)和一個(gè)擴(kuò)展分區(qū),擴(kuò)展分區(qū)以下的邏輯分區(qū)數(shù)量并無(wú)限制。,1.3.4 圖形方式安裝Linux,圖形化Linux安裝程序?yàn)橛糜谔峁┝硕喾N安裝語(yǔ)言的選擇和更簡(jiǎn)單易懂的安裝信息。本節(jié)介紹以Fedora 10 Live CD為媒介安裝Linux系統(tǒng)的過(guò)程。Live CD是Linux系統(tǒng)最新的發(fā)布形式,它不但能直接以CD啟動(dòng)計(jì)算機(jī)進(jìn)入到Linux系統(tǒng),還提供了圖形化
10、安裝程序。,1.3.5 升級(jí)最新內(nèi)核,為了使用Linux系統(tǒng)最新的特性,可在安裝完成后對(duì)Linux內(nèi)核進(jìn)行升級(jí)。各個(gè)發(fā)行版的Linux系統(tǒng)都有軟件管理器提供自動(dòng)升級(jí)服務(wù),但也可以根據(jù)需要手動(dòng)升級(jí)內(nèi)核。Fedora和Red Hat企業(yè)版可使用YUM軟件管理器升級(jí)內(nèi)核,在終端輸入下列命令: su/ 獲取根用戶權(quán)限,將提示輸入根用戶密碼 yum update kernel/ 升級(jí)內(nèi)核,1.3.6 安裝中文支持,大多數(shù)的Linux發(fā)行版都提供了多語(yǔ)言支持,并根據(jù)用戶選擇自動(dòng)安裝中文支持。中文支持通常包括中文字符編碼、中文字庫(kù)、軟件的中文UI包和中文輸入法。如果Linux安裝完成后沒(méi)有安裝中文支持,可手
11、動(dòng)安裝。中文支持的安裝信息可查閱該發(fā)行版的中文社區(qū)。,1.4 小結(jié),本章介紹了Linux系統(tǒng)的基本概念和安裝方法,Linux系統(tǒng)是一個(gè)開放的操作系統(tǒng),理解了GNU項(xiàng)目后可快捷的開發(fā)各種軟件。在學(xué)習(xí)后面的章節(jié)前,讀者可根據(jù)自身需要安裝一套Linux操作系統(tǒng),以便實(shí)踐各種開發(fā)技能。,第2章 Linux基本操作,Linux系統(tǒng)有兩種操作方法,一種是使用鼠標(biāo)鍵盤等輸入設(shè)備直接在圖形界面X window上操作,另一種是通過(guò)輸入文本命令方式在控制臺(tái)上操作。各種Linux發(fā)行版的操作遵循同樣的原則,所以操作方法非常相似。,2.1 登錄,安裝有圖形界面的Linux系統(tǒng)啟動(dòng)后會(huì)直接進(jìn)入到X window中,并提
12、示輸入用戶名和密碼登錄。第一次登入可能需用創(chuàng)建一個(gè)新用戶,該用戶只是一個(gè)普通用戶,不能直接進(jìn)行系統(tǒng)配置。有些時(shí)候需要在控制臺(tái)上登錄,則直接輸入用戶名和密碼即可。,2.1.1 shell程序,shell是一種具備特殊功能的程序,也是介于用戶和Linux內(nèi)核間的一個(gè)接口。Linux系統(tǒng)擁有多種shell,發(fā)行版中常用的是名為bash的shell。這種shell不但能執(zhí)行簡(jiǎn)單的命令,還能將多個(gè)命令、條件和參數(shù)編寫為程序執(zhí)行。,2.1.2 控制臺(tái),Linux系統(tǒng)是一個(gè)多用戶多任務(wù)的分時(shí)操作系統(tǒng),任何一個(gè)要使用系統(tǒng)資源的用戶都必須先向系統(tǒng)管理員申請(qǐng)一個(gè)賬號(hào),然后以這個(gè)賬號(hào)的身份進(jìn)入系統(tǒng),該賬號(hào)的名稱就是
13、登錄名。Linux系統(tǒng)通常有多個(gè)控制臺(tái),進(jìn)入控制臺(tái)后可使用shell程序操作計(jì)算機(jī)。,2.1.3 終端,終端是X window里訪問(wèn)shell程序的接口。在GNOME桌面上打開終端的方式為,選擇“應(yīng)用程序”|“系統(tǒng)工具”|“終端”命令。,2.2 文件和目錄,文件系統(tǒng)是在物理存儲(chǔ)設(shè)備中存放數(shù)據(jù)的索引格式,文件和目錄是數(shù)據(jù)的邏輯劃分形式。在Linux系統(tǒng)中,文件的準(zhǔn)確定義是不包含任何其他結(jié)構(gòu)的數(shù)據(jù)流。Linux系統(tǒng)的文件類型概況起來(lái)可分為五種,分別是:普通文件、目錄文件、鏈接文件、設(shè)備文件和管道文件。,2.2.1 文件系統(tǒng),文件系統(tǒng)是磁盤及其邏輯分區(qū)的目錄結(jié)構(gòu),一個(gè)磁盤設(shè)備可包含一個(gè)或多個(gè)文件系統(tǒng)
14、,但每個(gè)文件系統(tǒng)必須占據(jù)硬盤中單獨(dú)的一個(gè)分區(qū),如圖2.3所示。,2.2.2 文件名,Linux系統(tǒng)的文件名由字符和數(shù)字組成,其中字符可以是大小寫英文字母或其他Unicode編碼的文字和符號(hào)。但不能包括“*”、“?”和“ ”文件名通配符。Linux系統(tǒng)的文件名也有類似其他操作系統(tǒng)的擴(kuò)展名,在文件名最后一個(gè)“.”后的內(nèi)容即是擴(kuò)展名。例如,C語(yǔ)言源文件的擴(kuò)展名是以“.c”,頭文件的擴(kuò)展名是“.h”。,2.2.3 路徑名,Linux文件系統(tǒng)采用帶鏈接的樹形目錄結(jié)構(gòu),即只有一個(gè)根目錄。根目錄可含有下級(jí)子目錄或文件;子目錄中又可含有更下級(jí)的子目錄或者文件。這樣一層一層地延伸下去,構(gòu)成一棵倒置的樹,如圖2.
15、4所示。,2.2.4 工作目錄,控制臺(tái)或終端在某個(gè)時(shí)刻總是對(duì)應(yīng)著一個(gè)目錄,該目錄即工作目錄。在控制臺(tái)或終端執(zhí)行命令或程序,對(duì)某個(gè)沒(méi)有指定路徑的文件或子目錄進(jìn)行操作,控制臺(tái)或終端會(huì)自動(dòng)在文件或子目錄前加入當(dāng)前工作目錄的路徑。例如,執(zhí)行“l(fā)s”命令會(huì)將工作目錄下的文件和子目錄名稱顯示出來(lái),除非在“l(fā)s”命令后輸入某一具體的路徑名稱。工作目錄可用“.”表示,工作目錄上層父目錄用“.”表示?!癱d”命令用于改變工作目錄。,2.2.5 起始目錄,用戶通過(guò)控制臺(tái)或終端登錄時(shí),起始目錄為用戶的主目錄。默認(rèn)情況下,起始目錄是用戶主目錄,通常是“/home”目錄中與用戶的登錄名相同的一個(gè)子目錄。起始目錄可用“”
16、符號(hào)表示。例如,無(wú)論當(dāng)前工作目錄為何處,下列命令都能用于顯示起始目錄下的文件或主目錄: ls / 顯示起始目錄下所有的文件名與子目錄名 控制臺(tái)或終端會(huì)將“”符號(hào)替換成用戶起始目錄的絕對(duì)路徑,該符號(hào)也被認(rèn)為是環(huán)境變量,Linux系統(tǒng)會(huì)自動(dòng)維護(hù)“”符號(hào)的值。,2.3 輸入和輸出,Linux系統(tǒng)的輸入和輸出功能由Linux內(nèi)核提供,內(nèi)核管理著所有的輸入與輸出設(shè)備,這些設(shè)備以設(shè)備文件的形式存在,保存在“/dev”目錄中。所有運(yùn)行在Linux系統(tǒng)上的應(yīng)用程序必須通過(guò)Linux內(nèi)核進(jìn)行輸入與輸出操作,本節(jié)簡(jiǎn)單介紹Linux內(nèi)核的輸入和輸出概念。,2.3.1 文件描述符,文件描述符是一個(gè)小的非負(fù)整數(shù),內(nèi)核用
17、以標(biāo)識(shí)某一特定進(jìn)程正在存訪的文件。當(dāng)內(nèi)核打開一個(gè)現(xiàn)存文件或創(chuàng)建一個(gè)新文件時(shí),它會(huì)返回一個(gè)文件描述符給該進(jìn)程,這樣該進(jìn)程就能通過(guò)內(nèi)核訪問(wèn)目標(biāo)文件。,2.3.2 標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤,按慣例,每當(dāng)運(yùn)行一個(gè)新程序時(shí),所有的shell都為其打開三個(gè)文件描述符:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出以及標(biāo)準(zhǔn)錯(cuò)誤。如果像簡(jiǎn)單命令ls那樣沒(méi)有做什么特殊處理,則這三個(gè)描述符都連向終端。大多數(shù)shell均提供同一種描述方法,這樣可以使任何一個(gè)或所有這三個(gè)描述符都能重新定向到某一個(gè)文件,例如: # ls file.list 執(zhí)行l(wèi)s命令,其標(biāo)準(zhǔn)輸出重新定向到名為file.list的文件上。,2.3.3 標(biāo)準(zhǔn)輸入輸出函數(shù),標(biāo)準(zhǔn)
18、輸入輸出函數(shù)提供一種對(duì)不用緩存的輸入輸出函數(shù)的緩存機(jī)制。使用標(biāo)準(zhǔn)輸入輸出函數(shù)的優(yōu)點(diǎn)是無(wú)需擔(dān)心如何選取最佳的緩存長(zhǎng)度,另一個(gè)優(yōu)點(diǎn)與處理輸入行有關(guān)(常常發(fā)生在Linux的應(yīng)用中)。例如,fgets()函數(shù)讀完一整行數(shù)據(jù),而另一方面,read()函數(shù)讀指定字節(jié)數(shù)。,2.4 小結(jié),本章介紹了Linux系統(tǒng)的基本操作,其中包括如何登錄Linux系統(tǒng)、shell的基本命令和作為shell接口實(shí)現(xiàn)形式的控制臺(tái)與終端。另外本章介紹了Linux的文件與目錄,只有對(duì)Linux的文件系統(tǒng)有較深的理解,才能更好的掌握后面章節(jié)中所介紹文件操作的部分。在本章的最后,簡(jiǎn)單講解了Linux系統(tǒng)輸入與輸出的概念,這是計(jì)算機(jī)程序
19、設(shè)計(jì)的重要基礎(chǔ)知識(shí),讀者在學(xué)習(xí)Linux程序開發(fā)中還需要從多個(gè)側(cè)面了解輸入輸出技術(shù)的知識(shí)。,第3章 Linux GCC/G+編譯器與調(diào)試器,編譯器是將易于編寫、閱讀和維護(hù)的高級(jí)計(jì)算機(jī)語(yǔ)言翻譯為計(jì)算機(jī)能解讀、運(yùn)行的低階機(jī)器語(yǔ)言的程序。調(diào)試器是用于查找源代碼中的錯(cuò)誤,測(cè)試源代碼和可執(zhí)行文件的工具。GNU項(xiàng)目提供了GCC編譯器、G+編譯器和GDB調(diào)試器,這些程序是在Linux系統(tǒng)上使用C和C+語(yǔ)言進(jìn)行開發(fā)的重要工具。本章將介紹這些工具的安裝和使用方法。,3.1 GCC/G+編譯器,GCC是GNU項(xiàng)目中的一個(gè)子項(xiàng)目,最初為用于編譯C語(yǔ)言的編譯器。隨著GNU項(xiàng)目的發(fā)展,GCC已經(jīng)成為了能編譯C、C+、A
20、da、Object C和Java等語(yǔ)言的GNU編譯器家族,同時(shí)還可執(zhí)行跨硬件平臺(tái)的交叉編譯工作。G+則是專門用來(lái)編寫C和C+語(yǔ)言的編譯器。C和C+語(yǔ)言正在不斷發(fā)展,為了保持兼容程序語(yǔ)言的最新特性,開發(fā)者通常選擇GCC來(lái)編譯C語(yǔ)言編寫的源代碼,選擇G+來(lái)編譯C+源代碼。,3.1.1 GCC/G+編譯器安裝,安裝或更新GCC和G+可在GNU項(xiàng)目的官方網(wǎng)站()去下載相應(yīng)的安裝包,也可以使用YUM軟件包管理器安裝。安裝GCC和G+的命令如下: yum install make/ 安裝make程序 yum install gcc/ 安裝GCC編譯器 yum install gcc-
21、c+/ 安裝G+編譯器 注意:如果安裝過(guò)程中提示需要選擇編譯器版本,可根據(jù)當(dāng)前硬件平臺(tái)選擇最新發(fā)布的版本。另外,如果提示需要安裝其他相關(guān)軟件包,請(qǐng)一并安裝。,3.1.2 GCC/G+編譯命令,GCC/G+編譯器沒(méi)有圖形界面,只能在終端上以命令方式運(yùn)行。編譯命令由命令名、選項(xiàng)和源文件名組成,格式如下所示: gcc -選項(xiàng) 1 -選項(xiàng) 2-選項(xiàng) n g+ -選項(xiàng) 1 -選項(xiàng) 2-選項(xiàng) n 命令名、選項(xiàng)和源文件名之間使用空格分隔,一行命令中可以有多個(gè)選項(xiàng),也可以只有一個(gè)選項(xiàng)。文件名可以包含文件的絕對(duì)路徑,也可以使用相對(duì)路徑。如果文件名中不包含路徑,那么源文件被視為存在于工作目錄中。如果命令中不包含輸
22、出的可執(zhí)行文件名稱,默認(rèn)情況下將在工作目錄中生成后綴為“.out”的可執(zhí)行文件。,3.1.3 GCC/G+編譯選項(xiàng),GCC擁有一百多個(gè)編譯選項(xiàng)。對(duì)于C語(yǔ)言和C+語(yǔ)言,G+與GCC的編譯選項(xiàng)基本相同。常用的GCC和G+編譯選項(xiàng)見表3.1所示:,3.1.4 GCC/G+編譯器執(zhí)行過(guò)程,GCC和G+編譯器執(zhí)行過(guò)程可總結(jié)為四步:預(yù)處理、編譯、匯編、連接。在預(yù)處理過(guò)程中,編譯器會(huì)對(duì)源代碼中的頭文件和預(yù)處理語(yǔ)句進(jìn)行分析,生成以“.i”為后綴的預(yù)處理文件。,3.2 程序和進(jìn)程,程序和進(jìn)程是操作系統(tǒng)中的重要概念,程序是可運(yùn)行的一組指令,程序以二進(jìn)制代碼的形式保存在存儲(chǔ)設(shè)備中。操作系統(tǒng)運(yùn)行程序后,該程序在內(nèi)存中
23、的映像就是進(jìn)程,進(jìn)程是活動(dòng)的程序。,3.2.1 程序,程序是指一組指示計(jì)算機(jī)或其他具有信息處理能力設(shè)備每一步動(dòng)作的指令。Linux系統(tǒng)下的應(yīng)用程序主要由兩種特殊類型的文件代表,分別是可執(zhí)行文件和腳本程序。可執(zhí)行文件是能夠被計(jì)算機(jī)直接執(zhí)行的程序,相當(dāng)于Windows系統(tǒng)中的exe文件。使用C和C+語(yǔ)言設(shè)計(jì)的程序編譯后即是可執(zhí)行文件。Linux系統(tǒng)不要求可執(zhí)行文件使用特定的擴(kuò)展名,文件是否能被執(zhí)行由文件的系統(tǒng)屬性來(lái)決定。,3.2.2 進(jìn)程和PID,進(jìn)程是一個(gè)具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次可以并發(fā)執(zhí)行的運(yùn)行活動(dòng),是處于活動(dòng)狀態(tài)的程序。進(jìn)程作為構(gòu)成系統(tǒng)的基本元件,不僅是系統(tǒng)內(nèi)部獨(dú)立運(yùn)行的實(shí)體
24、,而且是獨(dú)立競(jìng)爭(zhēng)資源的實(shí)體。 在Linux系統(tǒng)中,用戶創(chuàng)建進(jìn)程時(shí)會(huì)先在系統(tǒng)的進(jìn)程表中為進(jìn)程創(chuàng)建獨(dú)一無(wú)二的編碼,即PID。PID是一個(gè)正整數(shù),取值范圍在2到32768之間。進(jìn)程創(chuàng)建時(shí)會(huì)順序挑選下一個(gè)未使用的編號(hào)數(shù)字作為自己的PID,如果他們已經(jīng)經(jīng)過(guò)一圈的循環(huán),新的編碼重新從2開始。數(shù)字1一般是為特殊進(jìn)程init保留的,它負(fù)責(zé)管理其他的進(jìn)程。 ,3.3 ANSI C標(biāo)準(zhǔn),C語(yǔ)言誕生后的很長(zhǎng)一段時(shí)期內(nèi),并沒(méi)有針對(duì)C語(yǔ)言制定嚴(yán)格的標(biāo)準(zhǔn)。不同編譯器可能使用不同的語(yǔ)法規(guī)則或數(shù)據(jù)結(jié)構(gòu),此狀況對(duì)程序的移植帶來(lái)很多麻煩。于是,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)決定統(tǒng)一C語(yǔ)言的標(biāo)準(zhǔn),并于1989年頒布ANSX3.159
25、-1989標(biāo)準(zhǔn)文檔,這一標(biāo)準(zhǔn)被稱為ANSI C標(biāo)準(zhǔn)。ANSI C標(biāo)準(zhǔn)在訂立時(shí)吸取了很多C+語(yǔ)言的內(nèi)容,同時(shí)促使C語(yǔ)言支持多國(guó)字符集,其中包括各種中文字符集。ANSI C標(biāo)準(zhǔn)的推出使C語(yǔ)言保持著活力,成為最受開發(fā)者歡迎的開發(fā)語(yǔ)言。,3.3.1 函數(shù)原型,函數(shù)原型由函數(shù)的返回類型、函數(shù)名和參數(shù)三部分組成。例如第一行中ssize_t表示該函數(shù)返回值是ssize_t類型的數(shù)值。括號(hào)中是參數(shù)列表,多個(gè)參數(shù)用逗號(hào)分隔,代碼中最后一行g(shù)etpid()函數(shù)的參數(shù)是void,表示getpid函數(shù)沒(méi)有參數(shù)。源代碼編譯時(shí),因?yàn)榫幾g器已經(jīng)知道參數(shù)的類型,所以會(huì)將調(diào)用的參數(shù)進(jìn)行強(qiáng)制轉(zhuǎn)換。,3.3.2 類屬指針,類屬指針
26、是一種能夠同時(shí)支持所有數(shù)據(jù)類型的指針,函數(shù)原型中常用的“void *”類型即是類屬指針。ANSI C標(biāo)準(zhǔn)常用類屬指針代替函數(shù)參數(shù)中的其它指針,使同一個(gè)函數(shù)能支持多種數(shù)據(jù)類型。相關(guān)內(nèi)容將來(lái)本書的程序?qū)嵗卸啻我姷健?3.3.3 原始系統(tǒng)數(shù)據(jù)類型,在函數(shù)原型中以“_t”結(jié)尾的類型被稱為原始系統(tǒng)數(shù)據(jù)類型。原始系統(tǒng)數(shù)據(jù)類型定義在頭文件“sys/types.h”中,以typedef操作符加以定義。原始系統(tǒng)數(shù)據(jù)類型是目標(biāo)系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的接口,在不同的操作系統(tǒng)中,其字長(zhǎng)會(huì)有變化。,3.4 編譯hello world,hello world程序作為程序員學(xué)習(xí)的第一個(gè)程序已成為有趣的慣例。本節(jié)將講述如何使用Lin
27、ux系統(tǒng)中默認(rèn)的編譯器編輯該程序的源代碼,并使用GCC編譯器將該程序編譯為可執(zhí)行文件。,3.4.1 使用VI編寫源代碼,VI是Linux系統(tǒng)中最常用的文本編輯器,幾乎所有Linux發(fā)行版中都已包含VI程序。它工作在控制臺(tái)或終端中,通過(guò)shell調(diào)用,全部操作均由命令完成,對(duì)于初學(xué)者來(lái)說(shuō)并不容易掌握。,3.4.2 程序的編譯與連接,程序經(jīng)過(guò)編譯器的編譯與連接后,即可生成可執(zhí)行文件。如果源代碼有語(yǔ)法錯(cuò)誤,則會(huì)在終端上顯示錯(cuò)誤信息。有些時(shí)候,編譯器會(huì)出現(xiàn)警告提示,但程序依然被編譯成功。這表明源代碼沒(méi)有嚴(yán)格按照標(biāo)準(zhǔn)編寫,可能會(huì)在運(yùn)行時(shí)出現(xiàn)意外的結(jié)果。繼續(xù)前面的操作不改變工作目錄,編譯并連接“hello
28、world.c”程序,可在終端上輸入下列命令: gcc -o helloworld helloworld.c/ 編譯并連接程序 /“-o helloworld”表示使用“helloworld”作為目標(biāo)文件名,3.4.3 使用終端運(yùn)行程序,Linux系統(tǒng)上運(yùn)行程序,必須給出該程序完整的路徑。前面的“helloworld.c”文件建立在“/home/用戶名/helloworld”目錄中,編譯和連接后所生成的可執(zhí)行文件也在該目錄中。運(yùn)行程序則需輸入“/home/用戶名/helloworld/helloworld”。但當(dāng)前的工作目錄已經(jīng)是“/home/用戶名/helloworld”了,所以可用“./”
29、替代工作目錄的路徑。,3.5 GDB調(diào)試器,程序編寫后難免會(huì)出現(xiàn)各種錯(cuò)誤,當(dāng)程序完成編譯時(shí),隱藏的錯(cuò)誤可能會(huì)使程序無(wú)法正常運(yùn)行,或者不能實(shí)現(xiàn)預(yù)期的功能。簡(jiǎn)單的程序或淺顯的錯(cuò)誤可依賴程序員的經(jīng)驗(yàn)判斷出故障點(diǎn),但現(xiàn)在的軟件規(guī)格越來(lái)越大,調(diào)試起來(lái)也就越來(lái)越困難。調(diào)試器是幫助程序員修改錯(cuò)誤的得力工具,常用的斷點(diǎn)、單步跟蹤等功能可快速找到故障點(diǎn)。,3.5.1 GDB調(diào)試器概述,Linux程序員中最常用的調(diào)試工具是GDB,GDB調(diào)試器是GNU項(xiàng)目的子項(xiàng)目。該程序提供了所有常用調(diào)試功能,是Linux系統(tǒng)中最為簡(jiǎn)單快捷的調(diào)試工具。由于當(dāng)前圖形用戶界面(GUI)普及,大量基于GUI的調(diào)試器被開發(fā)和運(yùn)行在Linu
30、x上。他們大多是以GDB為核心配上GUI:用戶通過(guò)GUI發(fā)出命令,這些命令依次被傳送給GDB。其中一個(gè)是DDD,意為數(shù)據(jù)顯示調(diào)試器。在一些集成開發(fā)環(huán)境如Eclipse中,也提供了調(diào)試功能,并且以GDB為核心。,3.5.2 GDB調(diào)試器安裝,通常在Linux桌面版的軟件開發(fā)包集合中已包含GDB調(diào)試器,如果需要安裝或更新GDB調(diào)試器,可使用YUM軟件包管理器完成,操作方法如下: yum install gdb/ YUM安裝GDB調(diào)試器,3.5.3 GDB常用調(diào)試命令,GDB調(diào)試器調(diào)試的對(duì)象是可執(zhí)行文件,使用GCC或G+編譯器編譯源代碼時(shí),必須加上選項(xiàng)“-g”才能使目標(biāo)可執(zhí)行文件包含可被調(diào)試的信息。
31、,3.5.4 在GDB下運(yùn)行程序,打開可執(zhí)行文件后,可根據(jù)需要在程序中加入斷點(diǎn)或觀察點(diǎn),并運(yùn)行程序,以“helloworld”程序?yàn)槔?,可在為變量賦值前加入斷點(diǎn),并運(yùn)行程序。繼續(xù)上一小節(jié)的操作,方法如下: (gdb) break 5/ 在源代碼第5行,即變量c賦值處加入斷點(diǎn) (gdb) run/ 運(yùn)行程序,3.5.5 檢查數(shù)據(jù),在程序中加入斷點(diǎn)后,程序運(yùn)行時(shí)會(huì)在斷點(diǎn)處暫時(shí)停止,以便檢查程序中的數(shù)據(jù)。通過(guò)檢查數(shù)據(jù)可判斷出許多種錯(cuò)誤的所在。“helloworld”程序在第5行加入了斷點(diǎn),這時(shí)第5行的代碼并未執(zhí)行。檢查常量c的值可輸入下列命令: (gdb) print c/ 顯示變量c的值,3.6
32、小結(jié),本章介紹了Linux系統(tǒng)下編譯C和C+語(yǔ)言的編譯器GCC和G+的基本概念及操作,他們與文本編輯器VI的結(jié)合,組成了最簡(jiǎn)單的程序開發(fā)環(huán)境。另外,本章講解了程序和進(jìn)程的概念,程序是編程工作的結(jié)果,進(jìn)程是程序運(yùn)行時(shí)在系統(tǒng)上的映射。GCC和G+編譯器是遵循ANSI C標(biāo)準(zhǔn)所設(shè)計(jì)的,所以本章也簡(jiǎn)單介紹了ANSI C的概念,當(dāng)深入學(xué)習(xí)C語(yǔ)言時(shí),對(duì)ANSI C標(biāo)準(zhǔn)的了解會(huì)避免許多程序錯(cuò)誤的產(chǎn)生。本章的最后介紹了GDB調(diào)試器,讀者還需要在學(xué)習(xí)中不斷摸索該工具的操作方法。,第4章 Linux 開發(fā)環(huán)境,在上一章介紹了Linux系統(tǒng)上最基本的開發(fā)工具,通過(guò)這些基本開發(fā)工具,可構(gòu)成簡(jiǎn)單的開發(fā)環(huán)境。但在純命令模
33、式下編輯源代碼和調(diào)試軟件并不方便,特別是開發(fā)大型復(fù)雜軟件。本章將介紹一些更為強(qiáng)大的開發(fā)工具,這些開發(fā)工具結(jié)合GCC、G+編譯器和GDB調(diào)試器,組成了非常友好的開發(fā)環(huán)境,可以與Windows系統(tǒng)下的集成開發(fā)環(huán)境相媲美。,4.1 文本編輯工具,文本編輯工具是用來(lái)編寫源代碼的應(yīng)用程序。Linux上比較流行的文本編輯工具有VI、Gedit、VIM和Emacs,這幾個(gè)應(yīng)用程序在編輯源代碼時(shí)有各自的優(yōu)點(diǎn)。下面以VIM和Emacs為例講解文本編輯工具的用法。,4.1.1 VIM使用方法,Linux系統(tǒng)下大多數(shù)文本編輯工具都可以直接在編輯區(qū)輸入字符,并且能夠通過(guò)一些命令來(lái)完成一些控制功能。VIM編輯器繼承了這
34、些特性,它既能工作在終端中,又能工作在X window中,基本操作與VI相似,此外還提供了一些更適合源代碼開發(fā)的特性。,4.1.2 Emacs使用方法,為了方便大型系統(tǒng)的開發(fā),GNU項(xiàng)目又推出了Emacs文本編輯器。該編輯器運(yùn)行在X window環(huán)境中,不但具備所有基本的文本操作功能,同時(shí)為開發(fā)項(xiàng)目提供一些必備的應(yīng)用環(huán)境。,4.2 集成開發(fā)環(huán)境,集成開發(fā)環(huán)境是將一些開發(fā)工具集合到同一個(gè)操作界面的工具軟件,它通常由項(xiàng)目管理器、文件管理器、文本編輯工具、語(yǔ)法糾正器、編譯工具、調(diào)試工具組成。在Linux系統(tǒng)中開發(fā)C、C+語(yǔ)言程序,可選擇的集成開發(fā)環(huán)境有Eclipse和Kdevelop,分別運(yùn)行在GN
35、OME桌面環(huán)境和KDE桌面環(huán)境。Linux系統(tǒng)下的集成開發(fā)環(huán)境通常自身不包含編譯器和調(diào)試器,而是直接利用GCC、GDB等工具進(jìn)行組合。工具組合正代表了Linux系統(tǒng)上軟件設(shè)計(jì)的思想。,4.2.1 Eclipse介紹,Eclipse最初是由IBM公司開發(fā),2001年11月正式貢獻(xiàn)給開源社區(qū),現(xiàn)在由非營(yíng)利軟件供應(yīng)商聯(lián)盟Eclipse基金會(huì)管理。2003年,OSGi服務(wù)平臺(tái)規(guī)范成為Eclipse運(yùn)行時(shí)架構(gòu)。最初Eclipse用于開發(fā)Java語(yǔ)言程序,但加入CDT插件后就能進(jìn)行C和C+語(yǔ)言程序開發(fā),并具備如下特性: 顯示提綱,Outline窗口模塊可顯示源代碼中的過(guò)程、變量、聲明以及函數(shù)的位置。 源代
36、碼輔助,可結(jié)合上下文提示需要輸入的源代碼,并檢查源代碼中的語(yǔ)法錯(cuò)誤。 源代碼模板,擴(kuò)展源代碼輔助功能中使用的源代碼標(biāo)準(zhǔn),加入自定義的源代碼段,可加快代碼編輯速度。 源代碼歷史記錄,在沒(méi)有使用CVS等版本控制工具的情況下,也可記錄源代碼的修改情況。,4.2.2 Kdevelop介紹,Kdevelop是一個(gè)支持多種程序設(shè)計(jì)語(yǔ)言的集成開發(fā)環(huán)境,它運(yùn)行在KDE桌面環(huán)境,可支持C、C+語(yǔ)言程序發(fā)開。Kdevelop很好的支持了Qt圖形界面工具包,因此是開發(fā)KDE桌面工具的理想環(huán)境。用于開發(fā)C、C+語(yǔ)言程序時(shí),它的主要特性如下: 源代碼高亮顯示,Kdevelop的編譯功能和調(diào)試功能該編輯器支持源代碼高亮顯
37、示和自動(dòng)縮進(jìn)的功能.。 項(xiàng)目管理,項(xiàng)目管理器可以管理各種不同的項(xiàng)目類型,。 類瀏覽器,該功能可在進(jìn)行面向?qū)ο箝_發(fā)時(shí),快速了解對(duì)象的結(jié)構(gòu)。 GUI設(shè)計(jì)器,可進(jìn)行可見即可得的方式編輯軟件的圖形界面。 并行版本控制,支持CVS、Subversion、Perforce和ClearCase等常用版本控制工具。,4.3 使用Eclipse開發(fā)C/C+語(yǔ)言程序,綜合比較而言,Eclipse集成開發(fā)環(huán)境是Linux系統(tǒng)中最簡(jiǎn)便的開發(fā)工具,不僅適合與初學(xué)者使用,也被眾多Linux程序設(shè)計(jì)專家所選擇的。因此,本書推薦使用Eclipse作為讀者首選的開發(fā)環(huán)境。,4.3.1 安裝與配置Eclipse,Eclipse運(yùn)
38、行需要JRE支持,所以首先要確保系統(tǒng)中已安裝JRE。Eclipse首次運(yùn)行要求配置工作目錄workspace,這個(gè)目錄是默認(rèn)用來(lái)存放源代碼與相關(guān)項(xiàng)目文件的位置,當(dāng)前用戶必須有該目錄讀寫和執(zhí)行的權(quán)限。,4.3.2 Eclipse界面,Eclipse界面由數(shù)個(gè)視圖窗格組成。左邊為Project Explorer視圖,該視圖用于創(chuàng)建、選擇和刪除項(xiàng)目。正中間的窗格是編輯器區(qū)域,該區(qū)域用于編輯源代碼,可同時(shí)打開多個(gè)文件。編輯器區(qū)域右側(cè)的Outline視圖在編輯器中顯示文檔的大綱,這個(gè)大綱的內(nèi)容取決于源文件的類型。對(duì)于C和C+源代碼文件,該大綱將顯示所有被包含的函數(shù)庫(kù)、函數(shù)、常量、變量、已聲明的類、屬性和
39、方法等信息。,4.3.3 編譯與運(yùn)行源代碼,編譯與運(yùn)行源代碼前,首先需要保證GCC、G+編譯器和GDB調(diào)試器已安裝。Eclipse通過(guò)調(diào)用GCC、G+編譯器實(shí)現(xiàn)源代碼編譯,因此必須要將源代碼的相關(guān)信息建立為項(xiàng)目文件,這樣才能使Eclipse知道該使用哪一個(gè)編譯指令。,4.3.4 Debug源代碼,Eclipse的Debug功能是調(diào)用GDB調(diào)試器實(shí)現(xiàn)的,與GDB的命令行不同,Eclipse提供了更友好的圖形界面查看調(diào)試信息。要在代碼中加入斷點(diǎn),可直接在文本編輯區(qū)右擊左側(cè)區(qū)域彈出的菜單中操作。然后單擊Run|Debug命令菜單,進(jìn)入Debug界面。,4.4 小結(jié),本章介紹了一些高級(jí)的文本編輯器和集
40、成開發(fā)環(huán)境,這些集成開發(fā)環(huán)境也是當(dāng)今大多數(shù)程序員所使用的工具。有一些大型軟件項(xiàng)目需要多位開發(fā)者協(xié)調(diào)工作,這時(shí)集成開發(fā)環(huán)境中的版本控制工具顯得非常重要。它用于保障多位開發(fā)者同時(shí)編譯一個(gè)文件的過(guò)程中,不會(huì)相互覆蓋對(duì)方的工作成果。另外,如果前面進(jìn)行的工作不小心在后面被刪除,版本控制工具也能方便的回溯到某個(gè)時(shí)間點(diǎn)。讀者在學(xué)習(xí)后面的章節(jié)時(shí),可使用集成開發(fā)環(huán)境編輯和運(yùn)行程序,在實(shí)際操作中積累經(jīng)驗(yàn)。,第5章 C語(yǔ)言編程基礎(chǔ),C語(yǔ)言是Linux系統(tǒng)中最常用的程序設(shè)計(jì)語(yǔ)言。Linux系統(tǒng)中的大多數(shù)軟件提供了C語(yǔ)言接口和源代碼,供用戶擴(kuò)展和改進(jìn)軟件的功能,或基于這些軟件構(gòu)成新軟件。正因?yàn)槿绱?,在開源軟件開發(fā)過(guò)程中
41、可以很容易學(xué)習(xí)到他人的開發(fā)經(jīng)驗(yàn)。GNU項(xiàng)目為C語(yǔ)言開發(fā)提供了豐富的工具,充分利用現(xiàn)有的代碼資源和這些開發(fā)工具可將學(xué)習(xí)到的知識(shí)付諸實(shí)踐,從而更快速地掌握C語(yǔ)言開發(fā)技術(shù)。,5.1 程序設(shè)計(jì)語(yǔ)言的發(fā)展,程序設(shè)計(jì)語(yǔ)言是用來(lái)描寫計(jì)算機(jī)程序的邏輯語(yǔ)法結(jié)構(gòu)。它已成為一種學(xué)科,同時(shí)也是程序設(shè)計(jì)者之間的交流方式。過(guò)去,程序設(shè)計(jì)語(yǔ)言是針對(duì)特定的計(jì)算機(jī)設(shè)計(jì),程序員針對(duì)計(jì)算機(jī)的不同結(jié)構(gòu)設(shè)計(jì)特定算法或者數(shù)據(jù)結(jié)構(gòu)。隨著計(jì)算機(jī)技術(shù)的發(fā)展,很多程序設(shè)計(jì)語(yǔ)言已能夠運(yùn)行在多種計(jì)算機(jī)平臺(tái)上,并能在不同平臺(tái)之間移植。正是因?yàn)槿绱?,程序員才會(huì)試圖使程序代碼更容易閱讀。在過(guò)去的幾十年間,大量的編程語(yǔ)言被發(fā)明、被取代、被修改或組合在一起。
42、,5.1.1 機(jī)器語(yǔ)言,電子計(jì)算機(jī)由復(fù)雜的邏輯電路所組成,它能夠“認(rèn)識(shí)”的僅僅是“0”和“1”所代表二進(jìn)制數(shù)字信號(hào)。最初的計(jì)算機(jī)語(yǔ)言,也就是以二進(jìn)制數(shù)字所組成的邏輯序列,稱為機(jī)器語(yǔ)言。每個(gè)二進(jìn)制字符稱為位(bit),計(jì)算機(jī)最小的存儲(chǔ)單元是8個(gè)位所組成的比特(Byte)。機(jī)器語(yǔ)言難于閱讀,并只能針對(duì)特定的計(jì)算機(jī)編寫,代碼無(wú)法移植。,5.1.2 匯編語(yǔ)言,為了減輕程序設(shè)計(jì)的勞動(dòng)強(qiáng)度,計(jì)算機(jī)科學(xué)家設(shè)計(jì)了一些簡(jiǎn)潔的英文縮寫來(lái)替代用于控制或表明數(shù)據(jù)類型的二進(jìn)制邏輯序列。例如,“ADD”表示兩個(gè)變量相加,“IN”表示讀取端口數(shù)據(jù),于是誕生了匯編語(yǔ)言。,5.1.3 高級(jí)語(yǔ)言,高級(jí)語(yǔ)言的發(fā)展也經(jīng)歷了從早期語(yǔ)言
43、到結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,從面向過(guò)程到面向?qū)ο蟮霓D(zhuǎn)變。相應(yīng)的,軟件的開發(fā)也由最初的個(gè)體手工作坊式封閉生產(chǎn),發(fā)展為產(chǎn)業(yè)化、流水線式工業(yè)化生產(chǎn)。隨著程序設(shè)計(jì)語(yǔ)言的進(jìn)步,程序設(shè)計(jì)方法隨之也愈加豐富。 高級(jí)語(yǔ)言的下一個(gè)發(fā)展目標(biāo)是面向應(yīng)用,也就是說(shuō):只需要告訴程序你要干什么,程序就能自動(dòng)生成算法,自動(dòng)進(jìn)行處理,這就是非過(guò)程化的程序語(yǔ)言。,5.2 C語(yǔ)言的特點(diǎn),C語(yǔ)言,是一種通用的、程序式的編程語(yǔ)言,廣泛用于系統(tǒng)與應(yīng)用軟件的開發(fā)。具有高效、靈活、功能豐富、表達(dá)力強(qiáng)和較高的移植性等特點(diǎn),在程序員中備受青睞。C語(yǔ)言是由UNIX的研制者丹尼斯里奇(Dennis Ritchie)和肯湯普遜(Ken Thompson)
44、在1970年研制出的B語(yǔ)言的基礎(chǔ)上發(fā)展和完善起來(lái)的。,5.2.1 C語(yǔ)言是中級(jí)語(yǔ)言,C語(yǔ)言通常稱為中級(jí)語(yǔ)言,這是因?yàn)樗兄c匯編語(yǔ)言類似,能直接訪問(wèn)計(jì)算機(jī)底層資源的能力,同時(shí)它又具備了高級(jí)語(yǔ)言的各種優(yōu)點(diǎn)。作為中級(jí)語(yǔ)言,C允許對(duì)位、字節(jié)和地址這些計(jì)算機(jī)功能中的基本成分進(jìn)行操作。C語(yǔ)言程序非常容易移植,甚至可以設(shè)計(jì)出能同時(shí)運(yùn)行在Linux系統(tǒng)和UNIX、Windows等操作系統(tǒng)上的軟件。,5.2.2 C語(yǔ)言是結(jié)構(gòu)化語(yǔ)言,結(jié)構(gòu)化語(yǔ)言所使用的設(shè)計(jì)方法為模塊化設(shè)計(jì)方法,每個(gè)子問(wèn)題求解的步驟被定義為模塊。在C語(yǔ)言中,函數(shù)就是模塊化的體現(xiàn)。函數(shù)之間是相互獨(dú)立的,函數(shù)內(nèi)的數(shù)據(jù)只能通過(guò)接口進(jìn)行傳遞。C語(yǔ)言程序中
45、,數(shù)據(jù)與代碼是分離的,數(shù)據(jù)在各個(gè)函數(shù)之間通過(guò)接口傳遞。因此,設(shè)計(jì)良好的函數(shù)能夠在多個(gè)程序間反復(fù)使用,構(gòu)成了代碼復(fù)用的基礎(chǔ)。,5.2.3 C語(yǔ)言是程序員的語(yǔ)言,程序設(shè)計(jì)語(yǔ)言中,有許多是針對(duì)非程序員所設(shè)計(jì)的語(yǔ)言,大多數(shù)解釋性語(yǔ)言都是非程序員的語(yǔ)言,例如BASIC、FOXPRO。這一類語(yǔ)言雖然容易學(xué)習(xí),但是所生產(chǎn)的程序執(zhí)行效率低、可靠性差,不能訪問(wèn)計(jì)算機(jī)底層的資源。與其形成鮮明對(duì)比的是C語(yǔ)言,由于程序生成、修改和現(xiàn)場(chǎng)測(cè)試自始至終均由真正的程序員進(jìn)行,因而它實(shí)現(xiàn)了程序員的期望:很少限制,語(yǔ)法自由,具備塊結(jié)構(gòu)和獨(dú)立的函數(shù),以及緊湊的關(guān)鍵字集合。用C語(yǔ)言編程,程序員可以獲得高效機(jī)器代碼,其效率幾乎接近匯編
46、語(yǔ)言代碼。,5.3 C語(yǔ)言的程序結(jié)構(gòu),任何一種程序設(shè)計(jì)語(yǔ)言都具有特定的語(yǔ)法規(guī)則和規(guī)定的表達(dá)方法。一個(gè)程序只有嚴(yán)格按照語(yǔ)言規(guī)定的語(yǔ)法和表達(dá)方式編寫,才能保證編寫的程序在計(jì)算機(jī)中能正確地執(zhí)行,同時(shí)也便于閱讀和理解。,5.3.1 基本程序結(jié)構(gòu),基本程序結(jié)構(gòu)就是從上至下順序執(zhí)行的程序,C語(yǔ)言程序必須有且只有一個(gè)主函數(shù),程序從主函數(shù)開始執(zhí)行,直到主函數(shù)結(jié)束。 C語(yǔ)言程序?yàn)楹瘮?shù)模塊結(jié)構(gòu),所有的C語(yǔ)言程序都是由一個(gè)或多個(gè)函數(shù)構(gòu)成。C語(yǔ)言程序的函數(shù)可分為編譯器提供的標(biāo)準(zhǔn)函數(shù)和由用戶自己定義的函數(shù)。,5.3.2 函數(shù)庫(kù)和鏈接,函數(shù)的集合稱之為函數(shù)庫(kù),遵守ANSI C標(biāo)準(zhǔn)的編譯器所提供函數(shù)組成的函數(shù)庫(kù)稱之為ANS
47、I C標(biāo)準(zhǔn)函數(shù)庫(kù)。編寫程序時(shí)用到的函數(shù)許多都可以在標(biāo)準(zhǔn)函數(shù)庫(kù)中找到,他們是可以簡(jiǎn)單地組合起來(lái)的程序構(gòu)件。編寫了一個(gè)經(jīng)常要用的函數(shù)之后,也可將其放入自定義的庫(kù)中備用。 編譯器編譯源代碼時(shí)以函數(shù)為單位進(jìn)行編譯,并記憶函數(shù)的名字。隨后,編譯器以源文件中的順序去查找函數(shù)間的關(guān)系,并且在可執(zhí)行文件內(nèi)部實(shí)現(xiàn)函數(shù)間的可訪問(wèn)性,該過(guò)程稱之為“鏈接”。,5.3.3 開發(fā)一個(gè)C語(yǔ)言程序,程序開發(fā)是一個(gè)科學(xué)的過(guò)程,開發(fā)一個(gè)C語(yǔ)言程序通常可概括為以下四個(gè)步驟: 1程序設(shè)計(jì) 2編寫源代碼 3程序測(cè)試 4程序運(yùn)行,5.3.4 C語(yǔ)言的關(guān)鍵字,關(guān)鍵字是已被C語(yǔ)言標(biāo)準(zhǔn)作為命令、數(shù)據(jù)類型或者固定函數(shù)名的字母組合。關(guān)鍵字不能被用
48、做變量名或函數(shù)名。表5.1列舉了C語(yǔ)言的32個(gè)關(guān)鍵字,他們遵循C語(yǔ)言的語(yǔ)法使用,形成了C程序設(shè)計(jì)語(yǔ)言。,5.4 算法,關(guān)于計(jì)算機(jī)程序的定義,有一種經(jīng)典的表述是程序等于數(shù)據(jù)結(jié)構(gòu)加上算法。這句話可以解釋為,數(shù)據(jù)結(jié)構(gòu)是將事物抽象成為可運(yùn)算的數(shù)據(jù)形式輸入到計(jì)算機(jī)中,而算法是對(duì)這些數(shù)據(jù)計(jì)算的方法。例如求某個(gè)學(xué)生的平均分,那么數(shù)據(jù)結(jié)構(gòu)由課程名稱和分值組成,求平均分的算法是將分值的總和除以課程總數(shù)。對(duì)于一些特殊的問(wèn)題,例如排序、解方程、編碼等,出現(xiàn)了許多適合計(jì)算機(jī)運(yùn)算的算法,這些算法甚至專門針對(duì)于某個(gè)程序設(shè)計(jì)語(yǔ)言。由此可見,程序設(shè)計(jì)的關(guān)鍵之一,是解題的方法與步驟,是算法。,5.4.1 流程圖與算法的結(jié)構(gòu)化描
49、述,流程圖可用來(lái)描述事務(wù)的處理過(guò)程,因此是最早引入計(jì)算機(jī)算法設(shè)計(jì)領(lǐng)域的圖示方法?;玖鞒虉D的形狀如圖5.1所示。 1順序結(jié)構(gòu) 2選擇結(jié)構(gòu) 3循環(huán)結(jié)構(gòu),5.4.2 用N-S圖描述算法,除了傳統(tǒng)的流程圖以外,還有很多種圖形可以用來(lái)描述程序的結(jié)構(gòu)。N-S圖就是其中的一種,它由矩形組成,一個(gè)程序模塊是最外圍的矩形外框,程序中的每個(gè)步驟都是一個(gè)內(nèi)嵌的小矩形,如圖5.6所示。,5.4.3 用PAD圖描述算法,PAD圖(Problem Analysis Diagram)是國(guó)際上專業(yè)的程序員廣泛使用的一種程序流程表示法。與其他圖形相比,PAD圖更容易描述扁平化的程序結(jié)構(gòu)。特別是一些應(yīng)用管理類軟件,其中都會(huì)有很
50、多扁平化的分支語(yǔ)句,這些語(yǔ)句用PAD描述更為清晰。,5.5 軟件工程概覽,軟件工程是計(jì)算機(jī)科學(xué)的一個(gè)重要分支,所涉及的范圍非常廣泛。包括軟件開發(fā)技術(shù)、軟件工程環(huán)境、工程經(jīng)濟(jì)學(xué)和工程管理等許多知識(shí)領(lǐng)域。本節(jié)主要介紹軟件工程的基本任務(wù)和常用的軟件項(xiàng)目開發(fā)模型,以及如何通過(guò)軟件工程指導(dǎo)C語(yǔ)言編程。其中,樸素軟件工程思想是一套在教學(xué)中總結(jié)出的軟件開發(fā)規(guī)律,它的主要目的是指導(dǎo)編程語(yǔ)言課程設(shè)計(jì),也可用于少數(shù)開發(fā)者參與的軟件項(xiàng)目。,5.5.1 認(rèn)識(shí)軟件工程,軟件工程存在于各種應(yīng)用中,存在于軟件開發(fā)的各個(gè)方面。而程序設(shè)計(jì)只包含了程序設(shè)計(jì)和編碼的反復(fù)迭代的過(guò)程,它是軟件開發(fā)的一個(gè)階段。軟件工程力圖對(duì)軟件項(xiàng)目的各
51、個(gè)方面做出指導(dǎo),從軟件的可行性分析直到軟件完成以后的維護(hù)工作。 1用分階段的生命周期計(jì)劃嚴(yán)格管理 2堅(jiān)持進(jìn)行階段評(píng)審 3實(shí)行嚴(yán)格的產(chǎn)品控制 4采用現(xiàn)代程序設(shè)計(jì)技術(shù) 5結(jié)果應(yīng)能清楚地審查 6開發(fā)人員應(yīng)少而精 7實(shí)踐中不斷改進(jìn)軟件工程,5.5.2 瀑布模型及其改進(jìn),瀑布模型是由溫斯頓羅伊斯(Winston Royce)在1970年最初提出的軟件開發(fā)模型。瀑布模型將軟件開發(fā)過(guò)程定義為6個(gè)步驟,分別是問(wèn)題定義、需求分析、設(shè)計(jì)原型、實(shí)現(xiàn)與單元測(cè)試、集成與系統(tǒng)維護(hù)、發(fā)布、運(yùn)行與維護(hù)。,5.5.3 迭代發(fā)布模型,迭代發(fā)布模型是一種與傳統(tǒng)軟件工程開發(fā)相反的軟件開發(fā)過(guò)程,它彌補(bǔ)了傳統(tǒng)開發(fā)方式中的一些缺點(diǎn),具有更
52、高的成功率和生產(chǎn)率。,5.5.4 樸素軟件工程思想,樸素軟件工程思想將迭代發(fā)布模型簡(jiǎn)化為四個(gè)步驟,然后反復(fù)循環(huán)這四個(gè)步驟直到軟件生命周期結(jié)束。這四個(gè)步驟分別是: 1確定項(xiàng)目視圖與范圍 2軟件設(shè)計(jì) 3編碼 4發(fā)布,5.6 小結(jié),本章介紹了C語(yǔ)言基礎(chǔ)知識(shí)和程序設(shè)計(jì)知識(shí),將多變的程序結(jié)構(gòu)總結(jié)成三種基本結(jié)構(gòu),同時(shí)引入流程圖的概念,流程圖能將任何復(fù)雜的程序抽象為程序員間通用的符號(hào)語(yǔ)言。另外,本章介紹了算法的概念和軟件工程知識(shí),將程序設(shè)計(jì)和軟件開發(fā)作為一門工程學(xué)對(duì)待。這些內(nèi)容與實(shí)際的軟件開發(fā)工作完全一致,需要讀者深入的理解與掌握。,第6章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,數(shù)據(jù)類型、運(yùn)算符和表達(dá)式是C語(yǔ)言的三個(gè)基
53、本組成部分。數(shù)據(jù)類型決定了如何將數(shù)據(jù)存儲(chǔ)到計(jì)算機(jī)的內(nèi)存中,運(yùn)算符是數(shù)據(jù)之間執(zhí)行何種運(yùn)算的代號(hào),而表達(dá)式則是C語(yǔ)言最基本的語(yǔ)法。本章將通過(guò)學(xué)習(xí)C語(yǔ)言的三個(gè)基本組成部分來(lái)掌握基本的C語(yǔ)言程序設(shè)計(jì)。,6.1 C語(yǔ)言的數(shù)據(jù)類型,C語(yǔ)言有五種基本的數(shù)據(jù)類型,分別是字符型、整型、單精度浮點(diǎn)型、雙精度浮點(diǎn)型和空類型。在不同的操作系統(tǒng)或硬件平臺(tái)中,這些數(shù)據(jù)類型的值域范圍和所占用的內(nèi)存的數(shù)量。這種差異影響了C語(yǔ)言的可移植性能,但如果能深入理解數(shù)據(jù)類型的構(gòu)成,則可以最大程度避免該問(wèn)題。,6.1.1 基本類型的字長(zhǎng)與范圍,字長(zhǎng)是指數(shù)據(jù)所占用內(nèi)存的數(shù)量,字長(zhǎng)決定了數(shù)據(jù)類型的值域,即范圍。以字符型為例,ANSI C標(biāo)準(zhǔn)
54、中的字符型的長(zhǎng)度是1字節(jié)(8位二進(jìn)制編碼),可計(jì)算其值域?yàn)?7,取值范圍為-128127。計(jì)算機(jī)所使用的ASCII字符編碼共有128個(gè)元素,所以用字符型可將全部元素表示出來(lái)。,6.1.2 聚合類型與修飾符,聚合類型構(gòu)成了復(fù)雜的數(shù)據(jù)結(jié)構(gòu),用以描述事物的各種屬性。除void類型外,基本類型的前面可以有各種修飾符。修飾符用來(lái)改變基本類型的意義,以便更準(zhǔn)確地適應(yīng)各種情況的需求。 修飾符signed、short、long和unsigned適用于字符和整數(shù)兩種基本類型。,6.2 常量與變量,顧名思義,常量是運(yùn)算中不能改變數(shù)值的數(shù)據(jù)類型,變量是可改變數(shù)值的數(shù)據(jù)類型。根據(jù)需要,可將一些在程序運(yùn)行中不必改變數(shù)值
55、的類型定義為常量,這樣也可避免因修改數(shù)值造成程序錯(cuò)誤。任何改變常量數(shù)值的操作都會(huì)引起編譯錯(cuò)誤。,6.2.1 標(biāo)識(shí)符命名,標(biāo)識(shí)符是數(shù)據(jù)或程序模塊的名字,一般情況下,只能通過(guò)標(biāo)識(shí)符操作對(duì)應(yīng)的數(shù)據(jù)或模塊。ANSI C規(guī)定了標(biāo)識(shí)符的命名規(guī)則,第一個(gè)字符必須為下劃線或英文字母,其后的字符必須為下劃線、數(shù)字或英文字母。例如,“year”、“month01”、“_day”都是正確的命名,而“2year”、“mon!th01”、“day.one”是錯(cuò)誤的命名。另外,標(biāo)識(shí)符命名時(shí)要避免與C語(yǔ)言關(guān)鍵字相同。,6.2.2 常量,C語(yǔ)言中的常量有四種基本類型:“#define”定義的符號(hào)常量,字符、字符串常量和數(shù)值常
56、量,常量變量,枚舉常量。 符號(hào)常量通常出現(xiàn)在文件的開始,它更像是編輯器的字符串替換操作。 字符、字符串常量和數(shù)值常量是直接在源代碼中出現(xiàn)的字符、字符串和字符,因?yàn)槌绦蜻\(yùn)行時(shí)他們會(huì)在內(nèi)存中占據(jù)固定內(nèi)存,所以我們認(rèn)為它是常量。 常量變量是一種特殊的常量,它實(shí)際是用“const”修飾符限制了變量改變其值。 枚舉常量是一種聚合類型,它有多個(gè)成員,默認(rèn)情況下第一個(gè)成員所代表的數(shù)值是0,后面的成員所代表的數(shù)值在前面成員的數(shù)值上加1。,6.2.3 變量,運(yùn)算中可以改變數(shù)值的數(shù)據(jù)類型稱為變量。每個(gè)變量擁有惟一的名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,在該存儲(chǔ)單元中存放變量的值。 聲明變量和為變量賦值也可從兩個(gè)語(yǔ)句合
57、并為一個(gè)語(yǔ)句。 變量在被使用前必須先賦值,未賦值前,其值可能會(huì)是對(duì)應(yīng)數(shù)據(jù)類型中的任意一個(gè)數(shù)字。如果變量被聲明,但在整個(gè)程序中都未對(duì)其賦值或使用,則GCC編譯器會(huì)給出一個(gè)警告信息。,6.3 整型數(shù)據(jù),沒(méi)有小數(shù)位或指數(shù)的數(shù)據(jù)類型被稱為整型數(shù)據(jù),根據(jù)使用方法的分類,整型數(shù)據(jù)可分為整型常量和整型變量。根據(jù)定義或顯示的數(shù)制分類,可分為十進(jìn)制、八進(jìn)制和十六進(jìn)制。,6.3.1 整型常量,整型常量是在運(yùn)算中不可改變的整型數(shù)據(jù)類型,可使用十進(jìn)制、八進(jìn)制和十六進(jìn)制描述一個(gè)整型常量。 其中十進(jìn)制整數(shù)值可以是從0到9的一個(gè)或多個(gè)十進(jìn)制數(shù)位,第1位可以是正負(fù)符號(hào),但不能是0。 八進(jìn)制和十六進(jìn)制整型常量在存儲(chǔ)方式上與十進(jìn)
58、制數(shù)并無(wú)區(qū)別,只是定義時(shí)使用了不同的表述方法。八進(jìn)制和十六進(jìn)制整型常量的存儲(chǔ)空間長(zhǎng)度也有數(shù)值來(lái)決定,并且可以存在負(fù)值。,6.3.2 整型變量,為變量命名的過(guò)程稱為“聲明”,C語(yǔ)言規(guī)定,變量使用前必須聲明。整型變量用int修飾符聲明,如下列源代碼所示: main() int a, c;/ 聲明整型變量 unsingned int b;/ 聲明無(wú)符號(hào)整型變量 a = 15;/ 為變量a賦值 b = a;/ 為變量b賦值,b的值來(lái)至a c = a + b;/ 為變量c賦值,c的值來(lái)至a與b的和 printf(c = %dn, c);/ 輸出提示字符串和c的值 ,6.4 浮點(diǎn)型數(shù)據(jù),浮點(diǎn)型數(shù)據(jù)又稱實(shí)型
59、數(shù)據(jù),是一個(gè)以十進(jìn)制表示的符號(hào)實(shí)數(shù)。符號(hào)實(shí)數(shù)的值包括整數(shù)部分、尾數(shù)部分和指數(shù)部分。,6.4.1 浮點(diǎn)型常量,一些較大的數(shù)值,或者有小數(shù)位、指數(shù)位的數(shù)值都需要用浮點(diǎn)型常量表示。浮點(diǎn)型常量的形式是: 正負(fù)符號(hào) 數(shù)值 .數(shù)值 E | e 正負(fù)符號(hào) 數(shù)值 其中,“數(shù)值”是一位或多位十進(jìn)制數(shù)字,“E”或“e”是指數(shù)符號(hào)。小數(shù)點(diǎn)之前是整數(shù)部分,小數(shù)點(diǎn)之后是尾數(shù)部分,如果小數(shù)點(diǎn)后沒(méi)有數(shù)值,尾數(shù)部分可以省略。指數(shù)符號(hào)后的正負(fù)符號(hào)修飾指數(shù),如果是正數(shù),可省略正負(fù)符號(hào)。如果沒(méi)有指數(shù),指數(shù)符號(hào)及其后的內(nèi)容都可省略。,6.4.2 浮點(diǎn)型變量,浮點(diǎn)型變量分為單精度(float型)和雙精度(double型)。對(duì)每一個(gè)浮點(diǎn)型變量都應(yīng)在使用前加以定義。 如果浮點(diǎn)型常量是雙精度浮點(diǎn)型,當(dāng)把該常量賦給一個(gè)單精度浮點(diǎn)型變量時(shí),系統(tǒng)會(huì)截取相應(yīng)的有效位數(shù)。 由于float型變量只能接收7位有效數(shù)字,因此最后兩位小數(shù)不起作用。如果將a改為double型,則能全部接收上述9位數(shù)字并存儲(chǔ)在變量a中。,6.5 字符型數(shù)據(jù),字符型數(shù)據(jù)用于在計(jì)算機(jī)上保存字符編碼和一些文本控制命令,多個(gè)字符型數(shù)據(jù)和字符串結(jié)束符組成的序列稱為字符串。Linux系統(tǒng)與其他大多數(shù)操作系統(tǒng)一樣,支持ASCII編碼對(duì)字符編碼,每個(gè)字符占用
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 股權(quán)抵押擔(dān)保協(xié)議書年
- 肥料農(nóng)藥采購(gòu)合同樣本
- 編程語(yǔ)言與軟件開發(fā)職業(yè)規(guī)劃作業(yè)指導(dǎo)書
- 2025年贛州b2貨運(yùn)資格證多少道題
- 2025年桂林貨運(yùn)從業(yè)資格證模擬考試駕考
- 2025年洛陽(yáng)貨車從業(yè)資格證考什么
- 2025年博爾塔拉下載貨運(yùn)從業(yè)資格證模擬考試題
- 2025年安徽貨運(yùn)車輛從業(yè)資格證考試題
- 疾病篩查服務(wù)合同(2篇)
- 2024-2025學(xué)年高中物理第14章電磁波第3節(jié)電磁波的發(fā)射和接收課后練習(xí)含解析新人教版選修3-4
- 小學(xué)高年級(jí)閱讀指導(dǎo)課教案(12篇)
- 英語(yǔ)新課標(biāo)(英文版)-20220602111643
- 屋頂分布式光伏電站施工組織設(shè)計(jì)方案
- 中職解剖學(xué)基礎(chǔ)知識(shí)重點(diǎn)筆記
- 藥品管理法律制度的創(chuàng)新與探索
- 蘇教版三年級(jí)下冊(cè)數(shù)學(xué)計(jì)算能手1000題帶答案
- 道路清障救援作業(yè)服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 醫(yī)療器械產(chǎn)品簡(jiǎn)介
- 府谷縣田家寨鎮(zhèn)新田煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 邁瑞醫(yī)療 -醫(yī)療器械-從全球器械巨頭發(fā)展看邁瑞海外進(jìn)擊之路
- 2014年10月自考00567馬列文論選讀試題及答案含解析
評(píng)論
0/150
提交評(píng)論