中央财经大学python第8章 函数上机题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


在设计时,要记得每个模块应该与一个函数一一对应,脑子里要浮现一个程序运
行流程,使得设计不错、不空。

• • •
在实现时,从底层开始,自底向上实现,依次实现并调通每个模块(单元 测试)并组合起来,形成最终的程序;
实现一个模块时,理清思路再开始编程,可用伪代码表示算法 实现一个模块时,采用递进式(逐步求精)的开发,先实现一个简单版本,调通 后再增添功能 之后的开发总建立在之前正确(调通)的基础上,易于定位错误——错误通常发 生在新实现的模块中。
分治法:自顶向下设计&函数的划分
注意:自顶向下设计图不是程序流程图,箭头表示函数的
上下级调用关系;
设计后,在头脑中用“程序逻辑”走一遍各个模块的衔接 (同一层)、调用关系(上下层); 实现时,从最底层模块往上,实现一个模块,测试一个模 块。
分治法:自顶向下设计&函数的划分
依次实现&调通:
def isLeapYear(y) def getWeekDay(y, m, d) def printYear(y)
Python程序设计
第8章 函数上机题——自顶向下设计和函数
划分
信息学院
2018
关于分治法
1. 由问题形成算法思路(你能用大白话描述吗?) 2. 由算法转化为编程
思维是渐进的:不推荐从问题 直接到 程序!(思路不清、容易错)
分治法(Divide and Conquer)
将大问题拆分成小问题,一次解决一个——对你的生活是否也有启示
关于分治法
关于分治法
1. 由问题形成算法思路(你能用大白话描述吗?) ( 1 )我需要有一个(外)循环,把每一项加和起来,直到 最后一项小于10-4 (2)每一项是1除以一个数 (3)这个数是累乘的
自顶向下 由粗到细
分治法第1步ຫໍສະໝຸດ Baidu“自顶向下”分解问题!
关于分治法
1. 由问题形成算法思路(你能用大白话描述吗?) ( 1 )我需要有一个(外)循环,把每一项加和起来,直到 最后一项小于10-4 (2)每一项是1除以一个数 (3)这个数是累乘的,用一个 内循环来实现
def printMonth(y, m)
def printDay(y, m, d) def main()
调用main即可自顶向下地调用所有函数,实现一个简单万年历 的功能。
扩展思考:如果让万年历显示节日,如何设计?
分治法:自顶向下设计&函数的划分
int isLeapYear(y){ /* 判断闰年条件①:非整百年数除以4,无余为闰,有余为平;②整百年数除以400,无余 为闰有余平。——其实这就可以了,如细化,我们有: if y !=整百数年 if y % 4 == 0 return 1;
分治法:自顶向下设计&函数的划分
分治法:自顶向下设计&函数的划分
分解为、调用
分治法:自顶向下设计&函数的划分
分解为、调用
printYear(), printMonth()和printDay()除了调用getWeekDay()函数,还需要 循环打印一个时间范围内的每一天,此处为简明起见省略了打印模块(认为它是一个 具体步骤,不需要单独设计)。
分治法:自顶向下设计&函数的划分
分解为、调用
printYear(), printMonth()和printDay()如碰到2月也要调用isLeapYear(), 判断是否闰年,以决定是否打印2月29日。
分治法:自顶向下设计&函数的划分
main()的伪代码: choice=inputChoice() switch (choice) case 1: Get y; printYear(y); case 2: Get y,m; printMonth(y, m); case 3: Get y,m,d: printDay(y,m,d);


分治法同样适用于面向对象编程
类、方法的划分,方法内部的代码。
作业
实现上述万年历的程序
自底向上 由小到大
分治法第2步:“自底向上”实现问题!
分治法:自顶向下设计&函数的划分
请为如下万年历程序设计并画出自顶向下的模块图。 它的功能是:用户输入某年、某月、某日,程序输出这一 天是星期几;用户输入某年、某月,程序输出该年该月的 每一天是星期几;用户输入某年,程序输出该年每一月的 每一天是星期几。 该程序的求解方案是,为给定的年、月、日计算它距离 1900年1月1日(它是星期一)的天数,从而得出是星期几; 注意要考虑闰年的情况。
else return 0;
else if y % 400 == 0 return 1; else return 0; end } */
伪代码用于描述算法,可转化为注释, 确保这些注释准确和有用。
分治法:编程总结


从需求分析出发列出要实现什么,然后自顶向下设计,将功能分解成模块
(模块:函数或一段特定功能的代码) 不要把所有代码都写在main函数里!养成先划分函数、再编程的习惯!
相关文档
最新文档