当前课程知识点:程序设计基础 >  第九章 可配置的程序设计 >  程设论道 >  程设论道

返回《程序设计基础》慕课在线视频课程列表

程设论道在线视频

程设论道

下一节:师生问答

返回《程序设计基础》慕课在线视频列表

程设论道课程教案、知识点、字幕

今天是我们这个课的最后一章

叫可配置的程序设计其实又给大家讲了一个叫变与不变的问题

我们原来变量那就讲了因为有不变的量所以才会有变量

相辅相成然后我们去研究一些算法思想找规律

不变的内容今天我们又讲了可配置又是变与不变

所以应该把这一章跟第二章结合起来学

这是一种感觉一种变量的一种新的形式

怎么能够把这个我们的一个变量除了什么样地用变量来表达

那么还有怎么样能把这个变量读到我们的程序当中去

对就是我们学第二章刚开始的时候只是说

变量把有些数 有些数是不变有些数是要变的

特质公式有些关系上的东西

后来我们再给它概念变量用来表示概念

今天我们就说菜单有些数据是内容有可能写死在那里的

也希望它能变那我们就用变量来表示它

然后又跟这个文件相关联这个信息能从这个文件里头读进来

特别是今天的课程我们一开始的内容是写死的

后来又给它提取出来然后往那个文件里去放

跟这个程序无关这个程序就是一个基本的处理流程

那个东西实际上是一个数据数据是可以变的

所以除了你需要根据应用的需求去决定变跟不变之外

因为你比方像我们这个地方是要求才改变

我要换个语言那个时候在被要求之下的具体的应用

我们把这种提示信息可参照的内容把它进行一个剥离

那当然有的时候就是在我们程序的设计里头

通常的做法是把这个数据跟它的范法剥离开

因为算法是代码 代码因为你一旦写好之后像我们现在这种

C跟C++语言 代码是不能变的

所以在这种时候在剥离变与不变的时候

通常是把代码认为是不变的就它的一个框架留下来

而剥出去的往往是被处理的数据

所以像我们这个例子里头因为菜单提示是一个字符串

那就是个数据水果的名字它也是数据

所以恰好是殊途同归你本来应用里头需要它变

另外一个角度的话一般来讲我们的程序设计里头

通常代码是没法变的我们只能去变数据

所以这样的话 就给抽离出来

.就是变跟不变在哪里去切一刀你的准则是什么

或者我觉得像这个问题是不是也可以这样理解

就是如果不把这个通过文件来读

那还能怎么办得通过键盘cin读进来

其实也不是说不能做就是说那你每次这个程序运行的时候

我得敲每次菜单是什么样的每次敲进去就很麻烦

可能这个应用的场景虽然量在变

但是可能又不是经常变

我可能想让它变完之后保持一段时间

而且因为是有的时候有人参与的地方不往往太可实现自动化

你想比方说我一个外国人想看你做的菜单

而你现在后台赶快敲那个提示好你这对付一个可以

下回再来一个 你总7×24小时看着

但是说 你要想自动化的时候

如果这个信息是放在计算机里头放在硬盘上放着的

那我就可以拿程序里头语句在我需要的时候把它找出来

这是因为你把它剥离出来而且放到文件里面去了

才使得它的全自动成为一种可能我想换就换

这个数据有的时候也挺重要的 我们通过它来控制

看起来一个数据实际上它能决定程序一个执行的方式

然后我们今天反正也提到了命令命令行控制文件控制啊

其实它们也有一定相通的

比如说我命令行的东西你也可以你一定读某某文件

我命令行都在写在文件里头

所以看不同的一种方式大家觉得用起来更方便

像你刚才讲的你如果每次都是要手去敲的话

那就不合适就算你是命令行的参数那也麻烦文件更合适

但有的时候就是文件必须要打开编辑再关闭

那有的时候我们就是说顺手就干了

所以我拿文件就绕一个圈 所以平时各种命令带各种参数

高手都是闭着眼睛直接敲键盘的

而且这个可配置 跟另外一个东西其实也是很有关联的

你之所以能够在运行的时候比方说通过argc argv

或者一些其他的文件

之所以能够用它来控制你程序运行形式

是因为在你的程序里头事实上存在着那些不同的运行的路径

或者说它的这种功能如果没有的话那你是不可能去切换的

那跟什么像就是我们以前在编程序的时候

特别提到说比如程序出bug出错误

往往就是边界条件没考虑

有的同学觉得很委屈啊

说这个边界条件只有0.001%的可能性会发生

干嘛要处理它计算机这个独特的地方是

哪怕只有这么小的概率你也在程序里头必须考虑

就是你事先要把它都对应好

那我们这边的比方说语言的切换也好

水果的显示也好那你事先都准备着

那保不齐它就要那个实际上就是你事先的程序里头有多套的东西

然后你才使得它的这种在运行的时候控制它的这种状态成为可能

就如同我们以前说你把所有的情况都考虑到

才能使得你的程序不出bug

另一点就是我们之前的课上也提到了

我们学了程序设计很多生活中的问题都能随时来解决

但是我们有的时候写程序不是一开始就想的特别特别完整的

因为我们的方法课上也介绍了自顶向下 逐步求精

我们会有一个大概的处理流程我们会去细化

这样才能够说把我们学到的东西能够很好地应用起来

去解决我们的问题而我们也希望这个课程大家学完以后

能够活学活用能够主动的用课上的东西去解决各种问题

生活中可能也包括学习上比如说玩个游戏

都是需要去可以算一算

所以其实我们这个第九章安排这个内容其实也是很有用意的

就是说其实第九章的内容

我想除了argc argv唯一好像新一点的知识之外

其他都是大家会的但是在大家都会的这个工具前提下

那为什么我们能够用它去做这样一个配置文件程序的执行和运行

那是因为在思维方法上面在认识的深度上面

那毕竟老师教课 你认识的肯定深一点

反过来就说明 你只有认识的越深刻

你这种思维掌握的越到位

你才能够把已学的知识把它真正的活用好

我们这一章作为我们程序设计基础mooc课的最后一章

我们还特意选了这个例子就是比较贴近生活

然后用我们学过的知识

随着我们分析问题也包括问题的需求不断地变化

我们不断的去改进它去解决新的问题

所以我觉得这种活学活用的做法

希望同学们能够去吸收借鉴

其实也是在我们最开始第一次讨论的时候

说到了就是我们的教学理念里头很重要的一条

就是一定要从什么当中来到什么当中去

所以你看我们最后搞了一个

生活当中很亲密很紧密的例子

回到了第二章 周而复始

但是我们螺旋式上升的

课程里头去给大家介绍的计算思维的

然后我们给大家讲一些科学方法论

那么我们认为说贯穿整个学习的过程的

但是我们平时的作业你说很多时候是讲什么

留什么样的作业习题让他去练习

作业就只是说告诉你用一个特定的方法了

让你去理解掌握一项特定的方法

但是真正到考试生活当中的时候

就不会告诉你用什么方法

就自己根据自己以前练习的经验选这个问题适合什么样的方法

适合什么样的算法什么的样的思路去做

不变的是计算的思维和科学的方法

但是变的时候你要具体问题具体分析去灵活应用

所以就是希望同学们这个课程结束之后

也能够比较自觉地用我们介绍的这些方法

这些分析解问题决问题的科学方法不断地去运用去练习

这样既是帮你解决生活中的各种问题

也是把自己的这个认识能够提高

主要是思维有一个提升

我们就达到原来所讲的引领他的计算人生

它长到身上的不光是一个具体的专业的技能

更重要的是他增进了这种思维的思考的深度

他一种掌握了新的思维的方法

也许上完我们这个课过了很长时间

C语言是什么都忘光了

但是这个思维的方法只要你还在用计算机去解决问题

经常你都会使用的

所以这也是我们对选这个课的同学们一个期望

期望也算是一个祝福吧

程序设计基础课程列表:

第一章 编程初步

-1.1 基础知识

--1.1.1 什么是程序?什么是语言?

--1.1.2 什么是程序设计?

--1.1.3 计算机发展史

-1.2 买菜问题

--1.2.1 问题描述

--1.2.2 程序的基本结构

-1.3 数学运算

--1.3.1 数学运算符

--1.3.2 数学函数

-1.4 补充说明

--1.4.1 编程环境的下载与安装

--1.4.2 程序基本结构中的含义

--1.4.3 格式与风格

-1.5 总结

--1.5 总结

-程设论道

--程设论道

-师生问答

--师生问答一:怎样学好程序设计

--师生问答二:语言选择

--师生问答三:关于函数

-第一章 编程初步--语法自测

第二章 变量与代数思维

-2.1 关于超级计算器的几点思考

--2.1.1 关于超级计算器的几点思考

-2.2 电子秤模拟 — 背景介绍及需求分析

--2.2.1 电子秤模拟 — 背景介绍及需求分析

-2.3 电子秤模拟 — 代码实现

--2.3.1 电子秤模拟 — 代码实现

-2.4 变量定义与变量类型

--2.4.1 变量定义与变量类型

-2.5 猜数游戏与数据表示

--2.5.1 猜数游戏与数据表示

-2.6 关于变量的讨论

--2.6.1 变量的初始值

--2.6.2 变量类型

--2.6.3 变量内存单元地址

--2.6.4 存“变量地址”的变量——指针

--2.6.5 指针的 读/写 操作

--2.6.6 指针的 加/减 操作

--公告

-2.7 变量体现的计算思维

--2.7.1 变量体现的计算思维

-程设论道

--程设论道

-师生问答

--师生问答

-第二章 变量与代数思维--语法自测

第三章 逻辑推理与枚举解题

-3.1 谁做的好事——语义表示

--3.1.1 谁做的好事——语义表示

-3.2 谁做的好事——真假检查

--3.2.1 谁做的好事——真假检查

-3.3 谁做的好事——循环枚举

--3.3.1 谁做的好事——循环枚举

-3.4 谁是嫌疑犯——多重循环枚举

--3.4.1 谁是嫌疑犯——多重循环枚举

-3.5 谁是嫌疑犯——破案线索表示

--3.5.1 谁是嫌疑犯——破案线索表示

-3.6 谁是嫌疑犯——用二进制枚举

--3.6.1 谁是嫌疑犯——用二进制枚举

-程设论道

--程设论道一

--程设论道二

--程设论道三

-师生问答

--师生问答一:字符与ASCII码表

--师生问答二:其他循环语句、运算符优先级与变量作用域

-第三章 逻辑推理与枚举解题--语法自测

第四章 筛法与查找

-4.1 插花游戏

--4.1.1 问题提出(求素数)

--4.1.2 函数初探

--4.1.3 运行演示

-4.2 筛法

--4.2.1 筛法思路

--4.2.2 数组的定义

--4.2.3 代码翻译

--4.2.4 运行演示

--4.2.5 小朋友数人数

--4.2.6 运行演示

--4.2.7 韩信点兵

-4.3 线性查找

--4.3.1 扑克查找问题

--4.3.2 扑克查找问题代码翻译

--4.3.3 最小值问题

--4.3.4 最小值问题代码翻译

-4.4 折半查找

--4.4.1 提问

--4.4.2 折半查找思路

--4.4.3 折半查找代码翻译

--4.4.4 折半查找运行演示

-4.5 排序问题

--4.5.1 插入排序

--4.5.2 选择排序

--4.5.3 函数写法

--4.5.4 运行演示

-4.6 总结

--4.6.1 总结

-程设论道

--程设论道一:数组与编码思维

--程设论道二:筛法

-师生问答

--师生问答一:函数与面向过程编程

--师生问答二:数组的下标越界

-第四章 筛法与查找--语法自测

第五章 分治思想与递归

-5.1 阶乘

--5.1.1 阶乘问题

--5.1.2 递归解法

--5.1.3 递归小结

-5.2 排序

--5.2.1 归并排序——总体思路

--5.2.2 归并排序——思路分解

--5.2.3 归并排序——代码解说

--5.2.4 快速排序——总体思路

--5.2.5 快速排序——代码解说

--5.2.6 排序总结

-5.3 矩阵填充

--5.3.1 矩阵填充问题

--5.3.2 代码解说

-5.4 分书与八皇后

--5.4.1 问题描述

--5.4.2 问题分析——共性

--5.4.3 问题分析——区别

--5.4.4 解题准备——二维数组

--5.4.5 解题准备——递归设计

--5.4.6 代码解说——分书问题

--5.4.7 代码解说——八皇后问题

-5.5 青蛙过河

--5.5.1 问题描述

--5.5.2 问题分析——简单情况

--5.5.3 问题分析——复杂情况

--5.5.4 问题分析——一般情况

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答一

--师生问答二

-第五章 分治思想与递归--语法自测

第六章 递推与动态规划

-6.1 兔子数列问题

--6.1.1 问题描述

--6.1.2 按大小兔子分别递推

--6.1.3 按总数递推

--6.1.4 不用数组递推

-6.2 分鱼问题

--6.2.1 问题描述

--6.2.2 从A到E递推

--6.2.3 从E到A递推

-6.3 橱窗的插花问题

--6.3.1 问题描述

--6.3.2 题意理解与分析

--6.3.3 用枚举思想解题

--6.3.4 采用递推的优化算法

--6.3.5.1 采用动态规划算法—优化分析

--6.3.5.2 采用动态规划算法—递推代码

--6.3.5.3 采用动态规划算法—计算过程

--6.3.5.4 采用动态规划算法—输出方案

--6.3.6 动态规划总结

-6.4 最长公共子序列问题

--6.4.1 问题描述与理解

--6.4.2 问题分析

--6.4.3.1 动态规划解题(1)

--6.4.3.2 动态规划解题(2)

--6.4.3.3 动态规划代码

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第六章 递推与动态规划--语法自测

第七章 文本数据处理

-7.1 统计记录总数

--7.1.1 问题分析

--7.1.2 读文件操作

-7.2 统计活跃用户数

--7.2.1 问题分析

--7.2.2 字符串

--7.2.3 程序翻译与演示

-7.3 统计在线时长

--7.3.1 问题分析

--7.3.2 结构

--7.3.3 程序翻译与演示

--7.3.4 写文件操作

-7.4 总结

--7.4.1 总结

-程设论道

--程设论道

-师生问答

--师生问答

-第七章 文本数据处理--语法自测

第八章 非文本数据处理

-8.1 将数据组织成链表

--8.1.1 链表的基本概念

--8.1.2 代码讲解

--8.1.3 链表遍历与释放

-8.2 提高链表访问效率 —— 哈希链表

--8.2.1 简单的哈希算法

--8.2.2 算法实现

-8.3 以二进制文件存储链表

--8.3.1 二进制文件的操作方法

--8.3.2 代码讲解

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第八章 非文本数据处理--语法自测

第九章 可配置的程序设计

-9.1 自动售卖程序

--9.1.1 提出问题与初步设计

--9.1.2 细化实现订单处理

--9.1.3 使程序更健壮

-9.2 配制水果信息

--9.2.1 提出问题与设计文件格式

--9.2.2 实现订单处理功能

-9.3 指定界面语言

--9.3.1 提出问题与命令行参数

--9.3.2 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

-第九章 可配置的程序设计--语法自测

程设论道笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。