当前课程知识点:程序设计基础 >  第七章 文本数据处理 >  7.3 统计在线时长 >  7.3.2 结构

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

7.3.2 结构在线视频

7.3.2 结构

下一节:7.3.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.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 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

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

7.3.2 结构笔记与讨论

也许你还感兴趣的课程:

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