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

news/2024/12/20 22:41:21/文章来源:https://www.cnblogs.com/wangyihan604505/p/18620066

作业信息

这个作业属于哪个课程 2024-2025-1计算机基础与程序设计
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十三周作业
这个作业的目标 学习结构体和数据结构基础相关知识点
作业正文 本博客

教材学习内容总结

《C语言程序设计》第五版第十二章主要介绍了结构体和数据结构基础。以下是该章节的学习内容总结:

  1. 从基本数据类型到抽象数据类型:介绍了为什么需要从基本数据类型转向抽象数据类型,以及它们的重要性。

  2. 结构体的定义

    • 为什么要定义结构体类型。
    • 结构体变量的定义方法。
    • 使用typedef定义数据类型。
    • 结构体变量的初始化。
    • 嵌套结构体的使用。
    • 结构体变量的引用。
    • 结构体所占内存的字节数。
  3. 结构体数组的定义和初始化

    • 结构体数组的定义。
    • 结构体数组的初始化。
  4. 结构体指针的定义和初始化

    • 指向结构体变量的指针。
    • 指向结构体数组的指针。
  5. 向函数传递结构体:介绍了如何将结构体作为参数传递给函数。

  6. 共用体:介绍了共用体的概念和使用方法。

  7. 枚举数据类型:介绍了枚举类型的定义和使用。

  8. 动态数据结构单向链表

    • 问题的提出。
    • 链表的定义。
    • 单向链表的建立。
    • 单向链表的删除操作。
    • 单向链表的插入操作。
  9. 本章扩充内容

    • 栈和队列。
    • 树和图。
    • 数据的逻辑结构和存储结构。
  10. 本章知识点小结本章常见错误小结:总结了本章的关键知识点和常见的编程错误。

  11. 习题12:提供了相关的练习题,以加深对本章内容的理解和应用。

这一章节的内容涵盖了C语言中结构体的基本概念、操作以及如何使用结构体来构建更复杂的数据结构,如链表等。通过学习这些内容,我们可以更好地理解和使用C语言中的结构体和相关数据结构。

教材学习中的问题和解决过程

问题一:结构体指针具体怎么使用?
解决方式:AI答:在C语言中,结构体指针的使用涉及到指向结构体变量的指针和指向结构体数组的指针。以下是结构体指针的具体使用方法:

指向结构体变量的指针

  1. 声明结构体指针

    typedef struct {int id;float salary;
    } Employee;Employee *empPtr;
    
  2. 初始化结构体指针

    • 指向一个已经定义的结构体变量:
      Employee emp = {1, 5000.0};
      empPtr = &emp;
      
    • 使用NULL初始化:
      empPtr = NULL;
      
  3. 访问结构体成员

    • 使用箭头操作符(->):
      empPtr->id = 2;
      empPtr->salary = 6000.0;
      
  4. 动态分配内存

    • 使用malloccalloc分配内存:
      empPtr = (Employee *)malloc(sizeof(Employee));
      if (empPtr != NULL) {empPtr->id = 3;empPtr->salary = 7000.0;
      }
      
  5. 释放内存

    • 使用free释放动态分配的内存:
      free(empPtr);
      

指向结构体数组的指针

  1. 声明结构体数组指针

    Employee *empArrayPtr;
    
  2. 初始化结构体数组指针

    • 指向一个已经定义的结构体数组:
      Employee empArray[3] = {{1, 5000.0}, {2, 6000.0}, {3, 7000.0}};
      empArrayPtr = empArray;
      
  3. 访问结构体数组元素

    • 使用箭头操作符(->)和数组下标:
      empArrayPtr[0].id = 10;
      empArrayPtr[0].salary = 8000.0;
      
  4. 动态分配结构体数组内存

    • 使用malloccalloc分配内存:
      empArrayPtr = (Employee *)malloc(3 * sizeof(Employee));
      if (empArrayPtr != NULL) {empArrayPtr[0].id = 4;empArrayPtr[0].salary = 9000.0;
      }
      
  5. 释放内存

    • 使用free释放动态分配的内存:
      free(empArrayPtr);
      

注意事项

  • 在使用指针之前,始终检查它们是否为NULL,以避免空指针解引用。
  • 使用动态分配的内存时,确保在不再需要时释放它,以避免内存泄漏。
  • 当通过指针修改结构体成员时,确保指针指向正确的结构体或结构体数组。
  • 结构体指针可以作为函数参数,以实现对结构体数据的修改。

通过这些基本操作,你可以有效地使用结构体指针来操作复杂的数据结构。

问题二:怎么嵌套使用结构体?
解决方式:AI答:在C语言中,嵌套使用结构体意味着在一个结构体内部定义另一个结构体,从而创建复杂的数据结构。这种技术可以用来模拟现实世界中的复杂关系,例如,一个公司可能有多个部门,每个部门又包含多个员工。下面是一个如何嵌套使用结构体的例子:

定义嵌套结构体

  1. 定义两个结构体:首先定义两个结构体,其中一个包含另一个结构体的成员。
#include <stdio.h>// 定义部门结构体
typedef struct {char departmentName[50];int employeeCount;
} Department;// 定义员工结构体
typedef struct {int id;char name[50];float salary;Department *department; // 指向部门的指针
} Employee;
  1. 创建嵌套结构体变量:创建一个员工结构体变量和一个部门结构体变量,并使员工的department成员指向部门。
int main() {// 创建部门Department accounting = {"Accounting", 5};// 创建员工Employee emp1 = {1, "John Doe", 50000.0, &accounting};// 打印员工信息和部门信息printf("Employee Name: %s\n", emp1.name);printf("Employee Department: %s\n", emp1.department->departmentName);return 0;
}

使用动态内存分配

在实际应用中,我们经常需要动态地创建多个结构体实例。以下是如何使用动态内存分配来嵌套使用结构体:

int main() {// 动态创建部门Department *accounting = (Department *)malloc(sizeof(Department));accounting->departmentName = "Accounting";accounting->employeeCount = 5;// 动态创建员工并分配部门Employee *emp1 = (Employee *)malloc(sizeof(Employee));emp1->id = 1;emp1->name = "John Doe";emp1->salary = 50000.0;emp1->department = accounting;// 打印员工信息和部门信息printf("Employee Name: %s\n", emp1->name);printf("Employee Department: %s\n", emp1->department->departmentName);// 释放内存free(emp1);free(accounting);return 0;
}

注意事项

  • 当使用动态内存分配时,确保为每个分配的内存调用free()以避免内存泄漏。
  • 在访问嵌套结构体成员时,确保相关的指针已经被正确初始化,避免空指针访问。
  • 嵌套结构体可以创建复杂的数据结构,但也要注意管理这些结构体的复杂性,以保持代码的可读性和可维护性。

通过嵌套使用结构体,你可以创建出非常强大和灵活的数据结构,以模拟现实世界中的复杂关系和层次结构。

基于AI的学习

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

问题:在编写写入文件的代码时,我刚开始用的fwrite函数,数据写入文件成功了,但是是一团乱码,编写阅读文件并显示到显示屏的代码时用的是fread,显示出来的也有问题。
解决方法:文件可以是文本文件,也可以是二进制文件,最终选择了正确的读写函数,用fprintf和fscanf函数来读写函数,虽然麻烦了点,但是能正常读写数据。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 200/400 1/3 18/38
第三周 300/700 1/4 20/58
第四周 400/1100 1/5 22/80
第五周 300/1400 1/6 22/102
第六周 400/1800 1/7 25/127
第七周 400/2200 1/8 30/157
第八周 500/2700 1/9 35/192
第九周 500/3200 1/10 28/220
第十周 400/3600 1/11 30/250
第十一周 500/4100 1/12 30/280
第十二周 400/4500 1/13 30/310
第十三周 500/5000 1/14 30/340

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856132.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软积分商城签到,每日自动完成 Microsoft Rewards 任务获取积分奖励

只支持使用 脚本猫 扩展在浏览器后台定时运行脚本主页:https://scriptcat.org/zh-CN/script-show-page/1703# Microsoft Rewards简介:https://www.microsoft.com/zh-CN/rewards/about 帮助:https://go.microsoft.com/fwlink/?linkid=2132733# FAQ请严格遵守三个小原则,避免…

iostat

##iostat是查看磁盘活动统计情况##显示所有设备负载情况 r/s: 每秒完成的读 I/O 设备次数。即 rio/s;w/s: 每秒完成的写 I/O 设备次数。即 wio/s等 iostat ##每隔2秒刷新磁盘IO信息,并且每次显示3次 iostat 2 3#显示某个磁盘的IO信息 iostat -d sda1##显示tty和cpu信息 ios…

Flutter 开发中的代码常见错误汇总 All In One

Flutter 开发中的代码常见错误汇总 All In One 小米汽车 FlutterFlutter 开发中的代码常见错误汇总 All In One小米汽车 Flutter Dead Codedemos(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原…

AI车辆占道识别摄像机

AI车辆占道识别摄像机通过安装在道路上的摄像头,对车辆行驶过程中是否存在占道现象进行实时监测和分析。利用深度学习算法,摄像机能够准确识别车辆是否违反交通规则占用了行人横道、非机动车道或紧急车道等区域。一旦识别到车辆占道行为,摄像机会立即发出警报,记录违规车辆…

Neo4j Desktop 无法打开

目录一、Warn:DeskTop UI interface wont displayed1、表现形式:进程运行,但是 Neo4j Desktop UI 界面无法显示2、Debug info3、原因分析4、解决方案4.1、断网4.2、手动设置代理5、参考 一、Warn:DeskTop UI interface wont displayed 1、表现形式:进程运行,但是 Neo4j D…

20222234 石国力 《网络与系统攻防技术》 实验八

1.实验内容 1.Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 2.Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在1的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的…

2024 GoLang安装使用教程(附激活以及常见问题处理)

第一步:下载GoLang 安装包 访问GoLang官网,下载GoLang第二步: 安装 GoLang下载完成后,进行安装,next,安装完成点击xx 关掉程序! 第三步: 下载补丁 GoLang补丁文件 点击获取补丁下载成功后,打开标注的文件文件夹 , 进入到文件夹 /jetbra 注意: 这个文件夹单独copy一份,…

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

2024-2025-1 20241403 《计算机基础与程序设计》第十三周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标 结构体的…

Python中所有子图标签Legend显示详解

在数据可视化中,图例(legend)是一个非常重要的元素,它能够帮助读者理解图表中不同元素的含义。特别是在使用Python进行可视化时,matplotlib库是一个非常强大的工具,能够轻松创建包含多个子图的图表,并在每个子图中显示图例。本文将详细介绍如何在Python的matplotlib库中…

gtest简单用法

当前开发环境中,无法把测试代码提交到仓库,所以单测另起一个目录 . ├── gtest │ ├── CMakeLists.txt # 这是最外层的cmake,用以管理所有内部的cmake │ └── sample_test # 这是sample_src对应的测试用例,该目录下有一个单独的cmake │ ├── CMakeList…

跨境电商速卖通实训教学平台课程题库答案

近年来,随着全球化的不断加深与国际电子商务市场的蓬勃发展,中国的跨境电商产业进入了迅猛增长期。速卖通作为阿里集团推出的跨境电商交易平台之一,在全球尤其是俄罗斯市场占据了显著地位,其交易规模的持续增长吸引了众多企业和个人投身其中。在此背景下,对具有速卖通专业…

20222418 2024-2025-1《网络与系统攻防技术》实验八实验报告

1.实验内容 (1)Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 (2)Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+…