2024-2025-1 20241311 《计算机基础与程序设计》第十三周学习总结
学期 2024-2025-1 学号 20241311 《计算机基础与程序设计》第十三周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接> 2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>2024-2025-1计算机基础与程序设计第一周作业) |
这个作业的目标 | <写上具体方面> |
作业正文 | ... 本博客链接 |
教材学习内容总结
《C语言程序设计》第五版的第十二章学习总结:
-
结构体(Structures):
- 结构体是一种复合数据类型,它允许将多个不同类型的数据项组合成一个单一的数据结构。
- 结构体定义使用
struct
关键字,可以包含各种数据类型的成员,如整数、浮点数、字符等。 - 结构体变量的声明和使用,以及如何访问结构体成员(使用点
.
操作符)。 - 结构体数组和指针的使用,以及如何通过指针访问和修改结构体成员。
- 结构体作为函数参数传递,可以提高程序的灵活性和效率。
-
联合体(Unions):
- 联合体也是一种复合数据类型,允许在相同的内存位置存储不同的数据类型。
- 联合体的定义和使用,以及如何访问联合体成员(同样使用点
.
操作符)。 - 联合体与结构体的主要区别在于联合体的所有成员共享同一块内存空间,而结构体的每个成员都有自己的内存空间。
- 联合体的使用场景,如节省内存或处理不同的数据类型。
-
枚举(Enumerations):
- 枚举是另一种数据类型,它为整数值赋予了有意义的名称。
- 枚举的定义和使用,以及如何在程序中引用枚举成员。
-
typedef 关键字:
typedef
用于为数据类型定义新的名称,提高代码的可读性和可维护性。- 使用
typedef
定义结构体和联合体的新类型名。
-
结构体和联合体的内存对齐:
- 内存对齐的概念,以及它如何影响结构体和联合体的大小。
- 如何使用
#pragma pack
指令来控制结构体的内存对齐。
-
链表:
- 链表是一种动态数据结构,它由节点组成,每个节点包含数据和指向下一个节点的指针。
- 链表的基本概念,包括单向链表和双向链表。
- 如何创建、插入、删除和遍历链表。
《计算机科学概论》第七版第十二章的学习总结:
-
信息系统的定义:
信息系统是用于收集、处理、存储和分发信息的系统,它们支持组织的日常运作和决策制定。 -
信息系统的组成:
信息系统通常包括硬件、软件、数据库、网络和用户界面等组件。 -
数据库系统:
数据库系统是信息系统的核心部分,用于存储和检索数据。它们可以基于不同的数据模型,如关系模型、对象模型等。 -
数据组织:
信息系统中的数据处理涉及数据结构和文件结构,这些结构决定了数据存储和访问的方式。 -
网络和通信:
信息系统常常需要通过网络进行数据的传输和通信,这涉及到网络协议、拓扑结构等概念。 -
信息安全:
信息系统必须保护信息不受未授权访问和各种威胁,这包括加密技术、安全认证技术等。 -
系统开发和维护:
信息系统的开发涉及需求分析、设计、实现和测试等阶段。维护则包括对系统进行更新和修复,以适应变化的需求。 -
用户界面:
用户界面是用户与信息系统交互的界面,它需要设计得直观易用,以提高效率和用户体验。
教材学习中的问题和解决过程(先问 AI)
- 问题1:信息安全为什么重要,它包括哪些方面?
- 问题1解决方案:信息安全的重要性在于它保护重要信息免遭未经授权的访问、披露、使用、更改或中断,确保敏感的组织数据可供授权用户使用、保持机密并保持其完整性。信息安全包括以下几个方面:
-
保密性(Confidentiality):确保只有授权的用户可以访问信息,保护信息不被非法获取或泄露给未授权方。
-
完整性(Integrity):防止未经授权的修改或破坏信息,确保信息在传输、存储和处理过程中不被篡改、破坏或丢失。
-
可用性(Availability):确保授权用户可以在需要时访问信息和资源,保障信息系统的连续运行和信息服务的连续性。
-
可控性(Controllability):信息的安全管理应该受到限制和控制,以防止未经授权的访问和滥用。
-
真实性:确保信息的真实性,防止信息被伪造或篡改。
-
防止未授权拷贝:保护信息不被非法复制。
-
所寄生系统的安全性:确保信息系统(包括硬件、软件、数据、人、物理环境及其基础设施)受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露。
信息安全的范围很大,包括如何防范商业企业机密泄露、防范青少年对不良信息的浏览、个人信息的泄露等。网络环境下的信息安全体系是保证信息安全的关键,包括计算机安全操作系统、各种安全协议、安全机制(数字签名、消息认证、数据加密等),直至安全系统,如UniNAC、DLP等。信息安全对于个人、企业乃至国家安全都至关重要,它关系到个人隐私保护、企业资产安全、国家政治、经济、军事等多个方面。
- 问题2:如何评估信息系统的性能?
- 问题2解决方案:评估信息系统的性能是一个复杂的过程,涉及到多个方面和指标。以下是一些常用的方法和指标:
-
响应时间(Response Time):
- 这是衡量系统处理请求并返回结果所需时间的指标。对于用户来说,响应时间越短,体验越好。
-
吞吐量(Throughput):
- 指系统在单位时间内能处理的事务数量或数据量。高吞吐量意味着系统能处理更多的请求。
-
并发用户数(Concurrent Users):
- 指系统能同时支持的最大用户数量。这对于确保系统在高负载下仍能正常工作至关重要。
-
系统可用性(System Availability):
- 指系统在需要时可用的程度。通常以百分比表示,如99.9%的可用性意味着系统每年只有0.1%的时间不可用。
-
资源利用率(Resource Utilization):
- 包括CPU、内存、磁盘I/O和网络I/O等资源的使用情况。高资源利用率可能意味着需要优化或扩展资源。
-
错误率(Error Rate):
- 指在特定时间内系统发生错误的频率。低错误率是系统稳定性和可靠性的重要指标。
-
恢复时间(Recovery Time):
- 指系统在发生故障后恢复正常运行所需的时间。快速恢复是系统鲁棒性的重要指标。
-
可扩展性(Scalability):
- 指系统在增加负载时,通过增加资源来维持性能的能力。良好的可扩展性意味着系统能够适应业务增长。
-
维护成本(Maintenance Cost):
- 包括系统维护所需的人力、物力和财力成本。低维护成本可以降低总体拥有成本(TCO)。
-
用户体验(User Experience):
- 指用户使用系统的满意度和便利性。可以通过调查问卷、用户反馈等方式来评估。
-
安全性(Security):
- 指系统保护数据免受未授权访问和攻击的能力。可以通过安全审计和合规性检查来评估。
-
合规性(Compliance):
- 指系统是否符合相关法律法规和行业标准。这对于避免法律风险和维护企业声誉至关重要。
评估信息系统性能时,通常会结合定性和定量的方法,使用各种工具和技术(如性能监控工具、负载测试工具等)来收集数据,并根据业务需求和目标来设定性能基准。通过持续的性能监控和定期的性能测试,可以及时发现性能瓶颈,并采取相应的优化措施。
基于AI的学习
我正在学习结构体的定义的知识点请你以苏格拉底的方式对我进行提问一次一个问题
当然,我们可以采用苏格拉底式的提问法来探讨结构体的定义,让我们开始第一个问题:
你能告诉我什么是数据类型吗?
就是数据的类型比如整型,字符型,浮点型等等
非常好,你已经正确地描述了数据类型的基本概念。数据类型定义了数据的类别和计算机如何存储和处理这些数据。
接下来,我的下一个问题:
在C语言中,我们有哪些基本数据类型?
字符型,浮点型,整型,数组,枚举型
对的,C语言提供了多种基本数据类型,包括字符型(char)、浮点型(float和double)、整型(int、short、long等)以及数组和枚举型(enum)。这些基本数据类型是构建更复杂数据结构的基础。
现在,让我们继续探讨:
尽管有基本数据类型,我们是否总能找到一个单一的数据类型来表示所有复杂的数据结构?
有,结构体类型
正确,结构体类型(struct)是C语言中用来表示复杂数据结构的一种方式。它允许我们将不同的数据类型组合成一个单一的数据结构。
接下来的问题:
如果我们需要将不同类型的数据项组合在一起,比如一个人的姓名和年龄,你会怎么做?
把这些定义为一个结构体
完全正确,定义一个结构体是将不同类型的数据项组合在一起的有效方法。那么,我的下一个问题:
在C语言中,我们如何创建一个可以包含多个不同类型的成员的数据结构?
struct ..{}
非常好,你已经掌握了结构体的基本定义方式。在C语言中,我们使用struct关键字来定义一个结构体类型,然后在大括号{}中定义它的成员。
现在,让我们继续:
如果我们定义了一个结构体类型,我们如何声明一个这种类型的变量?
在大括号后面直接声明
接近了,但让我帮你更精确地表述。在定义了结构体类型之后,你可以通过在结构体类型后跟变量名来声明该类型的变量。例如,如果你定义了一个名为Person的结构体类型,你可以这样声明一个变量:
c
struct Person person1;
这里person1就是你声明的Person类型的变量。这个变量现在包含了Person结构体中定义的所有成员,但是还没有初始化。
接下来的问题:
一旦我们有了结构体变量,我们如何访问它的各个成员?
在声明的变量后面加.再加成员名
是的,你完全正确。在C语言中,我们通过使用点(.)操作符来访问结构体变量的成员。例如,如果你有一个名为person1的结构体变量,并且这个结构体有一个名为name的成员,你可以这样访问它:
c
person1.name = "John";
这行代码将person1的name成员设置为"John"。
现在,让我们继续:
结构体变量可以进行哪些操作?它们可以被复制吗?它们可以作为函数的参数吗?
向函数传递,赋值等等,可以复制,可以作为参数
你的回答非常准确。结构体变量确实可以被复制、赋值,并且可以作为函数的参数传递。这里是一些具体的操作细节:
作为函数参数传递:
当你将结构体变量作为参数传递给函数时,通常通过值传递,这意味着函数接收的是结构体的一个副本。如果你希望在函数内部修改结构体,并且这些修改能够影响到原始结构体,你应该通过指针来传递结构体。
c
void function(struct Person *p) {
p->age = 30; // 通过指针修改结构体成员
}
复制结构体变量:
结构体变量可以通过赋值操作符直接复制,但这种复制是浅复制,意味着只复制了结构体中的值,如果结构体包含指针,那么复制的是指针的值,而不是指针指向的内容。
c
struct Person person2 = person1; // 浅复制
赋值操作:
结构体变量可以通过赋值操作符进行赋值,这通常涉及到结构体中每个成员的赋值。
c
struct Person person3;
person3 = person1; // 将person1的值赋给person3
这些操作使得结构体在C语言中非常灵活和强大,能够用于各种复杂的数据结构和算法中。
代码调试中的问题和解决过程
- 问题1:当从文件读取数据到结构体数组information时,没有对n(学生数量)进行重新初始化或者正确设置。如果n的值不正确,可能会导致读取超出文件末尾或者读取到错误的数据量。
- 问题1解决方案:在写入文件时加入n的值
- 问题2:当向文件写入数据时,使用的是fwrite(&information[i], sizeof(information), 1, fp);。这里sizeof(information)计算的是整个information数组的大小,而不是单个struct student的大小。
- 问题2解决方案:正确的写法应该是fwrite(&information[i], sizeof(struct student), 1, fp);。
其他(感悟、思考等,可选)
菜就多练
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 | |
第五周 | 800/1200 | 2/2 | 20/20 | |
第六周 | 700/1000 | 2/4 | 18/38 | |
第七周 | 800/1000 | 3/7 | 22/60 | |
第八周 | 900/1300 | 2/9 | 30/90 | |
第九周 | 1000/1200 | 2/2 | 20/20 | |
第十周 | 800/900 | 2/4 | 18/38 | |
第十一周 | 800/1000 | 3/7 | 22/60 | |
第十二周 | 900/1300 | 2/9 | 30/90 | |
第十三周 | 1000/1300 | 2/9 | 30/90 |