2022-2023-1 20221318 《计算机基础和程序设计》第十四周学习总结
这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14
作业目标 学习《C语言程序设计》第12章
作业正文 https://www.cnblogs.com/ni-yidan/p/16933456.html
教材内容总结
在第十二章“结构体与数据结构基础”中,
* 结构体类型的声明
* 结构体变量的定义
(1)先定义结构体类型再定义变量名
struct student stu1
(2)在定义类型的同时定义变量
(3)直接定义结构体变量(不指定结构体标签)
用typedef定义数据类型名
* 结构体变量的初始化
* 嵌套的结构体————嵌套的结构体(Nested Structure)就是在一个结构体内包含了另一个结构体作为其成分
* 结构体变量的引用
访问结构体变量的成员必须使用成员选择运算符(也称圆点运算符)
当出现结构体嵌套时,必须以级联方式访问结构体成员
* 结构体数组的定义和初始化
* 结构体指针的定义和初始化
如何访问结构体指针变量所指向的结构体成员呢?
(1)通过stu1和成员选择运算符访问结构体成员
stu1. studentID = 1;
(2)通过pt和指向运算符访问结构体成员
(pt). studentID = 1;
pt -> studentID = 1;
当结构体嵌套时,如何访问结构体指针变量所指向的结构体成员?
stu1. birthday. year = 1999;
(pt). birthday. year = 1999;
pt -> birthday. year = 1999;
如何定义指向结构体数组的指针?
如何访问结构体数组指针指向的结构体成员?
* 向函数传递结构体
(1)向函数传递结构体的单个成员
复制单个成员的内容
函数内对结构内容的修改不影响原结构
(2)向函数传递结构体的完整结构
(3)向函数传递结构体的首地址
* 共用体————sizeof(union number)取决于占空间最多的那个成员变量
(1)同一内存单元在每一瞬时只能存放其中一种类型的成员
(2)起作用的成员是最后一次存放的成员,不能作为函数参数
(3)不能进行比较操作,只能对第一个成员初始化
* 枚举数据类型
(1)描述的是一组整型值的集合
(2)用于当某些量仅由有限个数据值组成时
* 动态数据结构——单向链表
特点:用一组任意的存储单元存储线性表数据。存储单元可以是连续的,也可以是不连续的
1.向链表中添加节点
(1)若原链表为空表(head == NULL) ,则将新建节点p置为头节点
(2)若原链表为非空,则将新建节点p添加到表尾
2.链表的删除操作
(1)若原链表为空表,则退出程序;若待删除节点p是头节点,则将head指向当前节点的下一个节点即可删除当前节点
(2)若待删除节点不是头节点,则将前一节点的指针域指向当前节点的下一节点
(3)若已搜索到表尾(p->next == NULL)仍未找到待删除节点,则显示“未找到”
3.链表的插入操作
(1)若原链表为空表,则将新节点p作为头节点,让head指向新节点p
(2)若原链表为非空,则按节点值的大小(假设已升序排序)确定插入新节点的位置。若在头节点前插入节点,则将新节点的指针域指向原链表的头节点,且让head指向新节点
(3)若在链表中间插入新节点,则将新节点的指针域指向下一节点且让前一节点的指针域指向新节点
(4)若在表尾插入新节点,则末节点指针域指向新节点
* 链表的输出
教材学习中的内容
Q: 程序的存储类型?
A: 存储类型分别是auto(自动),extern(外部),register(寄存器),static(静态)
1.auto
在函数体中定义的变量缺省是auto.当进入代码块(block)时,系统为自动变量分配内存.在块内,这些变量被定义,并被认为他们是局部于本块的.当退出块时,系统释放分配给自动变量的内存,因此,变量值就丢失了.重新进入块,系统会为自动变量再次分配内存,原先的值已经没有了.
2.extern
在函数的外部声明变量,就为变量永久的分配存储,它的存储类型是extern。定义在函数外部的变量的存储类型都是extern,既不使用关键字extern.使用extern关键字是告诉,编译器”在本文件或其他文件中寻找它”。既a文件中int a =1在b文件中则可以使用extern int a;来调用它。外部变量从不会消失,因为外部变量在整个程序执行期间都是存在的。
两种方式向函数传递信息:1.使用外部变量.2.使用参数.当函数从其内部而不是通过参数表改变全局变量时,会产生副作用.这样的构造容易引发错误.正确的做法是通过参数和返回机制影响全局变量.
3.register
register高速编译器应该把有关的变量存储在高速的内存寄存器中.使用存储于类型register是要试图改善执行速度.当关系速度时,可选择一些最经常访问的变量,并把他们的存储类型声明为register.
register i;等价于register int i;,register默认是int类型.
4.static
允许局部变量保存它的原有值,以便再进入块时使用.
void f(void)
{
static int cnt = 0;
}
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
第一周 | 0/0 | 3/3 | 20/20 | |
第二周 | 105/105 | 2/5 | 20/40 | |
第三周 | 150/255 | 2/7 | 20/60 | |
第四周 | 210/465 | 2/9 | 20/80 | |
第五周 | 280/745 | 2/11 | 20/100 | |
第六周 | 320/1065 | 1/12 | 20/120 | |
第七周 | 400/1465 | 1/13 | 20/140 | |
第八周 | 400/1865 | 1/14 | 20/160 | |
第九周 | 400/2265 | 1/15 | 20/180 | |
第十周 | 400/2665 | 1/16 | 20/200 | |
第十一周 | 400/3065 | 1/17 | 20/220 | |
第十二周 | 360/3425 | 1/17 | 20/240 | |
第十三周 | 360/3785 | 1/18 | 20/260 | |
第十四周 | 360/4145 | 1/19 | 20/280 |