当前课程知识点:程序设计基础 > 第七章 文本数据处理 > 7.3 统计在线时长 > 7.3.1 问题分析
前面我们通过程序知道了
这样一些记录当中到底有多少位活跃用户
所以我们接下来还想知道这些用户到底有多活跃
也就是统计一下每一位这样的用户总共的在线时长是多少
还是我们一贯的思路 咱们先尝试一个简单一点的特例
这个问题还挺复杂的 简单特例我举一个
比如说先考虑一个简单的情况
如果整个日志当中只涉及到一个用户 要怎么处理
那如果说只涉及到一个用户那日志大概会长成这个样子
其实我就不用关心那个用户的编号了
其实也就是a时刻login一下 b时刻logout
c时刻再login d时刻再logout 一次一次的这样
所以最后他的在线时长就应该是
b时刻减去a时刻然后d时刻再减去c时刻
每一个减法最后都得到一个时间差
然后把所有这样的时间差做一个求和
我们就得到了这一个用户的总共的在线时长
所以我们可以看到整个过程当中
需要用到很多次时刻减时刻 时刻减时刻
出现了这样一个需要很多次的功能
那既然如此 既然这个功能要使用很多次
我们就试试 先把这个功能写成一个函数
这个函数的功能好像比 以外的主题功能简单
所以我们先把这个函数尝试写出来
那这样一个函数怎么样声明
首先 既然是求时间差 给它起一个名字
起名叫TimeDifference 时间差
除了起个名字 剩下的函数声明的几个要素
就是前面要有一个返回值
后面要有一个括号 一堆参数
那实际上就是要考虑这个函数的输入输出是什么
输出相对比较简单 为了后面的求和的方便
它返回的应该是一个时间差
是一个几小时几分几秒这样一个量
但是我们后面还要求和
为了求和方便 就直接返回一个多少秒
把前面所有的小时分钟都转换成秒加在一块
所以就是返回一个int就可以了
那输入是什么
咱们刚才说了 要求一个时间差
所以就应该有两个时间作为输入 两个时刻作为输入
那每一个时刻呢 都应该由一个年一个月一个日
然后 时分秒 应该一共有这六个int来表达
那现在需要两个时刻
所以一共就需要12个int类型这样的参数
看到这样一个声明是不是被吓到了
设计语言的这个人也觉得这样的写法实在是太丑了
12个参数全是int 谁知道你到底想干嘛
所以这里我们要再引入一个新的概念
用结构来帮助我们简化这样一个程序
有了结构 我们就可以把刚才的声明写成这个样子
括号里面变成了两个Time_t
大概猜一下Time_t代表的类型就应该是一个时间的类型
那只有两个时间的参数
然后返回一个int 然后它名字又叫做TimeDifference
大概我们就能猜出来这是一个求时间差的函数
是不是比刚才那个12个参数的要清楚很多
你也搞不清楚那12个参数到底代表的什么意思 对吧
好 下一段我们就来看看
如何使用这样一个结构来简化我们的写法
-1.1 基础知识
-1.2 买菜问题
-1.3 数学运算
-1.4 补充说明
-1.5 总结
--1.5 总结
-程设论道
--程设论道
-师生问答
-第一章 编程初步--语法自测
-2.1 关于超级计算器的几点思考
-2.2 电子秤模拟 — 背景介绍及需求分析
-2.3 电子秤模拟 — 代码实现
-2.4 变量定义与变量类型
-2.5 猜数游戏与数据表示
-2.6 关于变量的讨论
--公告
-2.7 变量体现的计算思维
-程设论道
--程设论道
-师生问答
--师生问答
-第二章 变量与代数思维--语法自测
-3.1 谁做的好事——语义表示
-3.2 谁做的好事——真假检查
-3.3 谁做的好事——循环枚举
-3.4 谁是嫌疑犯——多重循环枚举
-3.5 谁是嫌疑犯——破案线索表示
-3.6 谁是嫌疑犯——用二进制枚举
-程设论道
--程设论道一
--程设论道二
--程设论道三
-师生问答
-第三章 逻辑推理与枚举解题--语法自测
-4.1 插花游戏
-4.2 筛法
-4.3 线性查找
-4.4 折半查找
--4.4.1 提问
-4.5 排序问题
-4.6 总结
--4.6.1 总结
-程设论道
--程设论道二:筛法
-师生问答
-第四章 筛法与查找--语法自测
-5.1 阶乘
-5.2 排序
-5.3 矩阵填充
-5.4 分书与八皇后
-5.5 青蛙过河
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答一
--师生问答二
-第五章 分治思想与递归--语法自测
-6.1 兔子数列问题
-6.2 分鱼问题
-6.3 橱窗的插花问题
-6.4 最长公共子序列问题
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第六章 递推与动态规划--语法自测
-7.1 统计记录总数
-7.2 统计活跃用户数
-7.3 统计在线时长
--7.3.2 结构
-7.4 总结
--7.4.1 总结
-程设论道
--程设论道
-师生问答
--师生问答
-第七章 文本数据处理--语法自测
-8.1 将数据组织成链表
-8.2 提高链表访问效率 —— 哈希链表
-8.3 以二进制文件存储链表
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第八章 非文本数据处理--语法自测
-9.1 自动售卖程序
-9.2 配制水果信息
-9.3 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测