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

这个作业属于哪个课程 [2024-2025-1计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第六周作业
这个作业的目标 学习Polya如何解决问题,简单类型与组合类型,复合数据结构,查找与排序算法,算法复杂度,递归,代码安全
作业正文 https://www.cnblogs.com/wangyihan604505/p/18523157

教材学习内容总结

《计算机科学概论》第七版第七章主要围绕问题求解与算法设计展开,以下是该章节的学习内容总结:

  1. 问题求解过程:介绍了George Pólya的问题求解方法,并将其应用于计算机问题求解。强调了分析问题、列出主要任务、编写算法以及重组和改写的重要性。
  2. 数据结构与类型:区分了简单类型(如整数、浮点数)和复合类型(如数组、结构体)。介绍了复合数据结构机制,如数组、链表、栈和队列等。
  3. 递归算法:解释了递归算法的概念,即一个算法直接或间接地调用自身,并提供了递归算法的例子,如计算阶乘、斐波那契数列等。
  4. 排序算法:介绍了常见的排序算法,包括选择排序、插入排序、冒泡排序和快速排序,并分析了每种排序算法的时间复杂度和空间复杂度。
  5. 检索算法:介绍了线性检索和二分检索两种基本的检索算法,并强调了二分检索在有序数组中的高效性。
  6. 算法设计原则:强调了信息隐蔽、抽象和模块化在算法设计中的重要性,并介绍了良好的命名规范和注释习惯对于提高算法可读性和可维护性的帮助。
  7. 测试与调试:介绍了白盒测试和黑盒测试两种测试方法,并强调了测试在算法设计和实现过程中的重要性,以及调试技巧和方法。
    通过这些内容,我们更好地理解了如何有效地解决问题,设计和实现算法,并确保算法的正确性和效率。
    《C语言程序设计》第五版第五章的学习内容总结如下:
  8. 算法的概念及其描述方法
    • 算法:算法是解决特定问题的明确、有限的步骤序列。它具有输入、输出、明确性、有限性、可行性等特点。
    • 描述方法:算法可以通过多种方式描述,包括自然语言、流程图、伪代码和编程语言。每种方法都有其优势,自然语言易于理解,流程图直观,伪代码介于自然语言和编程语言之间,而编程语言则可以直接实现。
  9. 关系运算符与关系表达式
    • 关系运算符:用于比较两个值之间的关系,常见的关系运算符包括==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
    • 关系表达式:由关系运算符连接的表达式,用于产生布尔值(真或假)。例如,a > b是一个关系表达式,如果a的值大于b的值,则表达式为真。
  10. 用于单分支控制的条件语句
    • 单分支控制通常指的是if语句,它允许程序根据条件是否为真来执行一段代码。如果条件为真,则执行if块中的代码;如果条件为假,则跳过这部分代码。
  11. 用于多分支控制的条件语句
    • 多分支控制通常指的是if-else语句或if-else if-else语句链。这些结构允许程序根据多个条件执行不同的代码块。if语句检查第一个条件,如果为真,则执行相应的代码块;如果为假,则检查下一个else if条件,依此类推,直到找到为真的条件或到达else块(如果没有条件为真,则执行else块中的代码)。
  12. 用于多路选择的Switch语句
    • switch语句用于根据一个变量的值选择多个选项中的一个来执行。switch语句包含一个表达式,该表达式的结果用于与case标签进行比较。如果匹配,则执行该case块中的代码,并通过break语句退出switch结构,以防止“穿透”到下一个case
  13. 逻辑运算符和逻辑表达式
    • 逻辑运算符:用于组合多个布尔表达式,产生一个新的布尔值。常见的逻辑运算符包括&&(逻辑与)、||(逻辑或)、!(逻辑非)。
    • 逻辑表达式:由逻辑运算符连接的表达式,用于控制程序流程。例如,a && b是一个逻辑表达式,只有当ab都为真时,整个表达式才为真。
  14. 用于双分支控制的条件语句
    • 双分支控制通常指的是if-else语句,这是最基本的条件控制结构之一。它允许程序基于一个布尔条件来选择两条执行路径中的一条:
      • 如果条件为真(true),则执行if块中的代码。
      • 如果条件为假(false),则执行else块中的代码。
  15. 条件运算符(三元运算符)
    • 条件运算符,也称为三元运算符,是一种简洁的条件选择语句,其语法形式为:条件 ? 表达式1 : 表达式2。如果条件为真,则整个表达式的值为表达式1的值;如果条件为假,则为表达式2的值。例如:
      int max = (a > b) ? a : b;
      
      这行代码的含义是:如果a大于b,则max的值为a,否则为b
  16. 条件表达式
    • 条件表达式是使用条件运算符构建的表达式,它允许在单行内进行条件选择。条件表达式通常用于赋值、函数返回值等场景,以简化代码并提高可读性。条件表达式依赖于条件运算符来实现。
      这些控制结构和运算符是编程语言中处理条件逻辑的基础工具,它们使得程序能够根据不同的输入或状态做出决策,并执行相应的操作。通过合理使用这些工具,我们可以编写出既灵活又高效的代码。

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

问题一:if-else语句和switch语句的区别什么?分别在哪种情况下可用?
解决方法:AI答:if-else语句和switch语句都是用于条件控制的语句,但它们在用途和效率上有所不同。以下是它们的主要区别以及适用场景:

if-else语句

特点

  1. 条件多样性if-else语句可以处理任何类型的条件判断,包括复杂的逻辑表达式。
  2. 灵活性:可以嵌套使用,实现多分支控制。
  3. 适用性:适用于需要根据多个条件执行不同代码块的场景。
    适用场景
  • 当需要根据多个不同的条件执行不同的代码块时。
  • 当条件判断较为复杂,涉及多个变量和逻辑运算符时。
  • 当需要根据条件的真假来执行不同的操作,并且这些条件不是基于单一变量的值时。

switch语句

特点

  1. 效率switch语句在某些情况下比多个if-else语句更高效,因为它通过跳转表(在某些编译器实现中)来实现,可以快速定位到对应的case标签。
  2. 简洁性switch语句在处理多个固定值的比较时,代码更加简洁。
  3. 限制性switch语句只能用于比较一个变量或表达式的值与多个固定值。
    适用场景
  • 当需要根据单一变量的不同值执行不同的代码块时。
  • 当变量的可能值是离散的、有限的,并且这些值是固定的(如枚举类型或特定的常量)。
  • 当代码的可读性和维护性比执行效率更重要时。

区别总结

  • 条件复杂度if-else适用于条件判断较为复杂的情况,而switch适用于条件判断基于单一变量的固定值。
  • 执行效率:在某些情况下,switch语句可能比if-else语句更高效,尤其是在处理大量固定值的比较时。
  • 代码可读性switch语句在处理固定值的比较时,代码更加简洁和清晰。
  • 适用性if-else语句适用于需要根据多个条件执行不同代码块的场景,而switch语句适用于基于单一变量值的多路选择。
    在选择使用if-else还是switch时,需要根据具体的应用场景和需求来决定。
    问题二:Switch语句中为什么一定要加break?
    解决方法;AI答:在switch语句中使用break的原因是为了终止当前case块的执行,并退出switch语句。如果不加break,会发生以下情况:
  1. “穿透”现象(Fall-through):如果没有break,程序会继续执行下一个case块的代码,即使该case的条件不满足。这种现象称为“穿透”。这意味着,除非程序员明确地在每个case块的末尾放置一个break,否则switch语句的行为可能不是预期的。
  2. 控制流的不确定性:如果没有break,程序的控制流将变得不确定,因为程序会继续执行所有后续case块的代码,直到遇到一个breakswitch语句结束。这可能导致程序执行错误的代码块,或者执行更多的代码,从而影响程序的正确性和效率。
  3. 代码可读性和可维护性:在每个case块后添加break可以提高代码的可读性和可维护性。它明确地表明每个case块是独立的,并且只执行与当前条件匹配的代码块。
  4. 避免逻辑错误:在没有break的情况下,程序员可能会错误地认为只有匹配的case会被执行,而实际上所有后续的case也会被执行,这可能导致逻辑错误。
  5. 编译器警告:一些编译器会警告没有breakcase,因为这是一个常见的编程错误,编译器试图提醒开发者可能的逻辑问题。
    例外情况:在某些情况下,程序员可能故意不使用break来利用“穿透”现象,这通常是在所有case块执行相同代码的情况下。但是,即使在这种情况下,最好的做法是在最后一个case块之后放置一个break,以避免将来添加新的case时意外地创建了另一个穿透。
    总的来说,breakswitch语句中是确保程序按照预期执行的关键,它防止了意外的代码执行和逻辑错误。

基于AI的学习

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

问题:实验二中的代码不够简练,重复语句过多。
解决方案:查看教材,询问AI,最终把重复语句删掉,再加了一些别的语句,代码变得更加简洁有力。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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
posted @ 2024-11-03 15:42  王艺涵  阅读(13)  评论(0编辑  收藏  举报