[ 收藏 ] [ 繁体中文 ]  
臺灣貨到付款、ATM、超商、信用卡PAYPAL付款,4-7個工作日送達,999元臺幣免運費   在線留言 商品價格為新臺幣 
首頁 電影 連續劇 音樂 圖書 女裝 男裝 童裝 內衣 百貨家居 包包 女鞋 男鞋 童鞋 計算機周邊

商品搜索

 类 别:
 关键字:
    

商品分类

  •  管理

     一般管理学
     市场/营销
     会计
     金融/投资
     经管音像
     电子商务
     创业企业与企业家
     生产与运作管理
     商务沟通
     战略管理
     商业史传
     MBA
     管理信息系统
     工具书
     外文原版/影印版
     管理类职称考试
     WTO
     英文原版书-管理
  •  投资理财

     证券/股票
     投资指南
     理财技巧
     女性理财
     期货
     基金
     黄金投资
     外汇
     彩票
     保险
     购房置业
     纳税
     英文原版书-投资理财
  •  经济

     经济学理论
     经济通俗读物
     中国经济
     国际经济
     各部门经济
     经济史
     财政税收
     区域经济
     统计 审计
     贸易政策
     保险
     经济数学
     各流派经济学说
     经济法
     工具书
     通货膨胀
     财税外贸保险类考试
     英文原版书-经济
  •  社会科学

     语言文字
     社会学
     文化人类学/人口学
     新闻传播出版
     社会科学总论
     图书馆学/档案学
     经典名家作品集
     教育
     英文原版书-社会科学
  •  哲学

     哲学知识读物
     中国古代哲学
     世界哲学
     哲学与人生
     周易
     哲学理论
     伦理学
     哲学史
     美学
     中国近现代哲学
     逻辑学
     儒家
     道家
     思维科学
     马克思主义哲学
     经典作品及研究
     科学哲学
     教育哲学
     语言哲学
     比较哲学
  •  宗教

  •  心理学

  •  古籍

  •  文化

  •  历史

     历史普及读物
     中国史
     世界史
     文物考古
     史家名著
     历史地理
     史料典籍
     历史随笔
     逸闻野史
     地方史志
     史学理论
     民族史
     专业史
     英文原版书-历史
     口述史
  •  传记

  •  文学

  •  艺术

     摄影
     绘画
     小人书/连环画
     书法/篆刻
     艺术设计
     影视/媒体艺术
     音乐
     艺术理论
     收藏/鉴赏
     建筑艺术
     工艺美术
     世界各国艺术概况
     民间艺术
     雕塑
     戏剧艺术/舞台艺术
     艺术舞蹈
     艺术类考试
     人体艺术
     英文原版书-艺术
  •  青春文学

  •  文学

     中国现当代随笔
     文集
     中国古诗词
     外国随笔
     文学理论
     纪实文学
     文学评论与鉴赏
     中国现当代诗歌
     外国诗歌
     名家作品
     民间文学
     戏剧
     中国古代随笔
     文学类考试
     英文原版书-文学
  •  法律

     小说
     世界名著
     作品集
     中国古典小说
     四大名著
     中国当代小说
     外国小说
     科幻小说
     侦探/悬疑/推理
     情感
     魔幻小说
     社会
     武侠
     惊悚/恐怖
     历史
     影视小说
     官场小说
     职场小说
     中国近现代小说
     财经
     军事
  •  童书

  •  成功/励志

  •  政治

  •  军事

  •  科普读物

  •  计算机/网络

     程序设计
     移动开发
     人工智能
     办公软件
     数据库
     操作系统/系统开发
     网络与数据通信
     CAD CAM CAE
     计算机理论
     行业软件及应用
     项目管理 IT人文
     计算机考试认证
     图形处理 图形图像多媒体
     信息安全
     硬件
     项目管理IT人文
     网络与数据通信
     软件工程
     家庭与办公室用书
  •  建筑

  •  医学

     中医
     内科学
     其他临床医学
     外科学
     药学
     医技学
     妇产科学
     临床医学理论
     护理学
     基础医学
     预防医学/卫生学
     儿科学
     医学/药学考试
     医院管理
     其他医学读物
     医学工具书
  •  自然科学

     数学
     生物科学
     物理学
     天文学
     地球科学
     力学
     科技史
     化学
     总论
     自然科学类考试
     英文原版书-自然科学
  •  工业技术

     环境科学
     电子通信
     机械/仪表工业
     汽车与交通运输
     电工技术
     轻工业/手工业
     化学工业
     能源与动力工程
     航空/航天
     水利工程
     金属学与金属工艺
     一般工业技术
     原子能技术
     安全科学
     冶金工业
     矿业工程
     工具书/标准
     石油/天然气工业
     原版书
     武器工业
     英文原版书-工业技
  •  农业/林业

  •  外语

  •  考试

  •  教材

  •  工具书

  •  中小学用书

  •  中小学教科书

  •  动漫/幽默

  •  烹饪/美食

  •  时尚/美妆

  •  旅游/地图

  •  家庭/家居

  •  亲子/家教

  •  两性关系

  •  育儿/早教

     保健/养生
     体育/运动
     手工/DIY
     休闲/爱好
     英文原版书
     港台图书
     研究生
     工学
     公共课
     经济管理
     理学
     农学
     文法类
     医学
  • 程序設計導引及在線實踐(第2版)
    該商品所屬分類:研究生 -> 工學
    【市場價】
    387-560
    【優惠價】
    242-350
    【作者】 李文新、郭煒、餘華山 
    【所屬類別】 圖書  教材  研究生/本科/專科教材  工學 
    【出版社】清華大學出版社 
    【ISBN】9787302452348
    【折扣說明】一次購物滿999元台幣免運費+贈品
    一次購物滿2000元台幣95折+免運費+贈品
    一次購物滿3000元台幣92折+免運費+贈品
    一次購物滿4000元台幣88折+免運費+贈品
    【本期贈品】①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
    版本正版全新電子版PDF檔
    您已选择: 正版全新
    溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。
    *. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。
    *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。
    *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。
    內容介紹



    開本:16開
    紙張:膠版紙
    包裝:平裝-膠訂

    是否套裝:否
    國際標準書號ISBN:9787302452348
    叢書名:21世紀大學本科計算機專業繫列教材

    作者:李文新、郭煒、餘華山
    出版社:清華大學出版社
    出版時間:2017年01月 


        
        
    "
    編輯推薦
    本書的*特點是和“北京大學程序在線評測繫統”緊密結合,具有極強的實踐性。“北京大學程序在線評測繫統”(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上提交的程序,因而具有典型性。 
    內容簡介
    本書是北京大學“程序設計實習”課程的內容和“北京大學程序在線評測繫統”(POJ)的緊密結合,具有極強的實踐性。本書的例題和習題精選自POJ題庫,並且在敘述中穿插了許多精心編寫的思考題,總結了學生在程序設計中易犯的錯誤。本書的作者均有豐富的工程軟件開發經驗和教學經驗,因此本書中的程序代碼均保持良好的風格。
    本書可以作為高等學校理工科相關專業程序設計類課程的教材,也可作為以 ACM/ICPC為代表的大學生程序設計競賽的培訓教材,還可供對程序設計感興趣的讀者學習參考。本書封面貼有清華大學出版社防偽標簽,無標簽者不得銷售。
    目錄


    目錄CONTENTS第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

     


     


    目錄CONTENTS第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while語句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主任: 李曉明副主任: 蔣宗禮盧先和委員: (按姓氏筆畫為序)馬華東馬殿富王志英王曉東寧洪劉辰孫茂松李仁發李文新楊波吳朝暉何炎祥宋方敏張莉金海周興社孟祥旭袁曉潔錢樂秋黃國興曾明廖明宏秘書: 張瑞慶

    本書主審: 李曉明
    本 書 序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Union的主要設計者和核心代碼編寫者之一,曾經擔任過圖原空間信息技術有限公司和長天科技有限公司的總工程師。她目前是中國計算機學會信息學奧林匹克競賽科學委員會的科學委員,是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的篇幅講述了計算機程序設計中常用的但不同於數學計算方法的三種算法思想: 枚舉、遞歸和動態規劃。本書的後兩章講述了如何用基本的數據類型構造一些稍微復雜的數據結構: 鏈表和二叉樹,作為本書向數據結構遞進的序曲。配合本書的教學,我們使用了北京大學在線評測繫統,書中所有的例題和練習題都在該繫統上,學生可以隨時針對某一題目編寫程序並提交給繫統,幾秒鐘內就可以獲得正確與否的回答。我們也利用該繫統進行學生的期中、期末考試,學生必須現場在給定的時間內完成從問題分析到代碼實現的全部過程纔能通過考試。為了測試程序在不同數據輸入下的正確性,該繫統中的題目大部分采用輸入多組測試數據的形式,所以在書中會看到每個程序都要讀入多組數據進行處理。這些測試數據是彼此獨立的,可以讀入一組,處理一組並輸出結果,然後再讀入下一組。本書作者分工如下: 李文新編寫第1章中的1.1、1.2、1.4、1.7、1.8、1.9節,第2章,第5章,第9章中的9.3、9.4、9.6、9.10節,以及附錄A和附錄B。郭煒編寫第1章中的1.3、1.5、1.6、1.10~1.19節,第6章,第7章,第9章中的9.1、9.2、9.5、9.7、9.8和9.9節,以及第10章。餘華山編寫第3章、第4章、第8章、第11章和第12章。由於水平和精力所限,書中難免存在不當之處,懇請專家和讀者批評指正。
    作者2016年9月於燕園
    媒體評論
    評論
    在線試讀
    第5章日期和時間處理在很多具體的程序設計中,經常會遇到與日期和時間處理相關的問題。基本思想: 這類問題一般會涉及不同日歷表示法之間的相互轉換。解決此類問題的基本思想是找到一種公共的基準,並通過該基準進行不同日歷之間的轉換。日期和時間處理問題一般不涉及很難的算法,但有時會有一些特殊情況需要處理,如果考慮不到就會出錯。因此,需要有一些耐心處理細節問題,可以比較好地訓練編程的嚴謹性。下面通過一些具體的實例,說明日期和時間處理上的常見問題及其解答。5.1例題: 判斷閏年1. 問題描述判斷某年是否是閏年。公歷紀年法中,能被4整除的大多是閏年,但能被100整除而不能被400整除的年份不是閏年,如1900年是平年,2000年是閏年。2. 輸入數據一行,僅含一個整數a(02. void main()3. {4. int a;//記錄待判定的年份5. scanf("%d", &a);6. if(a% 4!=0)  7. printf("N\\\
    );8. else if(a% 100==0 && a% 400!=0)9. printf("N\\\
    );10.else 11.printf("Y\\\
    );12.}8. 參考程序二1. #include2. void main(){3. int a;4. scanf("%d", &a);5. if((a% 4==0 && a% 100!=0) || a% 400==0) 6.  printf("Y\\\
    );7. else8.  printf("N\\\
    );9. }9. 實現中常見的問題問題一: 代碼冗長,不必要的變量定義。例如:1. #include2. void main() 3. {4. int year, a, b, c;5. scanf("%d", &year);6. a=year% 4;7. b=year% 100;8. c=year% 400;9. if(a!=0){10.printf("N\\\
    );11.}12.if(a==0 && b!=0){13.printf("Y\\\
    );14.}15.if(b==0 && c!=0){16.printf("N\\\
    );17.}18.if(c==0){19.printf("Y\\\
    );20.}21.}分析: ① 不必定義變量a、b、c,可以直接在判斷語句裡寫表達式;② 可以用&&將輸出Y和N的情況合並,使代碼更簡潔清晰。問題二: 邏輯錯誤。例如:1. #include2. void main()3. {4. int n;5. scanf("%d", &n);6. if(n% 400==0)   printf("Y");7. else if(n% 4==0)   printf("Y");8. else printf("N");9. }分析: 沒有判斷能被100整除但不能被400整除的情況。問題三: 用錯運算符。例如:1. #include2. void main()3. {4. int n;5. scanf("%d", &n);6. if(n/4==0){7. if(n/400==0)  printf("Y\\\
    );8. else if(n/100==0)  printf("N\\\
    );9. else printf("Y\\\
    );10.}else printf("N\\\
    );11.12.}分析:判斷一個數是否能被另一個數整除應該用整數取模運算,而不是用整數除法運算。問題四: C和C 的輸出混用,造成輸出有誤。例如:1. #include2. void main()3. {4. int year;5. scanf("%d", &year);6. bool judge;7. judge=(year% 4==0 && year% 100!=0 || year% 400==0);8. if(judge)  printf("%c",'Y');9. else printf("%c",'N');10.printf("\\\
    );;11.}分析: ① 在中定義的C的輸入輸出函數不能與中定義的C 的輸入輸出函數混用,因為它們使用不同的緩衝區,在輸出的時候有可能不按代碼中出現的順序輸出。所以,在程序中不要同時使用C和C 的輸入輸出語句。② 用prinf輸出Y和N時,因為是常量不是變量,所以不必用%c而直接將Y和N寫在雙引號中,如前面給出的參考程序。問題五: 其他還有一些編譯出錯、提交時選錯題目、選錯編譯語言等問題。5.2例題: 細菌繁殖1. 問題描述一種細菌的繁殖速度是每天成倍增長。例如,天有10個,第二天變成20個,第三天變成40個,第四天變成80個……。現在給出天的日期和細菌數目,要你寫程序求出到某一天的時候,細菌的數目。2. 輸入數據行有一個整數n,表示測試數據的數目。其後n行的每行有5個整數,整數之間用一個空格隔開。個數表示天的月份,第二個數表示天的日期,第三個數表示天細菌的數目,第四個數表示要求的那一天的月份,第五個數表示要求的那一天的日期。已知天和要求的那一天在同一年並且該年不是閏年,要求的那一天一定在天之後。數據保證要求的那一天的細菌數目在整數範圍內。3. 輸出要求對於每一組測試數據,輸出一行,該行包含一個整數,為要求的那一天的細菌數。4. 輸入樣例21 1 1 1 22 28 10 3 25. 輸出樣例2406. 解題思路此題實際上是求給定的兩天之間間隔的天數n,天的細菌數乘以2的n次方就是題目的答案。每個月的天數因為不很規則,如果在程序中用規則描述會比較麻煩,所以可以使用一個數組將每個月的天數存起來。整個計算過程可以描述如下:(1) 讀入測試樣例數n;(2) 做n次:① 讀入兩個日期及天的細菌數;② 將兩個日期轉換為當年的第幾天;③ 得到兩個天數的差,即它們中間間隔的天數m;④ 用天的細菌數乘以2的m次方等到x;⑤ 輸出x。7. 參考程序參考程序一: //作者c0610002080131. #include2. void main()3. {4. int days\\[12\\]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};5. int n;6. scanf("%d", &n);7. for(int i=0; i, nNum);22.}23.}參考程序二:  //作者c0601005483021. #include  2. int month\\[\\]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};3. void main()4. {5. int times;6. scanf("%d", ×);7. int mon1, date1, mon2, date2, num1;8. while(times--){9. scanf("%d%d%d%d%d", &mon1, &date1, &num1, &mon2, &date2);10.int days=date2-date1;11.for(int i=mon1; i, num);19.}20.}8. 實現中常見的問題問題一: 代碼冗餘,邏輯不夠精簡。例如:1. #include2. #include3. int dayofmonth\\[12\\]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};4. 5. void main(){6. int n;7. scanf("%d", &n);8. int a,b,num,c,d,i,k;9. for(i=0; i, num);24.}25.}分析:① 語句for(k=a; k2. void main()3. {4. int n;5. scanf("%d", &n);6. int month\\[13\\]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};7. int month1, day1, month2, day2, days=0, num;8. for(int i=0; i, num);19.} //for20.} //main分析:此題有多組測試數據,對於每個測試數據,days都應該從0開始計算,所以days正確的初始化位置應該在語句“for(int i=0; i2. void main()3. {4. int a\\[12\\]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};5. int mo1, mo2, da1, da2, num, all, day1, day2, day, i, n;6. scanf("%d", &n);7. for(i=0; i, all);16.}17.}分析:變量 i 被用在內外兩重循環中作為循環控制變量,應該再定義變量j,與i分別控制內外兩重循環。問題四: 小的邏輯錯誤導致計算結果的錯誤。例如:1. #include2. #include3. void main(){4. int n, month1, day1, month2, day2;5. long num1, num2;6. int totalDays=0;7. int days\\[13\\]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};8. scanf("%d", &n);9. while(n--){10.scanf("%ld %ld %ld %ld %ld", &month1, &day1, &num1, &month2, &day2);11.if(month1==month2)12.totalDays=day2-day1;13.else{14.totalDays=day2 days\\[month1\\]-day1;//加了一次days\\[month1\\]15.for(int i=month1; i, num2);22.}23.}分析:在程序中,循環的邊界是比較容易出錯的地方,經常會有多做一次或者少做一次的情況,所以要格外仔細分析。問題五: 此題是一個有多組測試數據的題目,要求在每組測試數據的輸出結果後輸出換行符,否則繫統會提示Presentation Error 格式錯。思考題: 如果要求的終細菌數目可能超過整數所能表示的範圍,此題該如何解決?5.3例題: 日歷問題1. 問題描述在現在使用的日歷中,閏年被定義為能被4整除的年份,但是能被100整除而不能被400整除的年例外,它們不是閏年。例如,1700、1800、1900和2100年不是閏年,而1600、2000和2400年是閏年。給2000年1月1日開始逝去的天數,你的任務是給出這一天是哪年、哪月、哪日、星期幾。2. 輸入數據輸入包含若干行,每行包含一個正整數,表示從2000年1月1日開始逝去的天數。輸入後一行是-1,不必處理。可以假設結果的年份不會超過9999。3. 輸出要求對每個測試樣例輸出一行,該行包含對應的日期和星期幾。格式為“YYYYMMDD DayOfWeek”,其中“DayOfWeek” 必須是下面中的一個:  “Sunday”、“Monday”、“Tuesday”、“Wednesday”、“Thursday”、“Friday”或“Saturday”。4. 輸入樣例1730 1740 1750 1751 -15. 輸出樣例2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday6. 解題思路這道題目使用的背景知識是閏年的定義和公歷日歷中一年12個月中每個月的日期數。根據題目要求,所有涉及的數值都可以用整數表示。這個問題可以分解成兩個彼此獨立的問題: 一個是要求的那天是星期幾,另一是要求的那天是哪年哪月哪日。個問題比較簡單,知道2000年1月1日是星期幾後,隻要用給定的日期對7取模,就可以知道要求的那天是星期幾。第二個問題相對麻煩一些,用year、month、date分別表示要求的日期的年、月、日。當輸入一個整數n時,如果n大於等於一年的天數,就用n減去一年的天數,直到n比一年的天數少(這時假設剩下天數為m),一共減去多少年year就等於多少;如果m大於等於一個月的天數,就用m減去一個月的天數,直到m比一個月的天數少(這時假設剩下的天數為k),一共減去多少個月month就等於多少;這時k為從當月開始逝去的天數,k 1就是要求的date。這裡減去一年的天數時,要判斷當年是否是閏年,減去一月時要判斷當月有幾天。7. 參考程序1. #include2. int type(int);3. char week\\[7\\]\\[10\\]={"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};4. int year\\[2\\]={365,366}; //year\\[0\\]表示非閏年的天數,year\\[1\\]表示閏年的天數5. int month\\[2\\]\\[12\\]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};6. //month\\[0\\]表示非閏年裡每個月的天數,month\\[1\\]表示閏年裡每個月的天數7. void main()8. {  9. int days, dayofweek; //days 表示輸入的天數,dayofweek表示星期幾10.int i=0, j=0;11.while (scanf("%d", &days) && days!=-1) {12.dayofweek=days% 7;13.for(i=2000; days>=year\\[type(i)\\]; i )14.days-=year\\[type(i)\\];15.for(j=0; days>=month\\[type(i)\\]\\[j\\]; j )16.days-=month\\[type(i)\\]\\[j\\];17.printf("%d-%02d-%02d %s\\\
    , i, j 1, days 1, week\\[dayofweek\\]);18.}19.}20.int type(int m){ //判斷第m年是否是閏年,是則返回1,否則返回021.if(m% 4!=0 || (m% 100==0 && m% 400!=0))return  0; //不是閏年22.else return 1;   //是閏年23.}8. 實現中常見的問題問題一: 邏輯過於復雜,導致程序出錯。問題二: 沒有將判斷閏年的代碼抽像成函數,使得主程序代碼不夠清晰。問題三: 多數出錯的地方在於算錯從2000年到當前年經歷了多少個閏年。很多同學都錯在多算一個或者少算一個。另外,計算閏年不能用循環,否則會超時。5.4例題: 瑪雅歷1. 問題描述上周末,M.A教授對古老的瑪雅研究有了一個重大發現。從一個古老的節繩(瑪雅人用於記事的工具)中,教授發現瑪雅人使用了一個一年有365天稱為Haab的日歷。這個Haab日歷擁有19個月,在開始的18個月,一個月有20天,月份的名字分別是pop、no、zip、zotz、tzec、xul、yoxkin、mol、chen、yax、zac、ceh、mac、kankin、muan、pax、koyab和cumhu。這些月份中的日期用0~19表示。Haab歷的後一個月稱為uayet,它隻有5天,用0~4
    書摘插畫
    插圖
    插圖

    插圖

    插圖

    插圖

    插圖

    插圖

    插圖

    插圖




     
    網友評論  我們期待著您對此商品發表評論
     
    相關商品
    在線留言 商品價格為新臺幣
    關於我們 送貨時間 安全付款 會員登入 加入會員 我的帳戶 網站聯盟
    DVD 連續劇 Copyright © 2024, Digital 了得網 Co., Ltd.
    返回頂部