学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第六周学习总结
学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第六周学习总结
作业信息
这个作业属于哪个课程 | <班级链接>(如[https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)) |
---|---|
这个作业要求在哪里 | <作业要求链接>(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06) |
这个作业的目标 | <计算机科学概论(第七版)第7章 《C语言程序设计》第5章> |
教材学习内容总结
C语言的选择控制结构主要通过if
、switch
和?:
(三元运算符)来实现。下面简要但全面地介绍这些控制结构:
-
if
语句:- 基本形式:
if
语句用于在满足特定条件时执行一段代码。 - 语法:
if (条件) { // 条件为真时执行的代码 } else { // 条件为假时执行的代码 }
- 可以嵌套
if
语句,也可以使用else if
来检查多个条件。
- 基本形式:
-
switch
语句:switch
语句用于根据变量的值执行不同的代码块。- 语法:
switch (变量) { case 值1: // 当变量等于值1时执行的代码 break; case 值2: // 当变量等于值2时执行的代码 break; // ... default: // 如果变量的值不匹配任何case时执行的代码 }
break
语句用于退出switch
结构,防止执行下一个case
。
-
三元运算符(
?:
):- 三元运算符是一种简洁的选择结构,用于在两个值之间选择。
- 语法:
条件 ? 表达式1 : 表达式2;
- 如果条件为真,则返回
表达式1
的值,否则返回表达式2
的值。
这些选择控制结构是C语言中实现条件逻辑的基础,允许程序根据不同的条件执行不同的代码路径。
数组:
-
定义:
数组是一个容器对象,它存储了具有相同类型的一系列元素,并且可以通过索引来访问这些元素。 -
元素类型:
数组中的所有元素必须是相同的数据类型,例如整型、浮点型、字符型等。 -
索引:
数组中的每个元素都可以通过一个唯一的索引来访问,索引通常是从0开始的整数。 -
大小:
数组的大小是在声明时确定的,这意味着一旦创建了数组,其包含的元素数量就固定了。在某些编程语言中,如C和C++,数组的大小是静态的,而在其他语言如Python中,数组(更准确地说是列表)的大小是动态的。 -
声明:
在不同的编程语言中,数组的声明方式不同。例如,在C语言中,可以这样声明一个整型数组:int myArray[5]; // 声明一个包含5个整数的数组
-
访问和修改:
可以通过索引来访问和修改数组中的元素。例如,在C语言中:myArray[0] = 10; // 将数组的第一个元素设置为10 int value = myArray[0]; // 读取数组的第一个元素
排序算法:
1. 选择排序(Selection Sort)
原理:
- 选择排序的基本思想是:遍历数组,每次从未排序的部分找出最小(或最大)的元素,存放到排序序列的起始位置,直到整个序列有序。
- 它重复地走访过列表,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
步骤:
- 找到未排序部分的最小元素。
- 将其与未排序部分的第一个元素交换位置。
时间复杂度:O(n^2),其中n是数组的长度。
2. 泡沫排序(Bubble Sort)
原理:
- 泡沫排序的基本思想是:通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
- 遍历数列的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。
步骤:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
时间复杂度:O(n^2),其中n是数组的长度。
3. 快速排序(Quick Sort)
原理:
- 快速排序的基本思想是:通过一个分治法(Divide and Conquer)的过程,将一个序列分为两个子序列,使得其中一个子序列的所有数据都比另一个子序列的所有数据要小,然后再按此方法对两个子序列分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
步骤:
- 选择一个元素作为"基准"(pivot)。
- 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
时间复杂度:平均O(n log n),最坏O(n^2)。
4. 插入排序(Insertion Sort)
原理:
- 插入排序的基本思想是:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
- 插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)。
步骤:
- 从第一个元素开始,该元素可以认为已经被排序。
- 取出下一个元素,在已经排序的元素序列中从后向前扫描。
- 如果该元素(已排序)大于新元素,将该元素移到下一位置。
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。
- 将新元素插入到该位置后。
- 重复步骤2~5。
时间复杂度:O(n^2),其中n是数组的长度。
这些排序算法各有优缺点,选择排序和泡沫排序在数据量较大时效率较低,而快速排序在平均情况下效率较高,插入排序在数据量较小或部分有序的情况下效率较高。
AI学习
代码调试中的问题和解决过程
1.问题:调试位运算程序时用人力计算正确成本很高,检验效率慢
解决方法:在代码中加入一行输出答案,就可以直接知晓答案再输入检验程序了
2.问题:伪随机数的解决
解决方法:加入srand()函数
3.问题:scanf输入时会先空一行结果,再对下一行执行命令
解决问题:scanf使用时多加了换行命令“\n”,删去即可
-
计划学习时间:10小时
-
实际学习时间:9小时