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