当前课程知识点:程序设计基础 > 第七章 文本数据处理 > 7.3 统计在线时长 > 7.3.2 结构
回忆一下 我们这节课前面几章其实讲到了
怎么自定义一个变量然后怎么自定义一个函数
那这节课要讲的结构
其实就是一种自定义类型方法
那首先看看怎么定义时间这样一个类型
我们写成这样
首先是一个struct这样一个关键字
其实是结构的英文structure的缩写
然后紧跟着Time_t是一个类型的名字
这是我们给它取的名字
既然是时间 就起名Time
后面加一个下划线t代表这是一个类型
这样不会让大家误解为这是一个变量
紧接着大括号括起来这是包含的结构的成员
表示这样一个大括号当中变量的这些组合
总共这六个变量会组合成一个新类型
或者说反过来
这样一个新类型会包含大括号当中的所有这些成员
最后要以分号结尾
写成这样就定义了一个名字叫Time_t的新类型
既然是一个类型 那我们就可以用它定义变量
比如说像这样Time_t空格然后a分号
我们就定义了一个名字叫a然后
类型为Time_t的这样一个类型的变量
那实际上跟之前的变量定义是一样的
我们只是把类型换成了Time_t
实际上我们定义了一个
名字叫a的这样一个表达时间类型的一个变量
我们还可以对这样一个变量进行初始化比如说像这样
b后面可以用等号做一个初始化
后面用大括号括起来了一些数
这样呢 变量b的值实际上按照变量的意义
就代表了2015年6月3日8点0分0秒
看上去这个初始化长的和数组的初始化有点像
也是拿大括号括起来一堆东西 但是呢
结构的大括号里面是需要根据结构定义的时候
成员变量的顺序一一给它赋初值
也就是说2015 6 3会分别
给当中的year month day做初始化
而不是像数组这样
所有的大括号里面都代表同一个类型
结构里面 刚才这个时间凑巧就是
所有的成员变量都是int类型
其实结构里面可以不都是int
那初始化的时候就得根据当时定义的时候
那个是什么类型
这个初始化的里面就得对应的写什么类型的常量
给它做初始化
除了定义变量 还可以用一个类型来定义数组
所以这样一个自定义的类型也可以来定义数组
像下面这种 我们就定义了20个
Time_t这种类型的变量
对于这个数组要怎么初始化就不写了
大家可以尝试一下 其实就是跟我之前一样
用一个大括号把里面的一堆Time_t的初始化写在里面
那Time_t的初始化怎么做的
就是像中间这个 再写一个大括号
其实就感觉跟二维数组的初始化差不多
大家可以下来练习一下
定义了这个结构变量之后我们能拿它干什么呢
像这样一个我们自己定义的类型
既不能像标准支持的int类型
这个变量一样做加减乘除
又不能像刚才提到的字符串这个类型的变量
可以有一堆复制比较这样一些函数
那这个类型的变量到底能干嘛呢
最基本的 c语言还是允许通过
结构的变量去访问结构变量的一些成员
比如说 我们如果有这样两个time_t类型的变量
一个a一个b 我们可以通过a.year
这样的写法来表达的是a这个变量当中
year对应那个项的值
这里呢给它赋值成了2015 实际上
把2015赋值给了a这个变量中的year这一项
我可以把整个a.year这个整体
当成一个int类型的变量来使用
跟一个普通类型的int变量没有什么特别的区别
除了可以做这个赋值 还可以做输出输入都可以
甚至还可以参与一些运算
用b.year减去a.year
这是两个int类型的变量做减法 没有关系
然后赋值给一个新的变量x
那同理 像a.month a.second这些
都可以当成一个普通的int类型的变量来使用
理解了上面这种结构的一些用法
我们就可以完成在上一段当中
声明的那个TimeDifference这个函数的定义了
这里直接给出来一个简单写法
这里实际上还做了一个假设
就是这个输入了两个参数
一个s一个t都是2015年的
为什么假设都是2015年呢
这样计算起来稍微简单一点
要不是2015年的话有可能完整的求时间差的这个功能
可能还要涉及比如闰年的判断
像2012年就是一个闰年 二月份的天数就不一样
那天数都不一样 直接就影响了最后求出的秒数
到底差别有多大 所以完整的判断就不详细写了
这里就写了一个假设都是2015年的
同学们可以下来做一个练习
怎么来写成一个完整的带判断闰年等等
这样一些功能的求时间差的一个函数
但是这里提醒大家一下 如果大家要做这个练习
要考虑一下我们这里返回值的类型是int的类型
返回的是一个s时间和t时间差 这个差有多少秒
那int类型能表达多少秒 这个就得算一下
就是这些秒相当于多少年多少天多少小时等等等等
就需要做一个假定说t跟s这个时间差不会超过int范围
这样一个函数才能够正常使用
好 有了这样一个函数 我们下一段还是回到主体功能
就是统计每一位同学在线时长这样一个问题
-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 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测