学期2024-2025-1学号20241416《计算机基础与程序设计》第十四周学习总结

作业信息
这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)
这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)
这个作业的目标 <写上具体方面>
作业正文 https://www.cnblogs.com/rockytyh/p/18639644
教材学习内容总结
C 语言程序设计第十三章总结
第十三章聚焦于 C 语言中至关重要的文件操作相关知识,为 C 程序与外部存储的数据交互提供了有力支撑。

一、文件基础认知
文件概念:
文件是存储在外部介质(如硬盘、U盘 等)上数据的有序集合。它是程序与外部世界进行数据交换的重要手段,使得数据能够持久保存,而非仅在程序运行期间存在于内存中。
分为文本文件和二进制文件。文本文件以 ASCII 码字符形式存储数据,每行以换行符‘\n’结尾,人眼可直接阅读其内容;二进制文件则按照数据在内存中的二进制存储形式原样保存,对于非字符数据(如整数、浮点数的二进制表示)存储更为紧凑、高效,但直接查看内容通常是乱码形式。
文件指针:
核心工具是 FILE * 类型的指针,它如同指向文件的“导航标”。声明方式如 FILE *fp;,通过这个指针,程序可以精准定位到文件内部的各个位置,实现数据的读写操作。不同的文件操作函数都依赖文件指针来指定操作对象。
二、文件打开与关闭
打开文件:
使用 fopen 函数,语法为 fp = fopen("文件名", "打开模式");。文件名需包含完整路径(若为相对路径,则相对于当前程序运行目录),打开模式决定了对文件的操作权限及方式。例如:
“r”:只读模式,用于打开已存在的文本文件,若文件不存在则打开失败;
“w”:只写模式,若指定文件不存在则创建新文件,若存在则清空文件原有内容;
“a”:追加模式,在已有文件末尾添加新数据,文件不存在时同样会创建。
对于二进制文件,模式字符后添加“b”,如“rb”“wb”“ab”,以表明处理二进制数据。
关闭文件:
务必使用 fclose(fp); 关闭文件。这一步骤至关重要,它不仅能确保写入的数据完整保存到文件中,还能释放系统为文件操作分配的相关资源,避免资源泄露。若程序打开多个文件未正确关闭,可能导致系统资源耗尽,影响程序及系统的稳定运行。
三、文件读写操作
按字符读写:
fgetc 函数从文件指针指向的文件中读取一个字符,语法为 ch = fgetc(fp);,它返回读取到的字符(以整数形式返回,可通过强制类型转换为字符型),若遇到文件末尾则返回特殊值 EOF(End Of File,在 stdio.h 中定义,通常值为 -1)。
fputc 函数用于向文件写入一个字符,如 fputc(ch, fp);,将字符 ch 写入 fp 指向的文件。常用于逐个字符处理文本文件,比如复制文件内容时,可按字符依次读取源文件并写入目标文件。
按字符串读写:
fgets 函数能从文件读取一行字符串,语法为 fgets(str, n, fp);,其中 str 是存储字符串的字符数组,n 是最多读取的字符数(包含‘\0’),它会读取到换行符‘\n’或读完 n - 1 个字符为止,读取的内容包含换行符(若有)并在末尾添加‘\0’。
fputs 函数将字符串写入文件,如 fputs(str, fp);,把字符数组 str 中的字符串(不包含‘\0’自动添加)写入 fp 指向的文件,常用于批量写入文本行。
格式化读写:
类似于标准输入输出的 scanf 和 printf,fscanf 和 fprintf 针对文件进行格式化读写。fscanf(fp, "格式控制字符串", 地址列表); 按照指定格式从文件读取数据并存入相应变量地址,fprintf(fp, "格式控制字符串", 表达式列表); 则将数据按格式写入文件。例如,从文件读取整数和字符串:fscanf(fp, "%d %s", &num, str);,向文件写入学生成绩信息:fprintf(fp, "学号:%s,成绩:%d\n", stu_id, score);,这对于处理结构化数据文件极为便利。
四、文件随机读写
移动文件指针:
fseek 函数实现文件指针的定位移动,语法为 fseek(fp, offset, origin);,其中 fp 是文件指针,offset 是偏移量(以字节为单位,正数向前、负数向后移动),origin 是起始位置,有以下常量指定:
SEEK_SET:文件开头,偏移量从文件起始处计算;
SEEK_CUR:当前位置,基于当前文件指针位置偏移;
SEEK_END:文件末尾,常用于从文件末尾往前定位。例如,要跳转到文件第 10 个字节处:fseek(fp, 10, SEEK_SET);。
获取文件指针位置:
ftell 函数返回文件指针当前相对于文件开头的偏移字节数,如 pos = ftell(fp);,常用于记录当前读写位置,以便后续操作回溯或判断文件处理进度。
通过对第十三章的学习,掌握文件操作技能后,C 程序能够实现诸如数据的长期存储备份、配置文件的读取与更新、复杂数据结构的文件化存储与读取等功能,大幅拓宽了 C 语言编程的应用场景,为开发实用、强大的软件奠定基础。

如果你对于总结中的知识点还有想要细化或者拓展的部分,随时告诉我,我来继续完善。
通过 AI 工具总结一下内容,自己再补充
通过思维导图形成知识体系
看懂就过,看不懂,学习有心得的记一下

教材学习中的问题和解决过程(先问 AI)
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )

问题1:文件指针的作用是什么?
答案1: 定位文件位置
文件指针就像一个“书签”,它能够指出在文件中的具体位置。当打开一个文件后,文件指针初始时通常指向文件的开头。通过移动文件指针,可以在文件的不同位置进行读写操作。例如,在顺序读取一个文件时,文件指针会随着读取操作逐步向后移动,每次读取一个字符、一行字符串或者按照某种格式读取数据后,指针都会移动到下一个待读取的位置。
可以使用fseek函数来手动调整文件指针的位置。比如,有一个存储学生成绩的文件,文件格式为每个学生的信息占一行,包括姓名、学号和成绩。如果想要修改某个特定学生的成绩,就可以先通过一定的方式(如逐行读取并匹配学号)找到对应的行,然后使用fseek函数将文件指针定位到该行成绩数据的起始位置,再进行修改。
关联文件操作函数与文件实体
文件指针是C语言文件操作函数与实际文件之间的纽带。所有的文件读写操作函数(如fgetc、fputc、fgets、fputs、fscanf和fprintf等)都需要通过文件指针来确定操作的对象是哪一个文件。
例如,在程序中可能同时打开了多个文件,一个用于读取配置信息,一个用于记录日志。这时候就需要不同的文件指针来区分这些文件。假设有FILE *fp_config和FILE *fp_log两个文件指针,fp_config指向配置文件,fp_log指向日志文件。当使用fgets函数读取配置文件内容时,就会写成fgets(buffer, size, fp_config),而当需要将日志信息写入日志文件时,就会使用fputs(log_message, fp_log),这样就能够保证各个文件操作函数准确地作用于相应的文件。
方便文件的管理和操作流程控制
在复杂的文件处理场景中,文件指针可以帮助控制文件操作的流程。比如,在处理一个大型文件时,可以通过保存文件指针的位置来实现文件部分内容的重复读取或写入。
假设要对一个文本文件进行加密处理,在加密过程中,可能需要先读取一部分内容进行加密,然后将加密后的内容写回文件。这时可以先记录文件指针的初始位置,加密完一部分内容后,将文件指针移回初始位置,然后进行写回操作,从而保证文件内容的正确更新。同时,通过判断文件指针是否到达文件末尾(如通过fgetc返回EOF来判断),可以控制循环读取文件的过程,避免出现超出文件范围的错误操作。
问题2:文件的优势与弊端?
答案2:C语言中文件操作的优势与弊端
C语言作为一种历史悠久且广泛应用的编程语言,其文件操作功能具有多方面的优势,但在某些方面也存在一定的局限性。以下是基于给定搜索结果的详细分析。

优势
系统底层操作
C语言提供了对文件系统的低级访问,允许程序员直接与磁盘上的数据进行交互。这使得C语言在处理文件时具有较高的性能和灵活性。

节省内存
C语言中的文件操作通常不会引入额外的内存开销,因为它们直接与操作系统进行交互。这意味着使用C语言进行文件操作可以更有效地利用系统资源。

高性能
由于C语言提供了对文件系统的低级访问,因此它可以在处理大量数据时实现较高的性能。这对于需要处理大量数据的应用程序(如数据库、图像处理等)非常有用。

可移植性
C语言是一种跨平台编程语言,可以在多种操作系统上运行。这意味着使用C语言编写的文件操作代码可以在不同的平台上轻松移植,而无需进行大量修改。

灵活性
C语言提供了丰富的文件操作函数库,包括文件的打开、关闭、读取、写入、删除、重命名等。这使得程序员可以根据自己的需求灵活地实现各种文件操作。

易于集成
C语言的文件操作函数库通常与其他系统库(如内存管理、字符串处理等)紧密集成,使得程序员可以方便地将文件操作与其他功能结合在一起。

弊端
尽管C语言的文件操作具有上述诸多优势,但它也存在一些潜在的弊端:

缺乏面向对象特性
C语言不是面向对象的语言,缺乏面向对象编程(OOP)的功能,如构造函数和析构函数。这意味着在C语言中,你必须通过其他方式来手动实现变量的析构和构造。

缺乏运行时类型检查
C语言没有规定运行时类型检查,可能会导致数据类型错误而不报错。例如,传递浮点值而接收参数为整数类型时,值可能会被改变,但不会给出任何类型的错误信息。

缺乏命名空间功能
C语言不提供命名空间功能,因此不能在一个范围内再次使用相同的变量名。这可能导致命名冲突和难以维护的代码。

文件操作的复杂性
虽然C语言提供了丰富的文件操作函数,但这些函数的使用相对复杂,需要仔细管理文件指针和错误处理,增加了编程难度。

性能瓶颈
在某些情况下,频繁的文件操作可能会导致性能瓶颈。例如,每次文件操作都需要调用操作系统,这会导致性能损失。因此,需要采取措施如使用缓冲区、内存映射文件等来提高效率。

综上所述,C语言的文件操作在性能、灵活性和可移植性方面具有显著优势,但在现代软件开发的需求下,其缺乏面向对象特性和复杂的文件操作管理也可能成为限制因素。开发者在使用C语言进行文件操作时,应权衡这些优势与弊端,合理设计和优化代码。

posted @ 2024-12-29 21:57  田瑜浩  阅读(4)  评论(0编辑  收藏  举报