2024-2025-1 20241413 《计算机基础与程序设计》第六周学习总结
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP |
---|---|
这个作业要求在哪里 | https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06 |
作业目标 | Polya如何解决问题 简单类型与组合类型 复合数据结构 查找与排序算法 算法复杂度 递归 代码安全 |
---- | ---- |
作业正文 | https://www.cnblogs.com/yuanzhengqi/p/18523745 |
教材学习内容总结
《计算机科学概论》第七章
计算机硬件基础:
计算机硬件是计算机系统的物质基础,包括中央处理器(CPU)、内存、存储设备、输入输出设备等。
硬件的组成和功能是理解计算机如何工作的基础。
中央处理器(CPU):
CPU是计算机的大脑,负责解释和执行指令,以及处理数据。
包括寄存器、算术逻辑单元(ALU)、控制单元等部分。
性能指标如时钟频率、核心数、缓存大小等。
内存:
内存(RAM)是计算机的短期记忆,用于存储当前正在处理的数据和程序。
包括随机访问存储器(RAM)和只读存储器(ROM)。
内存的类型、速度和容量对计算机性能有直接影响。
存储设备:
存储设备用于长期保存数据,如硬盘驱动器(HDD)、固态驱动器(SSD)和光盘。
存储设备的读写速度、容量和可靠性是选择时的重要考虑因素。
输入输出(I/O)设备:
输入设备如键盘、鼠标允许用户与计算机交互。
输出设备如显示器、打印机用于展示处理结果。
I/O设备的性能和兼容性对用户体验至关重要。
主板和扩展卡:
主板是连接所有硬件组件的平台。
扩展卡如图形处理单元(GPU)、声卡、网络卡等增强计算机的功能。
计算机体系结构:
讨论了计算机的不同体系结构,如冯·诺依曼体系结构和哈佛体系结构。
体系结构决定了计算机的设计和操作方式。
性能和优化:
探讨了如何衡量计算机硬件的性能,包括基准测试和性能指标。
讨论了硬件优化技术,如超频、多线程和并行处理。
未来趋势:
讨论了计算机硬件的未来发展,包括量子计算、神经形态计算等新兴技术。
硬件安全和维护:
介绍了硬件的维护和故障排除技巧。
讨论了硬件安全问题,如物理安全和数据保护。
《C语言程序设计》第五章
控制结构:
讨论了C语言中的三种基本控制结构:顺序结构、选择结构和循环结构。
顺序结构是按照代码的书写顺序执行。
选择结构包括if、else if、else和switch语句,用于根据不同条件执行不同代码块。
循环结构包括for、while和do-while循环,用于重复执行代码块。
函数:
函数是C语言中实现代码模块化的基本单位,允许将代码封装成可重复使用的单元。
介绍了函数的定义、声明、调用和返回值。
讨论了函数参数的传递方式,包括值传递和地址传递。
数组:
数组是相同数据类型元素的集合,可以是一维或多维。
介绍了数组的声明、初始化和访问。
讨论了数组在函数中的使用,包括作为参数传递。
指针:
指针是C语言中一个强大的特性,它存储了变量的内存地址。
介绍了指针的声明、初始化和解引用。
讨论了指针与数组的关系,以及如何使用指针访问数组元素。
动态内存分配:
介绍了如何在运行时动态分配和释放内存,使用malloc、calloc、realloc和free函数。
讨论了动态内存分配的重要性和潜在问题,如内存泄漏。
结构体和联合:
结构体允许将不同的数据类型组合成一个单一的数据结构。
联合允许在相同的内存位置存储不同的数据类型。
介绍了如何声明、初始化和访问结构体和联合。
预处理器指令:
预处理器指令是C语言编译过程中的指令,用于条件编译、宏定义等。
介绍了#include、#define、#ifdef、#ifndef、#endif等指令。
文件操作:
讨论了如何在C语言中打开、读取、写入和关闭文件。
介绍了文件指针、文件操作函数和文件缓冲区的概念。
错误处理:
介绍了C语言中的错误处理机制,包括返回错误码和使用exit函数。
代码风格和调试:
讨论了编写可读性和可维护性高的代码的重要性。
介绍了调试工具和技术,帮助开发者查找和修复代码中的错误。
教材学习中的问题与解决过程
问题一:return1和return0有什么区别?
AI:在C语言中,return 1 和 return 0 通常用于表示函数的执行结果,尤其是在返回值被用来表示成功或失败的情况下。这种用法遵循了一种约定,其中:
return 0 通常表示函数执行成功,没有错误发生。
return 1 或其他非零值通常表示函数执行过程中遇到了错误或异常情况。
这种约定源自于Unix和C语言的传统,其中程序的退出状态(exit status)用来向操作系统和调用者传达程序的执行结果。在Unix-like系统中,一个退出状态为0通常表示成功,而非零值表示有错误发生。
问题二:ifelse语句和switch语句分别在什么时候用?它们有什么区别?
AI:if-else语句
使用场景:
当需要根据一个或多个条件执行不同的代码块时。
当条件较为复杂,或者需要进行范围检查时(例如,检查一个变量是否在某个范围内)。
特点:
可以处理多个条件,每个条件可以是任意的布尔表达式。
可以嵌套使用,形成复杂的逻辑判断。
每个条件后面可以跟随一个else if或else块,以处理不同的条件分支。
示例:
c
if (condition1) {
// 执行代码块1
} else if (condition2) {
// 执行代码块2
} else {
// 执行默认代码块
}
switch语句
使用场景:
当需要根据一个变量的值来选择执行不同的代码块时,这个变量通常是一个整数或枚举类型。
当有多个条件,但这些条件是互斥的,并且每个条件对应一个特定的值时。
特点:
switch语句的表达式只能是一个整数或枚举类型的值。
case标签后面必须跟一个常量表达式。
default块是可选的,用于处理所有case未覆盖的情况。
switch语句在执行到break或return语句时会退出,不会继续执行后续的case块,除非使用fall through(即在case块的末尾不使用break)。
示例:
c
switch (variable) {
case value1:
// 执行代码块1
break;
case value2:
// 执行代码块2
break;
default:
// 执行默认代码块
}
区别:
条件复杂度:if-else可以处理更复杂的条件判断,而switch适用于条件是变量值的情况。
性能:对于简单的整数或枚举类型的条件判断,switch语句通常比if-else语句更快,因为它在编译时会转换为跳转表,直接跳转到对应的case标签。
可读性:当条件是一系列离散的值时,switch语句的可读性更好,代码更简洁。
范围检查:if-else可以轻松处理范围检查,而switch则不能直接处理。
执行流程:switch语句在执行到break或return时会退出,而if-else中的每个条件是顺序执行的,除非遇到return或break(在循环中)。
总的来说,选择if-else还是switch取决于具体的使用场景和需求。
基于AI的学习
我在学习c语言控制结构相关内容,请你以苏格拉底的方式向我提问,一次只问一个问题
当然可以。让我们开始吧:
你能否告诉我,什么是控制结构?
是c语言的一种语句结构
非常好,你已经知道控制结构是C语言中的一种语句结构。那么,控制结构的主要目的是什么?
方便于程序的设计
没错,控制结构确实方便于程序的设计。那么,你能具体说说控制结构是如何帮助我们设计程序的吗?
他给了我们一个固定的结构,让我们可以利用
确实,控制结构提供了一种固定的模式,使得程序的逻辑更加清晰。那么,你能描述一下C语言中控制结构有哪些类型吗?
顺序,分支,条件
很好,你已经识别出了C语言中控制结构的三种基本类型:顺序结构、分支结构和循环结构。现在,让我们深入一些:
顺序结构是最简单的,它按照代码的书写顺序依次执行。你能描述一下顺序结构的特点吗?
上一句完成后编程下一句
正是这样,顺序结构中的语句是按照它们在程序中出现的顺序依次执行的。每个语句执行完毕后,程序控制权才会转移到下一个语句。
现在,让我们转向分支结构。分支结构允许程序根据条件选择不同的执行路径。你能告诉我分支结构通常使用哪些关键字来实现吗?
if else switch
完全正确,if 和 else 以及 switch 是C语言中实现分支结构的主要关键字。if 语句允许程序根据条件是否为真来选择执行不同的代码块,而 switch 语句则允许程序根据变量的值来选择多个执行路径中的一个。
接下来,让我们探讨循环结构。循环结构允许程序重复执行一段代码,直到满足某个条件。你能告诉我C语言中有哪些循环结构吗?
if else
看来我们有点混淆了。if 和 else 是用于分支结构的关键字,而不是循环结构。对于循环结构,C语言提供了以下几种:
for 循环:用于在给定次数内重复执行一段代码。
while 循环:只要条件为真,就重复执行一段代码。
do...while 循环:至少执行一次代码,然后只要条件为真,就继续重复执行。
你能描述一下这些循环结构各自的特点和使用场景吗?
for循环用于固定次数的循环
对的,for 循环通常用于当你需要执行固定次数的循环时。它非常适合于当你事先知道循环需要执行多少次的情况。for 循环的结构通常包括初始化、条件检查和循环后的更新语句。
那么,while 循环和 do...while 循环与 for 循环有什么不同呢?你能描述一下它们的特点和使用场景吗?
while用于固定条件的循环
是的,while 循环确实用于基于条件的循环,它会一直执行,直到指定的条件不再满足。这意味着循环的次数可能事先不知道,而是取决于某个条件何时变为假(false)。
while 循环的结构是这样的:
c
while (condition) {
// 循环体
}
只有当 condition 为真(true)时,循环体中的代码才会执行。
do...while 循环与 while 循环类似,但它至少会执行一次循环体,即使条件一开始就是假的。这是因为条件检查是在循环体执行之后进行的。do...while 循环的结构如下:
c
do {
// 循环体
} while (condition);
在这种情况下,无论 condition 的初始值如何,循环体至少会执行一次,然后检查 condition 是否为真,以决定是否继续循环。
现在,让我们进一步探讨。你能告诉我在什么情况下你会选择使用 while 循环而不是 for 循环,或者反之吗?
如果次数固定则用for
是的,如果循环次数是固定的,for 循环通常是更好的选择,因为它的结构清晰,可以直接在循环开始时初始化循环变量,并在每次循环结束时更新它。这使得代码易于阅读和维护。
那么,while 循环在什么情况下会是更好的选择呢?你能想到一些具体的例子吗?
当满足某个条件后跳出循环时
确实,while 循环非常适合于那些循环次数不确定,而是依赖于某个条件是否满足的情况。例如,你可能需要从用户那里读取输入,直到他们输入了一个特定的值或者信号。在这种情况下,你不知道需要读取多少次输入,只知道需要继续读取直到满足某个条件。
让我们来看一个简单的例子:
c
int number;
printf("请输入一个数字(输入-1结束):");
while (scanf("%d", &number) == 1 && number != -1) {
// 处理输入的数字
printf("你输入的数字是:%d\n", number);
printf("请输入一个数字(输入-1结束):");
}
在这个例子中,程序会一直提示用户输入数字,直到用户输入-1。因为循环次数取决于用户的输入,而不是一个固定的数字,所以使用 while 循环是合适的。
学习进度表
代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
第五周 500/1300 2/3 30/90
第六周 300/800 2/5 30/90