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

发布时间 2023-11-26 22:57:04作者: 20231309

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

作业信息

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

教材学习内容总结

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

基于AI的学习

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

来自你的消息:

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

来自AI的消息:

好的,我可以通过提问来帮助你进一步思考和理解。以下是第一个问题:

  1. 你对 C 语言中的函数有哪些基本的了解和认识?
来自你的消息:

函数是一种指令的集合体

来自AI的消息:

很好!函数可以被看作是一组指令的集合体。它可以接收输入参数(如果有的话),执行一系列的操作或计算,并返回一个结果(如果有的话)。函数的使用可以帮助我们将程序模块化,使得代码更易于理解、维护和重用。接下来,我有另一个问题:

  1. 你能给出一个具体的例子来说明函数在 C 语言中的作用吗?
来自你的消息:

可以将大段的用于实现某一功能的代码抽象为一个模块

来自AI的消息:

非常好!嵌入函数可以将一个大段的代码抽象为一个模块,具有特定的功能。通过这种方式,可以提高代码的可读性和可维护性。此外,函数还可以重复使用,避免了重复编写相同的代码,提高了代码的重用性。

接下来是第三个问题:

  1. 你能谈一谈函数的定义和调用过程吗?
来自你的消息:

定义的话直接定义数据类型及标识符还有形参等就行,如int sum(score[]){...},调用的话直接使用对于标识符与相应参数就行

来自AI的消息:

非常好!函数的定义通常包括返回类型、函数名、参数列表和函数体。在函数定义时,你需要指定所需的数据类型和标识符,以及函数体中具体的操作或计算过程。

函数的调用可以通过函数名和所需的参数进行。在调用函数时,你需要提供与函数定义中所需参数相匹配的参数。函数调用会将控制权传递给函数体,执行相应的操作,然后返回一个结果(如果有的话)。

下面是第四个问题:

  1. 你知道如何在函数中使用参数吗?可以给一个例子吗?
来自你的消息:

函数本身定义形参,调用时传递实参,如,answer = sum(score);

来自AI的消息:

非常好!函数通常需要接受输入参数以执行相应的操作。在函数定义中,可以定义形式参数(也称为形参)来接受输入参数。在函数调用时,可以提供相应的实际参数(也称为实参)来传递给函数。

下面是一个简单的例子:

#include <stdio.h>

// 定义一个函数,接受一个整数参数 a 和一个实数参数 b
void print_numbers(int a, double b) {
    printf("a = %d, b = %f\n", a, b);
}

int main() {
    int x = 10;
    double y = 3.14;

    // 调用 print_numbers 函数,并传递 x 和 y 作为参数
    print_numbers(x, y);

    return 0;
}

在这个例子中,我们定义了一个名为 print_numbers 的函数,它接受一个整数参数 a 和一个实数参数 b。在 main 函数中,我们定义了两个变量 xy,并将它们作为参数传递给 print_numbers 函数。print_numbers 函数会将参数打印到标准输出上。

来自你的消息:

那你认为我掌握C语言程序设计中的函数了吗

来自AI的消息:

根据你对函数的定义、调用和参数传递的理解,我认为你对C语言程序设计中的函数有一定的掌握。了解如何定义函数以及如何通过传递参数来调用函数是非常重要的。

然而,在C语言程序设计中,函数的概念还包括其他方面,比如函数的返回值、函数的作用域和生命周期、递归函数等。如果你熟悉这些概念,并能够运用它们来解决实际问题,那就更具备深入理解和掌握函数的能力了。

所以,如果你对函数的这些方面还不太了解,我鼓励你继续学习和实践,深入理解并掌握C语言程序设计中的函数。这样可以帮助你更好地编写出高效、模块化和易于维护的程序。

来自你的消息:

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

来自AI的消息:

当然!根据我的观察,你在C语言程序设计中关于函数的理解是正确的,并且你知道如何定义函数、调用函数以及传递参数。你能够给出合理的例子来说明函数的使用方法。这表明你已经掌握了C语言程序设计中函数的基本概念和用法。这是一个很好的起点,可以让你更深入地学习和应用函数的其他方面,如返回值、函数的作用域、递归等。继续学习和实践可以提高你在函数使用方面的熟练度,并帮助你编写更高质量的代码。祝你在C语言程序设计中继续取得进步!如果你还有其他问题或需要进一步的帮助,请随时告诉我。

来自你的消息:

今天我还学习了C语言程序设计中的模块化程序设计,请你以苏格拉底的方式对我进行提问,一次一个问题

来自AI的消息:

很棒!那我以苏格拉底的方式来进行提问,帮助你深入思考和巩固你在C语言程序设计中的模块化程序设计方面的知识。准备好了吗?

问题1:在C语言中,什么是模块化程序设计?可以用简洁明了的语言解释一下吗?

来自你的消息:

就是将复杂的程序设计任务分解为简单易实现的模块

来自AI的消息:

非常好!你已经很清楚地表达了模块化程序设计的基本概念和目的。让我们继续深入思考这个话题。

问题2:为什么将程序设计任务分解成简单易实现的模块是有益的?它对程序的开发和维护有什么好处?

来自你的消息:

一方面这样便于进行程序设计开发,另一方面模块化设计各司其职易于维护,哪里出错改哪个模块

来自AI的消息:

非常好!你提到了模块化程序设计的两个主要好处。将程序设计任务分解成简单易实现的模块方便开发,因为每个模块都可以独立编写和测试,从而降低了整体开发的复杂性。此外,模块化设计也便于维护,因为每个模块都有清晰的功能和责任,当出现错误时,可以更容易地定位和修复问题。

继续下一个问题:

问题3:在C语言中,你如何实现模块化程序设计?有哪些具体的技术或工具可以帮助你创建和管理模块化的代码?

来自你的消息:

一般通过定义多个函数来实现模块化设计,后面一个问题我还不太清楚

来自AI的消息:

没问题,让我来帮助解答你的第三个问题。

在C语言中,可以通过定义多个函数来实现模块化程序设计。每个函数负责完成特定的任务,这样可以将程序按功能划分为不同的模块。

另外,还有一些特定的技术或工具可以帮助你创建和管理模块化的代码,如:

  1. 头文件和源文件的使用:可以将函数的声明放在头文件中,然后在源文件中定义函数的实现。这样,头文件可以被其他源文件包含,从而实现模块间的调用和共享。

  2. 静态函数和外部函数的定义:通过将函数设置为静态,可以限制其作用域仅在当前模块内部。而外部函数则可以供其他模块调用。

  3. 模块化编译:利用编译器的功能,将不同的源文件分别编译成目标文件,然后链接在一起形成可执行程序。这样可以更好地组织和管理模块间的依赖关系。

以上是一些常见的技术和工具,帮助实现模块化程序设计。当然,实际开发中还有更多的细节和技巧,可以根据具体情况进行学习和实践。

有没有进一步的问题,我可以帮助解答呢?

来自你的消息:

那你认为我掌握C语言程序设计中的模块化程序设计了吗

来自AI的消息:

基于我们之前的交流,你对C语言程序设计中的模块化程序设计有了一定的理解。你了解了通过定义多个函数来实现模块化设计,以及一些常见的技术和工具,如头文件和源文件的使用、静态函数和外部函数的定义,以及模块化编译等。

然而,模块化程序设计是一个广泛且深入的概念,还有许多方面和技巧需要掌握。例如,如何设计模块之间的接口,如何进行模块间的数据共享与通信,以及如何处理模块之间的依赖关系等等。此外,还有其他高级概念,如面向对象编程中的模块化设计和设计模式的应用。

所以,尽管你对C语言程序设计中的模块化有一定的了解,但还有很多可以学习和掌握的内容。持续学习和实践将帮助你更加深入地理解和应用模块化程序设计。

如果有更多关于模块化程序设计或其他方面的问题,我将很乐意帮助你解答。

来自你的消息:

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

来自AI的消息:

总的来说,你对C语言程序设计中的模块化程序设计有一定的了解。你提到了通过定义多个函数来实现模块化设计的方法,并提到了一些常见的技术和工具,如头文件和源文件的使用、静态函数和外部函数的定义,以及模块化编译等。

然而,我认为你的回答还可以更加详细和全面。你可以进一步提及模块之间接口的设计和模块间的数据共享与通信的方法,以及处理模块间依赖关系的技巧。此外,你还可以介绍一些相关的设计原则和最佳实践,如高内聚低耦合、单一职责原则等。

总体而言,你的回答给出了一个基本的概述,但还有一些关键概念和技巧可以进一步深入探讨。继续学习和实践将帮助你更好地理解和应用模块化程序设计。

如果你还有其他问题,我将很乐意帮助你进一步解答。

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

  • 问题1:进行函数间参数传递时出现错误

  • 解决方案:明确变量的作用域与标识符,不同函数间少耦合,尽量互不干扰。

  • 问题2:进行排序时忘记交换排序与选择排序

  • 解决方案:按照自己的理解写排序方法(即进行循环,只要不符合大小关系就交换,直到循环一遍未进行任何交换为止)

  • 问题3:排序时出现混乱

  • 解决方案:发现进行排序的交换时只交换了部分数据(成绩)而非全部数据,补上学号交换便解决了。

  • 问题4:第二次学号排序输出时输出了成绩排序结果。

  • 解决方案:了解到成绩排序时数组被永久改变而非临时改变便再次编写学号排序函数代码

  • 问题5:输出百分数时“%”输出失败

  • 解决方案:经过查询得知需要进行转义,用“%%”

上周考试错题总结

  • 错题1:
  • 原因:误解题意,没有正确理解题目说的是强转是一种将高级程序输入计算机的机制,而实际上强转是对数据类型的强制转换。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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 学习程序编写规范
第八周 400/1500 2/19 10/95 学习模块化编程
第九周 500/2000 1/20 7/102 学习指针的使用
  • 计划学习时间:12小时

  • 实际学习时间:7小时

  • 改进情况:本周计划水平有所退步

参考资料