2023-2024-1 20231306 《计算机基础与程序设计》第十三周学习总结

发布时间 2023-12-24 21:03:22作者: 20231306周玟妍

作业信息

这个作业属于哪个课程 2023-2024-1-计算机基础与程序设计
这个作业要求在哪里 2023-2024-1计算机基础与程序设计第一周作业
这个作业的目标
作业正文 https://www.cnblogs.com/zwywuhu/p/17924830.html

教材学习内容总结

《c语言程序设计》第12章——结构体和数据结构基础

  1. 结构体——允许用户自定义数据类型,与此相似的还有:链表、树、堆栈等数据对象。

  2. 结构体与共用体

  • 结构体:
    定义: 结构体是一种用户自定义的数据类型,允许你将不同类型的数据组织在一个单一的实体中。它允许你创建一个包含多个成员的数据结构。
    在C语言中,结构体的定义通常如下:

struct MyStruct {
type1 member1;
type2 member2;
// ...
};

  • 共用体:
    用体是一种特殊的数据类型,允许你在相同的内存空间中存储不同的数据类型。共用体的所有成员共享同一块内存,但每次只能使用其中一个成员。
    在C语言中,共用体的定义通常如下:

union MyUnion {
type1 member1;
type2 member2;
// ...
};

两者对比:

(1)内存分配方式:
结构体: 结构体的各个成员在内存中是依次排列的,每个成员都有自己的内存空间。
共用体: 共用体的所有成员共享同一块内存空间,它们的起始地址是相同的,这意味着共用体的大小取决于其最大的成员。
(2) 成员访问:
结构体: 结构体的不同成员可以同时被访问和操作,互不影响。
共用体: 只能同时访问一个成员,因为它们共享内存,修改一个成员可能会影响其他成员的值。
(3)使用场景:
结构体: 适合用于组织不同类型的数据,每个成员存储不同种类的信息。
共用体: 适合在同一块内存中存储不同类型的数据,但每次只使用其中一种类型的情况。通常用于节省内存空间。
(4)内存占用:
结构体: 占用的内存空间等于各个成员的大小之和。
共用体: 占用的内存空间等于最大成员的大小。
(5)修改数据的影响:
结构体: 修改结构体的一个成员不会影响其他成员。
共用体: 修改一个成员会影响共用体中的其他成员,因为它们共享同一块内存。
(6)应用领域:
结构体: 用于表示和组织复杂的数据结构,例如表示一个点、人物信息等。
共用体: 用于需要在不同类型数据之间切换的情况,例如在某个时刻存储整数,另一个时刻存储浮点数。

3.用typedef定义数据类型

  • 使用方法举例
    typedef int INT; // 将 int 定义为 INT,现在 INT 可以用来声明变量
    typedef struct {
    int x;
    int y;
    } Point; // 定义结构体别名 Point
    int main() {
    INT a = 5;

    Point p1;
    p1.x = 3;
    p1.y = 7;

    return 0;
    }

  • 注:typedef只是为一种已存在的类型定义一个新名字而已,并未定义一种新的数据类型。

4.嵌套结构体

(1)在一个结构体内包含了另一个结构体作为其成员。例如:

include <stdio.h>

// 定义 Address 结构体
struct Address {
char street[50];
char city[50];
char state[20];
char zipCode[10];
};

// 定义 Person 结构体,其中包含一个 Address 结构体
struct Person {
char firstName[30];
char lastName[30];
int age;
struct Address homeAddress; // 嵌套的 Address 结构体
};

int main() {
// 创建一个 Person 结构体实例
struct Person person1 = {
"John",
"Doe",
30,
{"123 Main St", "Anytown", "CA", "12345"} // 初始化嵌套的 Address 结构体
};

// 访问 Person 结构体的成员
printf("Name: %s %s\n", person1.firstName, person1.lastName);
printf("Age: %d\n", person1.age);

// 访问嵌套的 Address 结构体的成员
printf("Address: %s, %s, %s %s\n",
person1.homeAddress.street,
person1.homeAddress.city,
person1.homeAddress.state,
person1.homeAddress.zipCode);

return 0;
}

5.结构体变量的引用

  • 不能将一个结构体变量作为一个整体进行输入、输出操作,只能对每个具体成员进行输入、输出操作。
  • 并非所有的结构体成员进行赋值时,必须使用字符串处理函数strcpy()。
  • 全局声明:在函数体外声明对结构体类型可为所有函数使用。
  • 局部声明:在函数体内声明的结构体类型只能在本函数内使用,离开该函数,声明失效。

6.结构体指针

  • 例:STUDENT *pt = &stu1;
  • 指向结构体的指针变量变量名->成员名
  1. 向函数传递结构体
    (1) 用结构体的单个成员作为函数参数,向函数传递结构体的单个成员。
    (2)用结构体变量作函数参数,向函数传递结构体的完整结构。
    (3)用结构体指针或结构体数组作函数参数,向函数传递结构体的地址。

基于AI的学习

代码调试中的问题和解决过程

问题一:在进行openssl实践中,遇到的问题,如图:

问题一解决过程:经过询问chatgpt,结果如下:

问题二和问题二解决过程:
如图:

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
------- -------- -----
第二周 200/400 2/4
第三周 200/600 3/7
第四周 100/700 2/9
第五周 200/900 1/ 10
第六周 300/1200 1/11
第七周 400/1600 1/12
第八周 500/2100 1/13
第九周 500/2600 3/16
第十周 400/3000 1/17
第十一周 400/3400 1/18
第十二周 400/3800 2/20
第十三周 400/4200 6/26