首页 > 编程语言 >2024-2025-1 20241407《计算机基础与程序设计》第七周学习总结

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

时间:2024-11-08 20:21:20浏览次数:1  
标签:do 循环体 20241407 迭代 2024 2025 while 循环 操作

这个作业属于哪个课程 [2024-2025-1 计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第七周作业
这个作业的目标 学习数组与链表,基于数组和基于链表实现数据结构,无序表与有序表,树,图,子程序与参数
作业正文 https://www.cnblogs.com/wangyihan604505/p/18535765

教材学习内容总结

《计算机科学概论》第七版第八章的学习内容主要包括以下内容:

  1. 抽象数据类型(ADT)
    • 抽象数据类型是一种数据结构及其相关操作的集合,这些操作独立于数据结构的具体实现。
    • ADT将属性(数据与操作)明确地与特定实现分离,是一种容器,用于存放和操作其他对象。
  2. 常见的ADT类型
    • 列表(List):有序的元素集合,支持随机访问、插入和删除操作。
    • 栈(Stack):后进先出(LIFO)的数据结构,支持压栈(Push)和弹栈(Pop)操作。
    • 队列(Queue):先进先出(FIFO)的数据结构,支持入队(Enqueue)和出队(Dequeue)操作。
    • 二叉检索树(Binary Search Tree):支持快速查找、插入和删除操作的数据结构。
    • 图(Graph):由节点和边组成的数据结构,用于表示复杂的关系网络。
  3. 子程序(Subroutine)
    • 子程序是一段独立的程序代码,可以被其他程序代码调用,提高代码的可重用性和模块化。
    • 子程序可以通过参数传递数据,实现灵活的函数调用。
  4. 参数传递
    • 值传递(Value Passing):调用子程序时,将实参的值复制给形参。
    • 引用传递(Reference Passing):调用子程序时,将实参的引用(地址)传递给形参,允许在子程序中修改实参的值。
  5. 数据结构与算法
    • 数据结构是ADT中符合数据域的实现,是存储、组织数据的方式。
    • 算法是对数据进行操作的一系列步骤,旨在解决特定问题。常见的算法包括搜索算法(如深度优先搜索、广度优先搜索)和排序算法(如快速排序、归并排序)。
  6. 算法复杂度
    • 时间复杂度:衡量算法执行时间随输入规模增长的趋势,常用大O符号(O-notation)表示。
    • 空间复杂度:衡量算法执行过程中所需占用的存储空间。
  7. 应用示例
    • 使用ADT解决实际问题,如使用栈实现表达式求值、使用队列实现广度优先搜索等。
    • 算法设计与优化:根据问题需求设计合适的算法,并通过优化提高算法效率。
      这些内容对于我们理解计算机科学中的基本概念和解决实际问题具有重要意义。
      《C语言程序设计》第五版第六章的学习内容总结如下:
  8. 循环基础
    • 介绍循环的基本概念,包括循环的目的和何时使用循环。
    • 讨论循环的三种基本形式:for循环、while循环和do-while循环。
  9. for循环
    • 详细讲解for循环的语法结构,包括初始化、条件测试、循环体和迭代表达式。
    • 提供for循环的示例,展示如何使用它来执行重复操作。
  10. while循环
    • 介绍while循环的语法和逻辑流程,强调条件测试在循环开始前进行。
    • 展示while循环的示例,包括如何使用它来处理不确定次数的重复。
  11. do-while循环
    • 讲解do-while循环的特点,即至少执行一次循环体,然后测试条件。
    • 提供do-while循环的示例,展示其在实际编程中的应用。
  12. 循环控制语句
    • 介绍break语句,用于在满足特定条件时提前退出循环。
    • 讲解continue语句,用于跳过当前迭代的剩余部分,直接进入下一次循环迭代。
  13. 嵌套循环
    • 讨论如何在一个循环内部嵌套另一个循环,以及如何控制嵌套循环的执行。
    • 提供嵌套循环的示例,展示如何使用它们来处理多维数据结构。
  14. 循环中的数组处理
    • 讲解如何使用循环来遍历数组和处理数组元素。
    • 提供数组处理的示例,展示循环在数组操作中的应用。
  15. 循环优化和调试
    • 讨论如何优化循环的性能,包括减少不必要的计算和避免无限循环。
    • 提供调试循环的技巧,帮助开发者识别和解决循环中的错误。
  16. 循环的实际应用
    • 通过实际编程案例,展示循环在解决实际问题中的应用,如数据处理、算法实现等。
  17. 最佳实践和常见错误
    • 讨论在编写循环时的最佳实践,包括代码的可读性和维护性。
    • 指出在编写循环时常见的错误,并提供避免这些错误的建议。
      这一章的内容旨在帮助我们理解循环控制结构的工作原理,以及如何在C语言程序中有效地使用它们。通过学习这些概念,我们将能够编写出更加高效的C语言程序。

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

问题一:为什么不能在列表的一次迭代中出现插入和删除操作?
解决方法:AI答:在列表(List)的一次迭代中同时进行插入和删除操作可能会导致一些复杂的问题和不可预测的结果,主要原因包括:

  1. 索引变化
    • 当你从列表中删除元素时,列表的大小会改变,这会影响到所有后续元素的索引。如果在迭代过程中删除元素,那么当前的索引可能会变得无效,导致跳过元素或访问错误的元素。
    • 同样,当你在列表中插入元素时,也会改变列表的大小和后续元素的索引。如果在迭代过程中插入元素,可能会导致某些元素被重复处理或跳过。
  2. 迭代器失效
    • 在某些编程语言中,如C++或Java,对列表进行插入或删除操作可能会导致迭代器失效。这意味着迭代器不再指向原来的位置,如果继续使用这个迭代器,可能会导致未定义的行为,比如访问非法内存。
  3. 逻辑错误
    • 在迭代过程中同时进行插入和删除操作可能会导致逻辑错误。例如,你可能想要根据某些条件删除列表中的元素,但如果同时插入新元素,可能会改变满足条件的元素集合,导致逻辑上的不一致。
  4. 性能问题
    • 列表的插入和删除操作通常需要移动元素以维护列表的连续性,这在大型列表中可能是一个耗时的操作。如果在迭代过程中频繁进行这些操作,可能会导致性能下降。
  5. 代码可读性
    • 在迭代过程中同时进行插入和删除操作会使代码更难理解和维护。这种操作通常违反了单一职责原则,即一个代码块应该只做一件事。
      为了避免这些问题,通常建议:
  • 在迭代列表时,只进行一种操作(插入或删除),并在迭代完成后再进行另一种操作。
  • 使用额外的数据结构(如集合或队列)来收集需要插入或删除的元素,然后在迭代结束后统一处理。
  • 如果需要在迭代中修改列表,可以考虑使用支持快速插入和删除操作的数据结构,如链表(LinkedList)。
    总之,避免在列表的一次迭代中同时进行插入和删除操作,可以减少复杂性,提高代码的稳定性和可维护性。
    问题二:do-while语句和while语句有什么区别,分别在什么情况下使用?
    解决方法:AI答:do-while语句和while语句都是循环控制结构,用于在满足特定条件时重复执行代码块。它们的主要区别在于条件检查的时机和至少执行一次的保证:

while 语句

while 语句在执行循环体之前检查条件。如果条件为真,则执行循环体;如果条件为假,则不执行循环体,直接跳过循环。
语法

while (condition) {
    // 循环体
}

使用场景

  • 当你不确定是否需要执行循环体时,使用while循环。例如,如果你需要在找到特定条件之前不断搜索,而这个条件可能在开始时就不满足,那么while循环是合适的。
  • 当循环体中可能会修改条件表达式的值,且这些修改可能导致条件在第一次检查时就为假时,使用while循环。

do-while 语句

do-while 语句在执行循环体之后检查条件。这意味着循环体至少会执行一次,然后检查条件;如果条件为真,则再次执行循环体;如果条件为假,则结束循环。
语法

do {
    // 循环体
} while (condition);

使用场景

  • 当你需要确保循环体至少执行一次,即使条件在第一次检查时为假,也使用do-while循环。例如,如果你需要用户输入,直到输入有效为止,那么do-while循环是合适的,因为它可以确保至少给用户一次输入的机会。
  • 当循环体的第一次执行可能会改变条件表达式的值,而这些改变是决定是否继续循环的关键时,使用do-while循环。

总结

  • 至少执行一次do-while循环保证循环体至少执行一次,而while循环则在条件为假时可能一次都不执行。
  • 条件检查时机while循环在执行循环体之前检查条件,do-while循环在执行循环体之后检查条件。
  • 使用场景:根据是否需要保证至少执行一次循环体,以及条件检查的时机来选择使用while还是do-while循环。
    在实际编程中,选择哪种循环结构取决于具体的逻辑需求和预期的行为。

基于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
第七周 400/2200 1/8 30/157

标签:do,循环体,20241407,迭代,2024,2025,while,循环,操作
From: https://www.cnblogs.com/wangyihan604505/p/18535765

相关文章

  • [20241107]nocache的编译.txt
    [20241107]nocache的编译.txt--//原来的测试环境不存在,需要建立nocache工具了解文件缓存情况,学习OS相关知识。--//实际上linux对这些工具从应用角度讲不重要,如果有用,linux实用程序里面应该包含类似工具。可惜一直不提供。--//一般这类安装,我都会写安装笔记,我看了以前的安装笔记,重......
  • 【题解】「NOIP2024模拟赛24 T2」子序列们
    【题解】「NOIP2024模拟赛24T2」子序列们https://www.becoder.com.cn/contest/5715/problem/2\(\mathcal{Description}\)给定一个0/1串\(a\),你需要生成一个长度为\(n\)的序列\(b\),其中\(b_i\)为\(a\)的一个子序列,且满足:\(|b_i|=n-i+1\);\(\foralli\in(1,n]\),\(b......
  • NOIP2024模拟赛 #17 总结
    省流:T1对\(998244353\)取模,T2对\(mod\)取模,T3求排名,T4对\(10^9+7\)取模。比赛出锅不少。开T1,发现并没有前几天那么简单,对着题目盯了\(1\)h毫无思路,发现没看见所有高塔的高度两两不同这个条件,看到后略有思路,但是还不太行。后来说大样例出锅了,幸好没写。T2很......
  • 启明云端&触觉智能与您相约2024年慕尼黑国际电子元器件博览会,不见不散!
    2024德国慕尼黑国际电子元器件博览会(Electronica2024)是全球规模最大、最具影响力的电子元器件展会之一。此次展会将于2024年11月12-15日在德国·慕尼黑展览中心隆重举行,汇聚来自全球电子行业领军企业和创新者,展示最前沿的技术成果与设计产品,为全球电子行业的发展提供一个交流和合......
  • 2024.0902模拟赛反思总结
    09:00~09:20终于想出来了之前没考虑到的特殊情况,把困扰多时的\(R\)题做出来了,美滋滋。09:20~10:35突然的一场考试,看到\(A\)题先写了一份暴力,测了一下\(10^{12}\)和\(10^{12}-1\),成功炸掉。思考了很久优化,把特殊情况判了一下,没头绪就去做\(B\)题了。10:35~10:50\(B\)......
  • 2024.0906模拟赛反思总结
    08:56~09:10先总体看了一遍题目,\(A\)题没思路,\(B\)题模拟,\(C\)题似乎是个\(dp\),\(D\)题一眼原题,果断选择倒开。\(D\)题因为原题的缘故过于自信,导致没有对拍测大样例,没看数据范围以为是跟以前的题一模一样,导致RE\(30\)分。09:10~09:25接着去写模拟,一开始在想链表模拟......
  • 2024.0905模拟赛反思总结
    08:59~09:50老师今天怎么提前一分钟发题。先总体看了一遍题目。\(A\)题原题分讨,\(B\),\(C\),\(D\)题赛时觉得都是搜索(其实\(C\)题递推,\(D\)题\(dp\))。\(A\)题跟之前做的换了一种写法,开始看错题了,调了很久,后面细节没处理好,挂了\(26\)分。09:50~11:00\(B\)题我写的......
  • 2024.0904模拟赛反思总结
    9:00~9:25老师不发卷是在考验我们的心态吗。9:25~10:00总体看了一眼题目,\(A\)题貌似做过,\(B\)题推公式,\(C\)题简单最短路,\(D\)题构造。\(A\)题一开始我想的全部设为\(0\),算汉明距离从后往前调整\(1\),赛时写挂了,赛后发现两个字符串的汉明距离实时调整的时候写错了。10:......
  • 2024.0903模拟赛反思总结
    09:00~09:40总览了一遍题目,\(A\)题基础题,\(B\)题\(dp\),\(C\)题没头绪,\(D\)题推公式题。\(A\)题先打了个暴力,测大数据炸了,只能\(50\)分,试了一些邪门的优化,还是炸了,就去做\(B\)题了。09:40~10:30\(A\)题先写了一个\(O(N^2\timesQ)\)的\(dp\),因为是连续的一段区......
  • 20222311 2024-2025-1 《网络与系统攻防技术》实验四实验报告
    1.实验内容1.1恶意代码文件类型标识、脱壳与字符串提取对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;(2)使用超级巡警脱壳机等脱壳软件,......