本書是一本軟件和硬件知識豐富而全面的計算機入門教材,其內(nèi)容重點不是放在計算機的具體操作說明上,也不是表面地講一些技術發(fā)展狀況,而是在計算機和互聯(lián)網(wǎng)的基礎知識和技術原理上,努力從概念層面作全面清晰的講解。結合具體的例子,講解軟件和硬件組成的相關概念,以深入淺出的文字說明其工作原理。本書的內(nèi)容包括4個方面: 信息技術發(fā)展概貌、計算機互聯(lián)網(wǎng)技術、計算機的組成原理、程序設計方法。本教材“立足基礎、因材施教、強化實踐”.
本書適合作為高等學校理工專業(yè)本科生的計算概論、計算機導論等計算機入門課程的教學用書,也可以作為參與計算機和信息科學競賽項目的參考書。
每一個剛涉足計算機領域的人都很想知道怎樣才能盡快地學習到最有用的計算機知識。首先要建議的是,在一開始請不要僅限于技能培訓式的學習。學習計算機知識不像學習汽車駕駛技術,僅局限于交通規(guī)則和駕駛操作的初等培訓是不夠的。有些使用過計算機的人可能認為,計算機基本知識的學習沒有什么用,為了學會計算機只需要多使用多練習就可以了。雖然這種意見包含有正確成分,一個人不參與實際使用計算機,不取得第一手經(jīng)驗是不會真正懂得計算機的。但是,只是能夠快速麻利地使用計算機,能夠用它進行寫作或繪制圖表,就認為可以成為一個計算機的行家里手,那就錯了。計算機的學習從一開始就要強調(diào)基本概念的理解,強調(diào)掌握計算機和通信網(wǎng)絡的基本原理,不能局限于記憶操作步驟和熟練工作技能。僅僅學會文字編輯、網(wǎng)頁制作等技能是不夠的。計算機科學和技術知識日新月異,硬件和軟件新技術層出不窮,它們的應用種類也是千變?nèi)f化,技能方面的知識往往陳舊過時得非?欤A粼谀承┏S密浖氖褂眉寄苌鲜菬o法適應未來發(fā)展的。
《計算概論》這本書為讀者提供了計算機入門知識。為了盡快進入計算機知識的大門,我們的建議是: 打好基礎才是捷徑。計算機和信息網(wǎng)絡將會伴隨你的一生,計算機將會成為你的貼身助手。學會靈活運用計算機,計算機就會聽從主人的操縱,成為適合你個性需要的有用工具。
古人云: “工欲善其事,必先利其器”,不要吝惜對工具的犀利打磨功夫,打好基礎才是靈活運用的前提。我們對基礎學習提出幾條具體建議: ①不要局限于記憶,遇到的技術名詞不必拘泥于每一個詞都弄明白,遇到難懂的概念,可以做一個記號繼續(xù)往下讀。書中內(nèi)容可以反復閱讀,回過來溫習往往會有新的收獲。上機練習以及與他人的討論,都會幫助對問題的認識,加深對概念的理解。②一定要有上機實踐。本書雖然沒有偏重具體講解上機、上網(wǎng)和使用軟件的具體操作過程,但是建議讀者一定要參照相關的操作教程,獲得計算機操作系統(tǒng)、文字編輯、上網(wǎng)以及網(wǎng)頁制作等方面的具體經(jīng)驗。③在實際操縱計算機時,如果它不聽話,一定不要氣餒!皸l條大路通北京”,為了讓計算機完成某一件工作,決不會只有一條途徑,一般都存在很多種辦法。當遇到挫折時一定要停下來想一想,設法換一種思維、另找一種辦法去完成它。④黑箱原理。機器內(nèi)部的計算機工作原理雖然比較復雜,但是作為使用者不必全部了解清楚復雜原理才能運用它。黑箱原理的意思是: 為了突出一個系統(tǒng)的功能和特點,應該忽略與當前主要問題無關的細節(jié),把那些次要的復雜東西遮蓋起來,就好像將復雜系統(tǒng)放在一個黑箱里面,外面僅留著最主要的部分。也就是說,在觀念上,要盡量突出自己關心的主要問題。例如,為了錄入一篇文章,需要了解計算機鍵盤和顯示屏怎樣配合工作的基本原理,但是并不需要全面了解鍵盤、計算機和顯示屏三者配合工作的細節(jié)。為了編輯文章,開始只需要理解與文字編輯有關的操作,輸入的文字能夠存儲在計算機里等。總之,在學習上不必一次求全,采取一步步深入,邊實踐邊深入理解的策略更好些。
前 言 計算概論(第2版) 本教材的教學理念是“立足基礎、因材施教、強化實踐”。對新入學的大學生,其基礎教育內(nèi)容包括了原理性的計算概論和程序設計基礎兩個部分。雖然在高中階段,很多學生已經(jīng)接受了計算機和因特網(wǎng)的軟硬件以及二進制、文字處理、操作系統(tǒng)等知識,也包括基本的程序設計訓練,但是只有少數(shù)學生真正理解計算和網(wǎng)絡通信的基本特征?紤]到這些情況,本教材前7章包括了計算與網(wǎng)絡通信的原理性講解,后續(xù)4章則是程序設計基礎。在課程教學上,建議可根據(jù)學生的不同知識層次,設計不同的教學重點要求,以滿足學生的不同需求。其目的是爭取讓每個學生都能夠在課堂中保持“新鮮”感,既能避免“跟不上”,也可以設法避免“嚼冷飯”、“進度慢”的現(xiàn)象。對于基礎好、領悟力強的學生可以組成“實驗班”教學,而大部分學生在普通班學習。原來沒有基礎的學生,初期還可以為其開設輔導班進行個別輔導。在授課中,一般采取基礎訓練(30%) 、綜合實踐(40%)和創(chuàng)新培養(yǎng)(30%)相結合的培養(yǎng)模式。
在講解程序設計基礎時,要使學生通過較多的上機訓練,掌握程序設計的基本方法。通過實踐環(huán)節(jié),逐步提高程序設計的技巧,建立良好的編制程序習慣,寫出規(guī)范的程序代碼,為后續(xù)課程打好基礎。除了讓學生掌握基本功之外,也要強調(diào)對問題求解的抽象能力的培養(yǎng),學習如何把實際問題用數(shù)學的形式表示。為此,教材提供了一些經(jīng)典的算法知識,例如遞歸、貪心算法和動態(tài)規(guī)劃等,以開闊學生解題的思路。
在具體教學內(nèi)容上,建議沿著計算機科學發(fā)展的主線,介紹重要的基本概念,不必面面俱到。同時,也要爭取讓學生了解當前計算機領域出現(xiàn)的新思想、新技術、新方法。為此,每一年都要爭取在教學內(nèi)容上做必要更新。為了配合實驗教學,作者在教育網(wǎng)上提供了在線實驗教學平臺,即程序設計在線評測系統(tǒng)POJ (http: //acm.pku.edu.cn/JudgeOnline和http://poj.grids.cn) ,以及面向非計算機專業(yè)學生學習實踐的編程網(wǎng)格系統(tǒng)PG (http://programming.grids.cn) 。它是一個開放的網(wǎng)絡教學環(huán)境,為教師和學生提供在線的編程實踐和在線考試環(huán)境,提供豐富的教學資源和教學輔導。該平臺還能夠與大學生程序設計競賽結合,努力培養(yǎng)學生的創(chuàng)新能力。
該實驗教學平臺已經(jīng)建設了一個能夠適合各專業(yè)背景的、循序漸進的上機編程題庫。利用POJ/PG系統(tǒng),任課教師可以根據(jù)課程進度對學生程序設計實習內(nèi)容進行編排(包括作業(yè)、練習和競賽等)。學生可以通過網(wǎng)絡在線提交程序設計的源代碼,由POJ/PG系統(tǒng)自動對學生提交的程序進行驗證并實時通知結果。POJ/PG系統(tǒng)除了用于教學之外,還面向社會開放,吸引了大量的程序設計愛好者的參與和討論。此外,該教學平臺還提供一些大型程序設計練習,以便培養(yǎng)學生的團隊合作能力。這種在線程序設計驗證平臺以及按照團隊協(xié)作方式的在線實踐活動,激發(fā)了學生的實習興趣,提高了學生的學習積極性與主動性。
在教學輔導方面,建議采用助教制度。每個本科生小班(約30人)可以安排1名助教,進行全程的教學輔導。采用這種小班實踐輔導和在線評估,可以保證教學效果,也提供了助教的考核依據(jù)。
目前,POJ系統(tǒng)已經(jīng)擁有注冊用戶80 000多個,在PG系統(tǒng)上也開設了10余門課程。系統(tǒng)不僅在北京大學得到應用,在全國程序設計競賽和一些兄弟院校已經(jīng)采用POJ/PG系統(tǒng)進行教學實踐。
本書是在2005年出版的《計算概論》(許卓群,李文新,羅英偉. 計算概論. 北京: 清華大學出版社,2005)基礎上編寫的。這次教材編寫工作被遴選為教育部普通高等教育“十一五”國家級教材規(guī)劃選題、中國新聞出版總署“十一五”國家重點圖書。許卓群編寫第1章、第6章和第7章,羅英偉編寫第3章至第5章,李文新編寫第8章至第11章,汪小林編寫第2章、第12章和7.5節(jié)。
和前述2005年《計算概論》相比,本書補充了近年來教學實踐的經(jīng)驗總結以及信息技術新近發(fā)展的成果。但從教學理念來看,本書內(nèi)容的很多方面源自于這些年和本書作者一起參與教學實踐的教學組其他同仁,來自于他們的許多貢獻。
作 者
2009年8月
第1章 計算機與信息社會11.1 信息與信息服務1
1.1.1 信息服務1
1.1.2 數(shù)據(jù)是編碼的信息2
1.1.3 二進制信息編碼3
1.1.4 信息編碼長度4
1.1.5 信息互聯(lián)網(wǎng)絡和國際互聯(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)的構成 19
1.3.1 局域網(wǎng)和廣域網(wǎng)19
1.3.2 局域網(wǎng)與路由器20
1.3.3 無線網(wǎng)21
1.4 CPU的二進制算術運算和邏輯運算22
1.4.1 定點數(shù)與浮點數(shù)22
1.4.2 負數(shù)的表示法23
1.4.3 CPU的二進制邏輯運算26
1.5 習題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)絡層協(xié)議31
2.2.3 傳輸層協(xié)議31
2.3 互聯(lián)網(wǎ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 習題42
目 錄 計算概論(第2版)第3章 計算機的基本組成43
3.1 計算機的硬件組成43
3.1.1 計算機的邏輯結構44
3.1.2 計算機的主要部件46
3.1.3 計算機外圍設備56
3.1.4 網(wǎng)絡計算機63
3.2 計算機的軟件組成64
3.2.1 系統(tǒng)軟件65
3.2.2 應用軟件67
3.3 計算機硬件與軟件的協(xié)同工作67
3.4 購買自己的計算機69
3.4.1 選擇硬件69
3.4.2 安裝操作系統(tǒng)70
3.4.3 安裝應用軟件70
3.5 有關計算機發(fā)展的人物和組織70
3.5.1 圖靈和圖靈獎70
3.5.2 馮·諾依曼71
3.5.3 計算機界具有影響力的兩大國際學術組織72
3.6 習題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 復雜編碼106
4.4 多媒體技術107
4.4.1 多媒體技術的基本概念107
4.4.2 多媒體信息的壓縮編碼109
4.4.3 多媒體應用軟件111
4.5 人機交互112
4.5.1 圖形用戶界面112
4.5.2 人機交互技術的發(fā)展114
4.6 習題116
第5章 信息存儲118
5.1 存儲設備的性能指標119
5.2 計算機存儲系統(tǒng)的層次結構120
5.3 磁盤的結構與工作原理123
5.3.1 磁介質(zhì)的存儲原理123
5.3.2 磁盤的盤片124
5.3.3 磁盤的結構125
5.3.4 磁盤的使用128
5.4 其他存儲設備129
5.4.1 磁帶及磁帶機129
5.4.2 光盤存儲131
5.4.3 閃存技術133
5.5 習題136
第6章 CPU的信息處理137
6.1 圖靈機137
6.1.1 圖靈機模型137
6.1.2 圖靈機計算舉例139
6.1.3 計算機科學理論的發(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 習題151
第7章 計算機軟件與硬件的協(xié)同工作153
7.1 計算機中的信息資源與信息服務153
7.1.1 硬件資源與軟件資源153
7.1.2 資源管理和信息服務155
7.1.3 虛擬服務技術155
7.2 操作系統(tǒng)157
7.2.1 操作系統(tǒng)的主要功能和當前流行的操作系統(tǒng)類型157
7.2.2 CPU管理和任務管理159
7.2.3 I/O外部設備管理160
7.2.4 存儲資源管理161
7.2.5 用戶界面164
7.3 文件系統(tǒng)168
7.3.1 文件和文件夾168
7.3.2 目錄結構下的文件訪問171
7.3.3 硬盤的文件存儲結構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 視窗顯示屬性與高級外觀設置183
7.4.4 設備管理器184
7.4.5 任務管理器與“開始”圖標185
7.4.6 添加和刪除程序的工具188
7.5 系統(tǒng)安全189
7.5.1 信息加密189
7.5.2 計算機病毒190
7.6 習題193
第8章 程序設計--入門篇195
8.1 學習程序設計五要素195
8.1.1 理解程序運行過程195
8.1.2 程序設計語言196
8.1.3 掌握一些基本的算法196
8.1.4 學習完整的解決問題的過程196
8.1.5 多做練習196
8.2 程序設計的一般過程197
8.2.1 分析問題尋求算法197
8.2.2 程序設計197
8.2.3 程序?qū)崿F(xiàn)198
8.2.4 程序正確性檢驗198
8.3 程序設計語言198
8.3.1 機器語言199
8.3.2 匯編語言199
8.3.3 高級程序設計語言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 習題227
第9章 程序設計--基本框架230
9.1 程序的基本框架230
9.2 標識符和關鍵字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 算術表達式240
9.4.3 關系表達式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)先級和結合性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ù)學運算等)257
9.8 習題261
第10章 程序設計--數(shù)組和結構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 結構273
10.2.1 結構類型和結構類型變量的定義273
10.2.2 結構類型變量的訪問與賦值276
10.2.3 例題276
10.2.4 結構使用中的注意事項 278
10.3 指針278
10.3.1 指針的概念、定義和使用 278
10.3.2 指向結構和數(shù)組元素的指針 279
10.3.3 指針的加減法運算280
10.3.4 指針應用的例子 281
10.4 字符串281
10.4.1 字符數(shù)組、字符串和字符指針281
10.4.2 字符串變量的初始化及輸入輸出 282
10.4.3 常用的字符串處理函數(shù)284
10.4.4 字符串應用的例子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 打開和關閉文件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 習題301
第11章 程序設計--函數(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 模塊化程序設計思想(問題分解與抽象)312
11.3 遞歸314
11.3.1 函數(shù)的遞歸調(diào)用314
11.3.2 用遞歸的思想解決問題314
11.4 樣例程序317
11.5 習題320
第12章 問題分析與算法設計323
12.1 算法的效率323
12.1.1 二分搜索323
12.1.2 選擇排序和插入排序326
12.2 計算復雜性327
12.2.1 可計算與計算復雜性327
12.2.2 時間復雜性328
12.2.3 O符號329
12.2.4 算法的時間復雜性分析330
12.2.5 算法的空間復雜性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 習題350
參考文獻351