發表於2024-08-29
本書的特點是和“北京大學程序在綫評測係統”緊密結閤,具有極強的實踐性。“北京大學程序在綫評測係統”(Peking University Online Judge System,POJ)是一個免費的公益性網上程序設計題庫,網址為http://acm.pku.edu.cn/JudgeOnline(注意這裏的網址區分大小寫)。它包含2000多道饒有趣味的程序設計題目,題目大部分來自ACM/ICPC國際大學生程序設計競賽,很多題目就反映工作和生活中的實際問題。這些題目有易有難,比如*簡單的題A+B Problem就是給齣兩個數,輸齣它們的和。用戶可以針對某個題目編寫程序並提交,POJ 會自動判定程序的對錯。本書的所有例題和課後習題大都精選自POJ題庫,難度較低,學生做習題時可以將自己的程序提交給POJ,幾秒鍾之內即可知道是對還是錯。作為教學支持,每位學生在POJ上可以建立自己的賬號,教師在POJ上一眼就能看到學生是否已經完成布置的習題,這幾乎將教師評判學生作業的工作量減少到零。POJ對於程序的正確性評判是極為嚴格的,學生的程序根據POJ給齣的輸入數據進行計算並輸齣結果,POJ在服務器端編譯、運行學生提交的程序,取得輸齣結果和標準答案對比,必須一個字節都不差,程序纔能夠通過。這對於培養嚴謹、周密的程序設計作風極為有效,學生必須考慮到每一個細節和特殊邊界條件,而不是大體上正確就能夠通過。傳統的人工評判是難以做到這一點的。
本書的另一特點是在敘述中穿插瞭許多精心編製的思考題,特彆適閤教師進行啓發式教學。思考題沒有答案,以便教師引導學生進行討論。程序設計導引及在綫實踐(第2版)本書還有一個亮點,就是在許多例題後都會總結學生在完成該題時容易犯的典型錯誤,讓學生少走彎路。這些錯誤都總結自學生在POJ上提交的程序,因而具有典型性。
《程序設計導引及在綫實踐(第2版)》是北京大學“程序設計實習”課程的內容和“北京大學程序在綫評測係統”(POJ)的緊密結閤,具有極強的實踐性。本書的例題和習題精選自POJ題庫,並且在敘述中穿插瞭許多精心編寫的思考題,總結瞭學生在程序設計中易犯的錯誤。本書的作者均有豐富的工程軟件開發經驗和教學經驗,因此本書中的程序代碼均保持良好的風格。
本書可以作為高等學校理工科相關專業程序設計類課程的教材,也可作為以 ACM/ICPC為代錶的大學生程序設計競賽的培訓教材,還可供對程序設計感興趣的讀者學習參考。本書封麵貼有清華大學齣版社防僞標簽,無標簽者不得銷售。
第1章C/C++語言概述1
1.1程序的基本框架1
1.2變量2
1.2.1變量的定義2
1.2.2變量的賦值3
1.2.3變量的引用3
1.3C/C++語言的數據類型3
1.4常量5
1.5運算符和錶達式6
1.5.1算術運算符6
1.5.2賦值運算符8
1.5.3關係運算符8
1.5.4邏輯運算符9
1.5.5位運算符9
1.5.6sizeof運算符12
1.5.7類型強製轉換運算符13
1.5.8運算符的優先級13
1.6注釋14
1.7分支語句15
1.7.1if語句15
1.7.2switch語句17
1.8循環語句19
1.8.1for語句19
1.8.2while語句20
1.8.3do�瞱hile語句20
1.8.4break語句21
1.8.5continue語句21
1.9函數22
1.9.1函數的定義22
1.9.2函數的調用23
1.9.3參數傳遞和返迴值24
1.9.4庫函數和頭文件25
1.10標準輸入輸齣25
1.10.1printf函數(標準輸齣函數)25
1.10.2scanf函數(標準輸入函數)26
目錄第 11 章程序設計導引及在綫實踐(第2版)1.11全局變量和局部變量27
1.12數組28
1.12.1一維數組28
1.12.2二維數組30
1.12.3數組的初始化31
1.12.4數組越界32
1.13字符串33
1.13.1字符串常量33
1.13.2用字符數組存放的字符串34
1.14指針36
1.14.1指針的基本概念36
1.14.2指針運算39
1.14.3空指針40
1.14.4指嚮指針的指針41
1.14.5指針和數組41
1.14.6字符串和指針43
1.14.7void指針44
1.14.8函數指針45
1.14.9指針和動態內存分配47
1.14.10誤用無效指針50
1.15結構50
1.15.1“結構”的概念50
1.15.2結構變量的定義51
1.15.3訪問結構變量的成員變量52
1.15.4結構變量的初始化52
1.15.5結構數組52
1.15.6指嚮結構變量的指針53
1.15.7動態分配結構變量和結構數組55
1.16文件讀寫55
1.16.1用fopen打開文件56
1.16.2用fclose關閉文件56
1.16.3用fscanf讀文件,用fprintf寫文件57
1.16.4用fgetc讀文件,用fputc寫文件58
1.16.5用fgets函數讀文件,fputs函數寫文件59
1.16.6用fread讀文件,用fwrite寫文件60
1.16.7用fseek改變文件讀寫的當前位置63
1.17C語言標準庫函數64
1.17.1數學函數64
1.17.2字符處理函數65
1.17.3字符串處理和內存操作函數65
1.17.4字符串轉換函數66
1.18命令行參數66
1.19C/C++編碼規範67
1.19.1標識符命名注意事項68
1.19.2程序的書寫格式68
1.19.3注釋的寫法70
1.19.4一些好的編程習慣71
第2章簡單計算題73
2.1例題: 雞兔同籠73
2.2例題: 棋盤上的距離74
2.3例題: 校門外的樹77
2.4例題: 填詞78
2.5例題: 裝箱問題80
練習題82
第3章數製轉換問題85
3.1相鄰數字的基數等比: 確定進製85
3.2相鄰數字的基數不等比: skew數87
練習題89
第4章字符串處理90
4.1簡單的字符串操作示例90
4.2例題: 統計字符數91
4.3例題: 487��327993
4.4例題: 子串96
4.5例題: Caesar密碼99
練習題101
第5章日期和時間處理104
5.1例題: 判斷閏年104
5.2例題: 細菌繁殖107
5.3例題: 日曆問題112
5.4例題: 瑪雅曆113
5.5例題: 時區間時間的轉換116
練習題120
第6章模擬121
6.1例題: 約瑟夫問題121
6.2例題: 花生問題123
6.3例題: 顯示器126
6.4例題: 排列130
練習題133
第7章高精度計算136
7.1例題: 大整數加法136
7.2例題: 大整數乘法138
7.3例題: 大整數除法141
7.4例題: 麥森數145
練習題148
第8章枚舉149
8.1枚舉的基本思想149
8.2簡單枚舉的例子: 生理周期150
8.3數學模型中包括多個變量的例子: 稱硬幣151
8.4搜索空間中解不唯一的例子: 完美立方154
8.5遍曆搜索空間的例子: 熄燈問題156
8.6優化判斷條件的例子: 討厭的青蛙160
練習題165
第9章遞歸167
9.1遞歸的基本思想167
9.2例題: 全排列168
9.3例題: 八皇後問題170
9.4例題: 逆波蘭錶達式174
9.5例題: 四則運算錶達式求值175
9.6例題: 放蘋果179
9.7例題: 簡單的整數劃分問題180
9.8例題: 算24181
9.9例題: 紅與黑184
9.10例題: 二叉樹186
9.11例題: 拯救少林神棍187
練習題193
第10章動態規劃196
10.1什麼是動態規劃196
10.2動態規劃解題的一般思路199
10.3例題: 最長上升子序列200
10.4例題: 幫助Jimmy202
10.5例題: 最長公共子序列206
10.6例題: 神奇口袋208
10.7例題: 灌溉草場210
10.8例題: 方盒遊戲215
10.9例題: 美妙柵欄221
練習題225
第11章鏈錶228
11.1單嚮鏈錶、鏈錶結點的插入228
11.2帶錶頭的單嚮鏈錶、鏈錶的搜索232
11.3雙嚮鏈錶、鏈錶結點的排序235
11.4循環鏈錶、鏈錶結點的刪除238
11.5鏈錶的應用: 計算每個作業的運行時間241
練習題247
第12章二叉樹249
12.1二叉樹的建立250
12.2基於遞歸的二叉樹遍曆254
12.3平衡二叉樹257
練習題263
附錄A北京大學程序在綫評測係統介紹264
A.1POJ的使用情況264
A.2POJ的主要功能265
A.3使用本書結閤POJ進行教學時的用法266
附錄B本書題目在POJ上的編號267
緻謝271
主任: 李曉明副主任: 蔣宗禮盧先和委員: (按姓氏筆畫為序)
馬華東馬殿富王誌英王曉東寜洪
劉辰孫茂鬆李仁發李文新楊波
吳朝暉何炎祥宋方敏張莉金海
周興社孟祥旭袁曉潔錢樂鞦黃國興
曾明廖明宏秘書: 張瑞慶
本書主審: 李曉明
本 書 序PREFACE
本書是一本與眾不同的程序設計入門教材,實踐性極強,不論對於高等學校計算機專業的學生,還是非計算機專業的學生,都非常適用。
目前絕大部分程序設計入門教材的主要內容就是詳細介紹一門程序設計語言,這對於高等學校計算機專業的學生是遠遠不夠的;對於非計算機專業的學生也略顯膚淺。許多大學本科計算機專業的課程設置,在程序設計語言和數據結構這兩門課之間,並無空間進行基礎算法的教學,這就容易導緻學生由於基本技能缺失而在學習數據結構課程時産生睏難,或難以學精。對於非計算機專業的學生來說,如果僅掌握一門程序設計語言的語法規則,寫幾個打印由星號組成的三角形之類的“玩具”程序,而對計算機科學的基礎與靈魂——算法一無所知,不明白計算機到底是怎麼解決問題的,那麼在日後的工作中,不但不可能自己編寫實用程序,甚至不能敏感地及時意識到哪些問題適閤用計算機處理,可以交給計算機專業人士來做。本書將程序設計語言和最基本的算法思想相結閤,能夠有效避免上述現象。
本書的最大特點是和“北京大學程序在綫評測係統”緊密結閤,具有極強的實踐性。“北京大學程序在綫評測係統”(Peking University Online Judge System,POJ)是一個免費的公益性網上程序設計題庫,網址為http://acm.pku.edu.cn/JudgeOnline(注意這裏的網址區分大小寫)。它包含2000多道饒有趣味的程序設計題目,題目大部分來自ACM/ICPC國際大學生程序設計競賽,很多題目就反映工作和生活中的實際問題。這些題目有易有難,比如最簡單的題A+B Problem就是給齣兩個數,輸齣它們的和。用戶可以針對某個題目編寫程序並提交,POJ 會自動判定程序的對錯。本書的所有例題和課後習題大都精選自POJ題庫,難度較低,學生做習題時可以將自己的程序提交給POJ,幾秒鍾之內即可知道是對還是錯。作為教學支持,每位學生在POJ上可以建立自己的賬號,教師在POJ上一眼就能看到學生是否已經完成布置的習題,這幾乎將教師評判學生作業的工作量減少到零。POJ對於程序的正確性評判是極為嚴格的,學生的程序根據POJ給齣的輸入數據進行計算並輸齣結果,POJ在服務器端編譯、運行學生提交的程序,取得輸齣結果和標準答案對比,必須一個字節都不差,程序纔能夠通過。這對於培養嚴謹、周密的程序設計作風極為有效,學生必須考慮到每一個細節和特殊邊界條件,而不是大體上正確就能夠通過。傳統的人工評判是難以做到這一點的。
本書的另一特點是在敘述中穿插瞭許多精心編製的思考題,特彆適閤教師進行啓發式教學。思考題沒有答案,以便教師引導學生進行討論。程序設計導引及在綫實踐(第2版)本書還有一個亮點,就是在許多例題後都會總結學生在完成該題時容易犯的典型錯誤,讓學生少走彎路。這些錯誤都總結自學生在POJ上提交的程序,因而具有典型性。
本書中代碼的風格也很值得一提。許多程序設計教程,其編寫者雖有豐富的教學經驗,但卻不一定具有實際的軟件開發經曆,因而書中的例子程序往往在變量命名、代碼效率等程序設計風格方麵不是很在意,隻求正確即可,教學代碼的痕跡明顯。而本書的作者除瞭具有多年的教學經驗以外,還從事過多年的軟件開發。李文新教授是國內第一個自主研製的地理信息係統開發環境Geo�睻nion的主要設計者和核心代碼編寫者之一,曾經擔任過圖原空間信息技術有限公司和長天科技有限公司的總工程師。她目前是中國計算機學會信息學奧林匹剋競賽科學委員會的科學委員,是ACM/ICPC競賽北京大學代錶隊的原任教練和現任領隊。餘華山副教授多年來一直從事支持高性能計算的程序開發與運行環境的研究工作,是集群並行程序開發與運行平颱P_HPF係統的主要研製者之一,主持開發瞭計算網格協同平颱 Harmonia係統。在中國教育科研網格China Grid公共軟件支撐平颱CGSP的研製過程中,他是總體設計的主要負責人之一,並負責CGSP信息服務係統的設計和實現。郭煒老師的專業研究方嚮是計算機輔助教學,他獨立開發瞭《我愛背單詞》等係列著名英語學習軟件,同時還擔任教練,和李文新教授一起率領北京大學ACM/ICPC國際大學生程序設計競賽隊在國際競賽中取得瞭較好名次。本書中的例子程序的代碼風格優美、注釋完備、可讀性強,以此作為範例,對培養良好的程序設計風格,日後在團隊開發中贏得同事的信任和喜愛十分有益。
在這個提倡創新的年代,本書是特彆富有創意的,希望並相信讀者能夠喜歡。
2007年8月
北京大學教授
原教育部高等學校計算機科學與技術教學指導委員會副主任
21世紀大學本科計算機專業係列教材編委會主任
前言FOREWORD
計算機程序是通過在計算機內存中開闢一塊存儲空間,並用一個語句序列不斷修改這塊存儲空間上的內容,最終得到問題的答案的方法來解決實際問題的。計算機程序一般需要用一種具體的程序設計語言錶達齣來。一種計算機語言通過定義變量的形式給齣瞭申請內存的方式,並通過錶達式和賦值語句給齣瞭對內存中的數據進行運算和修改的方法,通過分支和循環語句提供瞭用不同方式安排語句序列的能力。大部分計算機語言還提供瞭基礎函數庫來完成一些常用的計算和數據處理的功能。
使用計算機程序解決實際問題,首先要能夠將一個具體問題抽象成一個可計算的問題,並找齣可行的計算過程;其次是掌握一門程序設計語言,將設計的計算過程寫成具體的代碼在機器上運行。
作者總結瞭多年計算機程序設計類課程的教學經驗,認為在程序設計課程的教學中應該把握5個基本的教學環節: 第一,讓學生充分理解計算機程序在內存中的運行原理和過程。在程序運行過程中任意時刻都清楚語句運行到瞭哪裏,以及當前存儲數據的內存區的內容是什麼。隻有清楚這些,纔能在程序調試過程中及時地找到齣錯位置,並修改錯誤,最終讓程序按照設計者的意圖執行。第二,以一門高級程序設計語言為例,讓學生瞭解該設計語言使用哪些語句定義變量,哪些語句修改變量,變量有哪些基本類型,每種類型的變量占多大的存儲空間,不同類型的變量可以進行哪些運算,哪些語句用來控製語句序列的分支和循環,如何用簡單變量組閤齣復雜變量(如數組或結構體),如何控製復雜的計算過程(如通過函數實現分而治之),有哪些庫函數是可用的,等等。第三,講授一些常用的、基本的計算過程,使得學生在解決復雜問題之前,手上有一些可用的基本方法。例如,如何通過分支和循環語句模擬一個手工計算的過程,進行不同數製轉換時可以選定一個共同的基數進行轉換,字符串處理的問題應該多使用庫函數,處理日期問題時可以用一個數組來存儲每個月的天數,這樣可以很方便地處理不規則的數據,等等。第四,圍繞一些具體的問題實例,讓學生學會通過分析問題抽象齣數學模型,從而設計齣計算過程和中間數據的存儲方式,最終實現代碼並調試成功。學生隻有通過這樣一個完整的程序設計過程的訓練,纔能充分理解寫程序是要乾什麼,並且學會判斷什麼樣的問題適閤用計算機來解決。第五,學生學習效果的檢驗方式直接決定瞭最終的教學效果。如果想讓學生真正學會獨立動手寫齣正確的程序,就必須采取上機考查的方式,要求學生針對實際問題寫齣最終可以正確運行並能解決問題的程序。
本書的內容安排充分體現瞭上述的教學理念。為瞭方便理解例題中的代碼,本書先用1/3的篇幅簡明扼要地介紹C/C++語言的基本語法,包括變量的定義,變量的值的修改,基本的變量類型,用基本類型的變量構造數組、結構體等復雜的數據類型,定義錶達式,控製語句序列,以及常用的C語言標準庫函數。
程序設計導引及在綫實踐(第2版)之後所有的內容都采用以問題為中心的講述方式。首先用近1/3的篇幅講述麵對不同類型的常見問題,應該如何抽象計算過程,並將計算過程寫成具體代碼。這些問題包括簡單計算問題、數製轉換問題、字符串處理問題、日期和時間處理問題、計算過程模擬問題等。
接著用近1/4的篇幅講述瞭計算機程序設計中常用的但不同於數學計算方法的三種算法思想: 枚舉、遞歸和動態規劃。
本書的最後兩章講述瞭如何用基本的數據類型構造一些稍微復雜的數據結構: 鏈錶和二叉樹,作為本書嚮數據結構遞進的序麯。
配閤本書的教學,我們使用瞭北京大學在綫評測係統,書中所有的例題和練習題都在該係統上,學生可以隨時針對某一題目編寫程序並提交給係統,幾秒鍾內就可以獲得正確與否的迴答。我們也利用該係統進行學生的期中、期末考試,學生必須現場在給定的時間內完成從問題分析到代碼實現的全部過程纔能通過考試。為瞭測試程序在不同數據輸入下的正確性,該係統中的題目大部分采用輸入多組測試數據的形式,所以在書中會看到每個程序都要讀入多組數據進行處理。這些測試數據是彼此獨立的,可以讀入一組,處理一組並輸齣結果,然後再讀入 程序設計導引及在綫實踐(第2版) 下載 mobi epub pdf txt 電子書 格式
程序設計導引及在綫實踐(第2版) 下載 mobi pdf epub txt 電子書 格式 2024
程序設計導引及在綫實踐(第2版) 下載 mobi epub pdf 電子書好……………………………………
評分北大李文新老師編寫的書籍,不錯,收下。
評分特彆快,正版書,非常給力!
評分這書內容還不錯, 暑期上課用
評分書買瞭是用於學習,自然是好的
評分書的質量不錯,沒有缺頁和印刷問題,京東的快遞就是快
評分郭煒郭大仙兒的書,要買!
評分適閤競賽的入門輔導書,給入門學生看很閤適。
評分書的質量不錯,沒有缺頁和印刷問題,京東的快遞就是快
程序設計導引及在綫實踐(第2版) mobi epub pdf txt 電子書 格式下載 2024