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

发布时间 2023-12-10 21:35:28作者: 20231309

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

作业信息

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

教材学习内容总结

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


教材学习中遇到的问题

-问题1:看书之后仍然对cookie没有清晰的认识,也不清楚为什么有时会在浏览网页时收到cookie提示请求
-解决:在问GPT后我了解了,cookie就是网站在用户计算机留下/访问相关数据的技术,同时,大多国家都有法律规定,网站使用cookie必须经过用户许可。
-问题2:在学习函数指针之后仍不会使用函数指针,也不知道函数指针有什么用。
-解决:在向GPT寻求实例后(代码如下)我知道了,函数指针的用法即(*f)(datatype),可以用于函数回调,即将该函数作为另一函数的参数。

#include <stdio.h>

// 回调函数,执行特定操作
void callback(int num) {
    printf("回调函数被调用,传递的参数是:%d\n", num);
}

// 带有回调函数的函数
void performCallback(void (*cb)(int), int num) {
    cb(num);
}

int main() {
    int number = 42;

    printf("执行回调函数前的操作\n");
    // 调用带有回调函数的函数
    performCallback(callback, number);
    printf("执行回调函数后的操作\n");

    return 0;
}

基于AI的学习

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

来自你的消息:

今天我学习了C语言程序设计关于字符串的使用,请你以苏格拉底的方式向我提问,一次一个问题

来自AI的消息:

你好!我很高兴听到你学习了C语言程序设计中关于字符串的使用。现在,让我以苏格拉底的方式来向你提问。首先,你能否告诉我,在C语言中,你是如何声明和初始化一个字符串的呢?

来自你的消息:

声明和初始化字符串通常使用数组,如 char str[]="Hello";

来自AI的消息:

非常好!你正确地指出了在C语言中,可以使用数组来声明和初始化字符串。你提到了一个例子:char str[]="Hello";。 那么,接下来的问题是,你知道为什么我们在声明和初始化字符串时需要使用字符数组吗?

来自你的消息:

因为C语言下没有直接对应的字符串数据类型,不得不采用字符数组

来自AI的消息:

非常准确!在C语言中,没有直接对应的字符串数据类型,因此我们通常使用字符数组来表示和操作字符串。字符数组允许我们在内存中连续存储一系列字符,从而构成字符串。接下来的问题是,你知道在C语言中,如何使用字符数组来表示和处理字符串的长度吗?

来自你的消息:

通常使用头文件<string.h>下的strlen(str)来获得字符串长度

来自AI的消息:

很好!你提到了在C语言中使用 <string.h> 头文件中的 strlen(str) 函数来获取字符串的长度。strlen 函数返回给定字符串的字符数(不包括空字符\0)。继续深入讨论,你知道如何在C语言中比较两个字符串的内容是否相等吗?

来自你的消息:

通常使用头文件<string.h>下的strcmp(str1,str2)来比较字符串,如果两个字符串内容相等则返回)

来自AI的消息:

没错!在C语言中,可以使用 <string.h> 头文件中的 strcmp(str1, str2) 函数来比较两个字符串的内容。如果两个字符串相等,strcmp 函数会返回0;如果不相等,它会返回一个非零值。这是一种常见的比较字符串内容的方法。如果你有其他关于C语言字符串处理的问题,我很乐意继续帮助你。

来自你的消息:

请你继续以苏格拉底的方式向我提问,一次一个问题

来自AI的消息:

当然,我将继续以苏格拉底式的方式,逐步提问。首先,你能否告诉我如何在C语言中将一个字符串复制到另一个字符串中?

来自你的消息:

通常使用头文件<string.h>下的strcpy(str1,str2)来把str2的内容复制给str1

来自AI的消息:

非常好!你描述得很准确。在C语言中,可以使用 <string.h> 头文件中的 strcpy(str1, str2) 函数来将一个字符串复制到另一个字符串中。这个函数会将 str2 的内容复制到 str1 中,包括字符串结束符\0。接下来,我想问一下你对C语言中动态内存分配的了解如何呢?

来自你的消息:

malloc、calloc?

来自AI的消息:

非常棒,你提到了C语言中的动态内存分配函数 malloccalloc。那么,你能够解释一下这两个函数的区别以及它们的作用吗?

来自你的消息:

我不太记得了,你能和我说说吗

来自AI的消息:

当然!让我为你解释一下。

在C语言中,malloccalloc 都用于动态分配内存空间。它们的主要区别在于:

  1. 参数不同:

    • malloc 函数有一个参数,即所需的内存大小(以字节为单位)。例如,malloc(sizeof(int)) 将分配一个整型变量的内存空间。
    • calloc 函数有两个参数,第一个参数是所需的元素数量,第二个参数是每个元素的大小。例如,calloc(5, sizeof(int)) 将分配一个包含5个整型元素的数组的内存空间。
  2. 内存内容:

    • malloc 函数返回的内存空间不会被初始化,其中的内容是随机的。
    • calloc 函数返回的内存空间会被初始化为零,也就是每个字节都被设置为0。

使用这两个函数时,需要注意以下几点:

  • 如果要分配的内存空间不太大,并且不需要初始化为0,可以使用 malloc 函数。
  • 如果要分配的内存空间较大,并且需要初始化为0,可以使用 calloc 函数。

需要记住的是,在使用完动态分配的内存后,要确保使用 free 函数来释放已分配的内存,以避免内存泄漏。

希望这个解释能够帮助你更好地理解 malloccalloc 函数的用法。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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 学习指针的使用
第十周 500/2500 1/21 11/103 学习字符串函数
第十一周 500/3000 1/22 12/115 学习结构体的使用
  • 计划学习时间:10小时

  • 实际学习时间:12小时

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

参考资料