2024-2025-1 20241316 《计算机基础与程序设计》第十四周学习总结
作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2024-2025-1计算机基础与程序设计第十四周作业 |
这个作业的目标 | 《C语言程序设计》第13-14章并完成云班课测试 |
作业正文 | https://www.cnblogs.com/bml128/p/18634828 |
教材学习内容总结
第 13 章 文件操作
- 文件概述
- 文件概念:文件是存储在外部介质(如硬盘、U盘 等)上的数据集合,在 C 语言中,文件被看作是一个字符(字节)的序列,即流式文件。
- 文件分类:分为文本文件和二进制文件。文本文件以字符的 ASCII 码形式存储,每个字符占一个字节;二进制文件则以数据在内存中的存储形式原样输出到文件,数据存储紧凑,节省空间,适合存储数值数据。
- 文件指针
- 定义:是一个指向 FILE 类型结构体的指针变量,用于标识和操作文件。
FILE *fp;
声明一个文件指针变量fp
。 - 作用:通过文件指针,程序可以对相应的文件进行打开、读取、写入、关闭等操作。每个被使用的文件都在内存中开辟一个相应的 FILE 结构体区域,存放文件的有关信息(如文件当前读写位置、文件状态标志等),文件指针指向该结构体区域。
- 定义:是一个指向 FILE 类型结构体的指针变量,用于标识和操作文件。
- 文件的打开与关闭
- 打开文件:使用
fopen
函数,其原型为FILE *fopen(const char *filename, const char *mode);
。filename
是要打开的文件名,mode
是打开文件的方式(如"r"
只读、"w"
只写、"a"
追加等)。若打开成功,返回一个指向该文件的文件指针;否则返回NULL
。 - 关闭文件:调用
fclose
函数,int fclose(FILE *fp);
。关闭文件能确保数据被正确写入存储设备,释放文件指针等资源。成功关闭返回 0,否则返回EOF
。
- 打开文件:使用
- 文件的读写操作
- 字符读写函数:
fgetc
从文件中读取一个字符,int fgetc(FILE *fp);
,返回读取的字符,若到达文件末尾或出错则返回EOF
。fputc
向文件中写入一个字符,int fputc(int c, FILE *fp);
,成功写入返回写入的字符,否则返回EOF
。 - 字符串读写函数:
fgets
从文件中读取一个字符串,char *fgets(char *str, int n, FILE *fp);
,str
为存放读取字符串的数组,n
为读取的最大字符数(包括字符串结束符'\0'
)。fputs
向文件中写入一个字符串,int fputs(const char *str, FILE *fp);
,成功返回非负整数,失败返回EOF
。 - 格式化读写函数:
fscanf
从文件中按指定格式读取数据,int fscanf(FILE *fp, const char *format,...);
,format
为格式控制字符串,与scanf
类似,但从文件中读取数据。fprintf
按指定格式向文件中写入数据,int fprintf(FILE *fp, const char *format,...);
。 - 数据块读写函数:
fread
从文件中读取数据块,size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
,ptr
为存放数据的内存地址,size
为每个数据项的大小(字节数),nmemb
为数据项的个数。fwrite
向文件中写入数据块,size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp);
。常用于读写结构体等数据块。
- 字符读写函数:
- 文件的定位
- 文件位置指针:每个文件都有一个文件位置指针,指向当前读写位置。顺序读写时,文件位置指针自动移动;随机读写时,需手动移动文件位置指针。
- 定位函数:
fseek
用于移动文件位置指针,int fseek(FILE *fp, long offset, int origin);
,offset
为偏移量,origin
为起始点(SEEK_SET
文件开头、SEEK_CUR
当前位置、SEEK_END
文件末尾)。ftell
用于获取文件位置指针当前位置,long ftell(FILE *fp);
,返回当前位置相对于文件开头的字节数,出错返回-1L
。rewind
用于将文件位置指针重新定位到文件开头,void rewind(FILE *fp);
。
第 14 章 预处理命令
- 预处理概述
- 概念:C 语言预处理是在编译之前对源程序进行的处理,由预处理程序完成。预处理命令以
#
开头,如#include
、#define
等。预处理命令不是 C 语言本身的组成部分,但扩展了 C 语言的编程环境和功能。
- 概念:C 语言预处理是在编译之前对源程序进行的处理,由预处理程序完成。预处理命令以
- 宏定义
- 无参数宏定义:使用
#define
定义一个标识符来代表一个字符串(宏名和宏体)。例如,#define PI 3.14159
,此后在程序中出现PI
的地方,预处理器都会将其替换为3.14159
。宏定义提高了程序的可读性和可维护性,方便修改常量值。 - 有参数宏定义:形式为
#define 宏名(参数表) 宏体
,例如#define MAX(a, b) ((a) > (b)? (a) : (b))
。使用时像函数调用一样,传入参数,预处理器会将宏体中的参数替换为实际参数并展开。与函数不同,宏展开是在编译前进行文本替换,不进行参数类型检查,执行效率高,但可能导致代码膨胀。
- 无参数宏定义:使用
- 文件包含
- 概念:使用
#include
命令将另一个源文件的内容包含到当前源文件中。有两种形式:#include <文件名>
用于包含系统头文件,预处理器会在系统指定的目录中查找该文件;#include "文件名"
用于包含用户自定义的头文件,预处理器先在当前目录中查找,若找不到再到系统指定目录查找。 - 作用:避免重复编写相同代码,方便模块化编程。例如,将一些常用的函数声明、结构体定义等放在头文件中,其他源文件通过
#include
包含该头文件即可使用其中的内容。
- 概念:使用
- 条件编译
- 概念:通过条件编译命令,使程序在不同条件下编译不同的代码部分。这样可以方便地对程序进行调试、移植或针对不同环境生成不同版本的可执行文件。
- 常见条件编译命令:
#ifdef
:如果指定的宏已定义,则编译后续代码,直到遇到#endif
或#else
。例如:
#ifdef DEBUG
printf("Debugging information\n");
#endif
- `#ifndef`:与 `#ifdef` 相反,如果指定的宏未定义,则编译后续代码。
- `#if`:根据常量表达式的值决定是否编译后续代码。例如:
#define VERSION 2
#if VERSION == 1
// 版本 1 的代码
#elif VERSION == 2
// 版本 2 的代码
#else
// 其他版本的代码
#endif
标签:fp,文件,int,2024,2025,FILE,20241316,size,指针
From: https://www.cnblogs.com/bml128/p/18634828