本書是一本軟件和硬件知識豐富而全面的計算機入門教材,其內(nèi)容重點不是放在計算機的具體操作說明上,也不是表面地講一些技術(shù)發(fā)展狀況,而是在計算機和互聯(lián)網(wǎng)的基礎(chǔ)知識和技術(shù)原理上,努力從概念層面作全面清晰的講解。結(jié)合具體的例子,講解軟件和硬件組成的相關(guān)概念,以深入淺出的文字說明其工作原理。本書的內(nèi)容包括4個方面: 信息技術(shù)發(fā)展概貌、計算機互聯(lián)網(wǎng)技術(shù)、計算機的組成原理、程序設(shè)計方法。本教材“立足基礎(chǔ)、因材施教、強化實踐”.
本書適合作為高等學(xué)校理工專業(yè)本科生的計算概論、計算機導(dǎo)論等計算機入門課程的教學(xué)用書,也可以作為參與計算機和信息科學(xué)競賽項目的參考書。
每一個剛涉足計算機領(lǐng)域的人都很想知道怎樣才能盡快地學(xué)習(xí)到最有用的計算機知識。首先要建議的是,在一開始請不要僅限于技能培訓(xùn)式的學(xué)習(xí)。學(xué)習(xí)計算機知識不像學(xué)習(xí)汽車駕駛技術(shù),僅局限于交通規(guī)則和駕駛操作的初等培訓(xùn)是不夠的。有些使用過計算機的人可能認為,計算機基本知識的學(xué)習(xí)沒有什么用,為了學(xué)會計算機只需要多使用多練習(xí)就可以了。雖然這種意見包含有正確成分,一個人不參與實際使用計算機,不取得第一手經(jīng)驗是不會真正懂得計算機的。但是,只是能夠快速麻利地使用計算機,能夠用它進行寫作或繪制圖表,就認為可以成為一個計算機的行家里手,那就錯了。計算機的學(xué)習(xí)從一開始就要強調(diào)基本概念的理解,強調(diào)掌握計算機和通信網(wǎng)絡(luò)的基本原理,不能局限于記憶操作步驟和熟練工作技能。僅僅學(xué)會文字編輯、網(wǎng)頁制作等技能是不夠的。計算機科學(xué)和技術(shù)知識日新月異,硬件和軟件新技術(shù)層出不窮,它們的應(yīng)用種類也是千變?nèi)f化,技能方面的知識往往陳舊過時得非?,停留在某些常用軟件的使用技能上是無法適應(yīng)未來發(fā)展的。
《計算概論》這本書為讀者提供了計算機入門知識。為了盡快進入計算機知識的大門,我們的建議是: 打好基礎(chǔ)才是捷徑。計算機和信息網(wǎng)絡(luò)將會伴隨你的一生,計算機將會成為你的貼身助手。學(xué)會靈活運用計算機,計算機就會聽從主人的操縱,成為適合你個性需要的有用工具。
古人云: “工欲善其事,必先利其器”,不要吝惜對工具的犀利打磨功夫,打好基礎(chǔ)才是靈活運用的前提。我們對基礎(chǔ)學(xué)習(xí)提出幾條具體建議: ①不要局限于記憶,遇到的技術(shù)名詞不必拘泥于每一個詞都弄明白,遇到難懂的概念,可以做一個記號繼續(xù)往下讀。書中內(nèi)容可以反復(fù)閱讀,回過來溫習(xí)往往會有新的收獲。上機練習(xí)以及與他人的討論,都會幫助對問題的認識,加深對概念的理解。②一定要有上機實踐。本書雖然沒有偏重具體講解上機、上網(wǎng)和使用軟件的具體操作過程,但是建議讀者一定要參照相關(guān)的操作教程,獲得計算機操作系統(tǒng)、文字編輯、上網(wǎng)以及網(wǎng)頁制作等方面的具體經(jīng)驗。③在實際操縱計算機時,如果它不聽話,一定不要氣餒!皸l條大路通北京”,為了讓計算機完成某一件工作,決不會只有一條途徑,一般都存在很多種辦法。當遇到挫折時一定要停下來想一想,設(shè)法換一種思維、另找一種辦法去完成它。④黑箱原理。機器內(nèi)部的計算機工作原理雖然比較復(fù)雜,但是作為使用者不必全部了解清楚復(fù)雜原理才能運用它。黑箱原理的意思是: 為了突出一個系統(tǒng)的功能和特點,應(yīng)該忽略與當前主要問題無關(guān)的細節(jié),把那些次要的復(fù)雜東西遮蓋起來,就好像將復(fù)雜系統(tǒng)放在一個黑箱里面,外面僅留著最主要的部分。也就是說,在觀念上,要盡量突出自己關(guān)心的主要問題。例如,為了錄入一篇文章,需要了解計算機鍵盤和顯示屏怎樣配合工作的基本原理,但是并不需要全面了解鍵盤、計算機和顯示屏三者配合工作的細節(jié)。為了編輯文章,開始只需要理解與文字編輯有關(guān)的操作,輸入的文字能夠存儲在計算機里等?傊,在學(xué)習(xí)上不必一次求全,采取一步步深入,邊實踐邊深入理解的策略更好些。
前 言 計算概論(第2版) 本教材的教學(xué)理念是“立足基礎(chǔ)、因材施教、強化實踐”。對新入學(xué)的大學(xué)生,其基礎(chǔ)教育內(nèi)容包括了原理性的計算概論和程序設(shè)計基礎(chǔ)兩個部分。雖然在高中階段,很多學(xué)生已經(jīng)接受了計算機和因特網(wǎng)的軟硬件以及二進制、文字處理、操作系統(tǒng)等知識,也包括基本的程序設(shè)計訓(xùn)練,但是只有少數(shù)學(xué)生真正理解計算和網(wǎng)絡(luò)通信的基本特征?紤]到這些情況,本教材前7章包括了計算與網(wǎng)絡(luò)通信的原理性講解,后續(xù)4章則是程序設(shè)計基礎(chǔ)。在課程教學(xué)上,建議可根據(jù)學(xué)生的不同知識層次,設(shè)計不同的教學(xué)重點要求,以滿足學(xué)生的不同需求。其目的是爭取讓每個學(xué)生都能夠在課堂中保持“新鮮”感,既能避免“跟不上”,也可以設(shè)法避免“嚼冷飯”、“進度慢”的現(xiàn)象。對于基礎(chǔ)好、領(lǐng)悟力強的學(xué)生可以組成“實驗班”教學(xué),而大部分學(xué)生在普通班學(xué)習(xí)。原來沒有基礎(chǔ)的學(xué)生,初期還可以為其開設(shè)輔導(dǎo)班進行個別輔導(dǎo)。在授課中,一般采取基礎(chǔ)訓(xùn)練(30%) 、綜合實踐(40%)和創(chuàng)新培養(yǎng)(30%)相結(jié)合的培養(yǎng)模式。
在講解程序設(shè)計基礎(chǔ)時,要使學(xué)生通過較多的上機訓(xùn)練,掌握程序設(shè)計的基本方法。通過實踐環(huán)節(jié),逐步提高程序設(shè)計的技巧,建立良好的編制程序習(xí)慣,寫出規(guī)范的程序代碼,為后續(xù)課程打好基礎(chǔ)。除了讓學(xué)生掌握基本功之外,也要強調(diào)對問題求解的抽象能力的培養(yǎng),學(xué)習(xí)如何把實際問題用數(shù)學(xué)的形式表示。為此,教材提供了一些經(jīng)典的算法知識,例如遞歸、貪心算法和動態(tài)規(guī)劃等,以開闊學(xué)生解題的思路。
在具體教學(xué)內(nèi)容上,建議沿著計算機科學(xué)發(fā)展的主線,介紹重要的基本概念,不必面面俱到。同時,也要爭取讓學(xué)生了解當前計算機領(lǐng)域出現(xiàn)的新思想、新技術(shù)、新方法。為此,每一年都要爭取在教學(xué)內(nèi)容上做必要更新。為了配合實驗教學(xué),作者在教育網(wǎng)上提供了在線實驗教學(xué)平臺,即程序設(shè)計在線評測系統(tǒng)POJ (http: //acm.pku.edu.cn/JudgeOnline和http://poj.grids.cn) ,以及面向非計算機專業(yè)學(xué)生學(xué)習(xí)實踐的編程網(wǎng)格系統(tǒng)PG (http://programming.grids.cn) 。它是一個開放的網(wǎng)絡(luò)教學(xué)環(huán)境,為教師和學(xué)生提供在線的編程實踐和在線考試環(huán)境,提供豐富的教學(xué)資源和教學(xué)輔導(dǎo)。該平臺還能夠與大學(xué)生程序設(shè)計競賽結(jié)合,努力培養(yǎng)學(xué)生的創(chuàng)新能力。
該實驗教學(xué)平臺已經(jīng)建設(shè)了一個能夠適合各專業(yè)背景的、循序漸進的上機編程題庫。利用POJ/PG系統(tǒng),任課教師可以根據(jù)課程進度對學(xué)生程序設(shè)計實習(xí)內(nèi)容進行編排(包括作業(yè)、練習(xí)和競賽等)。學(xué)生可以通過網(wǎng)絡(luò)在線提交程序設(shè)計的源代碼,由POJ/PG系統(tǒng)自動對學(xué)生提交的程序進行驗證并實時通知結(jié)果。POJ/PG系統(tǒng)除了用于教學(xué)之外,還面向社會開放,吸引了大量的程序設(shè)計愛好者的參與和討論。此外,該教學(xué)平臺還提供一些大型程序設(shè)計練習(xí),以便培養(yǎng)學(xué)生的團隊合作能力。這種在線程序設(shè)計驗證平臺以及按照團隊協(xié)作方式的在線實踐活動,激發(fā)了學(xué)生的實習(xí)興趣,提高了學(xué)生的學(xué)習(xí)積極性與主動性。
在教學(xué)輔導(dǎo)方面,建議采用助教制度。每個本科生小班(約30人)可以安排1名助教,進行全程的教學(xué)輔導(dǎo)。采用這種小班實踐輔導(dǎo)和在線評估,可以保證教學(xué)效果,也提供了助教的考核依據(jù)。
目前,POJ系統(tǒng)已經(jīng)擁有注冊用戶80 000多個,在PG系統(tǒng)上也開設(shè)了10余門課程。系統(tǒng)不僅在北京大學(xué)得到應(yīng)用,在全國程序設(shè)計競賽和一些兄弟院校已經(jīng)采用POJ/PG系統(tǒng)進行教學(xué)實踐。
本書是在2005年出版的《計算概論》(許卓群,李文新,羅英偉. 計算概論. 北京: 清華大學(xué)出版社,2005)基礎(chǔ)上編寫的。這次教材編寫工作被遴選為教育部普通高等教育“十一五”國家級教材規(guī)劃選題、中國新聞出版總署“十一五”國家重點圖書。許卓群編寫第1章、第6章和第7章,羅英偉編寫第3章至第5章,李文新編寫第8章至第11章,汪小林編寫第2章、第12章和7.5節(jié)。
和前述2005年《計算概論》相比,本書補充了近年來教學(xué)實踐的經(jīng)驗總結(jié)以及信息技術(shù)新近發(fā)展的成果。但從教學(xué)理念來看,本書內(nèi)容的很多方面源自于這些年和本書作者一起參與教學(xué)實踐的教學(xué)組其他同仁,來自于他們的許多貢獻。
作 者
2009年8月
第1章 計算機與信息社會11.1 信息與信息服務(wù)1
1.1.1 信息服務(wù)1
1.1.2 數(shù)據(jù)是編碼的信息2
1.1.3 二進制信息編碼3
1.1.4 信息編碼長度4
1.1.5 信息互聯(lián)網(wǎng)絡(luò)和國際互聯(lián)網(wǎng)4
1.1.6 計算機發(fā)展的四代歷程6
1.1.7 大規(guī)模集成電路與摩爾定律7
1.1.8 微型計算機8
1.1.9 人和機器的雙向互動9
1.2 數(shù)字計算機的主要特征10
1.2.1 計算機的基本組成11
1.2.2 CPU和主存儲器12
1.2.3 數(shù)據(jù)--整數(shù)的二進制編碼14
1.2.4 程序--匯編程序語言及高級程序語言17
1.3 國際互聯(lián)網(wǎng)的構(gòu)成 19
1.3.1 局域網(wǎng)和廣域網(wǎng)19
1.3.2 局域網(wǎng)與路由器20
1.3.3 無線網(wǎng)21
1.4 CPU的二進制算術(shù)運算和邏輯運算22
1.4.1 定點數(shù)與浮點數(shù)22
1.4.2 負數(shù)的表示法23
1.4.3 CPU的二進制邏輯運算26
1.5 習(xí)題27
第2章 互聯(lián)網(wǎng)與信息共享29
2.1 互聯(lián)網(wǎng)的歷史發(fā)展29
2.2 互聯(lián)網(wǎng)的通信協(xié)議30
2.2.1 通信協(xié)議棧30
2.2.2 網(wǎng)絡(luò)層協(xié)議31
2.2.3 傳輸層協(xié)議31
2.3 互聯(lián)網(wǎng)上的應(yīng)用32
2.3.1 電子郵件收發(fā)33
2.3.2 遠程文件傳輸33
2.3.3 網(wǎng)頁瀏覽34
2.3.4 即時通信34
2.3.5 P2P文件共享34
2.4 接入互聯(lián)網(wǎng)35
2.4.1 通過小區(qū)寬帶或校園網(wǎng)接入互聯(lián)網(wǎng)35
2.4.2 通過ADSL接入因特網(wǎng)38
2.5 組建自己的局域網(wǎng)39
2.6 習(xí)題42
目 錄 計算概論(第2版)第3章 計算機的基本組成43
3.1 計算機的硬件組成43
3.1.1 計算機的邏輯結(jié)構(gòu)44
3.1.2 計算機的主要部件46
3.1.3 計算機外圍設(shè)備56
3.1.4 網(wǎng)絡(luò)計算機63
3.2 計算機的軟件組成64
3.2.1 系統(tǒng)軟件65
3.2.2 應(yīng)用軟件67
3.3 計算機硬件與軟件的協(xié)同工作67
3.4 購買自己的計算機69
3.4.1 選擇硬件69
3.4.2 安裝操作系統(tǒng)70
3.4.3 安裝應(yīng)用軟件70
3.5 有關(guān)計算機發(fā)展的人物和組織70
3.5.1 圖靈和圖靈獎70
3.5.2 馮·諾依曼71
3.5.3 計算機界具有影響力的兩大國際學(xué)術(shù)組織72
3.6 習(xí)題73
第4章 信息表示與信息輸入輸出74
4.1 計算機能幫我們做什么74
4.1.1 閱讀與寫作74
4.1.2 音樂75
4.1.3 圖片76
4.1.4 動畫與電影76
4.1.5 游戲77
4.2 信息表示及信息輸入輸出78
4.2.1 二進制信息編碼78
4.2.2 信息輸入輸出的本質(zhì)79
4.2.3 計算機系統(tǒng)的信息交換環(huán)境81
4.3 信息的編碼及其輸入與輸出83
4.3.1 數(shù)值的表示范圍和精度83
4.3.2 指令編碼84
4.3.3 聲音編碼及其輸入與輸出85
4.3.4 顏色編碼及其展示87
4.3.5 圖形/圖像編碼及其輸入與輸出88
4.3.6 字符編碼及其輸入與輸出93
4.3.7 動畫/影像編碼105
4.3.8 基本的編碼規(guī)則106
4.3.9 復(fù)雜編碼106
4.4 多媒體技術(shù)107
4.4.1 多媒體技術(shù)的基本概念107
4.4.2 多媒體信息的壓縮編碼109
4.4.3 多媒體應(yīng)用軟件111
4.5 人機交互112
4.5.1 圖形用戶界面112
4.5.2 人機交互技術(shù)的發(fā)展114
4.6 習(xí)題116
第5章 信息存儲118
5.1 存儲設(shè)備的性能指標119
5.2 計算機存儲系統(tǒng)的層次結(jié)構(gòu)120
5.3 磁盤的結(jié)構(gòu)與工作原理123
5.3.1 磁介質(zhì)的存儲原理123
5.3.2 磁盤的盤片124
5.3.3 磁盤的結(jié)構(gòu)125
5.3.4 磁盤的使用128
5.4 其他存儲設(shè)備129
5.4.1 磁帶及磁帶機129
5.4.2 光盤存儲131
5.4.3 閃存技術(shù)133
5.5 習(xí)題136
第6章 CPU的信息處理137
6.1 圖靈機137
6.1.1 圖靈機模型137
6.1.2 圖靈機計算舉例139
6.1.3 計算機科學(xué)理論的發(fā)展里程碑142
6.2 指令系統(tǒng)142
6.2.1 指令系統(tǒng)簡介142
6.2.2 指令編碼143
6.3 中央處理器144
6.3.1 CPU的組成144
6.3.2 指令的執(zhí)行146
6.3.3 程序中斷147
6.4 主存儲器及其與CPU的信息交換148
6.4.1 主存儲器的組成148
6.4.2 存儲單元及存儲地址149
6.4.3 存儲總線與數(shù)據(jù)傳輸150
6.5 習(xí)題151
第7章 計算機軟件與硬件的協(xié)同工作153
7.1 計算機中的信息資源與信息服務(wù)153
7.1.1 硬件資源與軟件資源153
7.1.2 資源管理和信息服務(wù)155
7.1.3 虛擬服務(wù)技術(shù)155
7.2 操作系統(tǒng)157
7.2.1 操作系統(tǒng)的主要功能和當前流行的操作系統(tǒng)類型157
7.2.2 CPU管理和任務(wù)管理159
7.2.3 I/O外部設(shè)備管理160
7.2.4 存儲資源管理161
7.2.5 用戶界面164
7.3 文件系統(tǒng)168
7.3.1 文件和文件夾168
7.3.2 目錄結(jié)構(gòu)下的文件訪問171
7.3.3 硬盤的文件存儲結(jié)構(gòu)173
7.3.4 Windows資源管理器175
7.3.5 NTFS176
7.4 Windows操作系統(tǒng)的維護管理179
7.4.1 磁盤管理工具180
7.4.2 磁盤碎片整理工具181
7.4.3 視窗顯示屬性與高級外觀設(shè)置183
7.4.4 設(shè)備管理器184
7.4.5 任務(wù)管理器與“開始”圖標185
7.4.6 添加和刪除程序的工具188
7.5 系統(tǒng)安全189
7.5.1 信息加密189
7.5.2 計算機病毒190
7.6 習(xí)題193
第8章 程序設(shè)計--入門篇195
8.1 學(xué)習(xí)程序設(shè)計五要素195
8.1.1 理解程序運行過程195
8.1.2 程序設(shè)計語言196
8.1.3 掌握一些基本的算法196
8.1.4 學(xué)習(xí)完整的解決問題的過程196
8.1.5 多做練習(xí)196
8.2 程序設(shè)計的一般過程197
8.2.1 分析問題尋求算法197
8.2.2 程序設(shè)計197
8.2.3 程序?qū)崿F(xiàn)198
8.2.4 程序正確性檢驗198
8.3 程序設(shè)計語言198
8.3.1 機器語言199
8.3.2 匯編語言199
8.3.3 高級程序設(shè)計語言205
8.4 編程環(huán)境208
8.4.1 基本概念208
8.4.2 Visual C++209
8.5 程序閱讀理解213
8.5.1 Hello World214
8.5.2 輸入輸出215
8.5.3 表達式216
8.5.4 分支語句217
8.5.5 循環(huán)語句220
8.5.6 判斷語句221
8.5.7 隨機數(shù)222
8.6 程序書寫規(guī)則224
8.6.1 變量的命名224
8.6.2 語句的層次和對齊224
8.6.3 注釋225
8.6.4 寫程序的一些禁忌226
8.7 習(xí)題227
第9章 程序設(shè)計--基本框架230
9.1 程序的基本框架230
9.2 標識符和關(guān)鍵字233
9.3 數(shù)據(jù)類型、常量和變量234
9.3.1 數(shù)據(jù)類型234
9.3.2 常量235
9.3.3 變量235
9.4 運算符和表達式239
9.4.1 運算符240
9.4.2 算術(shù)表達式240
9.4.3 關(guān)系表達式241
9.4.4 邏輯表達式241
9.4.5 位運算表達式241
9.4.6 賦值表達式242
9.4.7 條件表達式242
9.4.8 數(shù)據(jù)類型轉(zhuǎn)換242
9.4.9 運算符的優(yōu)先級和結(jié)合性243
9.5 語句243
9.5.1 if-else244
9.5.2 switch-case/default246
9.5.3 for248
9.5.4 while250
9.5.5 do-while251
9.5.6 break252
9.5.7 continue253
9.5.8 空語句255
9.6 控制臺輸入和輸出255
9.6.1 數(shù)據(jù)輸入255
9.6.2 數(shù)據(jù)輸出256
9.6.3 一個包含輸入輸出語句的完整程序257
9.7 初等算法(計數(shù)、統(tǒng)計和數(shù)學(xué)運算等)257
9.8 習(xí)題261
第10章 程序設(shè)計--數(shù)組和結(jié)構(gòu)263
10.1 數(shù)組263
10.1.1 數(shù)組的定義263
10.1.2 數(shù)組元素的賦值264
10.1.3 數(shù)組的訪問和遍歷264
10.1.4 例題265
10.1.5 數(shù)組使用中的注意事項270
10.1.6 多維數(shù)組270
10.2 結(jié)構(gòu)273
10.2.1 結(jié)構(gòu)類型和結(jié)構(gòu)類型變量的定義273
10.2.2 結(jié)構(gòu)類型變量的訪問與賦值276
10.2.3 例題276
10.2.4 結(jié)構(gòu)使用中的注意事項 278
10.3 指針278
10.3.1 指針的概念、定義和使用 278
10.3.2 指向結(jié)構(gòu)和數(shù)組元素的指針 279
10.3.3 指針的加減法運算280
10.3.4 指針應(yīng)用的例子 281
10.4 字符串281
10.4.1 字符數(shù)組、字符串和字符指針281
10.4.2 字符串變量的初始化及輸入輸出 282
10.4.3 常用的字符串處理函數(shù)284
10.4.4 字符串應(yīng)用的例子285
10.5 動態(tài)數(shù)組286
10.5.1 動態(tài)數(shù)組的申請286
10.5.2 動態(tài)數(shù)組的訪問與賦值287
10.5.3 動態(tài)數(shù)組空間的釋放288
10.5.4 內(nèi)存分配釋放的注意事項288
10.5.5 使用動態(tài)數(shù)組的例子289
10.6 文件的輸入輸出292
10.6.1 創(chuàng)建文件292
10.6.2 打開和關(guān)閉文件292
10.6.3 從文件中讀入數(shù)據(jù)293
10.6.4 將數(shù)據(jù)寫入文本文件294
10.6.5 格式化文件輸入輸出294
10.6.6 格式化文件輸入輸出例題296
10.7 排序297
10.7.1 起泡排序297
10.7.2 插入排序298
10.7.3 查找299
10.7.4 順序查找299
10.7.5 二分法查找300
10.8 習(xí)題301
第11章 程序設(shè)計--函數(shù)304
11.1 函數(shù)304
11.1.1 函數(shù)的定義304
11.1.2 函數(shù)的調(diào)用305
11.1.3 參數(shù)傳遞和返回值306
11.1.4 傳值306
11.1.5 傳地址308
11.1.6 返回值308
11.1.7 全局變量和局部變量310
11.2 模塊化程序設(shè)計思想(問題分解與抽象)312
11.3 遞歸314
11.3.1 函數(shù)的遞歸調(diào)用314
11.3.2 用遞歸的思想解決問題314
11.4 樣例程序317
11.5 習(xí)題320
第12章 問題分析與算法設(shè)計323
12.1 算法的效率323
12.1.1 二分搜索323
12.1.2 選擇排序和插入排序326
12.2 計算復(fù)雜性327
12.2.1 可計算與計算復(fù)雜性327
12.2.2 時間復(fù)雜性328
12.2.3 O符號329
12.2.4 算法的時間復(fù)雜性分析330
12.2.5 算法的空間復(fù)雜性330
12.3 問題分析與算法優(yōu)化331
12.3.1 完全平方數(shù)331
12.3.2 約瑟夫問題332
12.3.3 哥德巴赫猜想337
12.4 遞歸340
12.5 動態(tài)規(guī)劃343
12.6 回溯346
12.7 習(xí)題350
參考文獻351