計算機程序設(shè)計基礎(chǔ)課程是高等學(xué)校計算機基礎(chǔ)課程中的核心課程,具有大學(xué)基礎(chǔ)課的性質(zhì)。本書以C語言程序設(shè)計為基礎(chǔ),注重講解程序設(shè)計與軟件開發(fā)的概念、方法和思路,培養(yǎng)讀者的基本編程能力、邏輯思維與抽象思維能力。 本書內(nèi)容包括:程序設(shè)計的基本概念、C語言的基本語法元素、程序控制結(jié)構(gòu)、函數(shù)、算法、結(jié)構(gòu)化與模塊化程序設(shè)計的基本概念、程序組織與庫的設(shè)計、數(shù)組、字符串、結(jié)構(gòu)體與指針等復(fù)合數(shù)據(jù)類型、文件與數(shù)據(jù)存儲、程序抽象等。希望通過強調(diào)那些在程序設(shè)計與軟件開發(fā)過程中起重要作用的思想與技術(shù),使讀者體會并初步掌握較大型或?qū)嵱贸绦虻木帉懪c設(shè)計能力。 本書行文嚴謹流暢,語言風(fēng)趣幽默,示例豐富生動,習(xí)題難度適中。本書可供高等院校計算機及理工類各專業(yè)、成人教育院校作為程序設(shè)計課程的教材,也可供計算機應(yīng)用開發(fā)人員及相關(guān)人員自學(xué)。
本書寫作目標可用8個字概括:開卷有益,開卷有趣。
一、本書旨趣
六年來的教學(xué)經(jīng)驗表明,學(xué)生在學(xué)習(xí)程序設(shè)計類課程時最難的地方不是掌握某種程序設(shè)計語言的語法規(guī)范,而是掌握程序設(shè)計的基本方法。
程序設(shè)計語言的語法規(guī)范是死的,并且與任何一種自然語言相比,程序設(shè)計語言的語法規(guī)范更為簡單。因此,對于任何學(xué)生而言,只要花費一定量的時間(并且這個時間并不長),通過記憶并輔以上機驗證,完全可以掌握甚至精通其語法規(guī)范。
然而,問題在于,在學(xué)生已經(jīng)預(yù)習(xí)課程并認真聽講,自認為已掌握了程序設(shè)計方法后,卻發(fā)現(xiàn)在解決實際問題時經(jīng)常是毫無頭緒,一籌莫展。這種心理落差與由此造成的心理恐慌對學(xué)生的學(xué)習(xí)熱情來說是致命的——這事實上是課程教學(xué)無法獲得應(yīng)有成果的主要原因。因此,本書力圖在學(xué)習(xí)語法規(guī)范與培養(yǎng)實際動手能力之間架設(shè)一座溝通的橋梁,以解決程序設(shè)計教學(xué)中理論與實踐脫節(jié)的問題。
對于程序員而言,抽象貫穿程序設(shè)計與開發(fā)活動的始終,是應(yīng)著重強調(diào)的最核心概念。事實上,如果讓筆者僅使用一個詞來表達本書旨趣,那只能是抽象。程序員對抽象的理解與把握左右著程序的質(zhì)量與效率。所以,抽象正是本書所要架設(shè)的橋梁。
坦率地說,抽象思維能力的培養(yǎng)不是一本教材、一門課程所能夠涵蓋和闡釋清楚的。但作為一種有益的嘗試,本書希望能夠通過一種有趣的、面目可親的方式向讀者說明抽象在程序設(shè)計中所能夠和應(yīng)該起到的作用,以及抽象思維能力對讀者未來學(xué)習(xí)、工作的重要意義。
Vinoski有云:“Finding the right balance between abstraction and pragmatism requires Knowledge,experience,and above all,thought.”翻譯成漢語就是“于抽象與具象間尋覓正道需要知識、經(jīng)驗,更需要思想!毕Mx者能夠記住這句話。
二、篇章結(jié)構(gòu)
本書的篇章結(jié)構(gòu)與傳統(tǒng)C語言教材不同。本書如此編排知識點的根本出發(fā)點在于,筆者希望能夠以培養(yǎng)讀者解決實際問題能力和抽象思維能力為主線,而不是以語言語法知識點為主線。這么做的好處是,讀者不會在一開始就接觸到過多的C語言語法規(guī)范的細節(jié),避免在實際編程時受到“學(xué)習(xí)知識過多”所造成的干擾,從而能夠?qū)⒆⒁饬械浇鉀Q實際問題中去。
本書共分10章,具體組織方式如下。
第0章簡單回顧C語言的歷史,介紹C語言與程序設(shè)計的一些基本概念,然后通過兩個小例子說明了C語言編程的基本流程。
第1章與第2章介紹C語言的基礎(chǔ)知識,這些知識包括數(shù)據(jù)與數(shù)據(jù)類型、表達式與語句、運算、基本輸入輸出功能、枚舉類型與布爾類型等用戶自定義類型、典型的分支與循環(huán)結(jié)構(gòu)等,它們是程序員構(gòu)建C程序宏偉大廈的一磚一瓦。此外,第1章還專辟一節(jié)討論程序設(shè)計風(fēng)格問題,良好的程序設(shè)計風(fēng)格是編寫優(yōu)秀代碼的要件之一。作為后續(xù)章節(jié)的先導(dǎo),第2.7節(jié)討論問題求解與結(jié)構(gòu)化程序設(shè)計的基本方法,以使讀者大概了解結(jié)構(gòu)化程序設(shè)計的思路。
第3章與第4章著重研究函數(shù)與算法,包括函數(shù)聲明與調(diào)用、函數(shù)定義、函數(shù)調(diào)用規(guī)范、程序的結(jié)構(gòu)化與模塊化、程序測試與代碼優(yōu)化、算法的概念與特征、算法的描述方法、算法設(shè)計與實現(xiàn)、遞歸算法、容錯、算法復(fù)雜度等內(nèi)容。這些知識同樣是基本的。
第5章討論程序組織與軟件工程,主要研究庫與接口的概念、作用域與生存期、宏與條件編譯等知識。通過兩個具體的實例——如何設(shè)計隨機數(shù)庫以及如何使用隨機數(shù)庫設(shè)計一個猜測價格的游戲程序說明程序開發(fā)的基本流程以及在進行程序開發(fā)時要著力關(guān)注的問題。
第6章研究C語言提供的復(fù)合數(shù)據(jù)類型,主要涵蓋字符與字符串、數(shù)組、結(jié)構(gòu)體三方面知識。這些知識其實并不復(fù)雜,在本書力圖淡化細節(jié)的主旨下尤其如此。此外,本章還討論簡單數(shù)據(jù)集上的簡單查找與排序操作。
第7章研究指針。C語言的指針非常靈活,事實上它與其他語法要件(例如函數(shù)、數(shù)組、字符串、結(jié)構(gòu)體等)有著千絲萬縷的聯(lián)系。專列一章討論指針是非常有必要的,它起到了承前啟后的作用。
喬林,博士,清華大學(xué)計算機系副教授,美國加州大學(xué)圣迭戈分校訪問學(xué)者。2001年畢業(yè)于清華大學(xué)計算機科學(xué)與技術(shù)系,獲工學(xué)博士學(xué)位。主要研究興趣有多核處理器系統(tǒng)結(jié)構(gòu)、片上網(wǎng)絡(luò)、物聯(lián)網(wǎng)、MOOC課程與知識挖掘等,主持或參與國家自然科學(xué)基金、核高基、973、863項目或子項目多項。主講:計算機程序設(shè)計基礎(chǔ)、基于Linux的C++、操作系統(tǒng)等課程,出版教材多部,開設(shè)清華大學(xué)MOOC課程“基于Linux的C++”。
第0章 C語言概述
0.1 C語言簡介
0.1.1 C語言簡史
0.1.2 C語言特點
0.2 程序設(shè)計的基本概念
0.2.1 程序
0.2.2 程序設(shè)計與程序設(shè)計語言
0.2.3 算法
0.2.4 數(shù)據(jù)與數(shù)據(jù)結(jié)構(gòu)
0.3 簡單C程序介紹
0.3.1 c程序?qū)嵗?/span>
0.3.2 程序設(shè)計思維
0.3.3 C程序結(jié)構(gòu)特點
0.4 程序設(shè)計的基本流程
0.4.1 源文件和頭文件的編輯
0.4.2 源文件和頭文件的編譯
0.4.3 目標文件的連接
0.4.4 測試運行
本章小結(jié)
習(xí)題0
第l章 C語言基本語法元素
1.1 數(shù)據(jù)類型
1.1.1 整數(shù)類型
1.1.2 浮點數(shù)類型
1.1.3 字符串類型
1.2 量與表達式
1.2.1 表達式
1.2.2 變量
1.2.3 文字
1.2.4 常量
1.2.5 賦值與初始化
1.2.6 操作符與操作數(shù)
1.2.7 混合運算與類型轉(zhuǎn)換
1.3 語句
1.3.1 簡單語句
1.3.2 復(fù)合語句
1.3.3 空語句
1.4 基本輸入輸出函數(shù)
1.4.1 格式化輸出函數(shù)
1.4.2 格式化輸入函數(shù)
1.5 程序設(shè)計風(fēng)格
1.5.1 注釋
1.5.2 命名規(guī)范
1.5.3 宏與常量
1.5.4 賦值語句的簡寫形式
1.5.5 源程序排版
本章小結(jié)
習(xí)題1
第2章 程序流程控制
2.1 結(jié)構(gòu)化程序設(shè)計基礎(chǔ)
2.1.1 基本控制結(jié)構(gòu)
2.1.2 順序結(jié)構(gòu)示例
2.2 布爾數(shù)據(jù)
2.2.1 枚舉類型
第3章 函數(shù)
第4章 算法
第5章 程序組織與軟件工程
第6章 復(fù)合數(shù)據(jù)類型
第7章 指針
第8章 文件與數(shù)據(jù)存儲
第9章 程序抽象