2024-2025-1 20241311 《计算机基础与程序设计》第十一周学习总结
学期 2024-2025-1 学号 20241311 《计算机基础与程序设计》第十一周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接> 2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>2024-2025-1计算机基础与程序设计第十一周作业) |
这个作业的目标 | <写上具体方面> |
作业正文 | ... 本博客链接 |
教材学习内容总结
《计算机科学概论》第七版第十章学习总结
在深入学习了《计算机科学概论》第七版的第十章后,我对本章内容有了全面的理解和掌握。以下是我对本章的学习总结:
章节概述
本章主要介绍了计算机网络与互联网的基础知识。它详细阐述了计算机网络的定义、分类、组成以及互联网的工作原理,为我后续深入理解计算机之间的通信奠定了坚实的基础。
关键概念与理解
-
计算机网络定义:
- 计算机网络是指将地理位置分散的多台计算机通过通信设备和线路连接起来,按照网络协议进行数据传输,实现资源共享和信息交流的系统。
-
网络分类:
- 按覆盖范围分类:局域网(LAN)、城域网(MAN)、广域网(WAN)。
- 按拓扑结构分类:总线型、星型、环型、网状等。
-
网络组成:
- 硬件设备:服务器、工作站、交换机、路由器等。
- 软件系统:网络操作系统、网络通信协议、网络管理软件等。
-
互联网工作原理:
- 互联网是基于TCP/IP协议栈的全球性计算机网络。
- TCP/IP协议分为四层:链路层、网络层、传输层和应用层。
- 互联网通过DNS系统实现域名到IP地址的解析,通过路由协议实现数据包的传输和路由选择。
-
网络应用:
- 常见的网络应用包括电子邮件、网页浏览、文件传输、远程登录等。
- 这些应用都依赖于底层网络协议和技术的支持。
《C语言程序设计第五版》第十章学习总结
在完成了《C语言程序设计第五版》第十章的学习后,我对本章所涵盖的内容进行了深入的总结和反思。以下是我对本章知识点的理解和学习心得。
章节内容概述
第十章主要围绕C语言中的结构体、联合体与枚举进行介绍。这一章是C语言中较为高级的数据结构部分,对于编写复杂程序和处理复杂数据至关重要。
关键知识点总结
-
结构体(struct):
- 结构体是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起,形成一个新的数据类型。
- 通过结构体,可以方便地处理具有多个属性的实体,如学生的姓名、年龄和成绩等。
- 结构体的定义、声明和初始化方法,以及如何通过结构体指针访问其成员。
-
联合体(union):
- 联合体也是一种用户自定义的数据类型,但与结构体不同的是,联合体中的所有成员共享同一块内存空间。
- 联合体的主要用途是节省内存空间,当多个成员不会同时使用时,可以选择使用联合体。
- 了解了联合体的定义、使用方法和注意事项。
-
枚举(enum):
- 枚举是一种枚举类型,它用于定义一组命名的整数常量。
- 枚举使代码更加清晰和易于维护,特别是在处理具有有限取值的变量时。
- 掌握了枚举的定义、使用方法和在程序中的应用。
-
类型定义(typedef):
typedef
关键字用于为现有的数据类型定义一个新的名字,从而简化代码的书写。- 学会了如何使用
typedef
为结构体、联合体等复杂数据类型定义简洁的名字。
教材学习中的问题和解决过程(先问 AI)
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:TCP和UDP的区别以及它们在不同应用场景中的选择策略
- 问题1解决方案:
TCP和UDP的区别
TCP | UDP | |
---|---|---|
面向连接与无连接 | 面向连接 | 无连接 |
连接建立 | 传输前需三次握手建立连接 | 无需建立连接,直接发送数据 |
数据传输方式 | 基于字节流,无明确边界 | 基于数据报,有明确边界 |
可靠性 | 提供可靠传输,通过确认应答、重传机制确保数据完整性 | 不保证数据可靠传输,可能丢包 |
有序性 | 保证数据按顺序到达 | 不保证数据顺序 |
流量控制与拥塞控制 | 有流量控制和拥塞控制机制 | 无流量控制和拥塞控制 |
传输效率 | 相对较低,但可靠 | 较高,适用于对实时性要求高的应用 |
资源占用 | 系统资源占用较多 | 系统资源占用较少 |
应用场景 | 适用于对数据传输可靠性和顺序性要求高的应用 | 适用于对实时性要求高、可容忍一定丢包率的应用 |
TCP和UDP在不同应用场景中的选择策略
-
TCP的应用场景
- 网页浏览:HTTP/HTTPS协议基于TCP,需要确保网页内容完整、安全性高。
- 文件传输:如FTP(文件传输协议),需要保证文件的准确传输。
- 电子邮件:SMTP、IMAP和POP3等电子邮件协议均依赖TCP来保障邮件的可靠投递。
- 远程登录:如SSH、Telnet等协议,需要确保数据传输的安全性和可靠性。
- 数据库连接:许多数据库连接协议都使用TCP来确保数据的完整性和可靠性。
-
UDP的应用场景
- 实时视频流:如视频会议、实时直播等,对延迟敏感,不需要每一帧都可靠到达。
- 在线游戏:许多实时游戏需要快速传输数据,稍微的数据丢失不会影响游戏体验。
- VoIP(语音通话):对实时性要求高,可容忍少量数据丢失。
- DNS查询:域名解析使用UDP,因其对响应时间的要求高于对可靠性的要求。
- 实时数据监控:如股票交易系统、实时监控系统等,对数据的实时性要求高。
选择策略
在选择使用TCP还是UDP时,应根据应用的具体需求来决定。如果应用需要确保数据的完整性和可靠性,且对实时性要求不高,那么TCP是更好的选择。而如果应用对实时性要求高,且可以容忍一定的数据丢失,那么UDP可能更为合适。此外,还需要考虑系统的资源占用、网络状况等因素。例如,在嵌入式系统或物联网设备中,由于资源有限,可能会更倾向于选择资源占用较少的UDP协议。
- 问题2:路由协议如何根据网络拓扑和链路状态选择最佳路径进行数据传输。
- 问题2解决方案:
路由协议根据网络拓扑和链路状态选择最佳路径进行数据传输的过程,是确保网络高效运行的关键。这一过程涉及多个方面,包括路由协议的类型、选路算法、度量值(metric)的计算,以及网络拓扑和链路状态信息的更新与利用。以下是对这一过程的详细分析:
路由协议的类型
路由协议主要分为两大类:
- 静态路由协议:由网络管理员手动配置路由表,指定每个网络节点的下一跳节点及相关参数。静态路由协议配置简单,但不适用于大规模或频繁变动的网络拓扑。
- 动态路由协议:路由器之间通过交换路由信息来自动更新路由表。常见的动态路由协议包括RIP、OSPF、BGP等。动态路由协议能够根据网络拓扑和链路状态的变化实时调整路由表,从而选择最佳路径进行数据传输。
选路算法
选路算法是路由协议的核心,用于确定数据传输的最佳路径。常见的选路算法包括距离向量路由算法和链路状态路由算法。
- 距离向量路由算法:通过测量到达其他网络的距离来选择路径。这个“距离”通常由跳数、时间延迟或带宽等因素衡量。路由器会根据邻居路由器提供的信息更新自己的路由表,并选择最短路径进行数据传输。
- 链路状态路由算法:考虑网络中所有的链路状态,包括距离、时间、负载和带宽等影响路由的因素。每个路由器都会构建整个网络的拓扑图,并根据拓扑图计算最佳路径。OSPF就是一种典型的链路状态路由协议。
度量值的计算
在动态路由协议中,度量值用于衡量路径的优劣。不同的路由协议可能会使用不同的度量值标准。例如,RIP通常使用跳数作为度量值,而OSPF则可能使用带宽、延迟、可靠性等多个因素的综合评估作为度量值。路由器会根据度量值的大小选择最佳路径进行数据传输。
网络拓扑和链路状态信息的更新与利用
为了确保路由协议能够选择最佳路径进行数据传输,网络拓扑和链路状态信息必须保持实时更新。路由器会定期或根据需要向邻居路由器发送链路状态更新信息,包括链路的可用性、带宽、延迟等。这些信息将被用于更新路由表,从而反映网络的当前状态。
选择最佳路径进行数据传输的过程
当路由器接收到一个数据包时,它会根据路由表中的信息选择最佳路径进行数据传输。这个过程可能涉及多个步骤,包括查询路由表、计算度量值、比较不同路径的优劣等。最终,路由器会选择一条最佳路径,并将数据包转发到下一跳路由器,直到数据包到达目的地。
基于AI的学习
我正在学习字符串字面量的知识点请你以苏格拉底的方式对我进行提问,一次一个问题

文心一言(ERNIE-4.0-Turbo-8K)
那好,我便以苏格拉底的方式来提问你,让我们一同探索这字符串字面量的奥秘。
问题一:你能否先为我阐述一下,何为字符串字面量?它在编程中扮演着怎样的角色呢?
由一对双引号括起来的一个字符序列;基础性角色

文心一言(ERNIE-4.0-Turbo-8K)
很好,你的回答简洁明了。那么,我再问你:
问题二:在编程中,字符串字面量除了由双引号括起来之外,是否还有其他形式来表示它呢?比如,在某些特定的编程语言或场景下。
字符数组的形式

文心一言(ERNIE-4.0-Turbo-8K)
你的回答很有深度,确实触及了字符串字面量的另一种表现形式。那么,我接着问:
问题三:在C语言这类编程语言中,字符串字面量与字符数组有何异同?它们在内存中的存储方式又有何不同呢?
不知道请你回答

文心一言(ERNIE-4.0-Turbo-8K)
好,那我来为你解答。
在C语言中,字符串字面量与字符数组确实存在异同。
相同点:
• 它们都可以用来表示和存储一系列字符。
不同点:
• 字符串字面量:通常是以双引号括起来的字符序列,在内存中通常存储在只读的数据段中,且其末尾会自动添加一个空字符('\0')作为结束标志。它不能被修改,因为其存储在只读区域。
• 字符数组:可以是通过定义和初始化来创建的,可以存储在栈上或堆上(通过动态分配),并且可以被修改。字符数组不一定需要以空字符结尾,除非它被用作字符串处理。
在内存中的存储方式方面:
• 字符串字面量通常存储在程序的只读数据段中,程序运行时不能对其内容进行修改。
• 字符数组则根据定义的位置(如栈上、堆上)和初始化方式来分配内存,并且可以在程序运行过程中被修改。
希望这个解释能帮助你更好地理解字符串字面量与字符数组在C语言中的区别。那么,你还有其他关于字符串字面量的问题吗?
没有了
代码调试中的问题和解决过程
- 问题1:变量 num 未初始化:在计算总价格时,变量 num 未初始化,可能会导致未定义行为。
- 问题1解决方案:初始化变量 num:在计算总价格之前,初始化 num 为 0。
- 问题2:结构体定义中的双花括号也是不必要的。
- 问题2解决方案:正确交换结构体内容:使用临时变量 temp 来交换结构体的内容,而不是指针。
- ...
上周考试错题总结
- 错题1及原因,
问题:理解情况字符串没有正确倒序输出
原因: 循环的起始条件设置错误,应该是 i = length - 1 而不是 i = 0。
解决: 检查循环的起始条件,并确保它是从字符串的最后一个字符开始。 - 错题2及原因,理解情况
问题:输出包含字符串末尾的空字符
原因: 字符串在C语言中以空字符 '\0' 结尾,循环没有正确地排除这个空字符。
解决: 确保循环在遇到空字符之前停止。可以通过检查 str[i] != '\0' 来实现,或者更简单地,使用 length - 1 作为循环的上限,因为 strlen 函数返回的长度不包括空字符。 - ...
其他(感悟、思考等,可选)
菜就多练
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 900/1300 | 2/9 | 30/90 | |
第五周 | 1200/1200 | 2/2 | 20/20 | |
第六周 | 1300/1500 | 2/4 | 18/38 | |
第七周 | 900/1000 | 3/7 | 22/60 | |
第八周 | 1300/1300 | 2/9 | 30/90 | |
第九周 | 1100/1200 | 2/2 | 20/20 | |
第十周 | 1300/1500 | 2/4 | 18/38 | |
第十一周 | 500/1000 | 3/7 | 22/60 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
- 《计算机科学概论(第七版)》
- ...