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

news/2024/12/20 0:12:05/文章来源:https://www.cnblogs.com/qiangedaming/p/18618122

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

作业信息

这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13
这个作业的目标 《C语言程序设计》第12章并完成云班课测试
作业正文 https://www.cnblogs.com/qiangedaming/p/18618122

教材学习内容总结

第12章 结构体和数据结构基础

12.1 从基本数据类型到抽象数据类型

本节介绍如何从基本数据类型过渡到抽象数据类型,为理解结构体的概念打下基础。

12.1.1 基本数据类型与抽象数据类型的区别

探讨基本数据类型与抽象数据类型之间的主要区别。

12.1.2 抽象数据类型的重要性

解释为什么在编程中使用抽象数据类型是有益的。

12.2 结构体的定义

本节详细解释结构体的定义,包括其重要性、定义方法以及如何使用typedef来定义数据类型。

12.2.1 为什么要定义结构体类型

探讨定义结构体类型的原因,以及它如何帮助组织和存储相关的数据。

12.2.2 结构体变量的定义

介绍如何定义结构体变量,包括基本语法和示例。

12.2.3 用 typedef 定义数据类型

展示如何使用typedef关键字来简化结构体类型的声明。

12.2.4 结构体变量的初始化

讲解结构体变量初始化的不同方法,包括直接初始化和动态初始化。

12.2.5 嵌套的结构体

讨论嵌套结构体的概念,即一个结构体中包含另一个结构体的情况。

12.2.6 结构体变量的引用

介绍如何引用结构体变量,以及引用在编程中的应用。

12.2.7 结构体所占内存的字节数

分析结构体在内存中的布局,以及如何计算其占用的字节数。

12.3 结构体数组的定义和初始化

本节讲解结构体数组的定义和初始化过程,包括数组的声明和赋值。

12.3.1 结构体数组的定义

介绍结构体数组的定义方法,以及数组元素的访问方式。

12.3.2 结构体数组的初始化

展示结构体数组初始化的不同方法,包括静态初始化和动态初始化。

12.4 结构体指针的定义和初始化

本节讨论结构体指针的定义和初始化,以及指针在操作结构体时的作用。

12.4.1 指向结构体变量的指针

介绍指向单个结构体变量的指针,以及如何使用指针访问结构体成员。

12.4.2 指向结构体数组的指针

讲解指向结构体数组的指针,以及如何通过指针遍历数组。

12.5 向函数传递结构体

本节介绍如何将结构体作为参数传递给函数,以及在函数间共享结构体数据的方法。

12.6 共用体

本节讲解共用体的概念,以及它与结构体的异同。

12.7 枚举数据类型

本节介绍枚举数据类型的定义和使用,以及它在编程中的应用。

12.8 动态数据结构——单向链表

本节深入探讨单向链表的构建,包括链表的定义、建立、删除和插入操作。

12.8.1 问题的提出

讨论为什么需要动态数据结构,以及单向链表的适用场景。

12.8.2 链表的定义

介绍链表的基本概念,包括节点的定义和链表的构建。

12.8.3 单向链表的建立

讲解如何建立单向链表,包括节点的创建和链表的连接。

12.8.4 单向链表的删除操作

介绍单向链表中删除节点的方法,以及删除操作的注意事项。

12.8.5 单向链表的插入操作

讲解单向链表中插入节点的方法,以及插入操作的实现细节。

12.9 本章扩充内容

本节提供本章内容的扩展,包括栈、队列、树和图的基本概念。

12.9.1 栈和队列

介绍栈和队列的数据结构,以及它们的基本操作。

12.9.2 树和图

讲解树和图的基本概念,以及它们在数据结构中的重要性。

12.9.3 数据的逻辑结构和存储结构

讨论数据的逻辑结构和存储结构,以及它们之间的关系。

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

  • 问题1:在C语言中,结构体如何影响程序的内存布局,以及这种布局如何影响程序的性能?

  • 问题1解决方案:结构体在C语言中的内存布局受到多种因素的影响,包括成员变量的类型、大小、对齐要求以及编译器的优化策略。结构体的内存布局可能会影响程序性能,原因如下:
    • 内存对齐:为了提高访问速度,编译器可能会在结构体成员之间插入填充字节,以满足特定硬件对内存地址的对齐要求。这可能导致结构体占用的内存空间大于其成员变量大小之和。
    • 缓存友好性:如果结构体的布局能够使其成员紧密排列,并且符合缓存行的大小,那么它可能会更好地利用CPU缓存,从而提高程序性能。
    • 内存访问模式:结构体的布局也会影响内存访问模式。如果结构体的成员按照访问频率从高到低排列,那么程序可能会更加高效地利用缓存。

  • 问题2:结构体在C语言中的继承和多态是如何实现的,它们与面向对象编程语言中的继承和多态有何不同?

  • 问题2解决方案:C语言本身并不支持面向对象编程中的继承和多态概念,但可以通过结构体和函数指针来模拟这些特性:
    • 继承的模拟:在C语言中,可以通过在一个新的结构体中嵌入一个基本结构体来模拟继承。这样,新结构体就“继承”了基本结构体的成员。
    • 多态的模拟:多态可以通过在结构体中使用函数指针来实现。结构体可以包含指向函数的指针,这些函数可以是不同的实现,从而允许结构体在运行时表现出不同的行为。
    与面向对象编程语言相比,C语言中的这些模拟有以下不同:
    • 类型安全:面向对象语言提供了类型安全检查,而C语言中的模拟需要程序员手动确保类型正确。
    • 代码重用:面向对象语言中的继承允许更直接的代码重用,而C语言中的模拟可能需要更多的手动工作来实现相似的功能。
    • 封装:面向对象语言提供了封装机制,可以隐藏内部实现细节,而C语言中的结构体成员默认是公开的,除非使用宏或其他方法来模拟私有成员。

基于AI的学习

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

  • 问题1:形参的声明还是不熟悉,老漏写
  • 问题1解决方案:多练,错一次记一次

其他

在完成本周实验后,我有了一些深刻的体会和学习心得:
• 结构体的应用:通过这个实验,我更加深入地理解了结构体在C语言中的应用。结构体允许我将学生的信息(如学号、姓名、各科成绩等)封装在一起,这不仅使数据组织更加清晰,也方便了数据的管理和操作。
• 文件操作的重要性:实验中的进阶要求让我意识到文件操作在实际编程中的重要性。通过将数据写入文件并从文件中读取,程序能够实现数据的持久化存储,这对于创建实用的、能够长期运行的应用程序至关重要。
• 错误处理的实践:在录入学生信息和处理文件时,我遇到了一些错误和异常情况。这促使我学习了基本的错误处理技巧,比如检查文件操作的返回值,以及在用户输入不合法时提供错误提示。
• 代码的模块化:为了使程序更加清晰和易于维护,我尝试将不同的功能模块化。例如,我将数据录入、计算总分和平均分、排序、查询和文件操作等功能分别封装在不同的函数中。
• 编程思维的锻炼:整个实验过程锻炼了我的编程思维。我学会了如何将一个复杂的问题分解成多个小问题,然后逐一解决。这种分解问题的能力对于解决更复杂的编程挑战非常有帮助。
总的来说,这个实验不仅让我巩固了C语言的基础知识,还提升了我的编程技能,尤其是在数据结构、文件操作和用户交互方面。我相信这些经验将对我未来的学习会产生积极的影响。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 000/000 2/2 07/07
第二周 000/000 1/3 07/14
第三周 000/000 1/4 07/21
第四周 050/050 1/5 07/28
第五周 050/100 1/6 07/35
第六周 070/170 1/7 07/42
第七周 080/250 1/8 07/49
第八周 100/350 1/9 07/56
第九周 200/550 1/10 07/63
第十周 200/750 1/11 09/72
第十一周 200/950 1/12 09/81
第十二周 200/1150 1/13 09/90
第十二周 260/1410 1/14 09/99

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

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

相关文章

全斗焕小曲 All In One

全斗焕小曲 All In One 挨棍的小曲 / 无限制格斗大赛の小曲 / 全斗焕の小曲 / 跑男の小曲 / 联赛开幕曲全斗焕小曲 All In One挨棍的小曲 / 无限制格斗大赛の小曲 / 全斗焕の小曲 / 跑男の小曲 / 联赛开幕曲demos https://search.bilibili.com/all?keyword=挨棍的小曲 https:/…

【项目学习】Morpho 借贷协议简单调研

项目背景 Morpho blue (下称 Morpho)是一个超额抵押借贷协议。与传统的借贷协议不同,Morpho 无需经过治理批准即可创建任意定制化的借贷市场。用户可以通过指定一项贷款资产、一项抵押资产、清算贷款价值 (LLTV)、预言机和利率模型 (IRM) 等参数来创建一个独立市场。市场创建…

01.大模型起源与发展

知识点注意力机制(Attention)的主要用途是什么?选择重要的信息并忽略不相关的信息Transformer 模型是基于什么理论构建的?C. 注意力机制(Attention)GPT 和 BERT 的主要区别是什么?C. GPT 使用了单向自注意力,而 BERT 使用了双向自注意力在注意力机制中,“Q”、“K”和…

IoTClient---基于C#开源的物联网设备通讯协议客户端

https://github.com/zhaopeiym/IoTClientIoTClient是一个物联网设备通讯协议实现客户端,将包括主流PLC通信读取、ModBus协议、Bacnet协议等常用工业通讯协议。本组件基于.NET Standard 2.0,可用于.Net的跨平台开发,如Windows、Linux甚至可运行于树莓派上。技术架构1. 编码语…

docker基础篇:安装tomcat

docker基础篇:安装tomcat@目录8.Docker常规安装简介8.1 docker常规安装总体步骤8.2安装tomcat本人其他相关文章链接 8.Docker常规安装简介注意点1: 左面是原始的微服务架构,你要自己linux中搭建mysql、redis繁琐费事,右面是使用docker搭建的服务,直接docker run xx启动即可…

脚手架构建

1. 引言 背景介绍: 前端脚手架的目的在于提高前端开发的效率和一致性 ,节约一些重复性工作,例如:编译、打包、代码检查,避免了从零开始搭建项目框架的繁琐工作。 需求分析: 项目创建与初始化:创建新的项目目录结构。 初始化基本的项目文件,如index.html、package.json…

07. 按钮控件

一、按钮控件PySide6 中按钮分为 push 按钮(按压型)、check 按钮(勾选型)和 toggle 按钮(切换型,多个按钮中只有一个可以选中)。其中,push 按钮有 QPushButton 按钮和 QToolButton 按钮,check 按钮是 QCheckBox 按钮,toggle 按钮是 QRadioButton,它们都继承自 QAbas…

opencascade配置笔记

下载occ 网址参考网址 c++引用lib库 参考网址 vs使用qt插件 参考网址 参考网址

大规模可观测性揭秘:Netflix 如何通过标题玩转全球内容发布?

1 导言 在 Netflix,我们每月管理着上千个全球内容发布项目,每年的投资额高达数十亿美元。确保每部影片在我们平台上的成功和可发现性是我们的首要任务,因为我们的目标是将每个故事与合适的受众联系起来,让我们的会员满意。为了实现这一目标,我们致力于建立强大的系统,提…

Netty的高性能之道

一、概述 1.1 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。 事实上,我对这个数据…

javaweb实战02

javaweb实战02 本次开始配置目录和包以及构建数据库然后就可以按照业务逻辑书写页面,页面包含登录和注册两个功能 首先开发登录页面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false"…

1大模型应用开发基础

一、目标 懂得AI,懂得编程、懂得业务的超级个体,将会是AGI时代最重要的人。 AI使得一个人能够干多个人的活 想要做到“AI全栈”需要涉及的知识面是非常广泛的,单单学习一门课程是不能全部涉及的 我们首先需要做的是入门,后面走的深入,走的远只能靠自己,依靠社群,和AI的进…