2024-2025-1 20241408陈烨南《计算机基础与程序设计》第九周学习总结
教材学习内容总结
计算机科学概论(第七版)第10、11章总结
第10章:操作系统基础
- 操作系统的概念与功能
操作系统定义:操作系统是管理计算机硬件和软件资源的程序,它提供用户与计算机硬件之间的接口。操作系统的主要功能是资源管理(CPU、内存、外设等)和任务调度。
操作系统的核心功能:
进程管理:管理和调度计算机上的各个进程。
内存管理:有效分配、回收内存,支持虚拟内存技术。
文件系统管理:管理存储设备中的文件,提供文件的存取、存储与保护功能。
设备管理:管理计算机外部设备的输入输出操作。
用户界面:为用户提供与计算机交互的接口。
- 进程管理
进程的定义:进程是程序的一个执行实例,每个进程都有独立的内存空间和执行状态。
进程状态:进程有不同的状态,包括运行态、就绪态、阻塞态等。
进程调度:操作系统根据特定的调度算法来决定哪个进程在何时运行,常见的调度算法有:
先来先服务(FCFS)
短作业优先(SJF)
优先级调度
时间片轮转(RR)
- 内存管理
内存分配:操作系统负责分配内存给进程使用,常见的内存分配方式有:
连续内存分配:为每个进程分配一个连续的内存块。
分页系统:将内存划分为固定大小的页,进程使用页来存储数据。
分段系统:将进程的内存划分为若干段(如代码段、数据段等)。
虚拟内存:通过硬盘空间模拟出比物理内存更大的内存空间,让程序看起来可以使用比实际物理内存更多的内存。
- 文件系统
文件的定义与管理:文件是数据存储的基本单位,操作系统需要管理文件的创建、删除、读取和写入。
文件的组织方式:操作系统为文件提供目录结构,文件可以按照文件名进行组织,并支持对文件进行权限控制(如读、写、执行权限)。
文件存储:文件通常存储在硬盘或其他外部存储设备上,操作系统通过文件系统来访问和管理这些文件。
- 输入输出管理
输入输出设备:包括键盘、鼠标、显示器、硬盘等外部设备。
缓冲区管理:操作系统为I/O操作提供缓冲区,以提高数据传输的效率。
I/O调度:操作系统通过调度算法优化I/O操作的顺序,以减少等待时间,提高性能。
第11章:数据库系统
- 数据库系统概述
数据库的定义:数据库是一个有组织的数据集合,通过数据库管理系统(DBMS)进行管理,提供高效的数据存储、查询、更新和管理功能。
数据库管理系统(DBMS):DBMS是一种软件,它用于管理数据库中的数据,提供数据存取、管理、更新等功能,确保数据的完整性、一致性和安全性。
- 数据模型
层次模型:数据以树形结构组织,记录间有父子关系,适用于层次化的数据存储。
网状模型:数据以图形结构组织,记录间可以有多对多的关系,比层次模型更灵活。
关系模型:数据以二维表格形式组织,每个表由行(记录)和列(字段)组成。关系模型是目前最常用的数据模型,关系数据库管理系统(RDBMS)采用此模型。
- 关系数据库
表(Relation):数据库中的基本存储单位。每张表包含若干列(属性)和行(记录)。
主键(Primary Key):用来唯一标识每条记录的字段,保证表中每条记录的唯一性。
外键(Foreign Key):用于建立表之间联系的字段,它指向另一表的主键。
数据完整性:包括实体完整性、参照完整性和域完整性等,保证数据在存储和操作过程中的正确性和一致性。
- SQL语言
SQL的定义:SQL(结构化查询语言)是一种用于访问和操作数据库的标准语言。
数据查询(SELECT):从数据库中查询数据,支持过滤、排序、聚合等操作。
数据操作:包括插入(INSERT)、更新(UPDATE)和删除(DELETE)数据。
数据定义:包括创建、修改和删除表(CREATE、ALTER、DROP)。
数据控制:用于控制用户权限,管理数据库安全性(如GRANT、REVOKE)。
- 数据库设计
实体-关系模型(ER图):一种图形化的数据库设计工具,用来描述数据库中的实体及其之间的关系。
规范化:通过消除冗余数据、避免更新异常等方式,将数据库设计为符合一定规范的结构。常见的规范化范式有:
第一范式(1NF):要求数据表中的每列都是原子性的。
第二范式(2NF):在1NF的基础上,要求消除部分依赖。
第三范式(3NF):在2NF的基础上,要求消除传递依赖。
C语言程序设计第8章:指针和数组
- 指针基础
指针的定义:指针是存储内存地址的变量,指针变量的值是另一个变量的地址。通过指针可以访问和操作该地址所指向的数据。
指针运算:指针可以进行加法、减法操作,例如,指针加1表示指向下一个同类型数据的内存地址。
指针类型:指针的类型必须与所指向的数据类型一致。
- 指针与数组的关系
数组名作为指针:数组名实际上是指向数组首元素的指针。
通过指针访问数组元素:可以通过指针运算来访问数组的元素。例如,*(arr + i)等同于arr[i]。
二维数组与指针:二维数组的元素可以通过指针操作进行访问。二维数组可以视为指向指针的指针(如int arr[3][4]可以视为int *arr[3])。
- 指针与函数
通过指针传递参数:使用指针可以传递变量的地址,使得函数能够修改传入的变量。
指针作为函数返回值:函数可以返回指针,返回动态分配的内存地址等。
- 动态内存分配
动态内存分配函数:
malloc(size_t size):分配一块指定大小的内存,返回该内存的指针。
calloc(size_t num, size_t size):分配指定数量和大小的内存,并初始化为0。
realloc(void *ptr, size_t size):调整已经分配内存的大小。
free(void *ptr):释放之前分配的内存。
- 多维数组与指针
多维数组:多维数组本质上是指向指针的指针。二维数组可以通过指针进行遍历和访问。
..C语言程序设计第8章:指针和数组
C语言程序与设计
- 指针基础
指针的定义:指针是存储内存地址的变量,指针变量的值是另一个变量的地址。通过指针可以访问和操作该地址所指向的数据。
指针运算:指针可以进行加法、减法操作,例如,指针加1表示指向下一个同类型数据的内存地址。
指针类型:指针的类型必须与所指向的数据类型一致。
- 指针与数组的关系
数组名作为指针:数组名实际上是指向数组首元素的指针。
通过指针访问数组元素:可以通过指针运算来访问数组的元素。例如,*(arr + i)等同于arr[i]。
二维数组与指针:二维数组的元素可以通过指针操作进行访问。二维数组可以视为指向指针的指针(如int arr[3][4]可以视为int *arr[3])。
- 指针与函数
通过指针传递参数:使用指针可以传递变量的地址,使得函数能够修改传入的变量。
指针作为函数返回值:函数可以返回指针,返回动态分配的内存地址等。
- 动态内存分配
动态内存分配函数:
malloc(size_t size):分配一块指定大小的内存,返回该内存的指针。
calloc(size_t num, size_t size):分配指定数量和大小的内存,并初始化为0。
realloc(void *ptr, size_t size):调整已经分配内存的大小。
free(void *ptr):释放之前分配的内存。
- 多维数组与指针
多维数组:多维数组本质上是指向指针的指针。二维数组可以通过指针进行遍历和访问。
..C语言程序设计第8章:指针和数组
- 指针基础
指针的定义:指针是存储内存地址的变量,指针变量的值是另一个变量的地址。通过指针可以访问和操作该地址所指向的数据。
指针运算:指针可以进行加法、减法操作,例如,指针加1表示指向下一个同类型数据的内存地址。
指针类型:指针的类型必须与所指向的数据类型一致。
- 指针与数组的关系
数组名作为指针:数组名实际上是指向数组首元素的指针。
通过指针访问数组元素:可以通过指针运算来访问数组的元素。例如,*(arr + i)等同于arr[i]。
二维数组与指针:二维数组的元素可以通过指针操作进行访问。二维数组可以视为指向指针的指针(如int arr[3][4]可以视为int *arr[3])。
- 指针与函数
通过指针传递参数:使用指针可以传递变量的地址,使得函数能够修改传入的变量。
指针作为函数返回值:函数可以返回指针,返回动态分配的内存地址等。
- 动态内存分配
动态内存分配函数:
malloc(size_t size):分配一块指定大小的内存,返回该内存的指针。
calloc(size_t num, size_t size):分配指定数量和大小的内存,并初始化为0。
realloc(void *ptr, size_t size):调整已经分配内存的大小。
free(void *ptr):释放之前分配的内存。
- 多维数组与指针
多维数组:多维数组本质上是指向指针的指针。二维数组可以通过指针进行遍历和访问。
基于AI的学习
代码调试中的问题和解决过程
问题1:字符串没有正确倒序输出
症状: 程序输出的字符串顺序与预期相反,即从字符串的开头开始输出。
原因: 循环的起始条件设置错误,应该是 i = length - 1 而不是 i = 0。
解决: 检查循环的起始条件,并确保它是从字符串的最后一个字符开始。
问题2:输出包含字符串末尾的空字符
症状: 字符串正确倒序输出了,但是末尾多了一个空字符。
原因: 字符串在C语言中以空字符 '\0' 结尾,循环没有正确地排除这个空字符。
解决: 确保循环在遇到空字符之前停止。可以通过检查 str[i] != '\0' 来实现,或者更简单地,使用 length - 1 作为循环的上限,因为 strlen 函数返回的长度不包括空字符。
学习进度条
|
代码行数(新增/累积) |
博客量(新增/累积) |
学习时间(新增/累积) |
重要成长 |
目标 |
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 |
10/70 |
|
第五周 |
300/1600 |
2/11 |
10/80 |
|
第六周 |
300/1900 |
2/13 |
10/90 |
|
第七周 |
300/2200 |
2/15 |
10/100 |
|
第八周 |
300/2500 |
2/17 |
10/110 |
|
第九周 |
300/2800 |
2/19 |
10/120 |
|