2024-2025-1 学号20241315《计算机基础与程序设计》第六周学习总结
作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06 |
这个作业的目标 | Polya如何解决问题 简单类型与组合类型 复合数据结构 查找与排序算法 算法复杂度 递归 代码安全 |
作业正文 | https://www.cnblogs.com/tanzitian11/p/18522441 |
教材学习内容总结
问题求解和算法设计
一、问题分析
明确问题:
理解问题的背景、目标和约束条件。
确定问题的输入和输出要求。
问题建模:
将实际问题转化为计算机可处理的形式,例如建立数学模型、流程图或状态机。
确定问题的抽象层次,以便更好地进行分析和求解。
二、算法设计
算法概念:
算法是解决特定问题的一组明确步骤。
了解算法的时间复杂度和空间复杂度,以评估算法的效率。(分治法)
三、计算机问题求解过程:
可分为4个阶段:1. 分析和说明阶段。
2.算法开发阶段。
3.实现阶段。
4.维护阶段。
四、方法总结
1.分析问题。
2.列出主要任务
3.编写其余模块
4.根据需要进行重组和改写
五、有简单变量的算法
1、带有选择的算法
if语句:
最基本的选择结构,根据给定的条件判断是否执行特定的代码块。
例如:if (condition) { // 条件为真时执行的代码 }。
if-else语句:
在if语句的基础上,增加了else分支,用于在条件不成立时执行另一段代码。
例如:if (condition) { // 条件为真时执行的代码 }
else { // 条件为假时执行的代码 }。
if-else if-else语句:
可以进行多个条件的判断,根据不同的条件执行不同的代码块。
例如:if (condition1) { // 条件1为真时执行的代码 }
else if (condition2) { // 条件2为真时执行的代码 }
else { // 所有条件都不成立时执行的代码 }。
2、计数控制循环
计数变量:在计数控制循环中,通常会使用一个计数变量来记录循环执行的次数。这个变量在循环开始前被初始化,然后在每次循环迭代中进行更新,直到满足特定的条件为止。
循环条件:循环条件通常基于计数变量来确定。当计数变量达到特定的值时,循环条件变为假,循环退出。
循环体:循环体是在每次循环迭代中执行的代码块。它可以包含任何合法的编程语言语句,用于实现特定的任务。
3、事件循环控制
事件:事件是指程序中发生的特定情况或动作,例如用户输入、定时器触发、网络数据到达等。事件可以由外部因素触发,也可以由程序内部的状态变化引起。
事件处理程序:事件处理程序是一段代码,用于响应特定的事件。当事件发生时,事件处理程序会被调用,执行相应的操作。
事件循环:事件循环是一个不断运行的循环,用于检测和处理事件。它会等待事件的发生,然后调用相应的事件处理程序来处理事件。
六、复杂变量
1.数组
一、数组的定义和特点
定义:数组是由相同类型的元素组成的有序集合,这些元素在内存中连续存储。
特点:
1、固定大小:在创建数组时,需要指定数组的大小,一旦确定,不能更改。
2、随机访问:可以通过索引快速访问数组中的任意元素,时间复杂度为 O (1)。
3、存储相同类型元素:数组中的元素必须是相同类型的,这有助于提高内存的使用效率和数据的一致性。
七、搜索算法
1、顺序搜索
定义:
顺序搜索是一种在数据集中逐个检查元素,直到找到目标元素或遍历完整个数据集的搜索方法。它不要求数据集是有序的,可以应用于任何类型的数据集。
特点:从数据集的第一个元素开始,依次检查每个元素。
将当前检查的元素与目标元素进行比较。
如果当前元素与目标元素相等,则搜索成功,返回当前元素的位置或相关信息。
2、二分检索
一、基本概念
定义:
二分检索的基本思想是将待查找的区间不断地分成两半,根据中间元素与目标元素的大小关系来确定下一步在哪个子区间中继续查找,重复这个过程直到找到目标元素或者确定目标元素不存在。
二、算法步骤
确定查找区间:首先确定待查找元素所在的区间,通常是整个有序数组。
计算中间位置:计算当前查找区间的中间位置,可以通过起始位置和结束位置的索引相加除以 2 得到。
比较中间元素与目标元素:
1、将中间位置的元素与目标元素进行比较。
2、如果中间元素等于目标元素,则查找成功,返回中间元素的索引。
3、如果中间元素大于目标元素,则说明目标元素在中间元素的左侧子区间,更新查找区间为左侧子区间。
4、如果中间元素小于目标元素,则说明目标元素在中间元素的右侧子区间,更新查找区间为右侧子区间。
重复步骤 2 和 3,直到找到目标元素或者查找区间为空(起始位置大于结束位置),此时说明目标元素不存在,返回特定的标识。
八、排序
1、选择排序
基本概念:
选择排序的基本思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,放到已排序序列的末尾。如此重复,直到全部元素均排序完毕。
2、冒泡排序
基本概念:
冒泡排序的基本思想是通过重复地遍历要排序的数列,每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。这样一趟遍历之后,最大(或最小)的元素就会 “浮” 到数列的顶端。重复这个过程,直到整个数列有序。
3、插入排序
基本概念:
插入排序的基本思想是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。
九、递归算法
概念:在某种程序上调用自己。(算法调用它本身的能力)
1、子程序语句
定义和作用
定义:
子程序是一段可重复使用的代码块,它接受输入参数(可以没有),执行特定的任务,并可能返回一个结果(也可以没有)。
作用:
提高代码的可维护性:将复杂的任务分解为较小的、可管理的子程序,使得代码更易于理解和修改。
C语言程序设计
1、分支控制:
在 C 语言中,选择控制结构用于根据不同的条件执行不同的代码块。主要有以下两种选择控制结构:
一、if 语句
基本形式:
if (condition) {
// 当 condition 为真时执行的代码
}
其中 condition 是一个表达式,其结果为真(非零值)或假(零值)。如果 condition 为真,则执行花括号内的代码块。
多分支形式:
if (condition1) {
// 当 condition1 为真时执行的代码
} else if (condition2) {
// 当 condition2 为真时执行的代码
} else {
// 当所有条件都为假时执行的代码
}
可以根据多个条件依次进行判断,选择执行不同的代码块。
二、switch 语句
基本形式:
switch (expression) {
case value1:
// 当 expression 的值等于 value1 时执行的代码
break;
case value2:
// 当 expression 的值等于 value2 时执行的代码
break;
// 可以有多个 case 分支
default:
// 当 expression 的值与所有 case 都不匹配时执行的代码
}
expression 是一个表达式,其值会与各个 case 后面的 value 进行比较。如果匹配,则执行相应 case 后的代码,直到遇到 break 语句跳出 switch 结构。如果没有匹配的 case,则执行 default 分支的代码(如果有 default 的话)。
一些注意事项:
1、在 if 语句中,条件表达式可以是任何返回值为整数类型的表达式,通常使用关系运算符(如 <、>、== 等)和逻辑运算符(如 &&、||、! 等)来构建复杂的条件。
2、switch 语句中的 expression 必须是整数类型(包括 char 类型,因为在 C 语言中 char 通常被视为小整数类型)或者枚举类型。
3、在 switch 语句中,每个 case 后面的 value 必须是常量表达式,不能是变量或运行时计算的值。
4、如果在 case 分支中没有 break 语句,程序会继续执行下一个 case 分支的代码,直到遇到 break 或者 switch 结构结束。
5、if 语句和 switch 语句可以嵌套使用,以实现更复杂的选择逻辑。
选择控制结构在 C 语言中非常重要,可以根据不同的情况执行不同的代码,使程序更加灵活和智能。
2、逻辑表达式
逻辑运算符:C 语言中有三个主要的逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)。
&&(逻辑与):当且仅当两个操作数都为真时,结果为真。
例如:a && b,如果 a 和 b 都为非零值(表示真),则整个表达式结果为真;如果其中任何一个为零(表示假),则结果为假。
||(逻辑或):只要两个操作数中有一个为真,结果就为真。例如:a || b,如果 a 或 b 中有一个为非零值,则整个表达式结果为真;只有当 a 和 b 都为零时,结果才为假。
!(逻辑非):用于对一个表达式取反。如果表达式为真,则 ! 操作后的结果为假;如果表达式为假,则结果为真。例如:!a,如果 a 为非零值,则 !a 为零;如果 a 为零,则 !a 为非零值。
逻辑表达式的求值:
对于 && 运算符,当第一个操作数为假时,整个表达式已经确定为假,不会再对第二个操作数进行求值。这被称为 “短路求值”。例如:a && b,如果 a 为假,那么无论 b 的值是什么,整个表达式都为假,所以不会对 b 进行求值。
对于 || 运算符,当第一个操作数为真时,整个表达式已经确定为真,不会再对第二个操作数进行求值。例如:a || b,如果 a 为真,那么无论 b 的值是什么,整个表达式都为真,所以不会对 b 进行求值。
基于AI的学习
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第五周 | 200/200 | 1/2 | 20/20 | |
第六周 | 300/500 | 1/4 | 18/38 | |
第七周 | 500/1000 | 0/7 | 22/60 | |
第八周 | 800/1300 | 0/9 | 30/90 |