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

发布时间 2023-11-12 18:35:25作者: 20231309

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

作业信息

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

教材学习内容总结

下图分别为《C语言程序设计》第6章梳理和《计算机科学概论》第8章梳理

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

  • 问题:一开始对深度优先搜索和广度优先搜索并不理解,感觉书上写得有点抽象繁杂。
  • 问题解决方案:然后询问GPT后,我明白了,顾名思义,深度优先搜索就是先下到最深再回头;而广度优先搜索就是广撒网,想水面上的波纹一样一层一层全部遍及地往下走。

基于AI的学习

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

来自你的消息:

今天我学习了C语言程序设计中的循环控制结构,请你以苏格拉底的方式对我进行提问,一次一个问题

来自AI的消息:

很棒!让我出一道问题给你。在 C 语言中,循环控制结构有三种常见的形式,它们分别是什么?

来自你的消息:

while;do...while;for

来自AI的消息:

很好!你正确地列出了三种常见的循环控制结构。

接下来,我有另一个问题给你:在这三种循环控制结构中,哪种结构适用于需要至少执行一次循环体的情况?

来自你的消息:

do...while

来自AI的消息:

正确!do...while 循环结构适用于需要至少执行一次循环体的情况。因为在这种结构中,循环条件是在循环体执行之后判断的。

下一个问题:你知道在 C 语言中如何跳出循环吗?

来自你的消息:

可以通过条件判断正常退出循环,也可以通过break、goto等强行跳出循环

来自AI的消息:

好的,你回答得非常准确。break 语句可以直接终止循环语句,而goto语句可以非常灵活地跳到指定标签位置,从而终止循环执行。

接下来的问题:判断语句中的 continue 语句有什么作用?

来自你的消息:

结束本次循环直接进入下次循环

来自AI的消息:

非常好!你对 continue 语句的作用描述准确无误。在循环体中,当遇到 continue 语句时,会立即结束本次循环的剩余代码,然后直接进入下一次循环的判断条件。

下一个问题:在 for 循环中,什么是循环控制变量,它的作用是什么?

来自你的消息:

循环控制变量一般是用于控制循环次数与条件的变量

来自AI的消息:

非常好!循环控制变量是在 for 循环中定义和使用的变量,用于控制循环的次数和满足循环条件。循环控制变量可以在循环体内进行操作和修改,从而实现对循环的控制。

接下来的问题:你知道在循环中什么是循环嵌套吗?循环嵌套在编程中有什么应用场景?

来自你的消息:

循环嵌套指再循环结构中再使用循环结构,应用场景有很多,比如穷举法解多元方程组时

来自AI的消息:

非常好!你对循环嵌套的理解准确无误。循环嵌套是指在一个循环结构内部再使用另一个循环结构。通过循环嵌套,可以实现对多维数据结构的遍历和操作,或者在某个循环中执行另一个循环的特定次数。

循环嵌套在编程中有广泛的应用场景,例如:

  1. 遍历多维数组或矩阵:通过嵌套循环可以逐个访问和处理多维数组或矩阵中的元素。

  2. 穷举法和搜索问题:某些问题需要尝试多种组合或排列的情况,可以使用嵌套循环来穷举所有可能性。

  3. 输出图形和模式:通过嵌套循环可以输出各种形状的图案、序列或模式。

  4. 逐层处理数据结构:比如在树形结构或多级嵌套的数据结构中进行逐层遍历和处理。

请问是否

来自你的消息:

那你认为我掌握C语言程序设计中的循环控制结构了吗

来自AI的消息:

很抱歉,我无法准确判断你对C语言程序设计中的循环控制结构的掌握程度,因为我无法直接了解你的知识水平和经验。但是从你之前的回答来看,你对循环控制结构的理解是准确的。

要完全掌握循环控制结构,除了理解循环的基本概念和语法外,还需要实际应用和练习。建议通过编写和调试各种循环实例,加深对循环控制结构的理解和

来自你的消息:

那请你对我的回答进行总结评价,谢谢

来自AI的消息:

当然,我很乐意为你总结和评价你的回答!你对循环控制变量的定义和作用的理解是准确的,你还能够提到循环嵌套的应用场景之一——穷举法解多元方程组。这表明你对于循环控制结构有一定的理解。

总体而言,你回答问题的表达清晰明了,涵盖了循环控制结构的基本概念和一个具体的应用场景。希望我的回答能够对你有所帮助!如果你还有其他问题,随时都可以问我。祝你学习愉快!

来自你的消息:

今天我还学习了计算机基础的抽象数据类型如栈、队列、树、列表等,请你以苏格拉底的方式对我进行提问,一次一个问题

来自AI的消息:

很棒!我将以苏格拉底的方式向你提问关于抽象数据类型的问题,帮助你深入思考和巩固所学知识。

  1. 你对栈(Stack)这种数据结构有什么理解?它的特点是什么?你能举一个你熟悉的栈的应用场景吗?
来自你的消息:

栈是一种抽象数据结构,其特点就在于数据”后进先出“,就像食堂里的自助餐盘一样,我熟悉的应用场景便是函数递归调用

来自AI的消息:

非常好的回答!栈的确是一种“后进先出”的数据结构,就像你所提到的自助餐盘一样。函数递归调用是栈的一个典型应用场景,每次函数调用时,函数的参数、局部变量等信息都会被推入栈中,并在函数执行完成后按相反的顺序弹出栈。这种机制使得递归函数能够正确地返回结果。

接下来,我将提出下一个问题:
2. 队列(Queue)是什么,它与栈有什么不同之处?你能够想到一个实际生活中的队列的例子吗?

来自你的消息:

队列也是一种数据结构,与栈的不同之处正在于数据”先进先出“,实际生活中的例子很多,就比如食堂里排队买饭

来自AI的消息:

很好!你对队列的理解非常准确。队列确实是一种“先进先出”的数据结构,就像在食堂排队买饭一样,先来的人先被服务,后来的人需要等待前面的人完成购买才能进行。

下面是下一个问题:
3. 列表(List)是什么,它与栈和队列有何区别?你能说出一个你熟悉的

来自你的消息:

列表也是一种数据结构,但与栈和队列不同的是,它是一种链式结构。我熟悉的列表便是考试成绩排名表

来自AI的消息:

非常好!你对列表的理解是正确的。列表是一种链式结构,它提供了在任意位置插入和删除元素的能力。相比于栈和队列,列表的灵活性更高。考试成绩排名表是一个很好的列表的应用场景,你可以根据分数将学生的成绩插入合适的位置,并在需要时删除或者修改特定的成绩。

下面是下一个问题:
4. 树(Tree)是一种怎样的数据结构?你能够举一个你熟悉的树的

来自你的消息:

树是一种不断分叉的数据结构,我熟悉的树一般是知识树或者家庭关系树

来自AI的消息:

非常好!你对树的描述是准确的。树是一种由节点和边组成的分层结构,它可以有多个分支,每个节点可以有零个或多个子节点,而根节点则是整个树的顶端。

知识树是树的一个典型应用场景,它可以用来组织和表示知识的层次结构。通过在树的不同层级上划分主题和子主题,我们可以更好地组织和理解知识的相关性和层次结构。

家庭关系树也是树的另一个常见应用场景,它可以描述家族成员之间的关系,如父母、子女和兄弟姐妹等。

下面是下一个问题:
5. 图(Graph)是一种怎样的数据结构?你能够举一个你熟悉的图的应用场景吗?

来自你的消息:

图应该是同时有多个节点和多个边有向或无向连接的数据结构,我所熟悉的图便是不同城市之间的航班图

来自AI的消息:

非常好!你对图的描述是准确的。图是由节点(也称为顶点)和边组成的数据结构,这些边可以是有向的(指向其他节点)或无向的(双向连接)。图可以用来表示多个实体之间的关系和连接。

航班图是图的一个典型应用场景。它可以用来表示不同城市之间的航班连接关系。每个城市可以表示为图中的一个节点,而航班则可以表示为节点之间的边。通过这样的图表示,我们可以分析城市之间的航班连通性、航班流量等信息,帮助航空公司和旅行者做出决策

来自你的消息:

那你认为我掌握计算机基础的抽象数据类型如栈、队列、树、列表等了吗

来自AI的消息:

根据你之前的回答和描述,你对栈、队列、树和列表的理解是正确的。这些抽象数据类型是计算机科学中非常基础且重要的数据结构,掌握它们对于理解和解决实际问题非常有帮助。

然而,需要注意的是,虽然你对这些数据结构有了初步的理解,但深入了解和运用它们还需要进一步的学习和实践。这些

来自你的消息:

那请你对我的回答进行总结评价,谢谢

来自AI的消息:

你对树、图以及计算机基础的抽象数据类型如栈、队列、树和列表的描述和理解都是正确的。你对树的应用场景包括知识树和家庭关系树,对图的应用场景举例为航班图。这表明你对这些数据结构的应用有一定的了解。

然而,要深入掌握和理解这些数据结构,还需要进一步的学习和实践。你可以考虑学习相关的算法和数据结构的课程或读一些相关的教材和资料,以加深对它们的理解和应用。

总体而言,你对计算机基础数据结构的回答是准确和清晰的,展示了你对这些概念的基本理解。希望这些评价对你有帮助!如果还有其他问题,欢迎继续提问。

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

  • 问题1:在优化程序时有过如下尝试,然后发现修改后程序运行直接报错。
    r = m % n;
    while (r != 0)
    {
        m = n;
        n = r;
        r = m % n;
    }
    while (m % n != 0)
    {
        m = n;
        n = m % n;
    }
  • 问题1解决方案:后来细读发现这俩根本就不是不是一回事,原程序中的r是必须使用的中间变量起传递作用,一旦删去,后面的m % n 就会计算成 n % n了。
  • 问题2:如下代码发现正常运行但结果错误。
#include <stdio.h>
#include <math.h>

int is_prime(int n)
{
    int sur=1;
    for (int j = 2; j < sqrt(n); j += 1)
    {
        if (n%j==0)
        {
            sur=0;
        }
    }
    return sur;
}

int main()
{
    int judge = 0;

    for (int i = 101;i <= 9960;i += 1)
    {
        if (is_prime(i) == 1)
            if (is_prime(i+40) == 1)
                judge = 1;
                printf("%d,%d\n",i,i+40);
              	break;
    }

    if (judge == 0)
        printf("NO");
    return 0;
}
  • 问题2解决方案:细读程序发现if后面涉及多条语句却不加{}进行作用范围限定导致只作用到1条语句出现错误,修改后便正确了

上周考试错题总结

  • 错题1:
  • 原因:误解题意,没有正确理解D选项Nested logic是嵌套逻辑,正体现一个循环可以嵌套进另一个循环中。
  • 错题2:
  • 原因:对知识存在错误理解,以为算法可以需要无限的时间和数据,却并没有想这并不现实,真正有用的算法必然是用有限的时间来完成的。

其他(感悟、思考等,可选)

在尝试对代码进行优化时,我发现很多看起来冗长的程序,完全可以通过优化变得简洁而优美。在这个过程中,我也切实感受到,一个好的程序编写习惯所写出的程序,看起来的确更清晰明了易懂。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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
第七周 400/1100 1/17 14/85 学习程序编写规范
  • 计划学习时间:12小时

  • 实际学习时间:14小时

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

参考资料