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

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

作业信息

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十二周作业
这个作业的目标 复习巩固前面所学的内容
作业正文 https://www.cnblogs.com/zhaoshaoning/p/18607774

教材学习内容总结

  1. 文件的基本概念
    • 在C语言中,文件是存储在外部介质(如磁盘)上的数据的集合。它可以是程序文件(包含源代码等),也可以是数据文件(用于存储程序运行时需要的数据)。
    • 文件通常被视为字节序列,C语言可以对这些字节进行读取、写入和其他操作。每个文件都有一个文件名,通过文件名来识别和访问文件。例如,在Windows系统中,文件名可能是“example.txt”,在Linux系统中也类似,但文件名的命名规则可能因操作系统而略有差异。
  2. 文件指针
    • 文件指针是C语言中操作文件的关键。它是一个指向FILE类型结构体的指针。FILE结构体包含了文件的各种信息,如文件的当前位置、缓冲区信息等。
    • 要使用文件,首先需要声明一个文件指针。例如:FILE *fp;,这里fp就是一个文件指针,它可以用来指向一个打开的文件。
    • 在C标准库中,<stdio.h>头文件包含了文件操作相关的函数和FILE结构体的定义。所以在进行文件操作之前,需要包含这个头文件。
  3. 文件的打开与关闭
    • 打开文件:使用fopen()函数来打开文件。它的基本形式是FILE *fopen(const char *filename, const char *mode);
      • filename是要打开的文件名,可以包含路径。例如,在Windows系统中,如果文件在当前目录下,文件名可以是“data.txt”;如果在其他目录下,可能是“C:\Users\user\Documents\data.txt”(注意反斜杠的转义)。在Linux系统中,路径格式可能是“/home/user/data.txt”。
      • mode是打开文件的模式,常见的模式有:
        • "r":以只读方式打开文件。如果文件不存在,fopen()函数会返回NULL
        • "w":以只写方式打开文件。如果文件存在,会清空文件内容;如果文件不存在,则创建新文件。
        • "a":以追加方式打开文件。如果文件存在,写入的数据会追加到文件末尾;如果文件不存在,则创建新文件。
        • "r +":以读/写方式打开文件,文件必须存在。
        • "w +":以读/写方式打开文件。如果文件存在,会清空文件内容;如果文件不存在,则创建新文件。
        • "a +":以读/写方式打开文件,写入的数据会追加到文件末尾。如果文件不存在,则创建新文件。
    • 关闭文件:使用fclose()函数来关闭文件。例如:fclose(fp);,其中fp是已经打开的文件指针。关闭文件是一个良好的编程习惯,它可以确保数据被正确地写入文件,并且释放与文件相关的资源。如果不关闭文件,可能会导致数据丢失或资源泄漏。
  4. 文件的读写操作
    • 字符读写
      • fgetc()函数用于从文件中读取一个字符。它的基本形式是int fgetc(FILE *stream);,其中stream是文件指针。例如:
        FILE *fp;
        char ch;
        fp = fopen("test.txt", "r");
        if(fp!= NULL)
        {ch = fgetc(fp);while(ch!= EOF){putchar(ch);ch = fgetc(fp);}fclose(fp);
        }
        
        上述代码打开一个名为“test.txt”的文件,然后使用fgetc()函数逐个字符地读取文件内容,并通过putchar()函数将字符输出到控制台,直到遇到文件结束标志EOF(End - Of - File)。
      • fputc()函数用于向文件中写入一个字符。它的基本形式是int fputc(int c, FILE *stream);,其中c是要写入的字符,stream是文件指针。例如:
        FILE *fp;
        char ch = 'A';
        fp = fopen("output.txt", "w");
        if(fp!= NULL)
        {fputc(ch, fp);fclose(fp);
        }
        
        这段代码打开一个名为“output.txt”的文件,然后使用fputc()函数将字符A写入文件,最后关闭文件。
    • 字符串读写
      • fgets()函数用于从文件中读取一个字符串。它的基本形式是char *fgets(char *s, int n, FILE *stream);,其中s是存储读取字符串的字符数组,n是最多读取的字符数(包括字符串结束符'\0'),stream是文件指针。例如:
        FILE *fp;
        char str[100];
        fp = fopen("test.txt", "r");
        if(fp!= NULL)
        {fgets(str, 100, fp);printf("%s", str);fclose(fp);
        }
        
        此代码从“test.txt”文件中读取最多99个字符(加上'\0'共100个字符)存储到str数组中,并将其输出到控制台。
      • fputs()函数用于向文件中写入一个字符串。它的基本形式是int fputs(const char *s, FILE *stream);,其中s是要写入的字符串,stream是文件指针。例如:
        FILE *fp;
        char str[] = "Hello, World!";
        fp = fopen("output.txt", "w");
        if(fp!= NULL)
        {fputs(str, fp);fclose(fp);
        }
        
        代码将字符串“Hello, World!”写入名为“output.txt”的文件中。
    • 格式化读写
      • fscanf()函数用于从文件中按照指定格式读取数据。它的基本形式是int fscanf(FILE *stream, const char *format,...);,与scanf()函数类似,但是它从文件而不是标准输入读取数据。例如:
        FILE *fp;
        int num;
        fp = fopen("data.txt", "r");
        if(fp!= NULL)
        {fscanf(fp, "%d", &num);printf("The number read from file is %d\n", num);fclose(fp);
        }
        
        这段代码从“data.txt”文件中读取一个整数存储到num变量中,并将其输出。
      • fprintf()函数用于向文件中按照指定格式写入数据。它的基本形式是int fprintf(FILE *stream, const char *format,...);,与printf()函数类似,但是它向文件而不是标准输出写入数据。例如:
        FILE *fp;
        int num = 10;
        fp = fopen("output.txt", "w");
        if(fp!= NULL)
        {fprintf(fp, "The number is %d", num);fclose(fp);
        }
        
        此代码将包含整数num值的字符串写入名为“output.txt”的文件中。
  5. 文件的定位操作
    • ftell()函数用于获取文件指针的当前位置。它的基本形式是long ftell(FILE *stream);,返回值是从文件开头到文件指针当前位置的字节数。例如:
      FILE *fp;
      long position;
      fp = fopen("test.txt", "r");
      if(fp!= NULL)
      {// 读取一些数据或者进行其他操作position = ftell(fp);printf("The current position of the file pointer is %ld\n", position);fclose(fp);
      }
      
    • fseek()函数用于设置文件指针的位置。它的基本形式是int fseek(FILE *stream, long offset, int whence);
      • offset是偏移量,whence是起始位置,whence可以有以下几种取值:
        • SEEK_SET:文件开头,偏移量是从文件开头开始计算。
        • SEEK_CUR:文件当前位置,偏移量是从文件指针当前位置开始计算。
        • SEEK_END:文件末尾,偏移量是从文件末尾开始计算(偏移量为负数时表示向文件开头方向移动)。例如:
          FILE *fp;
          fp = fopen("test.txt", "r");
          if(fp!= NULL)
          {fseek(fp, 5, SEEK_SET);// 从文件开头偏移5个字节后的位置开始读取或操作fclose(fp);
          }
          
    • rewind()函数用于将文件指针重新定位到文件开头。它的基本形式是void rewind(FILE *stream);。例如:
      FILE *fp;
      fp = fopen("test.txt", "r");
      if(fp!= NULL)
      {// 进行一些操作rewind(fp);// 重新从文件开头开始操作fclose(fp);
      }
      

教材学习中的问题和解决过程(先问 AI)

  • 问题1:在打开文件时应该怎样选择打开文件的方式,如只读、只写等?
  • 问题1解决方案:
  1. 只读方式("r")的选择情况

    • 当你的程序只需要从文件中获取信息,而不会对文件内容进行修改时,应该选择只读方式打开文件。例如,读取配置文件、读取文本内容用于显示或分析等场景。
    • 假设你有一个程序,它需要读取一个包含用户设置选项(如字体大小、颜色主题等)的配置文件config.ini。这个程序只需要获取这些设置信息来初始化界面,而不会改变配置文件的内容。此时就可以使用"r"模式打开文件,代码如下:
    FILE *fp;
    fp = fopen("config.ini", "r");
    if(fp == NULL)
    {// 处理文件打开失败的情况,比如打印错误信息并退出程序perror("Error opening file");return 1;
    }
    // 在这里使用fgetc、fgets、fscanf等函数读取文件内容
    fclose(fp);
    
    • 这种方式可以确保文件内容的完整性,因为程序没有权限修改文件内容。如果文件不存在,使用"r"模式打开时,fopen函数会返回NULL,所以在实际应用中需要检查文件是否成功打开。
  2. 只写方式("w")的选择情况

    • 当你需要创建一个新文件或者清空一个已存在文件的内容,并向其中写入数据时,选择只写方式。例如,生成一个新的日志文件来记录程序运行信息,或者创建一个新的数据文件来存储用户输入的数据等场景。
    • 比如,你要创建一个日志文件program.log来记录程序每次运行的时间和状态信息。每次程序运行时,都希望清空旧的日志内容并开始新的记录,就可以使用"w"模式打开文件,代码如下:
    FILE *fp;
    fp = fopen("program.log", "w");
    if(fp == NULL)
    {perror("Error opening file");return 1;
    }
    // 使用fprintf等函数写入日志信息,如记录程序启动时间
    time_t now;
    time(&now);
    fprintf(fp, "Program started at %s", ctime(&now));
    fclose(fp);
    
    • 注意,如果文件已经存在,使用"w"模式打开会清空文件中原有的内容。如果文件不存在,fopen函数会创建一个新的文件。
  3. 追加方式("a")的选择情况

    • 当你希望在文件末尾添加新的数据,而不影响文件中已有的内容时,使用追加方式。例如,记录程序的运行历史记录,每次程序运行添加新的一行记录;或者收集用户的操作日志,不断在日志文件末尾添加新的操作记录等场景。
    • 假设你有一个简单的计数器程序,每次运行时,它要将当前的运行次数追加到一个文件count.txt中。代码如下:
    FILE *fp;
    int count = 1;  // 假设这是第1次运行,实际可以从文件读取之前的计数并加1
    fp = fopen("count.txt", "a");
    if(fp == NULL)
    {perror("Error opening file");return 1;
    }
    fprintf(fp, "Run %d\n", count);
    fclose(fp);
    
    • 使用"a"模式打开文件时,如果文件不存在,fopen函数会创建一个新文件;如果文件存在,则将写入的数据追加到文件的末尾。
  4. 读写方式("r +""w +""a +")的选择情况

    • "r +"模式
      • 当你需要读取和修改一个已经存在的文件内容时可以选择"r +"模式。例如,你有一个文本文件,里面存储了一些学生的成绩信息,你需要读取这些成绩进行分析,并且可能会修改某些成绩的值。
      • 但是要注意,使用"r +"模式打开文件时,文件必须已经存在,否则fopen函数会返回NULL
    • "w +"模式
      • 这种模式类似于"w"模式和"r"模式的结合。它会创建一个新文件或者清空已有文件内容,同时允许你对文件进行读写操作。例如,你要创建一个临时的数据文件,先写入一些初始数据,然后再读取这些数据进行处理。不过这种模式在实际应用中要谨慎使用,因为很容易不小心清空文件内容。
    • "a +"模式
      • 它允许你在文件末尾进行追加写入操作,同时也能读取文件内容。不过读取操作可能会受到文件指针位置的影响。例如,在追加一些数据后,如果你想读取文件开头的内容,可能需要先将文件指针移动到文件开头(使用rewindfseek函数)。这种模式适用于需要在记录新数据的同时,也可能需要查看之前记录的数据的情况,比如在更新日志文件的同时,也可以查看之前的日志记录。

基于AI的学习



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

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

相关文章

Python序列的应用(九):集合以及列表、元组、字典和集合的区别

前言: 一、集合 Python 中的集合同数学中的集合概念类似,也是用于保存不重复元素的。它有可变集合(set)和不可变集合(fozenset)两种。本节所要介绍的可变集合是无序可变序列,而不可变集合在本书中不做介绍。在形式上,集合的所有元素都放在一对{}中,两个相邻元素间使用,分…

jQuery鼠标拖动旋转DOM元素插件

Propeller.js是一款jQuery鼠标拖动旋转DOM元素插件。通过该插件,可以使用鼠标拖动旋转页面中的任意DOM元素。使用方法 通过npm安装插件。npm install Propeller HTML结构 例如要拖动旋转一张图片。<img src="demo.jpg" id="img"> 初始化插件 作为jq…

js消息通知框、对话框、确认框和Loading插件

Notiflix是一款js消息通知框、对话框、确认框和Loading插件。Notiflix通过简单的设置,就可生成非常漂亮的s消息通知框、对话框、确认框和Loading效果。在线预览 下载使用方法 在页面中引入下面的文件。<link rel="stylesheet" href="css/notiflix-1.3.0.mi…

人工智能大语言模型起源篇,低秩微调(LoRA)

上一篇: 《规模法则(Scaling Law)与参数效率的提高》 序言:您在找工作时会不会经常听到LoRA微调,这项技术的来源就是这里了。 (12)Hu、Shen、Wallis、Allen-Zhu、Li、L Wang、S Wang 和 Chen 于2021年发表的《LoRA: Low-Rank Adaptation of Large Language Models》,htt…

群晖Lets Encrypt证书申请

注意本文时效性:2024.9.23 引言 为了保证SSL证书的权威性和安全性,Lets Encrypt 会验证您对域名的控制权。 申请 Lets Encrypt 证书有以下的验证控制权的方式:Web验证:通过在http的有权威的目录下创建一个验证文件以验证对服务器的控制权 Dns验证:通过在 DNS Record 中添加…

《计算机基础与程序设计》第十二周学习总结

学期(如2024-2025-1) 学号(如:20241300) 《计算机基础与程序设计》第十二周学习总结 作业信息这个作业属于哪个课程 <班级的链接> 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 <作业要求的链接> 2024-2025-1计算机基础与程序设计第十二周作业)这个作…

读数据保护:工作负载的可恢复性14备份和恢复数据库

备份和恢复数据库1. 给采用传统方式交付的数据库制作备份 1.1. 某个数据库是新还是旧,跟该数据库是不是传统数据库没有必然的联系,真正的决定因素在于,这个数据库是不是运行在你所管理的服务器或虚拟机里1.1.1. 如果是,那就可以归入按照传统模型来交付的数据库1.1.2. 如果不…

2024北京多校联训游记

乡下人进城——开了眼了Day \(-\infty\) NOIP考的十分炸裂,一道题都没做出来,结果下来 \(40min\) 就切掉了第 \(2\) 题???这时 \(hfu\) 通知有意向的同学可以去参加在北京的多校联训。经过一番思想斗争后,还是决定去参加一下,毕竟技多不压身,且基础知识也整理的差不多了…

[CSP2020-J4] 直播获奖

题面 题目描述 NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为 $w%$,即当前排名前 $w%$ 的选手的最低成绩就是即时的分数线。 更具体地,若当前已评出了 $p$ 个选手的成绩,则当前计划获奖人数为 $\max(1, \…

LLM大模型推理优化示例分析

Large Transformer Model Inference Optimization 人工智能芯片与自动驾驶

遥感全景锐化的内容自适应非局部卷积

遥感全景锐化的内容自适应非局部卷积目前,基于机器学习的遥感泛变方法发展迅速。然而,现有的pansharpening方法往往没有充分利用非局部空间中的区分区域信息,从而限制了方法的有效性,并导致冗余的学习参数。介绍了一种所谓的内容自适应非局部卷积(CANConv),这是一种专为…

渗透测试-前端加密分析之AES

本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AES(CBC) 和 AES(ECB) 加密。前言 本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AE…