2024-2025-1 20241416《计算机基础与程序设计》第6周学习总结
这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276
这个作业的目标 Polya如何解决问题 简单类型与组合类型 复合数据结构 查找与排序算法 算法复杂度 递归 代码安全
作业正文 https://www.cnblogs.com/rockytyh/p/18523609
教材学习内容总结
一、Polya如何解决问题
理解问题:仔细剖析问题的各个方面,包括明确已知条件、未知元素以及问题的目标。这就像在解一道数学应用题时,要清楚题目中给出的数字、关系,以及最终要求解的答案类型,为后续解题打下基础。
制定计划:依据对问题的理解,从已有的知识储备和解题经验中挖掘可能的解决方案。比如是数学问题就考虑相应公式、定理,若是编程问题就思考合适的算法和数据结构,这是解题的关键构思阶段。
执行计划:按照既定计划认真落实每一个步骤,无论是计算过程还是编程实现,都要保证准确性和逻辑性,确保计划顺利推进。
回顾:对得到的结果进行检验,看其是否符合问题的条件和逻辑。同时,思考是否存在其他更优的解法,进一步提升解题能力。
二、简单类型与组合类型
简单类型:编程语言中的基本数据类型,像整数类型(int)用于存储整数数值,如表示人数、数量等;浮点数类型(float)用于存储带有小数部分的数据,如物体的重量、价格等;字符类型(char)则用于存储单个字符,像姓名中的某个字、符号等。它们各自有其特定的存储格式和范围。
组合类型:是将简单类型组合起来的数据形式。数组是一种典型的组合类型,它可以存储多个相同类型的元素,比如整数数组可以存储班级学生的成绩列表。结构体则更灵活,它能把不同类型的数据整合在一起,例如可以创建一个结构体来存储学生的姓名(字符数组)、年龄(整数)和成绩(浮点数),以完整地描述学生信息。
三、复合数据结构
链表:由一系列节点组成,每个节点不仅包含数据,还有指向下一个节点的指针。这种结构使得插入和删除操作相对便捷。例如在处理动态变化的数据集合,如实时更新的任务列表时,链表能很好地适应数据的增减。
树:呈现出层次化的结构,二叉树是其中常见的一种,每个节点最多有两个子节点。它在数据搜索和排序方面有独特优势,比如二叉搜索树可以利用其特性快速定位数据,常用于数据库索引等场景。
图:由顶点和边构成,能表示各种复杂的关系网络,比如社交网络中人与人之间的朋友关系、城市之间的交通路线等,广泛应用于网络分析、路径规划等领域。
四、查找与排序算法
(一)查找算法
线性查找是逐个检查每个元素,直到找到目标元素。
二分查找是在有序数组中通过不断缩小查找范围来查找目标元素。
(二)排序算法
冒泡排序是通过多次遍历数组,比较相邻元素并交换位置。
选择排序是每次选择最小(或最大)的元素放到已排序部分的末尾。
插入排序是将未排序部分的元素逐个插入到已排序部分的正确位置。
快速排序是通过选择一个基准元素,将数组分为两部分并递归排序。
归并排序是将数组分为两部分,分别排序后再合并。
五、算法复杂度
时间复杂度表示算法执行时间随输入规模增长的变化趋势,常用大O表示法(O(n)、O(n^2)等)。
空间复杂度表示算法执行过程中所需的额外空间随输入规模增长的变化趋势。
六、递归
递归是一种编程技术,函数直接或间接调用自身来解决问题。递归通常用于解决可以分解为相同问题的子问题的情况。递归的关键在于定义递归基(终止条件)和递归关系(如何将问题分解为子问题)。
七、代码安全
输入验证确保用户输入的数据符合预期格式和范围。
边界检查防止数组越界、缓冲区溢出等错误。
加密对敏感数据进行加密,防止数据泄露。
权限控制限制不同用户对系统资源的访问权限。
日志记录记录系统操作和错误信息,便于追踪和分析问题。
安全编码实践遵循安全编码规范,避免常见的安全漏洞。
教材学习中的问题和解决过程
问题1:在使用 Polya 方法解决问题时,如果制定的计划执行不下去怎么办?
问题1解决方案:可以回到制定计划步骤重新思考,检查计划是否存在不合理之处,比如是否对问题的某些条件理解有误或者选择的方法不适用。也可以尝
试从其他角度制定新的计划,还可以参考类似问题的解决方法或者向他人请教。
问题2:简单类型中的布尔类型(bool)常用于什么场景?
问题 2 解决方案:布尔类型常用于表示条件判断的结果,比如在程序中判断某个条件是否满足。例如,判断用户是否登录(登录为 true,未登录为 false)、判断某个数是否大于另一个数(大于为 true,小于等于为 false)等场景。在逻辑控制语句(如 if - else 语句)中经常使用布尔类型的值来决定程序的执行路径。
问题3:在C语言中,什么是冒泡排序(Bubble Sort),它的基本思想是什么?另外,你能推断出它的时间复杂度吗?
问题3解决方案:冒泡排序是一种简单的排序算法,它通过重复地遍历要排序的列表,比较相邻的元素并交换它们的位置,直到整个列表排序完成。冒泡排序的时间复杂度可以通过分析其最坏情况下的比较次数来推断。