2024-2025-1 20241407《计算机基础与程序设计》第九周学习总结

作业信息

这个作业属于哪个课程 2024-2025-1 计算机基础与程序设计
这个作业要求在哪里 2024-2025-1 计算机基础与程序设计第九周作业
这个作业的目标 操作系统责任,内存与进程管理,分时系统,CPU调度,文件、文件系统,文件保护,磁盘调度
作业正文 本博客

教材学习内容总结

《计算机科学概论》第七版第十章的学习内容总结如下:

  1. 操作系统(OS):操作系统是一类特殊的程序,它具有操作硬件的权限,并负责运行和管理其他程序。操作系统的两个主要责任是管理计算机资源(如内存、输入/输出设备等)和为人机交互提供界面。
  2. 操作系统的启动和管理:操作系统通常是开机第一个启动的程序,其他程序都由操作系统启动。它加强了程序加载方式,可以一次给多个程序运行,这种模式被称为批处理。
  3. 设备驱动程序:操作系统充当软件和硬件的媒介,提供API来抽象硬件,这些API被称为设备驱动程序,允许程序员以标准化的方式与硬件进行交互。
  4. 多任务处理:操作系统的能力之一是使多个程序可以同时运行,在单个CPU上共享时间,这种能力被称为多任务处理。每个程序会分配有专属的内存块,可能不连续,操作系统通过虚拟内存技术隐藏这种复杂性。
  5. 虚拟内存和动态内存分配:操作系统自动处理虚拟内存和物理内存之间的映射,这种机制使得程序的内存大小可以灵活增减,被称为动态内存分配。
  6. 内存保护:给程序分配专用的内存范围,并隔离起来以防止互相影响和病毒的侵害,这种机制被称为内存保护。
  7. 多用户支持:计算机还能让多用户在终端同时访问,这时操作系统还要处理多个用户,开发了分时操作系统,每个用户只能用一小部分处理器、内存等资源。
    这些内容涵盖了操作系统的基本概念、功能和一些关键特性,为我们提供了对操作系统如何在计算机系统中发挥作用的基本理解。
    《计算机科学概论》第七版第十一章的学习内容总结如下:
  8. 文件格式:介绍了不同类型的文件数据格式,包括文本文件(TXT)、波形文件(WAV)、位图文件(BMP)等。这些文件格式用于存储不同类型的数据,如文本、音频和图像。
  9. 元数据:讨论了关于数据的数据,即元数据的概念。元数据通常存储在文件的开头,也称为文件头,它包含了文件的相关信息,如码率、声道信息等。
  10. 目录文件:为了存储和管理多个文件,需要特殊的文件来记录其他文件的位置,这些文件被称为目录文件。
  11. 软件工程:探讨了大型软件项目中的错误和复杂度问题,强调了从项目一开始就关注软件质量的重要性,并介绍了软件工程的规则。
  12. 算法复杂度:介绍了大O分析,这是一种根据问题大小决定的增长速率来对比算法的方法。讨论了多项式时间算法、P类问题和NP类问题,以及图灵关于停机问题无解决方案的证明。
    这些内容涵盖了文件管理和软件工程的基本概念,为我们提供了对计算机科学中文件存储和软件构建过程的基本理解。
    《C语言程序设计》第五版第八章的主要内容是数组和算法基础,以下是这一章的主要学习内容:
  13. 数组的定义和声明
    • 介绍如何在C语言中定义和声明一维数组和二维数组。
    • 讨论数组的内存分配和存储方式。
  14. 数组的初始化
    • 说明如何在声明数组时进行初始化,包括使用指定的值和默认值。
  15. 访问和操作数组元素
    • 讲解如何通过索引访问数组中的元素。
    • 介绍如何遍历数组并对数组元素进行操作。
  16. 数组作为函数参数
    • 讨论如何将数组传递给函数,包括传递数组名和数组元素。
    • 介绍在函数中如何操作数组元素。
  17. 多维数组
    • 解释多维数组的概念,以及如何在C语言中声明和使用二维数组。
    • 讨论多维数组的内存布局和遍历方法。
  18. 数组与指针的关系
    • 探讨数组名与指针之间的关系,以及如何使用指针来操作数组。
  19. 基本算法概念
    • 介绍算法的基本概念,包括算法的定义、特性和表示方法。
  20. 算法的复杂度分析
    • 讨论如何评估算法的效率,包括时间复杂度和空间复杂度。
  21. 排序算法
    • 介绍一些基本的排序算法,如冒泡排序、选择排序和插入排序。
    • 分析这些排序算法的时间复杂度和适用场景。
  22. 搜索算法
    • 讲解基本的搜索算法,如线性搜索和二分搜索。
    • 讨论搜索算法的时间复杂度和实现方法。
  23. 递归
    • 介绍递归的概念和基本应用。
    • 讨论递归算法的时间复杂度和可能的优化。
  24. 编程练习
    • 提供一些与数组和算法相关的编程练习,以加深对数组操作和算法实现的理解。
      这些内容为我们提供了数组和算法基础的全面介绍,帮助我们在C语言编程中更有效地使用数组和实现算法。

教材学习中的问题和解决过程

问题一:如何实现磁盘的顺序访问和直接访问?
解决方式:AI答:在C语言中实现磁盘的顺序访问和直接访问,可以通过以下几种方式:

顺序访问(Sequential Access)

顺序访问通常是指按照文件中数据的存储顺序来读取或写入数据。在C语言中,可以通过以下方式实现顺序访问:

  1. 使用文件指针
    • 通过fopen函数以读模式("r")打开文件,使用fgetsfread函数按顺序读取文件内容。
    • 示例代码:
      FILE *file = fopen("example.txt", "r");
      if (file != NULL) {char buffer[128];while (fgets(buffer, sizeof(buffer), file) != NULL) {printf("%s", buffer);}fclose(file);
      } else {perror("Error opening file");
      }
      
    • 这种方式适用于文本文件和二进制文件的顺序读取。

直接访问(Direct Access)

直接访问,也称为随机访问,是指可以直接访问文件中的任意位置的数据,而不需要从头开始顺序访问。在C语言中,可以通过以下方式实现直接访问:

  1. 使用fseekftell函数
    • fseek函数用于移动文件读写位置指针到指定位置,ftell用于获取当前文件读写位置指针。
    • 示例代码:
      FILE *file = fopen("example.txt", "r+");
      if (file != NULL) {fseek(file, 10, SEEK_SET); // 移动到文件开头后的第10个字节char buffer[128];fread(buffer, sizeof(char), sizeof(buffer), file);// 处理buffer中的数据fclose(file);
      } else {perror("Error opening file");
      }
      
    • 这种方式允许程序直接跳转到文件的任意位置进行读写操作。
  2. 使用系统调用
    • 在Unix和Linux系统中,可以使用openread系统调用来实现更底层的直接访问。
    • 示例代码:
      int file = open("example.txt", O_RDONLY);
      if (file != -1) {char buffer[100];ssize_t bytes_read;lseek(file, 10, SEEK_SET); // 移动到文件开头后的第10个字节bytes_read = read(file, buffer, sizeof(buffer) - 1);if (bytes_read > 0) {buffer[bytes_read] = '\0';printf("%s", buffer);}close(file);
      } else {perror("Error opening file");
      }
      
    • 这种方式提供了更接近操作系统层面的文件访问控制。
      通过上述方法,可以在C语言中实现对磁盘的顺序访问和直接访问,以满足不同的文件处理需求。
      问题二:如何向函数传递二维数组,为什么不能省略列?
      解决方式:AI答:在C语言中,向函数传递二维数组需要使用指针。具体来说,你需要传递一个指向数组第一行的指针,或者更常见的是,传递一个指向指向第一行的指针的指针。这是因为在C语言中,二维数组在内存中是连续存储的,但它们在语法上被表示为数组的数组。

向函数传递二维数组

  1. 传递指向第一行的指针
    • 这通常用于行主序的数组,其中数组的行是连续存储的。
    • 示例:
      void process_array(int arr[][COLS], int rows) {// 函数体
      }
      
      调用:
      int array[ROWS][COLS];
      process_array(array, ROWS);
      
  2. 传递指向指向第一行的指针的指针
    • 这提供了更多的灵活性,允许函数修改数组的行指针。
    • 示例:
      void process_array(int **arr, int rows, int cols) {// 函数体
      }
      
      调用:
      int array[ROWS][COLS];
      process_array(array, ROWS, COLS);
      

为什么不能省略列

在C语言中,二维数组的列数不能省略,因为它对于数组的内存布局至关重要。以下是原因:

  1. 内存分配
    • 二维数组在内存中是连续存储的,每一行的大小必须相同。如果省略列数,编译器就无法确定每一行的大小,从而无法正确地分配内存。
  2. 数组访问
    • 当你访问二维数组的元素时,例如array[i][j],编译器需要知道每一行的大小来计算元素的地址。如果省略列数,编译器就无法计算元素的地址。
  3. 函数参数
    • 当你将二维数组作为参数传递给函数时,你需要指定每一行的大小,以便函数可以正确地访问数组元素。如果省略列数,函数就无法确定每一行的大小,从而无法正确地访问数组元素。
      因此,为了确保内存的正确分配和数组的正确访问,C语言要求在定义和使用二维数组时必须指定列数。

基于AI的学习

代码调试中的问题和解决过程

问题:实验要求查找学号并输出他的排名和成绩,但我使用二分法查找学号时需要先按学号排名,而输出他的成绩需要先按成绩排名。
解决过程:尝试通过函数和返回数组来解决问题多次后都没有成功,最终灵机一动,把查找的程序改了,不用二分法,改为挨个查找,for循环里面套了个if语句判断,这种查找方法不需要事先按学号排名,只需要先按成绩排名然后查找,最终成功运行。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 200/400 1/3 18/38
第三周 300/700 1/4 20/58
第四周 400/1100 1/5 22/80
第五周 300/1400 1/6 22/102
第六周 400/1800 1/7 25/127
第七周 400/2200 1/8 30/157
第八周 500/2700 1/9 35/192
第九周 500/3200 1/10 28/220

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/839943.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pta4~6总结blog

一、前言 本次blog是针对发布题目集4~6的总结。 1、题目集4,总有三题。 1)第一题是用继承完成校园角色类设计。主要内容:角色Role分两类:学生Student和雇员Employee;雇员又分为教员Faculty和职员Staff。只需设计好每个类的父子关系,每个类的属性和方法就可以完成。 2)第…

docker通过运行中的容器构建镜像

docker commit web1 httpd:v1 docker run -d --name web5 -p 85:80 httpd:v1

【小记】 Matplotlib 中设置自定义中文字体的正确姿势

麻麻再也不用担心我的 matplotlib 渲染不出中文字符了!本笔记还简要地从源码角度介绍了一下实现原理。最近做实验涉及到用 Matplotlib 绘制图表,我希望相同的代码能不仅在本地运行,且还能在 Google Colab, Binder 这些线上平台运行。 问题就来了,为了在各个平台上都能绘制中…

南昌航空大学-22207107-胡优乐-Java第二次Blog大作业

前言在这段时间里,我们总共进行了三次大作业练习,基于这三次大作业的体量及设计的知识点,难度分布,我做了以下的总结:1.第四次大作业总共有三道题,分别是:1.校园角色类设计-1;2.设计一个学生类和它的子类-本科生类;3.答题判断程序-4;实际做下来的体会是:(1)第一题难…

团队作业5——测试与发布

团队作业5——测试与发布这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 <作业要求>这个作业的目标 完成连续七天的项目冲刺GitHub 链接 https://github.com/tangliweiwww/ChatGpt团队 1.团队名称:Elegance 2.团队成员姓名 班级 学号唐立伟(组长) 计科…

Java中定时任务实现方式及源码剖析

概述 在企业级应用开发场景中,定时任务占据着至关重要的地位。比如以下这些场景:用户4个小时以内没有进行任何操作,就自动清除用户会话。 每天晚上凌晨自动拉取另一个业务系统的某部分数据。 每隔15分钟,自动执行一段逻辑,更新某部分数据。类似的场景会频繁出现在我们的日…

001 增肌锻炼

三分化https://www.bilibili.com/video/BV1mY411Y7FR 推拉腿休 推拉腿休...推力日:胸 肩 三头拉力日:背 二头每周同一部位练习2次动作:腹肌https://www.bilibili.com/video/BV1Vh4y197aD https://www.bilibili.com/video/BV1hd4y1f76Z 腹肌激活30S上腹拉伸来自为知笔记(Wiz)…

docker 存储卷实验

需求:创建1个myvolume1的空卷,将其挂载给web1的容器,挂载目录/usr/local/apache2/htdocs 运行两个web2 web3的容器,更新web2中容器内容为 This is a test! 通过宿主机访问web3查看输出内容。docker volume create myvolume1 docker run -d --name web2 -p 82:80 -v myvolum…

让何同学翻车的项目是什么来头?

‍ 背景 最近, B 站知名 UP 主何同学(1207 万粉丝)因涉嫌抄袭开源项目 ASCII generator​ 而引发争议。 视频《我用 36 万行备忘录做了个动画…》从 11 月 15 号发布,获得几百万播放,热度相当高。 他提到团队专门写了一个软件,但实际上该软件基于越南开发者 vietnh1009 在…

selenium模块,web自动化,元素定位

1. 元素定位 查看网页元素 右键-->检查from selenium.webdriver.common.by import By # 元素定位包# 使用 test.find_element(By.XXX) 1)定位元素ID--对应浏览器id# 定位一个元素 a = test.find_element(By.ID, value="wrapper") print(a) # 定位多个元素(返回列…

22207321-王郅坚-BLOG2

前言 这三次题目集涉及了不同的知识点、编程技巧及而算法逻辑,从简单的基础题目逐步过渡到复杂的业务逻辑模拟。三次题目集不仅是单单考核独立的编程任务,其实它们有明确的迭代关系,逐步递进并且不断添加复杂度。题目集1是针对前三次的题目再进行迭代升级,题目集2开始了一个…

ffmpeg 时基转换

1:av_q2d(AVRational a)函数av_q2d(AVRational);该函数负责把AVRational结构转换成double,通过这个函数可以计算出某一帧在视频中的时间位置 timestamp(秒) = pts * av_q2d(st->time_base); 计算视频长度的方法: time(秒) = st->duration * av_q2d(st->…