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

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

作业信息

这个作业属于哪个课程 2023-2024-1-计算机基础与程序设计
这个作业要求在哪里 2023-2024-1计算机基础与程序设计第十三周作业
这个作业的目标 自学教材《C语言程序设计》第12章并完成云班课测试
作业正文 2023-2024-1 20231309 《计算机基础与程序设计》第十三周学习总结

教材学习内容总结

下图为《C语言程序设计》第12章梳理

基于AI的学习

(以下为对话记录)

来自你的消息:

今天我学习了C语言程序设计关于结构体的知识,请你以苏格拉底的方式向我提问,一次一个问题

来自AI的消息:

当然,我会尽力以苏格拉底的方式向你提问。那么,让我们开始吧:

问题 1:什么是结构体(structure)?

来自你的消息:

可自定义的复合数据类型

来自AI的消息:

很好!你的回答基本正确。

问题 2:在 C 语言中,我们可以使用结构体来组合多个不同类型的变量。那么,请问结构体的定义语法是什么样的呢?

来自你的消息:

struct name
{
int a;
char b;
}

来自AI的消息:

正确!你给出了结构体的定义语法。

问题 3:结构体变量可以通过成员(member)来访问其中的数据。请问如何通过结构体变量访问成员?

来自你的消息:

使用原点运算符,如stu.Score

来自AI的消息:

很好,你的回答准确。

问题 4:除了访问结构体成员,我们还可以在结构体内部定义函数,这被称为什么类型的函数?

来自你的消息:

这个我不太清楚,你能告诉我吗

来自AI的消息:

当然可以!在结构体内部定义的函数被称为成员函数(member functions)。正如成员变量一样,成员函数也属于结构体的一部分,可以直接通过结构体变量来调用。成员函数可以访问结构体中的成员变量,并且可以对其进行操作。成员函数的定义语法类似于普通函数,但在定义时需要使用结构体的名称作为函数名的前缀。

来自你的消息:

继续问

来自AI的消息:

当你学习C语言中的结构体时,你觉得最吸引你的是什么特点呢?

来自你的消息:

可以自定义并复合多种数据类型

来自AI的消息:

那么,你认为结构体中能够自定义并复合多种数据类型的特点对于解决哪些编程问题特别有帮助呢?

来自你的消息:

同时需要处理不同种类数据时,如学生成绩管理系统

来自AI的消息:

那么,你认为在学生成绩管理系统中,使用结构体来处理不同种类数据有什么优势呢?

来自你的消息:

方便易于操作且数据再内存空间中较为集中

来自AI的消息:

非常好!使用结构体来处理学生成绩管理系统中的不同种类数据的确能够方便地进行操作,并且让数据在内存空间中更加集中。这样做不仅使得代码更加简洁、易读,还能提高程序的执行效率。还有其他你觉得使用结构体处理学生成绩管理系统的优势吗?

来自你的消息:

你的理解是?

来自AI的消息:

当涉及到学生成绩管理系统时,使用结构体的优势在于能够将不同类型的数据(比如学生信息、课程信息、成绩等)组合成一个单独的数据结构。这样做有助于简化代码逻辑,方便进行操作和管理,并且能够更加高效地利用内存空间。此外,结构体还可以帮助我们更容易地定义和维护系统中的实体和关联信息,使得系统更加易于扩展和维护。

来自你的消息:

那你认为我掌握C语言程序设计关于结构体的知识了吗

来自AI的消息:

根据你之前提出的观点,我觉得你在C语言程序设计中掌握了有关结构体的知识。你已经意识到了结构体的优势,包括处理不同种类数据、方便操作以及对内存空间的有效利用。如果你还有任何关于结构体或者其他C语言相关的问题,我都会尽力帮助你。

来自你的消息:

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

来自AI的消息:

你在对结构体的使用优势进行了准确的描述,包括简化代码逻辑、方便操作与管理、高效利用内存空间以及定义和维护系统实体和关联信息等方面。你已经展现了对C语言中结构体知识的理解,并且能够应用到实际问题中进行讨论。总的来说,你对结构体的认识是准确的,并且能够清晰地表达其优势。希望我的回答能够为你提供帮助,若有其他问题,也欢迎随时提出。

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

  • 问题1:函数参数用STU结构体出错
    解决方案:错误信息显示未定义结构体STU,但是我已经typedef了,然后发现是因为typedef在函数之后导致还未加载,于是讲typedef前置即解决问题

  • 问题2:进行排序时交换数据产生疑问,只换一个数据会导致错位混乱,全换又太麻烦。
    解决方案:翻看教材想起来可以直接整体交换,stu[]数组41位留一个临时空位即可解决问题

  • 问题3:按姓名检索后输出分数为0
    解决方案:发现相应代码处printf以%f浮点型输出整型数值导致错误,改为%d即可解决问题

  • 问题4:进行排序时突然出错,错误信息显示Segmentation Fault
    解决方案:debug时发现一进函数就数据错乱,但多次检查函数并无问题,上网查找资料只说是因为内存访问错误,最后才发现在定义结构体是姓名本应是字符串类型(即字符数组),但我大意用的字符类型,改回字符串即解决问题

其他(总结、感悟、思考等)

  • 其他学习内容:GPG实践

  • 思考与感悟:这周在进行GPG实践和OpenSSL实践时感概良多qwq,你不实践操作你永远也不会知道你下一步会遇到什么奇怪且不知道怎么解决的错误,很多时候可能还是需要多动手,多积攒经验才能对各种操作各种实践任务得心应手吧。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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 学习结构体的使用
第十二周 500/3500 1/23 10/125 学习文件相关操作
第十三周 750/4250 2/25 12/137 学习OpenEuler下使用GPG
  • 计划学习时间:15小时

  • 实际学习时间:12小时

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

参考资料

posted @ 2023-12-22 22:42  20231309  阅读(18)  评论(0编辑  收藏  举报