2024-2025 20241323 第六周学习总结
这个作业属于https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
这个作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01
作业正文https:https://www.cnblogs.com/gly03/p/18523229
教材学习内容总结
一、简单类型与组合类型
(一)简单类型
简单类型(Primitive Types)是编程语言中最基本的数据类型,通常包括整数、浮点数、字符、布尔值等,它们是不可再分的基本数据单元。
(二)组合类型
组合类型(Composite Types)是由简单类型组合而成的数据类型,例如数组、结构体、类等。它们可以包含多个简单类型的数据,并且可以进行复杂的操作。
二、复合数据结构
(一)数组
数组(Array)是一组相同类型的元素的集合。
(二)链表
链表(Linked List)是由节点组成的线性数据结构,每个节点包含数据和指向下一个节点的指针。
(三)栈
栈(Stack)是后进先出(LIFO)的数据结构。
(四)队列
队列(Queue)是先进先出(FIFO)的数据结构。
(五)树
树(Tree)是由节点和边组成的层次结构,如二叉树、B树等。
(六)图
图(Graph)是由节点和边组成的非线性数据结构,用于表示复杂的关系。
三、查找与排序算法
(一)查找算法
- 线性查找
线性查找(Linear Search)是逐个检查每个元素,直到找到目标元素。 - 二分查找
二分查找(Binary Search)是在有序数组中通过不断缩小查找范围来查找目标元素。
(二)排序算法 - 冒泡排序
冒泡排序(Bubble Sort)是通过多次遍历数组,比较相邻元素并交换位置。 - 选择排序
选择排序(Selection Sort)是每次选择最小(或最大)的元素放到已排序部分的末尾。 - 插入排序
插入排序(Insertion Sort)是将未排序部分的元素逐个插入到已排序部分的正确位置。 - 快速排序
快速排序(Quick Sort)是通过选择一个基准元素,将数组分为两部分并递归排序。 - 归并排序
归并排序(Merge Sort)是将数组分为两部分,分别排序后再合并。
四、算法复杂度
(一)时间复杂度
时间复杂度(Time Complexity)表示算法执行时间随输入规模增长的变化趋势,常用大O表示法(O(n)、O(n^2)等)。
(二)空间复杂度
空间复杂度(Space Complexity)表示算法执行过程中所需的额外空间随输入规模增长的变化趋势。
五、递归
递归是一种编程技术,函数直接或间接调用自身来解决问题。递归通常用于解决可以分解为相同问题的子问题的情况。递归的关键在于定义递归基(终止条件)和递归关系(如何将问题分解为子问题)。
六、代码安全
(一)输入验证
输入验证(Input Validation)确保用户输入的数据符合预期格式和范围。
(二)边界检查
边界检查(Boundary Checking)防止数组越界、缓冲区溢出等错误。
(三)加密
加密(Encryption)对敏感数据进行加密,防止数据泄露。
(四)权限控制
权限控制(Access Control)限制不同用户对系统资源的访问权限。
(五)日志记录
日志记录(Logging)记录系统操作和错误信息,便于追踪和分析问题。
(六)安全编码实践
安全编码实践(Secure Coding Practices)遵循安全编码规范,避免常见的安全漏洞。
if语句 - 单分支if语句
格式为: if(表达式) 语句; 。当表达式的值为真(在C语言中,非零值表示真,零值表示假)时,执行后面的语句;若表达式的值为假,则跳过该语句。例如, if(x > 5) printf("x大于5\n"); ,这里当 x 的值大于 5 时,就会输出相应内容。 - 双分支if - else语句
格式为: if(表达式) 语句1; else 语句2; 。当表达式的值为真时,执行语句1;当表达式的值为假时,执行语句2。例如, if(a % 2 == 0) printf("偶数\n"); else printf("奇数\n"); 用于判断 a 是偶数还是奇数。 - 多分支if - else if - … - else语句
用于处理多种可能的情况。格式为: if(表达式1) 语句1; else if(表达式2) 语句2; … else 语句n; 。程序会依次判断表达式的值,当某个表达式的值为真时,执行对应的语句,然后跳过后面的判断。若所有表达式的值都为假,则执行 else 后的语句(如果有 else 部分)。比如根据学生成绩划分等级: if(score >= 90) printf("A"); else if(score >= 80) printf("B"); else if(score >= 70) printf("C"); else if(score >= 60) printf("D"); else printf("E");
switch语句
• 基本形式: switch(表达式) { case 常量表达式1: 语句组1; break; case 常量表达式2: 语句组2; break; … default: 语句组n; } 。首先计算 switch 后面表达式的值,然后与各个 case 后面的常量表达式的值进行比较。若与某个 case 的值相等,则执行该 case 后面的语句组,直到遇到 break 语句或者 switch 语句结束。如果没有匹配的 case ,则执行 default 后面的语句组( default 部分可选)。例如, switch(day) { case 1: printf("星期一"); break; case 2: printf("星期二"); break; … default: printf("输入错误"); } 可根据 day 的值输出相应的星期。
• 注意事项: case 后的常量表达式的值必须互不相同,且只能是整型或字符型常量。 break 语句在 switch 语句中非常关键,若遗漏可能导致程序执行流程不符合预期,出现“穿透”现象。
条件运算符
• C语言提供了条件运算符( ?: ),这是一个三目运算符。其一般形式为: 表达式1? 表达式2 : 表达式3 。先计算表达式1的值,如果为真,则整个表达式的值为表达式2的值;如果为假,则整个表达式的值为表达式3的值。例如, max = (a > b)? a : b; 用于求 a 和 b 中的较大值,它可以看作是 if - else 语句的一种简洁表示形式。
选择结构的嵌套
在 if 语句或 switch 语句内部可以再包含其他的 if 语句或 switch 语句,形成嵌套结构。但要注意嵌套的层次不要过于复杂,以保证程序的可读性和可维护性。在嵌套使用时,要特别注意 else 与 if 的配对规则, else 总是与它上面最近的且未配对的 if 配对,可以通过添加花括号来明确配对关系。