当前课程知识点:程序设计基础 >  第八章 非文本数据处理 >  程设论道 >  程设论道一

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

程设论道一在线视频

程设论道一

下一节:程设论道二

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

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

那我们这一章讲了一个很重要的概念

有文本 二进制这样一种打开文件的两种方式

这个概念根据我们以前在学校里讲课的时候

很多学生其实是蛮容易混淆的一个东西

而且这个里头背后的思想其实也很深刻的

所以我觉得得仔细讨论一下这里头的情况

对对对 到底什么是文本文件什么是非文本文件

然后二进制我们严格来讲是叫打开的模式

不是说就是二进制的一个文件或者不是二进制的文件

就是同样是文本文件也可以拿二进制文件去打开

可能二进制文件也可以

拿文本文件的方式去试着打开一下

可能读的内容是什么样子就不知道了

所以关键就到底这个文件什么是文本文件

什么是这个非文本文件

但其实就是在计算机里头我们在第一第二章

或者第一章其实已经提到了计算机用来处理数据

数据在计算机里头存储和表示的时候其实都是二进制

所以文件作为一种计算机处理数据存储数据的一种形态

其实里头的每一个信息都是以二进制方式存储的

所以可以说所有的文件其实都是二进制的

这是一个很重要的一个看法

反过来比第二章咱们讲变量和类型的时候

我就觉得文本文件二进制文件

区别就跟这个类型的概念比较相像

就看你怎么去解释它 就是存在那可能是

二进制一个表达的文本一个二进制的一串数

如果你拿二进制去打开那你就得二进制的方式

去解读它去解释它去操作它

然后你拿文本模式打开可能就它真的是文本的数据

处理起来会有一个特殊的方便

其实所谓文本数据就指的是说

二进制可以都解释成

一般是可显示的那些字符人眼能够直接去看的

那一般指的二进制是说你没有办法

都解释成可显示的一个字符

或者其实我们在第二章也举过一个例子

就是在讲那个指针那个cout输出的时候

普通的指针我们那个例子里头

cout出来的是那个地址的值

就是一个十六进制的零多少多少多少

但是如果是个char*的

你上一章讲的字符串那些东西

如果是char*的它输出cout

之后它不是输出那个地址值

它而是输出是那个地址开始的字符的内容

然后直到碰到零为止

把它当成一个字符串来处理了来输出了

也就是说它其实内存里头还是那个东西

一个值一个地址值

但是 当计算机去处理它去把它显示出来的时候

它做了不一样的一种解读

那我们今天在这讲二进制的

或者说文本文件这种区别的时候

说文本文件为什么看上去跟二进制不太一样

那其实就是在它去显示它的时候

它并没有去显示那个二进制的值

比方说我们一般用编辑器去打开它

比方用记事本或者我们编程序的工具

去打开它的时候我们并不是看到的二进制的值

而是把这个值去做了一种转换

去查那个ASCⅡ码表把它

对应的字符给它显示出来了

就像我们第二章里头说

我cout一个char*一样

我并没有去输出那个地址而是去干了另外一个事情

这个我觉得确实是一个很类似的对比

然后我觉得刚才这个大多数情况可能是

一个文件摆在那了然后我们怎么去读它

如果是一个实际问题我想把一个数存在一个文件里

那这个时候其实选择权在我们自己

到底是存成文本模式还是存成二进制模式

这两个文件存储方式的区别

就在于你比如说要存一个123

如果说我拿二进制模式 我可能存一个int

那就是咱们四个字节存在里面

那要存文本模式可能要123那三个ASC码

就分别存在可能才三个字节反倒还小一点

但是这个也只是你在这种数字或者数值

这种情况下才会存在这种差异

你比方说字符你看上去是个字符A

你以为你存的字符A

其实它还是存的那个A的ASC码值

你刚才说的123或者说甚至浮点数1.23

你看上去是1.23那你如果存值的话

那就真是1.23这个浮点的0101的串

如果我们说存字符

其含义潜台词是说按照字符1和点2和3

四个字符去存的它的ASC码值

所以可能如果咱们存的数值很大

咱们就可以比较一下到底哪个更省空间

再来去挑 首先不管文本文件还是各种文件

都有一个格式的问题看你怎么去解释它

所以有些情况下可能就拿文本方式存就特别浪费

就比如说其实咱们第二章论道的时候也提到过

把东西数字化然后这么一个概念

那其实我们生活中很多东西

一旦数字化的话都变成一串的数

然后这个数的取值范围又很大

这个用文本模式来存的话中间还得有点格式信息

有点逗号这种分隔符

然后就特别浪费空间

就像咱们平时看的这种电影

你想像一下试着把它拿文本模式存一下

那就不是电影了对不对 它也不可能变成小说

它那个媒体形式是通过一种光影

这种视觉的信息进来的

你文本是一种字符的这种变化 它两个不太一样

所以还是根据你的内容去选择你的更合适的那个

所以其实我们可以从另外一个角度来讲

可能也能帮助理解文本和二进制这种所谓的差别

你看我们章节里面叫非文本数据的这种处理

那我们没说二进制数据的处理

那其实就是说在我们这个数据里头既然说

大家都是二进制存在着的

那为什么还有文本

它其实是指它信息的一种类型

那跟它相对应的或者说是平行的 有图像

这肯定是非文本的 有这个语音

那肯定也是非文本的 因为你只能看只能听

那不是字所以你谈不上文本不文本

它根本就不是字你说你怎么用文本

所以这么一想你就可以想到

什么文本语音图像

它们其实都是以二进制方式存储起来

只不过 这些数据 如果它是

我们说它是文本的时候是说你用

记事本打开你能看到一个个有意义的字符

当我们说它是图像的时候

是因为你拿了一个各种看照片的工具

你能看到一幅很有意义的画

当我们说它是语音或者说视频电影的时候

是因为你拿相应的这种工具能够

以那种格式去解读那个二进制的内容

所以文本是被一个工具以它的特征方式

解释出来一种让你看到的字符的形式

内部的其实还是二进制的

所以这个确实是跟大家去聊一聊这个

还有这一章我觉得大家可以聊一聊到底什么是文件

因为这个不是我们生活中我有一个什么什么文件

我这真的是有一个文件柜装了很多很多文件

我们计算机可以有文件跟这个概念有联系

但是也有明显的差别

你说这个我们在最初刚开始学计算机的时候

第一次碰到文件的概念真的是像你刚才说的那样子

去想我们日常生活中碰到的那些东西

觉得很难理解这个

所以这个里头我们从上一章开始到这一章

其实是讲了两章

包括我们下一章还会讲文件

那么这个文件实际上是

计算机领域一个非常重要的概念

它其实牵扯到对于除内存以外的

就其他的这种设备或者资源它的一种管理

或者说它的一种有效的这种空间的一种命名

就相当于我们程序里头有数组有个变量

它其实是对内存里头一片区域的一个命名

那我们如果是硬盘上的呢

外面也希望画一个地 这个地方叫个什么名字

如果没有文件这个概念我可能

想象不同的程序就得去抢

硬盘上那个地 谁抢到就算谁的

然后我下一个人来

要是霸道一点我就把你那个地占用了

那原来人家写的那个东西数据就丢掉了

也跟内存一样是个覆盖的过程

那这种事情我们得有一个合理的机制来把它规避掉

那这个文件的概念就是我底下有一个系统

来帮你抢一块地

然后我来保护你不会被别人给占掉

所以把一些需要你管理需要你分配需要你调节的东西

哪怕是抽象的哪怕它是有实际东西的

给它一个名称这样话它管理就顺了

这个其实跟我们在第二章论道

的时候说变量是干什么的

变量是把你这里头有需要的概念我把它符号化

有些中间结果什么之类的

这样的话它就可以表示出来

其实文件其实也有一个类似的意图在里面

我把它管理起来

这个我觉得我们理解它第一个很重要的一个方面

程序设计基础课程列表:

第一章 编程初步

-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 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

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

程设论道一笔记与讨论

也许你还感兴趣的课程:

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