出版時間:2011-6 出版社:機械工業(yè)出版社 作者:羅伯茨 頁數(shù):538 譯者:翁惠玉,張冬茉,楊鑫,蔣文新
Tag標簽:無
內(nèi)容概要
《C語言的科學和藝術(shù)》是計算機科學的經(jīng)典教材,介紹了計算機科學的基礎知識和程序設計的專門知識?!禖語言的科學和藝術(shù)》以介紹ANSI
C為主線,不僅涵蓋C語言的基本知識,而且介紹了軟件工程技術(shù)以及如何應用良好的程序設計風格進行開發(fā)等內(nèi)容?!禖語言的科學和藝術(shù)》采用了庫函數(shù)的方法,強調(diào)抽象的原則,詳細闡述了庫和模塊化開發(fā)。此外,《C語言的科學和藝術(shù)》還利用大量實例講述解決問題的全過程,對開發(fā)過程中常見的錯誤也給出了解決和避免的方法。《C語言的科學和藝術(shù)》既可作為高等院校計算機科學入門課程及C語言入門課程的教材,也是C語言開發(fā)人員的極佳參考書。
作者簡介
Eric S.
Roberts第一次教授計算機科學入門課程是在20多年前,當時他還是一名哈佛學子。1980年獲得博士學位以來,Roberts先后在哈佛、韋爾斯利、斯坦福大學教授計算機科學課程。在斯坦福大學,Roberts擔任計算機科學系副主任,并負責本科生的計算機科學課程。雖然Roberts也教授計算機科學的高級課程并作一些研究工作,但他最大的樂趣還是向初學者展示計算機的強大功能。
書籍目錄
譯者序
前言
第1章 概述
1.1 計算簡史
1.2 什么是計算機科學
1.3 計算機硬件簡介
1.3.1 cpu
1.3.2 內(nèi)存
1.3.3 輔助存儲器
1.3.4 i/o設備
1.4 算法
1.5 程序設計語言和編譯
1.6 編程錯誤和調(diào)試
1.7 軟件維護
1.8 軟件工程的重要性
1.9 關于c程序設計語言的一些思考
小結(jié)
復習題
第一部分 c語言程序設計基礎
第2章 通過例子學習
2.1 “hello world”程序
2.1.1 注釋
2.1.2 庫包含
2.1.3 主程序
2.2 兩個數(shù)的加法程序
2.2.1 輸入階段
2.2.2 計算階段
2.2.3 輸出階段
2.3 有關程序設計過程的觀點
2.4 數(shù)據(jù)類型
2.4.1 浮點型數(shù)據(jù)
2.4.2 字符串類型的數(shù)據(jù)
2.5 表達式
2.5.1 常量
2.5.2 變量
2.5.3 賦值語句
2.5.4 運算符和操作數(shù)
2.5.5 整型數(shù)和浮點型數(shù)的結(jié)合
2.5.6 整數(shù)除法和求余運算符
2.5.7 優(yōu)先級
2.5.8 優(yōu)先級法則的應用
2.5.9 類型轉(zhuǎn)換
小結(jié)
復習題
程序設計練習
第3章 問題求解
3.1 程序設計習語和范例
3.1.1 復合賦值習語
3.1.2 自增和自減運算符
3.2 解決規(guī)模稍大的問題
3.3 控制語句
3.3.1 重復n次習語
3.3.2 迭代和循環(huán)
3.3.3 下標變量
3.3.4 初始化的重要性
3.3.5 讀入-直到-標志習語
3.3.6 創(chuàng)造一個更實用的應用程序
3.3.7 條件執(zhí)行和if語句
3.4 一個調(diào)試練習
3.5 格式化輸出
3.5.1 printf的格式碼
3.5.2 控制空格、對齊方式和精度
3.6 構(gòu)思一個程序
3.6.1 程序設計風格
3.6.2 設計時考慮將來的修改
3.6.3 #define機制
小結(jié)
復習題
程序設計練習
第4章 語句形式
4.1 簡單語句
4.1.1 賦值的嵌套
4.1.2 多重賦值
4.1.3 程序塊
4.2 控制語句
4.3 布爾型數(shù)據(jù)
4.3.1 關系運算符
4.3.2 邏輯運算符
4.3.3 簡化求值
4.3.4 標志
4.3.5 避免布爾表達式中的冗余
4.3.6 布爾計算示例
4.4 if語句
4.4.1 單行if語句
4.4.2 多行if語句
4.4.3 if/else語句
4.4.4 級聯(lián)if語句
4.4.5 ?: 運算符(可選的)
4.5 switch語句
4.6 while語句
4.6.1 while循環(huán)的應用
4.6.2 無限循環(huán)
4.6.3 解決半途退出問題
4.7 for語句
4.7.1 嵌套的for循環(huán)
4.7.2 for和while的關系
4.7.3 for語句中浮點型數(shù)據(jù)的使用問題
小結(jié)
復習題
程序設計練習
第5章 函數(shù)
5.1 使用庫函數(shù)
5.2 函數(shù)聲明
5.3 自己編寫函數(shù)
5.3.1 return語句
5.3.2 將函數(shù)與主程序放在一起
5.3.3 包含內(nèi)部控制結(jié)構(gòu)的函數(shù)
5.3.4 返回非數(shù)字值的函數(shù)
5.3.5 謂詞函數(shù)
5.3.6 測試字符串是否相等的謂詞函數(shù)
5.4 函數(shù)調(diào)用過程機制
5.4.1 參數(shù)傳遞
5.4.2 在其他函數(shù)中調(diào)用函數(shù)
5.5 過程
5.6 逐步精化
5.6.1 從頂開始
5.6.2 實現(xiàn)printcalendar
5.6.3 實現(xiàn)printcalendarmonth
5.6.4 完成最后的片段
小結(jié)
復習題
程序設計練習
第6章 算法
6.1 測試素數(shù)
6.1.1 一個isprime的簡單版本
6.1.2 驗證一個策略是否表示一個算法
6.1.3 說明isprime算法的正確性
6.1.4 改進算法的效率
6.1.5 在各個可選方案中選擇
6.2 計算最大公約數(shù)
6.2.1 brute-force算法
6.2.2 歐幾里得算法
6.2.3 歐幾里得算法的正確性說明(可選)
6.2.4 比較gcd算法的效率
6.3 數(shù)值算法
6.3.1 連續(xù)逼近
6.3.2 報告錯誤
6.4 級數(shù)展開
6.4.1 zeno悖論
6.4.2 用級數(shù)展開法設計平方根函數(shù)
6.4.3 估計平方根的泰勒級數(shù)展開 (可選)
6.4.4 泰勒級數(shù)近似的實現(xiàn)
6.4.5 停留在收斂半徑之內(nèi)
6.5 指定數(shù)值類型的大小
6.5.1 整數(shù)類型
6.5.2 無符號類型
6.5.3 浮點類型
小結(jié)
復習題
程序設計練習
第二部分 庫和模塊化開發(fā)
第7章 庫和接口:一個簡單的圖形庫
7.1 接口的概念
7.2 圖形庫介紹
7.2.1 graphics.h的基本模型
7.2.2 graphics.h接口的函數(shù)
7.2.3 軟件包初始化
7.2.4 畫直線
7.2.5 畫圓和弧
7.2.6 獲取有關圖形窗口的信息
7.3 建立自己的工具
7.3.1 定義drawbox
7.3.2 定義drawcenteredcircle
7.3.3 絕對坐標和相對坐標間的切換
7.3.4 定義過程的好處
7.4 解決一個較大的問題
7.4.1 使用逐步精化
7.4.2 實現(xiàn)drawhouse過程
7.4.3 尋找共同的模式
7.4.4 結(jié)束分解
小結(jié)
復習題
程序設計練習
第8章 設計接口:一個隨機數(shù)庫
8.1 接口設計
8.1.1 同一主題的重要性
8.1.2 簡單性和信息隱藏的原則
8.1.3 滿足客戶的需要
8.1.4 通用工具的優(yōu)勢
8.1.5 穩(wěn)定性的價值
8.2 用計算機生成隨機數(shù)
8.2.1 確定行為與非確定行為
8.2.2 隨機數(shù)和偽隨機數(shù)
8.2.3 ansi c中生成偽隨機數(shù)
8.2.4 改變隨機數(shù)的范圍
8.2.5 將此問題通用化
8.3 在庫中保存工具
8.3.1 接口的內(nèi)容
8.3.2 寫random.h接口
8.3.3 random.c的實現(xiàn)
8.3.4 構(gòu)造客戶程序
8.3.5 初始化隨機數(shù)發(fā)生器
8.4 評價random.h接口的設計
8.4.1 產(chǎn)生隨機實數(shù)
8.4.2 模擬一個概率事件
8.4.3 在接口中包含頭文件
8.4.4 完成隨機數(shù)軟件包的實現(xiàn)
8.5 使用隨機數(shù)軟件包
小結(jié)
復習題
程序設計練習
第9章 字符串和字符
9.1 枚舉的原理
9.1.1 在機器內(nèi)部表示枚舉類型
9.1.2 將枚舉類型表示為整數(shù)
9.1.3 定義新的枚舉類型
9.1.4 枚舉類型的操作
9.1.5 標量類型
9.2 字符
9.2.1 數(shù)據(jù)類型char
9.2.2 ascii代碼
9.2.3 字符常量
9.2.4 ascii代碼方案的重要特性
9.2.5 特殊字符
9.2.6 字符運算
9.2.7 ctype.h接口
9.2.8 涉及字符的控制語句
9.2.9 字符的輸入輸出
9.3 字符串作為抽象數(shù)據(jù)類型
9.3.1 分層抽象
9.3.2 抽象類型的概念
9.4 strlib.h接口
9.4.1 確定字符串的長度
9.4.2 從一個字符串中選擇字符
9.4.3 連接
9.4.4 將字符轉(zhuǎn)換為字符串
9.4.5 抽取字符串的一部分
9.4.6 比較兩個字符串
9.4.7 在一個字符串內(nèi)搜索
9.4.8 大小寫轉(zhuǎn)換
9.4.9 數(shù)值轉(zhuǎn)換
9.4.10 效率和strlib.h庫
小結(jié)
復習題
程序設計練習
第10章 模塊化開發(fā)
10.1 pig latin—一個模塊化開發(fā)的 案例研究
10.1.1 應用自頂向下的設計
10.1.2 使用偽代碼
10.1.3 實現(xiàn)translateline
10.1.4 考慮空格和標點符號的問題
10.1.5 精化單詞的定義
10.1.6 設計記號掃描器
10.1.7 完成translateline的實現(xiàn)
10.1.8 定義掃描器模塊接口
10.2 在模塊中維護內(nèi)部狀態(tài)
10.2.1 全局變量
10.2.2 使用全局變量的危險性
10.2.3 保持變量的模塊私有化
10.2.4 初始化全局變量
10.2.5 私有函數(shù)
10.3 實現(xiàn)掃描器抽象
小結(jié)
復習題
程序設計練習
第三部分 復合數(shù)據(jù)類型
第11章 數(shù)組
11.1 數(shù)組
11.1.1 數(shù)組聲明
11.1.2 數(shù)組選擇
11.1.3 一個簡單的數(shù)組實例
11.1.4 改變下標值的范圍
11.2 數(shù)據(jù)的內(nèi)部表示法
11.2.1 比特、字節(jié)和字
11.2.2 內(nèi)存地址
11.2.3 運算符sizeof
11.2.4 變量的內(nèi)存分配
11.2.5 引用超出數(shù)組范圍的元素
11.3 數(shù)組作為參數(shù)進行傳遞
11.3.1 元素個數(shù)的通用化
11.3.2 數(shù)組參數(shù)傳遞機制
11.3.3 實現(xiàn)函數(shù)printintegerarray和getintegerarray
11.3.4 實現(xiàn)函數(shù)reverseintegerarray
11.3.5 實現(xiàn)函數(shù)swapintegerelements
11.4 使用數(shù)組制作表格
11.5 數(shù)組的靜態(tài)初始化
11.5.1 自動確定數(shù)組大小
11.5.2 確定初始化數(shù)組的大小
11.5.3 初始化數(shù)組和標量類型
11.6 多維數(shù)組
11.6.1 向函數(shù)傳送多維數(shù)組
11.6.2 初始化多維數(shù)組
小結(jié)
復習題
程序設計練習
第12章 查找和排序
12.1 查找
12.1.1 在整數(shù)數(shù)組中查找
12.1.2 關于查找的另一個更復雜 的例子
12.1.3 線性查找
12.1.4 二分查找
12.1.5 查找算法的相對效率
12.2 排序
12.2.1 對一個整數(shù)數(shù)組排序
12.2.2 選擇排序算法
12.2.3 選擇排序效率的評估
12.2.4 測試程序的運行時間
12.2.5 選擇排序的算法分析
小結(jié)
復習題
程序設計練習
第13章 指針
13.1 將地址作為數(shù)據(jù)值
13.2 c語言的指針操作
13.2.1 在c語言中聲明指針變量
13.2.2 基本的指針操作
13.2.3 特殊指針null
13.3 通過引用傳遞參數(shù)
13.3.1 設計函數(shù)swapinteger
13.3.2 用引用調(diào)用返回多個結(jié)果
13.3.3 過度使用引用調(diào)用的危險
13.4 指針和數(shù)組
13.4.1 指針運算
13.4.2 運算符++和--的新作用
13.4.3 指針的自增和自減
13.4.4 指針和數(shù)組的關系
13.5 動態(tài)分配
13.5.1 void *類型
13.5.2 動態(tài)數(shù)組
13.5.3 查找malloc中的錯誤
13.5.4 釋放內(nèi)存
小結(jié)
復習題
程序設計練習
第14章 再論字符串
14.1 string類型的概念表示
14.1.1 字符串作為數(shù)組
14.1.2 字符串作為指針
14.1.3 字符串作為抽象類型
14.1.4 字符串參數(shù)
14.1.5 字符串變量
14.1.6 指針和數(shù)組變量間的區(qū)別
14.1.7 決定字符串的表示方法
14.2 ansi字符串庫
14.2.1 strcpy函數(shù)
14.2.2 strncpy函數(shù)
14.2.3 strcat和strncat函數(shù)
14.2.4 strlen、strcmp和strncmp函數(shù)
14.2.5 strchr、strrchr和strstr函數(shù)
14.2.6 ansi字符串函數(shù)的應用
14.3 strlib庫的實現(xiàn)
14.3.1 實現(xiàn)轉(zhuǎn)換函數(shù)
14.3.2 strlib分配函數(shù)的實現(xiàn)
小結(jié)
復習題
程序設計練習
第15章 文件
15.1 文本文件
15.2 c語言中文件的使用
15.2.1 聲明file*類型的變量
15.2.2 打開文件
15.2.3 執(zhí)行i/o操作
15.2.4 關閉文件
15.2.5 標準文件
15.3 字符i/o
15.3.1 文件更新
15.3.2 在輸入文件中重新讀取字符
15.4 面向行的i/o
15.5 格式化i/o
15.5.1 printf的三種形式
15.5.2 scanf函數(shù)
15.5.3 用scanf讀入字符串
15.5.4 格式化i/o的一個實例
15.5.5 使用scanf的局限
小結(jié)
復習題
程序設計練習
第16章 記錄
16.1 數(shù)據(jù)記錄的概念
16.2 記錄在c語言中的使用
16.2.1 定義一個結(jié)構(gòu)類型
16.2.2 聲明結(jié)構(gòu)變量
16.2.3 記錄選擇
16.2.4 記錄初始化
16.2.5 簡單記錄
16.3 數(shù)組與記錄的結(jié)合
16.4 記錄的指針
16.4.1 定義一個指向記錄類型的指針
16.4.2 為記錄數(shù)據(jù)分配空間
16.4.3 對記錄指針進行操作
16.5 創(chuàng)建記錄的數(shù)據(jù)庫
16.5.1 創(chuàng)建員工信息數(shù)據(jù)庫
16.5.2 數(shù)據(jù)庫的使用
16.6 基于記錄的應用程序設計
16.6.1 使用數(shù)據(jù)庫的重要性
16.6.2 問題的框架
16.6.3 設計內(nèi)部表示
16.6.4 設計外部結(jié)構(gòu)
16.6.5 程序代碼
16.6.6 數(shù)據(jù)驅(qū)動設計方法的重要性
小結(jié)
復習題
程序設計練習
第17章 深入學習
17.1 遞歸
17.1.1 遞歸的簡單說明
17.1.2 factorial函數(shù)
17.1.3 遞歸信任
17.1.4 遞歸范例
17.1.5 排列的生成
17.1.6 用遞歸的思想思考
17.2 抽象數(shù)據(jù)類型
17.2.1 隊列抽象
17.2.2 以隊列抽象表示類型
17.2.3 queue.h 接口
17.2.4 實現(xiàn)隊列抽象
17.2.5 隊列抽象的另一種實現(xiàn)方法
17.3 算法分析
17.3.1 評估算法效率
17.3.2 o標記
17.3.3 再看選擇排序
17.3.4 分而治之策略
17.3.5 合并兩個數(shù)組
17.3.6 合并排序算法
17.3.7 合并排序的計算復雜性
17.3.8 比較平方復雜性與nlogn復雜性的性能
小結(jié)
復習題
程序設計練習
附 錄
附錄a c語言的語法和結(jié)構(gòu)總結(jié)
附錄b 庫源代碼
章節(jié)摘錄
版權(quán)頁:插圖:用戶的輸入用加黑的字體表示,以便與程序所產(chǎn)生的輸出結(jié)果相區(qū)別。為了讓大家更清楚用戶的動作,圖中還用符號來表示用戶已經(jīng)按下了Return或Enter鍵,這意味著輸入行結(jié)束,而實際上這個符號并不會顯示在屏幕上。1.4 算法現(xiàn)在你已經(jīng)對計算機系統(tǒng)的基本結(jié)構(gòu)有所了解,下面我們介紹計算機科學。由于計算機科學是在計算機的幫助下解決問題的學科,所以你應該了解算法(algorithm)e的概念,這個概念無論對計算機科學還是對解決問題的抽象學科來說都是基礎。通俗地說,算法是一種解決問題的策略,然而,為了理解計算機科學家如何使用這個術(shù)語,就必須將這種直觀的理解正式化并給出嚴格定義。要成為一個算法,解決問題的技術(shù)必須滿足三個基本要求。首先,算法必須用清楚的、明確的形式來表達,以使人們能夠理解其中的每一個步驟。第二,算法中的每一個步驟必須有效,以便人們在實踐中能夠執(zhí)行它們。例如,若某一算法包含“用兀的確切值與r相乘”這樣的操作,則這個技術(shù)就不是有效的,因為無法算出兀的確切值。第三,算法不能無休止地運行下去,而必須在有限的時間內(nèi)給出一個答案。簡而言之,算法必須是:1)清楚、明確地定義。2)有效,即每一步驟都切實可行。3)有限,即可在有限步驟后得到結(jié)果。在接下來學習復雜算法時,這些性質(zhì)將變得更為重要?,F(xiàn)在,只要知道算法是種抽象的解決問題的策略,這種策略最終將成為你所編寫的程序的核心就可以了。慢慢地你會發(fā)現(xiàn),與所要解決的問題一樣,算法在復雜性上差別很大。有些問題非常簡單,很快就可以想到相應的算法,可以不費吹灰之力就編寫一個解決這樣問題的程序。而當問題變得很復雜時,就需要更多的思考才能想出解決它的算法。大多數(shù)情況下,解決一個問題可以使用幾個不同的算法,在編寫最終程序之前需要考慮許多潛在的解決方案。第6章將仔細討論這個問題,討論如何決定某個特定問題的最佳算法。1.5 程序設計語言和編譯用計算機解決問題包括兩個概念上不同的步驟。首先,應該構(gòu)造出一個算法或在解決該問題的已有算法中挑選一個。這個過程稱為算法設計(algorithm icdesign)。第二步是用程序設計語言將該算法表達為程序,這個過程稱為編碼(coding)。剛開始學習程序設計時,將算法翻譯成實際的c語言的編碼過程會是整個過程中較為困難的階段。作為一個新程序員,要從簡單的問題入手,就像學習任何新技術(shù)時所做的那樣。簡單的問題常有簡單的解決方法,它的算法設計階段不會有太大的挑戰(zhàn)性。
編輯推薦
《C語言的科學和藝術(shù)》是C語言經(jīng)典譯叢之一。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載