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

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

作业信息

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十四周作业
这个作业的目标 《C语言程序设计》第13-14章并完成云班课测试
作业正文 https://www.cnblogs.com/bml128/p/18634828

教材学习内容总结

第 13 章 文件操作

  1. 文件概述
    • 文件概念:文件是存储在外部介质(如硬盘、U盘 等)上的数据集合,在 C 语言中,文件被看作是一个字符(字节)的序列,即流式文件。
    • 文件分类:分为文本文件和二进制文件。文本文件以字符的 ASCII 码形式存储,每个字符占一个字节;二进制文件则以数据在内存中的存储形式原样输出到文件,数据存储紧凑,节省空间,适合存储数值数据。
  2. 文件指针
    • 定义:是一个指向 FILE 类型结构体的指针变量,用于标识和操作文件。FILE *fp;声明一个文件指针变量 fp
    • 作用:通过文件指针,程序可以对相应的文件进行打开、读取、写入、关闭等操作。每个被使用的文件都在内存中开辟一个相应的 FILE 结构体区域,存放文件的有关信息(如文件当前读写位置、文件状态标志等),文件指针指向该结构体区域。
  3. 文件的打开与关闭
    • 打开文件:使用 fopen 函数,其原型为 FILE *fopen(const char *filename, const char *mode);filename 是要打开的文件名,mode 是打开文件的方式(如 "r" 只读、"w" 只写、"a" 追加等)。若打开成功,返回一个指向该文件的文件指针;否则返回 NULL
    • 关闭文件:调用 fclose 函数,int fclose(FILE *fp);。关闭文件能确保数据被正确写入存储设备,释放文件指针等资源。成功关闭返回 0,否则返回 EOF
  4. 文件的读写操作
    • 字符读写函数fgetc 从文件中读取一个字符,int fgetc(FILE *fp);,返回读取的字符,若到达文件末尾或出错则返回 EOFfputc 向文件中写入一个字符,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);。常用于读写结构体等数据块。
  5. 文件的定位
    • 文件位置指针:每个文件都有一个文件位置指针,指向当前读写位置。顺序读写时,文件位置指针自动移动;随机读写时,需手动移动文件位置指针。
    • 定位函数fseek 用于移动文件位置指针,int fseek(FILE *fp, long offset, int origin);offset 为偏移量,origin 为起始点(SEEK_SET 文件开头、SEEK_CUR 当前位置、SEEK_END 文件末尾)。ftell 用于获取文件位置指针当前位置,long ftell(FILE *fp);,返回当前位置相对于文件开头的字节数,出错返回 -1Lrewind 用于将文件位置指针重新定位到文件开头,void rewind(FILE *fp);

第 14 章 预处理命令

  1. 预处理概述
    • 概念:C 语言预处理是在编译之前对源程序进行的处理,由预处理程序完成。预处理命令以 # 开头,如 #include#define 等。预处理命令不是 C 语言本身的组成部分,但扩展了 C 语言的编程环境和功能。
  2. 宏定义
    • 无参数宏定义:使用 #define 定义一个标识符来代表一个字符串(宏名和宏体)。例如,#define PI 3.14159,此后在程序中出现 PI 的地方,预处理器都会将其替换为 3.14159。宏定义提高了程序的可读性和可维护性,方便修改常量值。
    • 有参数宏定义:形式为 #define 宏名(参数表) 宏体,例如 #define MAX(a, b) ((a) > (b)? (a) : (b))。使用时像函数调用一样,传入参数,预处理器会将宏体中的参数替换为实际参数并展开。与函数不同,宏展开是在编译前进行文本替换,不进行参数类型检查,执行效率高,但可能导致代码膨胀。
  3. 文件包含
    • 概念:使用 #include 命令将另一个源文件的内容包含到当前源文件中。有两种形式:#include <文件名> 用于包含系统头文件,预处理器会在系统指定的目录中查找该文件;#include "文件名" 用于包含用户自定义的头文件,预处理器先在当前目录中查找,若找不到再到系统指定目录查找。
    • 作用:避免重复编写相同代码,方便模块化编程。例如,将一些常用的函数声明、结构体定义等放在头文件中,其他源文件通过 #include 包含该头文件即可使用其中的内容。
  4. 条件编译
    • 概念:通过条件编译命令,使程序在不同条件下编译不同的代码部分。这样可以方便地对程序进行调试、移植或针对不同环境生成不同版本的可执行文件。
    • 常见条件编译命令
      • #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
posted @ 2024-12-27 10:07  李恩徽  阅读(5)  评论(0编辑  收藏  举报