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

发布时间 2023-11-05 20:30:56作者: 20231309

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

作业信息

这个作业属于哪个课程 2023-2024-1-计算机基础与程序设计
这个作业要求在哪里 2023-2024-1计算机基础与程序设计第六周作业
这个作业的目标
作业正文 2023-2024-1 20231309 《计算机基础与程序设计》第六周学习总结

教材学习内容总结

本周主要学习了算法设计,主要包括几种搜索和排序,C语言还学了选择控制结构,主要包括if语句和switch语句

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

  • 问题1:一开始对几种抽象类型(数据抽象、过程抽象、控制抽象)并不理解,觉得都是抽象没什么区别
  • 问题1解决方案:后来做云班课测试时回头看课本突然能够理解了,原来不同的抽象类型实际上反映着抽象对象的不同。

基于AI的学习

(以下为导出的对话记录)

来自你的消息:

今天我学习了C语言下选择控制结构,请你以苏格拉底的方式向我提问,一次一个问题

来自AI的消息:

当然,请准备好回答。

问题 1:什么是选择控制结构?在C语言中,你能列举出几种常见的选择控制结构?

来自你的消息:

选择控制结构即在程序进行过程中发生选择性进行的部分,C语言中常见的选择控制结构及if else 和switch

来自AI的消息:

很好。问题 2:if else语句的作用是什么?它的语法结构是怎样的?

来自你的消息:

if else即先对if后语句进行判断,若真则执行if下语句,若假则执行else下语句,它的语法结构就是正常的分支结构

来自AI的消息:

非常好。问题 3:对于 if else 语句,条件表达式的结果必须是什么类型的值?是否只能为布尔类型?

来自你的消息:

必须为真或假(True or False)

来自AI的消息:

可以再精确一些吗?在C语言中,条件表达式的结果需要是什么类型的值?是否只能为布尔类型?

来自你的消息:

只能为布尔类型

来自AI的消息:

不完全正确。在C语言中,条件表达式可以是任何表达式,只有当表达式的值为 0 时,才被视为 False;否则都被视为 True。这意味着,条件表达式的结果可以是 int、float、pointer 等类型,不仅仅限于布尔类型。但是,使用非布尔类型作为条件表达式时,需要特别小心,在某些情况下可能会出现意料之外的结果。

来自你的消息:

谢谢,请继续提问

来自AI的消息:

问题 4:以下代码的输出是什么?

int a = 5;
if (a <= 5) {
    printf("a is less than or equal to 5\n");
} else if (a <= 10) {
    printf("a is between 6 and 10\n");
} else {
    printf("a is greater than 10\n");
}

请说明程序的执行流程。

来自你的消息:

输出 a is less than or equal to 5并换行,执行流程即先定义整型a并赋值为5,如何经过选择控制结构a<=5为真,直接执行if下语句 printf("a is less than or equal to 5\n");

来自AI的消息:

你的回答是正确的!这段代码定义了整型变量 a 并给它赋值为 5,然后使用条件语句 if-else if-else 来判断变量 a 的值所在的区间,并输出相应的信息。

根据代码中的判断条件,a <= 5 的值为真,则程序会执行第一个 if 分支内的语句,输出 "a is less than or equal to 5"。因此程序的输出为 "a is less than or equal to 5"。

来自你的消息:

那你认为我理解掌握了C语言下选择控制结构吗

来自AI的消息:

根据你对前面问题的回答,你对C语言下的选择控制结构有一定的理解。你正确地理解了条件语句 if-else if-else 的执行流程和逻辑。

选择控制结构是编程中非常重要的一部分,它允许根据不同的条件执行不同的代码块。除了 if-else if-else,还有其他的选择控制结构,例如 switch-case 语句。

虽然你对这个特定的代码示例理解正确,但要全面掌握C语言下的选择控制结构,还需要更多的学习和实践。熟练使用选择控制结构是编写高效和灵活的程序的关键之一,建议继续学习和练习以加深理解。

来自你的消息:

请你对我的回答进行评价与总结

来自AI的消息:

你的回答表明你对C语言下的选择控制结构有了一定的掌握,能够理解 if-else if-else 语句的执行流程和逻辑。你还很清晰地指出了这段代码的执行流程,能够准确地预测程序运行的结果,这是非常好的。

总的来说,你的回答证明了你有一定的基础,但在深入掌握选择控制结构方面仍需要学习和实践。建议你多练习,阅读更多的文档和例子,加深对选择控制结构的理解。

来自你的消息:

今天我学习了计算机基础的搜索与排序算法设计,请你以苏格拉底的方式向我提问,一次一个问题

来自AI的消息:

很高兴听到您学习了计算机基础的搜索与排序算法设计。现在我将以苏格拉底的方式向您提问,帮助您进一步思考和巩固所学的知识。

问:你认为什么是搜索算法的关键特征?

来自你的消息:

我认为是对数组内数组与搜索内容的比对判断

来自AI的消息:

很好,你提出了搜索算法的一个重要特征,即需要对数组内元素与搜索内容进行比对判断。那么,你认为搜索算法的时间复杂度和什么因素有关呢?

来自你的消息:

与算法的结构、数据选取范围等有关

来自AI的消息:

非常好!搜索算法的时间复杂度确实与算法的结构、数据选取范围等因素有关。那么,你有没有听说过一种常见的搜索算法,它利用分而治之的思想来提高搜索效率?

来自你的消息:

二分检索?

来自AI的消息:

非常正确!二分查找算法(Binary Search)是一种常见的搜索算法,它利用分而治之的思想来提高搜索效率。它适用于有序数组,在每次比较中将搜索范围减半,因此时间复杂度为O(logn)。在实际应用中,你知道什么情况下可以使用二分查找算法吗?

来自你的消息:

在数组内容可以依照一定标准(如字母顺序、数字大小)进行排序时

来自AI的消息:

非常正确!二分查找算法适用于有序数组,如果数组内容可以按照一定标准进行排序,那么就可以使用二分查找算法。具体来说,二分查找算法将数组分成左右两个部分,通过与目标值的比较,确定目标值位于左侧数组还是右侧数组,从而减少搜索范围。这种算法在时间复杂度上比线性搜索更高效,特别是在大型数据集上。有了这种思路,你是否可以尝试编写一段伪代码来描述二分查找的基本思想呢?

来自你的消息:

伪代码如下
输入长度为5的数组num
输入想检索的数search
判断search是否等于num[2]
{若等于则输出True
若大于则判断search是否等于num[4]
若大于则判断search是否等于num[5]
若仍不等于则输出False

来自AI的消息:

你的伪代码有一些错误。二分查找算法的基本思想是将数组分成左右两个部分,并与目标值进行比较,从而确定目标值可能存在的范围,最终在一个较小的区间内找到目标值或确定其不存在。

以下是二分查找算法的基本伪代码:

输入一个有序数组arr和目标值target
设置左指针left为0,右指针right为数组长度减1

while left <= right:
    计算中间指针mid为(left + right) // 2

    如果arr[mid]等于目标值target:
        返回mid作为目标值的索引
    如果arr[mid]小于目标值target:
        更新左指针left为mid + 1
    如果arr[mid]大于目标值target:
        更新右指针right为mid - 1

目标值在数组中不存在,返回-1

这段伪代码展示了二分查找算法的基本思路,你可以根据伪代码来实现对应编程语言的代码。注意要确保输入的数组是有序的,否则需要先进行排序操作。希望这个伪代码对你有所帮助!如果你有任何问题,请随时提问。

来自你的消息:

那你认为我理解掌握了计算机基础的搜索与排序算法设计吗

来自AI的消息:

根据你对二分查找算法的理解,以及之前提到的搜索和排序算法设计,我认为你在计算机基础的搜索与排序算法设计方面有一定的理解和掌握。然而,搜索和排序算法是计算机科学中非常广泛的主题,涵盖了许多不同的算法和技术。所以,在深入掌握计算机基础的搜索与排序算法设计方面,还有很多可以学习和探索的内容。

如果你对相关主题有兴趣,我鼓励你进一步学习其他经典的搜索和排序算法,如线性搜索、插入排序、归并排序、快速排序等等。此外,了解算法的复杂性分析、数据结构与算法的概念以及算法优化技巧也是非常有帮助的。

记得继续实践和编程练习,通过实际操作对算法进行实现和测试,这将帮助你更好地理解和巩固所学的知识。同时,参考优秀的学习资源、书籍或在线课程也是不错的选择。

总之,计算机基础的搜索与排序算法设计是一个广阔的领域,持续学习和实践将使你不断进步。祝你在学习和应用算法方面取得更好的成果!

来自你的消息:

请你对我的回答进行评价与总结

来自AI的消息:

你的回答基本上是正确的,并且展示了对二分查找算法的一定理解。你提供的伪代码虽然有一些错误,但整体上能够呈现出二分查找的基本思想。

总结起来,你对计算机基础的搜索与排序算法设计有一定的理解和掌握。然而,搜索和排序算法是一个广阔的领域,还有很多其他的算法和技术可以进一步学习和探索。

建议你继续探索其他经典的搜索和排序算法,如线性搜索、插入排序、归并排序、快速排序等。同时,了解算法的复杂性分析、数据结构与算法的概念以及算法优化技巧也是非常有帮助的。

继续进行实践和编程练习,并参考优秀的学习资源,这将有助于加强你对算法的理解和实际应用能力。

总的来说,你在计算机基础的搜索与排序算法设计方面已经有了很好的起点,继续积极学习和实践,相信你将取得更进一步的进展。祝你在学习和应用算法方面不断取得成功!

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

  • 问题1:出现多次if判断失效
  • 问题1解决方案:经过一次次调试和运行后发现时关系判断语法错误,判断等于应用==而非=
  • 问题2:对数组的输入和输出出现错误
  • 问题2解决方案:经过查阅相关资料、问GPT发现,我没有考虑到数组的索引是从[0]到[length-1]而想当然地以为是[1]到[length]

上周考试错题总结

  • 错题1:
  • 原因:误解题意,把instruction理解成结构/组成部分了,忘记它实际上是指令,而D.Specifier说明符的确才是指令的一部分,如指令说明符、操作数说明符
  • 错题2:
  • 理解情况:问GPT也回答False,我也不太理解为什么答案是正确--不知道题中的检查累加器的指令是什么。
  • 错题3:
  • 原因:误解题意,test case实践指的正是测试用例,应该包含的是what和why,而没有how。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 2/2 12/12
第二周 10/10 1/3 7/19
第三周 60/70 4/7 12/31
第四周 120/190 3/10 12/43
第五周 260/450 2/12 16/59
第六周 250/700 4/16 12/71
  • 计划学习时间:14小时

  • 实际学习时间:12小时

  • 改进情况:本周计划水平与上周一致

参考资料