2024-2025-1 20241403 《计算机基础与程序设计》第十三周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(如2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业) |
这个作业的目标 | 结构体的定义 结构体数组的定义和初始化 结构体指针定义和初始化 向函数传递结构体 共用体 枚举数据类型 动态数据类型 单向链表 |
作业正文 | https://www.cnblogs.com/chenqiqi/p/18620000 |
教材学习内容总结
结构体的定义
结构体是一种复合数据类型,它允许将多个不同类型的数据组合成一个单一的类型。结构体的定义以struct关键字开始,后跟结构体的名称,然后是一对花括号,其中包含一系列的成员声明。
结构体数组的定义和初始化
结构体数组是存储多个相同类型结构体的数组。定义结构体数组时,需要指定数组的大小。结构体数组的初始化可以在定义时完成,通过为每个结构体成员指定初始值。
结构体指针定义和初始化
结构体指针是指向结构体的指针。定义结构体指针时,使用结构体类型和星号(*)。结构体指针可以被初始化为指向已存在的结构体实例,或者动态分配内存来创建新的结构体实例。
向函数传递结构体
结构体可以通过值传递或引用传递给函数。值传递会复制整个结构体,而引用传递(即指针传递)则允许函数直接修改原始结构体。
共用体
共用体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。共用体的定义与结构体类似,但是共用体的所有成员共享同一块内存空间。
枚举数据类型
枚举是用户定义的类型,它为一组整数值提供了有意义的名称。枚举的定义以enum关键字开始,后跟枚举的名称(可选),然后是一对花括号,其中包含一系列的枚举常量。
动态数据类型
动态数据类型指的是在程序运行时动态分配和释放的数据类型。这通常通过标准库函数malloc、calloc、realloc和free来实现。动态内存管理允许程序在运行时根据需要分配和释放内存。
单向链表
单向链表是一种线性数据结构,由节点组成,每个节点包含数据部分和一个指向下一个节点的指针。单向链表的头节点指向链表的第一个元素,而最后一个节点的指针通常设置为NULL。单向链表支持在链表的任何位置插入和删除节点。
教材学习中的问题和解决过程(先问 AI)
- 问题1:共用体和结构体的区别
- 问题1解决方案:
共用体(Union)和结构体(Struct)在C语言中都是复合数据类型,但它们之间有几个关键的区别:
内存占用:
结构体:结构体中的所有成员都有自己的内存空间。即使它们是同一类型的数据,也会分别存储。
共用体:共用体的所有成员共享同一块内存空间。这意味着在任何时候,只能使用共用体的一个成员,因为它们在内存中是重叠的。
成员访问:
结构体:可以同时访问结构体的所有成员,它们是独立的。
共用体:虽然可以定义多个成员,但任何时候只能使用一个成员,因为它们共享内存。访问一个成员可能会覆盖其他成员的值。
大小:
结构体:结构体的大小是其所有成员大小的总和,加上可能的填充(padding)以满足对齐要求。
共用体:共用体的大小等于其最大成员的大小,因为它们共享内存空间。
用途:
结构体:用于需要存储多个不同类型数据项的情况,这些数据项可以同时被访问。
共用体:用于节省空间的情况,或者当你需要存储几种不同类型的数据,但在同一时间只需要使用其中一种类型。
初始化:
结构体:可以初始化所有成员。
共用体:只能初始化一个成员,因为所有成员共享内存。
数组和指针:
结构体:可以创建结构体数组和指向结构体的指针,这使得处理多个结构体实例变得容易。
共用体:也可以创建共用体数组和指向共用体的指针,但由于成员共享内存,使用时需要特别注意。
成员对齐:
结构体:编译器可能会在结构体成员之间插入填充字节,以满足特定的对齐要求。
共用体:由于成员共享内存,通常不会有额外的填充,除非编译器为了对齐整个共用体而添加。
基于AI的学习
代码调试中的问题和解决过程
-
问题1:当再次打开程序,输入输入学生信息时,重新输入的学生信息会把之前旧的学生信息替代掉。
-
问题1解决方案:
在新添加学生信息时,多加一个变量“total”表示之前学生的人数,先把之前的学生信息读出来,然后在Readstu函数调用时从“stu+之前学生人数”这个位置开始调用,并且在把学生信息存入文件时,学生个数为“新添加学生人数+旧的学生人数”,改后代码如下:
-
问题2:在写Sort函数中需要交换数据,我一开始是把结构体中的数据一个个交换,这样写代码显得很冗杂。
-
问题2解决方案:定义一个结构体变量temp,可以直接交换结构体。
其他(感悟、思考等,可选)
我现在的代码比之前进步了很多,但是在第一次调试时还是会有一些语法错误,所以我应该多加练习,争取不再出现语法错误。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第十三周 | 500/6000 | 1/13 | 20/20 | |
第十四周 | 0/6500 | 0/14 | 18/38 | |
第十五周 | 0/7000 | 0/15 | 22/60 |