官术网_书友最值得收藏!

前言

隨著信息社會(huì)的發(fā)展,計(jì)算機(jī)領(lǐng)域的知識(shí)和能力越來越受到人們的重視,作為計(jì)算機(jī)入門知識(shí)的程序設(shè)計(jì)自然備受重視。本書作為程序設(shè)計(jì)的入門課程教材和自學(xué)讀物,致力于幫助讀者理解程序和計(jì)算,理解并掌握程序設(shè)計(jì)的思想、方法和基本技術(shù),學(xué)習(xí)一種實(shí)用的編程語言,以便為在信息社會(huì)中繼續(xù)學(xué)習(xí)和工作打下堅(jiān)實(shí)的基礎(chǔ)。本書詳細(xì)介紹了程序設(shè)計(jì)語言與基本程序設(shè)計(jì)的各方面情況和問題,包括與計(jì)算機(jī)程序和程序設(shè)計(jì)有關(guān)的基本概念,用計(jì)算機(jī)解決問題的思維方法,以及程序設(shè)計(jì)的基本技術(shù)。本書的內(nèi)容選擇、撰寫方式和章節(jié)安排都認(rèn)真考慮了入門課程和自學(xué)者的需求。

本書在內(nèi)容編排上特別重視由易到難、穩(wěn)步推進(jìn),以遞進(jìn)的方式講解概念,解釋細(xì)節(jié),展示簡單用例,再給出完整的問題實(shí)例分析和程序源代碼,輔以對(duì)完整程序的分析和評(píng)價(jià)等,通過多種方式相互呼應(yīng),幫助讀者領(lǐng)悟并掌握與程序設(shè)計(jì)有關(guān)的概念、方法和技術(shù)。本書特別考慮了內(nèi)容的安排順序、難點(diǎn)的分解和多種角度的解釋等,使學(xué)習(xí)曲線盡可能平滑,讓讀者更容易接受。

本書用標(biāo)準(zhǔn)C語言作為基本教學(xué)語言,輔以C++的少量易用功能以降低初學(xué)者的學(xué)習(xí)難度。這樣安排的主要理由是:

(1)C語言包含了最重要的基本程序設(shè)計(jì)機(jī)制,能較好地滿足編程學(xué)習(xí)的需要,完善的開發(fā)工具也很容易獲得。

(2)C語言是許多計(jì)算機(jī)專業(yè)課程的支撐語言,這種安排有利于與后續(xù)的學(xué)習(xí)和課程接軌。

(3)C語言一直是業(yè)界廣泛使用的語言之一。

由于C語言中少數(shù)機(jī)制的技術(shù)細(xì)節(jié)較多,初學(xué)者不易掌握,因此,本書采用C++語言中相應(yīng)的特性作為替代(主要是輸入輸出和存儲(chǔ)分配機(jī)制),從而降低學(xué)習(xí)和編程的難度,使讀者能專注于程序設(shè)計(jì)的學(xué)習(xí)。

本書以程序設(shè)計(jì)為主線,貫徹“在做中學(xué)”的理念,致力于幫助讀者通過正確的實(shí)踐去深入理解“計(jì)算思維”,以及用計(jì)算機(jī)解決問題的方法和技術(shù)。書中介紹了C/C++語言的各種重要結(jié)構(gòu),其中特別關(guān)注它們?cè)诔绦蛑械淖饔煤拖嗷ヂ?lián)系。在討論編程實(shí)例時(shí),本書摒棄了一些教材中常見的“敘述問題,列出代碼,簡單說明”三步法,改為詳細(xì)闡釋從問題到程序的思考和工作過程。書中通過大量編程實(shí)例,反復(fù)展示對(duì)問題的分析和分解、找出主要步驟、確定函數(shù)抽象、找出循環(huán)、選擇語言結(jié)構(gòu)直至開發(fā)出能正確完成工作的良好程序的全過程,幫助讀者理解程序設(shè)計(jì)的真諦。

學(xué)習(xí)程序設(shè)計(jì)需要理解這種工作的系統(tǒng)性、科學(xué)性和工程性。進(jìn)行程序設(shè)計(jì)就是為了用計(jì)算機(jī)解決問題,第一步工作應(yīng)該是深入分析問題,設(shè)法找出解決問題的線索和方法,為后續(xù)編程做好準(zhǔn)備。分析中有可能發(fā)現(xiàn)多種可用的解決方案,這時(shí)就需要比較不同方案并做出選擇,還要對(duì)所做的選擇有清醒的評(píng)價(jià)(優(yōu)點(diǎn)、缺點(diǎn)、傾向性等)。這又是典型的工程問題:實(shí)際中常常無法找到完美的解,需要權(quán)衡、折中和選擇。第二步工作是程序的功能分解,把復(fù)雜功能分解為較簡單的部分。正確、有效的分解是科學(xué)性問題,而在多種可能分解中選擇又具有明顯的工程性。之后的編碼也同樣需要科學(xué)和工程思維的結(jié)合。總之,正確的好程序不是隨便做出來的,必須基于科學(xué)的方法,輔以正確的工程處理。

書中的大量實(shí)例給出了完整的開發(fā)過程,有些包含比較詳細(xì)的分析和討論,有些給出了基于不同考慮的多種解法。書中仔細(xì)比較了它們的特性,有時(shí)還指出了其他可能性。一些實(shí)例完成后有回顧與分析,提出了關(guān)于還可能如何想、如何做的思考。書中經(jīng)常給讀者提出一些問題,啟發(fā)讀者積極思考,發(fā)揮讀者的主觀能動(dòng)性,幫助讀者更好地理解程序設(shè)計(jì)的真諦。書中的練習(xí)題也力圖反映這些想法。

本書中的討論還特別強(qiáng)調(diào)對(duì)程序設(shè)計(jì)過程的正確認(rèn)識(shí),強(qiáng)調(diào)良好的程序設(shè)計(jì)風(fēng)格,強(qiáng)調(diào)通過函數(shù)抽象建立清晰結(jié)構(gòu)的重要性,強(qiáng)調(diào)程序的良好結(jié)構(gòu)、可讀性、易修改性等。書中的源代碼示例都力圖反映這些良好性質(zhì),也盡量避免出現(xiàn)晦澀難懂的語句或結(jié)構(gòu)。書中根據(jù)內(nèi)容進(jìn)展及時(shí)介紹一些重要的標(biāo)準(zhǔn)函數(shù)庫,幫助讀者建立對(duì)標(biāo)準(zhǔn)函數(shù)庫的清晰認(rèn)識(shí)。此外,書中還簡單介紹了一些與計(jì)算和程序有關(guān)的一般問題,如通過統(tǒng)計(jì)程序運(yùn)行時(shí)間介紹計(jì)算的基本性質(zhì)(復(fù)雜性),通過分析循環(huán)過程能否完成所需工作介紹“循環(huán)不變關(guān)系”的概念等。這些既能豐富讀者的知識(shí),也能作為思考程序的線索。

程序設(shè)計(jì)是一種實(shí)踐性活動(dòng),僅靠讀書、抄寫現(xiàn)成代碼做試驗(yàn)是不可能學(xué)好的。作為初學(xué)者,不但需要深入閱讀和理解教科書上的內(nèi)容,還必須“在做中學(xué)”,一次次地親身經(jīng)歷“從問題到程序”的思考和把初步的代碼設(shè)計(jì)構(gòu)想逐漸細(xì)化直至變成能正確實(shí)現(xiàn)預(yù)期目標(biāo)的具體程序代碼的工作過程。在這些過程中,既需要發(fā)揮自己的聰明才智,也需要細(xì)致認(rèn)真、踏踏實(shí)實(shí)地工作。

請(qǐng)讀者注意,對(duì)同一個(gè)問題可以有不同的考慮和分析、不同的設(shè)計(jì)選擇和不同的具體實(shí)現(xiàn)方法,因此可能得到許多不同的程序。它們可能各有長短或側(cè)重,也可能反映了對(duì)問題的不同想法,但都是對(duì)原問題的合理解答。不應(yīng)將各種書籍(包括本書)里的程序看作標(biāo)準(zhǔn)答案,這些程序只是作者對(duì)問題的一種解答。為了學(xué)好程序設(shè)計(jì),希望讀者能養(yǎng)成一種習(xí)慣:在閱讀書中程序時(shí)注意思考作者的考慮和選擇,分析其中哪些是合理且有價(jià)值的(或不合理、無價(jià)值的),還可能怎樣選擇,采納其他選擇可能得到什么(或失去什么),等等。這樣思考將使你受益無窮。當(dāng)然,雖然程序設(shè)計(jì)中有很多選擇,但本書中的實(shí)例還是努力給出好的選擇,說明選擇的理由,指出有關(guān)選擇帶來的問題(缺點(diǎn)和限制等),供讀者參考。

今天,計(jì)算機(jī)系統(tǒng)的安全問題變得越來越重要,程序的強(qiáng)健和安全是計(jì)算機(jī)系統(tǒng)安全的基礎(chǔ)。本書在討論程序設(shè)計(jì)的基本問題時(shí),也簡單討論了一些C程序結(jié)構(gòu)的脆弱點(diǎn)和可能的安全缺陷,以及提高程序健壯性的基本技術(shù)。這些初步討論意在幫助讀者提高認(rèn)識(shí),理解計(jì)算機(jī)安全的重要性。

本書的討論不依賴于具體開發(fā)系統(tǒng),讀者可以用任何符合C和C++標(biāo)準(zhǔn)的系統(tǒng)作為學(xué)習(xí)工具。但在討論編程中的一些具體情況時(shí),參考一種具體程序開發(fā)環(huán)境也可能有所助益。本書選用相對(duì)簡單的Dev-C++集成開發(fā)環(huán)境作為展示工具,借助它介紹一些開發(fā)中的實(shí)際問題,特別是程序的調(diào)試。

本書包含如下8章和若干附錄:

第1章 程序設(shè)計(jì)和C/C++語言:介紹程序與程序語言的概念、C語言和C++語言的發(fā)展及其特點(diǎn),用一個(gè)簡單例子介紹C/C++程序及其加工和執(zhí)行,最后介紹集成開發(fā)環(huán)境Dev-C++的基本使用。

第2章 數(shù)據(jù)與簡單計(jì)算程序:討論程序語言中最基本的概念,包括字符集、標(biāo)識(shí)符和關(guān)鍵字,數(shù)據(jù)與類型,數(shù)據(jù)表示,運(yùn)算符、表達(dá)式與計(jì)算過程,數(shù)學(xué)函數(shù)庫的使用,等等。

第3章 變量和控制結(jié)構(gòu):介紹C/C++基本編程機(jī)制及其使用,包括語句和復(fù)合結(jié)構(gòu),變量,關(guān)系運(yùn)算和邏輯運(yùn)算,以及支持選擇和循環(huán)執(zhí)行的控制結(jié)構(gòu),并介紹程序的動(dòng)態(tài)除錯(cuò)方法。

第4章 基本程序設(shè)計(jì)技術(shù):首先討論循環(huán)程序設(shè)計(jì)的基本方法,通過實(shí)例分析循環(huán)的構(gòu)造過程;然后介紹常用標(biāo)準(zhǔn)庫函數(shù),交互式程序設(shè)計(jì)的輸入輸出,特別是C++字符流和文件流輸入輸出技術(shù)。

第5章 函數(shù)與程序結(jié)構(gòu):首先介紹函數(shù)的定義與調(diào)用、程序的函數(shù)分解和遞歸函數(shù),以及外部變量等概念;在此基礎(chǔ)上討論與更復(fù)雜的C/C++程序和多文件開發(fā)有關(guān)的技術(shù),包括函數(shù)和變量的聲明與定義、預(yù)處理程序;最后介紹集成開發(fā)環(huán)境中的程序調(diào)試工具。

第6章 數(shù)組:介紹數(shù)組的概念、定義和相關(guān)程序設(shè)計(jì)技術(shù)。

第7章 指針:介紹指針的概念和指針變量的使用,指針與數(shù)組的關(guān)系,多維數(shù)組作為參數(shù)的通用函數(shù),以及動(dòng)態(tài)存儲(chǔ)管理、指向函數(shù)的指針等概念及其在程序中的應(yīng)用。

第8章 結(jié)構(gòu)體和其他數(shù)據(jù)機(jī)制:首先介紹類型定義,然后介紹結(jié)構(gòu)體的定義及其在程序中的使用,并簡單介紹鏈接結(jié)構(gòu)的概念和類(class)的概念。

最后安排了5個(gè)附錄,分別介紹C和C++語言運(yùn)算符、ANSI C關(guān)鍵字、C和C++語言常用功能、命名規(guī)范以及編程形式規(guī)范,并給出進(jìn)一步學(xué)習(xí)的建議。

為了方便讀者閱讀,本書中的重要名詞概念用黑體字標(biāo)記,重要詞句用粗楷體字標(biāo)記,重要源代碼用波浪線標(biāo)記,附加注釋性的詞句用楷體字標(biāo)記。本書中一些高級(jí)主題用星號(hào)標(biāo)記,供學(xué)有余力的讀者閱讀。

作者特別感謝參加相關(guān)課程學(xué)習(xí)的學(xué)生,他們提出的問題給了作者許多啟示,促使作者更深入地思考了許多問題。作者感謝家人與同事多年的支持。雖然本書凝結(jié)了作者的多年思考,但仍難免有錯(cuò)誤或不足,希望得到讀者的指正和同行的意見、建議。相關(guān)教學(xué)資料(教學(xué)課件、編程練習(xí)題參考答案和額外的習(xí)題等)可以從如下網(wǎng)址獲取:https://devcpp.gitee.io/ptop。如果需要聯(lián)系作者,請(qǐng)發(fā)郵件至qzy@math.pku.edu.cn或anbangli@mail.ccnu.edu.cn。

裘宗燕(北京大學(xué)數(shù)學(xué)學(xué)院信息科學(xué)系)

李安邦(華中師范大學(xué)物理科學(xué)與技術(shù)學(xué)院)

2022年5月

主站蜘蛛池模板: 松原市| 佛坪县| 镇江市| 高陵县| 山丹县| 达孜县| 武鸣县| 东阿县| 枣强县| 盐源县| 祁门县| 屯昌县| 滨州市| 元朗区| 龙门县| 桐庐县| 温泉县| 五莲县| 本溪| 南澳县| 无棣县| 吉首市| 密云县| 额尔古纳市| 全州县| 安国市| 阿坝| 定远县| 湖口县| 资源县| 荆门市| 潼南县| 镇远县| 阿克| 满城县| 东乌| 富顺县| 泸州市| 余江县| 博野县| 青河县|