《编程珠玑》学习笔记-第3、4章

第三章 数据决定程序结构

几个案例:

1、一个调查程序

输入:某学院的学生所填写的近2万份调查表,共25页分别代表8大类,每条记录表示每份调查表;

输出:3页相似输出以及其他密切相关的表,例如拒绝回答每个问题的学生数目。

程序设计:(三视图方法)关键在于用数组来存储数据;数组按照其输出结构或者按照其输入结构来组织。

2、格式信函编程

编写基于格式信函模板的格式信函发生器;$i代表记录中的第i个字段,长字符串数组表示该模板。

发生器+模板程序实现。将数据从控制中分离出来:如果重新设计信函,那么模板可以使用文本编辑器来修改,从而第二个特定页的准备也会简单。

3、其他示例:菜单、出错信息、日期函数、单词分析。

 

小结:1、用于特殊数据的强大工具:超文本、键值对、电子表格、数据库、特定领域的编程语言。

2、数据结构对软件的贡献:将大程序缩减为小程序。

3、退回七点思考的原则:使用数组重新编写重复代码;封装复杂的结构;尽可能使用高级工具;从数据得出程序的结构。

 


第四章 编写正确的程序

1、对程序验证进行研究可以加深对计算机编程的基本理解,对于程序维护也至关重要。

2、关于二分搜索的论文在1946年发表,但一个没有错误的二分搜索程序在1962年才出现,可见正确编写二分搜索还是很有挑战的。

3、编写二分搜索程序:首先编写程序框架(引入断言),如下:

initialize range to 0..n-1

loop

{incariant:mustbe(range)}

if range is empty,

 break and report that t is not in the array

compute m,the middle of the range

use m as a probe to shrink the range

if t is found during the shrinking process,

 break and report its position

然后进行初始化l=0,u=n-1;接下来检查空范围([0,n-1])并计算新的中间点m;最后编写伪代码如下:

l=0;u=n-1

loop

{mustbe(l,u)}

if l>u

p=-1;break

m=(l+u)/2

case

x[m]<t:l=m+1

x[m]==t:p=m;break

x[m]>t:u=m-1

程序验证的基本技术:精确定义不变式并在编写每一行代码时随时保持不变式对的成立。

程序验证的基本技术在将算法框架转化为伪代码时起了很大作用。

4、理解程序:

【开发:自上而下;正确性分析:自下而上】

对二分程序进行验证分析,分为三段式:

a. 初始化:循环初次执行的时候不变式为真;

b. 保持:如果在某次迭***始的时候以及循环体执行的时候,不变式都为真,那么,循环体执行完毕的时候不变式依然为真。

c. 终止:循环能够终止,并且可得到期望的结果。

5、原理:

问题很重要,需要认真编写代码,程序开发新需要遵循验证思想,可使用一般性的工具进行程序正确性的分析。

a. 断言:输入、程序变量和输出之间的关系勾勒出程序的状态,断言可以准备阐述这些关系;

b. 顺序控制结构:分析每个分支说明结构的重要性,选择某个分支的事实使用断言来证明;

c. 迭代控制结构:上面提到的三段式;

d. 函数:使用两个断言陈述其目的,前置条件和后置条件。前置条件是在调用该函数之前就应该成立的状态,后置条件的正确性由函数在终止执行时保证。也就是通常说的“契约编程”:如果前置条件满足的情况下调用函数,那么函数的执行将确立后置条件。

#编辑器##设计##论文##笔记#
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 面试被问到不会的问题,你怎么应对? #
128次浏览 2人参与
# 参加完秋招的机械人,还参加春招吗? #
119765次浏览 754人参与
# 米连集团26产品管培生项目 #
14143次浏览 288人参与
# 你觉得大几开始实习最合适? #
117次浏览 2人参与
# 拼多多工作体验 #
52262次浏览 332人参与
# 通信硬件知识分享 #
48068次浏览 537人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
17802次浏览 266人参与
# 找AI工作可以去哪些公司? #
15071次浏览 629人参与
# 说说你知道的学历厂 #
390880次浏览 1379人参与
# 从事AI岗需要掌握哪些技术栈? #
13315次浏览 715人参与
# 你做过最难的笔试是哪家公司 #
44545次浏览 632人参与
# 金三银四,你的春招进行到哪个阶段了? #
24095次浏览 295人参与
# 想给25届机械人的秋招建议 #
47665次浏览 251人参与
# AI面会问哪些问题? #
34012次浏览 949人参与
# 中国电信笔试 #
32962次浏览 303人参与
# 我心目中的理想工作是这样的 #
100807次浏览 907人参与
# 携程笔试 #
139461次浏览 839人参与
# 这些公司卡简历很严格 #
94898次浏览 415人参与
# 拼多多集团-PDD笔试 #
37350次浏览 356人参与
# 一人说一个提前实习的好处 #
118404次浏览 711人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
342650次浏览 2190人参与
# 实习越久越好,还是多多益善? #
91472次浏览 359人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务