2024-2025-1学号20241309《计算机基础与程序设计》第九周学习总结
作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2024-2025-1计算机基础与程序设计第九周作业 |
这个作业的目标 |
|作业正文|2024-2025-1学号20241309《计算机基础与程序设计》第九周学习总结
教材学习内容总结
《计算机科学概论》第十章:
(一)操作系统的定义与角色
操作系统是管理计算机硬件和软件资源、控制程序执行、提供人机界面等的系统软件。它充当用户与计算机硬件之间的中介,使得多个程序能高效、有序地共享硬件资源。
(二)操作系统的责任
资源管理:包括对处理器(CPU)、内存、输入输出设备、文件等资源的管理。确保各程序能合理获取所需资源,避免冲突。
进程管理:创建、调度、终止进程,协调进程间的通信和同步。
提供用户界面:以命令行、图形界面等形式让用户方便地与计算机交互,执行程序、管理文件等。
(三)内存与进程管理
内存管理:负责分配和回收内存空间给进程。采用如分区存储管理、分页存储管理、分段存储管理等技术。通过虚拟内存技术,可让进程使用比实际物理内存更大的内存空间,将部分暂时不用的数据存放到磁盘等辅助存储器中。
进程管理:进程是正在执行的程序实例,包含程序代码、数据、程序计数器等信息。操作系统跟踪进程状态(如就绪、运行、阻塞等),通过进程调度算法(如先来先服务、短作业优先、时间片轮转等)决定哪个进程获得 CPU 执行权。进程间可通过共享内存、消息传递等方式进行通信和同步,以协调完成任务。
(四)分时系统
分时系统允许多个用户通过终端同时与计算机交互。操作系统将 CPU 时间划分成很短的时间片,轮流分配给各个用户的进程。由于时间片切换速度很快,每个用户感觉自己独占计算机,提高了计算机资源的利用率和用户的工作效率。
(五)CPU 调度
CPU 调度的目标是选择合适的进程在 CPU 上执行,以提高系统性能。常见的调度算法有:
先来先服务(FCFS):按照进程到达的先后顺序分配 CPU 时间。简单但可能导致短作业等待时间过长。
短作业优先(SJF):优先选择执行时间短的进程,能有效减少平均周转时间,但对长作业不利且需要预先知道作业执行时间。
时间片轮转(RR):将 CPU 时间划分成等长的时间片,每个进程轮流在时间片内执行,适用于分时系统,能保证各进程公平地获得 CPU 时间。
优先级调度:根据进程的优先级分配 CPU 时间,优先级高的进程先执行,但可能出现低优先级进程饥饿的情况。
《计算机科学概论》第十一章:
(一)文件
文件是存储在辅助存储器(如磁盘)上的具有名称的一组相关信息的集合。可以是程序代码、数据、文档等。文件有文件名、文件类型、文件大小、创建时间、修改时间等属性。
(二)文件系统
文件系统是操作系统用于组织、存储、检索文件的机制。它管理文件在磁盘等存储设备上的存储位置,提供文件的创建、删除、读写、查找等操作接口。常见的文件系统有 FAT、NTFS(用于 Windows)、ext4(用于 Linux)等。文件系统通过目录结构来组织文件,方便用户和系统对文件进行管理和访问。
(三)文件保护
为了防止文件被非法访问、修改或删除,文件系统采用多种文件保护机制。如设置文件访问权限(读、写、执行权限),通过用户账号和密码对用户进行身份验证,只有具有相应权限的用户才能对文件进行特定操作。还可以采用加密技术对文件内容进行加密,确保文件的保密性。
(四)磁盘调度
磁盘调度的目的是减少磁盘 I/O 操作的平均等待时间,提高磁盘 I/O 性能。常见的磁盘调度算法有:
先来先服务(FCFS):按照磁盘 I/O 请求到达的先后顺序处理,简单但可能导致磁头频繁大幅度移动,效率较低。
最短寻道时间优先(SSTF):优先处理距离当前磁头位置寻道距离最短的磁盘 I/O 请求,能有效减少磁头移动距离,但可能导致某些请求长时间等待。
扫描算法(SCAN):磁头从磁盘一端开始,向另一端移动,沿途处理请求,到达另一端后再反向移动,可避免某些请求饥饿的情况。
循环扫描算法(CSCAN):与扫描算法类似,但磁头只单向移动,到达一端后直接回到起始端继续处理请求,进一步优化了磁盘 I/O 性能。
《C语言程序设计》第八章:
一、数组的概念
数组是一组具有相同数据类型的数据元素的有序集合。它在内存中占用连续的存储单元,通过数组名和下标来访问其中的元素。数组可以用来存储和处理大量相关的数据,使得数据的管理和操作更加方便和高效。
二、一维数组
定义与声明:
定义格式:数据类型 数组名 [常量表达式]; 例如:int a [5]; 这里定义了一个名为 a 的整型数组,它可以存储 5 个整型元素。
常量表达式用于指定数组的大小,其值必须是常量或常量表达式,且大于零。
初始化:
可以在定义数组时进行初始化,将初值依次放在花括号内。例如:int b [3] = {1, 2, 3}; 这就给数组 b 的三个元素分别赋了初值 1、2、3。
如果初始化时提供的初值个数少于数组元素个数,剩余元素会被自动初始化为相应数据类型的默认值(如整型为 0)。
若初始化时提供的初值个数多于数组元素个数,编译器会报错。
访问元素:
通过数组名和下标来访问数组中的单个元素,下标从 0 开始。例如:a [0] 表示数组 a 的第一个元素,a [2] 表示数组 a 的第三个元素。
可以在程序中对数组元素进行赋值、读取等操作,就像操作普通变量一样。
三、二维数组
定义与声明:
定义格式:数据类型 数组名 [常量表达式 1][常量表达式 2]; 例如:int c [2][3]; 这里定义了一个名为 c 的二维整型数组,它有 2 行 3 列,共可存储 6 个整型元素。
常量表达式 1 指定行数,常量表达式 2 指定列数,两者的值都必须是常量或常量表达式且大于零。
初始化:
可以按行初始化,即将每行的初值用花括号括起来,再整体用花括号括起来。例如:int d [2][3] = { {1, 2, 3}, {4, 5, 6} }; 这就分别给二维数组 d 的两行元素赋了初值。
也可以按顺序初始化,即将所有元素的初值依次放在一个大花括号内,编译器会按照列优先的顺序依次给各元素赋值。例如:int e [2][3] = {1, 2, 3, 4, 5, 6}; 这种方式下,元素的赋值顺序是先第一列从上到下,再第二列从上到下,以此类推。
同样,如果初始化提供的初值个数少于数组元素个数,剩余元素会被自动初始化为相应数据类型的默认值;若多于数组元素个数,编译器会报错。
访问元素:
通过数组名和两个下标来访问二维数组中的单个元素,第一个下标表示行,第二个下标表示列,下标都从 0 开始。例如:c [0][1] 表示二维数组 c 的第一行第二列的元素。
四、数组作为函数参数
传递方式:
数组名作为函数参数时,实际上传递的是数组的首地址,也就是数组中第一个元素的地址。这意味着在函数内部对数组元素的操作会直接影响到原始数组。
函数声明与定义:
在函数声明和定义中,对于数组参数,只需要指定数组的数据类型和数组名,不需要指定数组的大小。例如:void printArray (int arr []); 这里声明了一个函数 printArray,它接受一个整型数组作为参数,但不明确数组的大小。
但在函数内部访问数组元素时,需要确保不会超出数组实际的大小范围,否则可能会导致程序错误。
五、多维数组的应用
除了常见的一维和二维数组,C 语言还支持多维数组(如三维数组等),其定义、初始化和访问元素的方式与二维数组类似,只是需要更多的下标来指定元素的位置。多维数组在处理一些复杂的数据结构,如矩阵、图像数据等方面有广泛的应用。
数组在 C 语言程序设计中是非常重要的基础内容,掌握好数组的相关知识对于编写高效、复杂的 C 语言程序至关重要。
教材学习中的问题和解决过程
问题1:不明白为什么函数中调用数组时只需交代数组名
问题1解决过程:在学习了第九章指针后,对地址的概念了解更深,迷宫告白传递的时数组的首地址,可以通过偏移访问数组中的数据。
问题2:对二维数组的调用以及排序等函数功能十分生疏
问题2解决过程:通过完成第三次实验的代码编写以及不断的上机训练逐渐增加了熟练度。
基于AI的学习
其他(感悟、思考等,可选)
完成实验四 函数与数组编程练习