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

作业信息

作业归属课程:2024-2025-1-计算机基础与程序设计
作业要求:2024-2025-1计算机基础与程序设计第十四周作业
作业目标:《C语言程序设计》第13-14章
作业正文:2024-2025-1 20241329 《计算机基础与程序设计》第十四周学习总结

教材学习内容总结

《C语言程序设计》第13章

  1. 二进制文件和文本文件
  • 概念

    • 文本文件:文本文件是一种字符流文件,它的内容是由字符组成的。在文本文件中,每个字符以ASCII码或其他字符编码的形式存储。例如,数字字符'1'在文本文件中存储的是其ASCII码值(十进制为49)。文本文件便于人类阅读和编辑,通常可以用文本编辑器直接打开查看内容。
    • 二进制文件:二进制文件是按照数据在内存中的存储形式原样存储的文件。它可以存储各种类型的数据,如整数、浮点数、结构体等,以二进制形式存储的数据更加紧凑,占用空间可能更小,但对于人类来说通常是不可读的,需要特定的程序来解析其内容。
  • 存储方式对比

    • 对于整数1234,在文本文件中,它会被存储为字符'1'、'2'、'3'、'4'对应的ASCII码值,占用4个字节(假设ASCII编码);而在二进制文件中,如果是32位整数,它会按照整数的二进制表示存储,占用4个字节,存储的是二进制数据00000100 11010010 00000011 00000001(假设采用小端序存储)。
  1. 文件的打开和关闭
  • 文件打开函数fopen

    • 语法FILE *fp; fp = fopen("文件名","文件打开方式");。如,FILE *fp; fp = fopen("test.txt","r");以只读方式打开名为test.txt的文件。
    • 文件打开方式
      • r(只读):用于打开文本文件进行读取操作。如果文件不存在,打开操作会失败。
      • w(只写):用于打开文本文件进行写入操作。如果文件不存在,则创建一个新文件;如果文件存在,则清空文件内容。
      • a(追加):用于打开文本文件进行追加写入操作。如果文件不存在,则创建一个新文件;如果文件存在,则在文件末尾添加内容。
      • rbwbab:分别用于二进制文件的只读、只写、追加操作。
      • r +w +a +:用于读写操作,r +打开文件用于读写,文件必须存在;w +创建新文件用于读写或清空现有文件用于读写;a +打开文件用于读写,在文件末尾追加写入。对应的二进制文件读写方式为rb +wb +ab +
    • 该函数返回一个指向FILE结构的指针,打开文件失败则返回NULL
  • 文件关闭函数fclose

    • 语法fclose(fp);,其中fp是文件指针。例如,如果已经打开了一个文件指针fp,使用fclose(fp);来关闭文件。关闭文件非常重要,它可以释放文件资源,避免数据丢失等问题。如果不关闭文件,可能会导致缓冲区数据未写入文件,并且会占用系统资源。
  1. 按字符读写文件
  • 字符读取函数fgetc
    • 语法int c; c = fgetc(fp);,其中fp是文件指针。它从指定的文件中读取一个字符,并返回读取到的字符的ASCII码值。如果遇到文件末尾,返回EOFEOF是一个在<stdio.h>中定义的常量,通常值为 - 1)。如,可以用以下代码读取一个文本文件的内容并输出到控制台:
#include <stdio.h>
int main()
{
    FILE *fp;
    int c;
    fp = fopen("test.txt","r");
    if(fp == NULL)
    {
        perror("打开文件失败");
        return 1;
    }
    while((c = fgetc(fp))!= EOF)
    {
        putchar(c);
    }
    fclose(fp);
    return 0;
}
  • 字符写入函数fputc
    • 语法fputc(int c, FILE *fp);,其中c是要写入的字符(以ASCII码值形式),fp是文件指针。如,以下代码将字符串Hello写入一个文本文件:
#include <stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt","w");
    if(fp == NULL)
    {
        perror("打开文件失败");
        return 1;
    }
    fputc('H',fp);
    fputc('e',fp);
    fputc('l',fp);
    fputc('l',fp);
    fputc('o',fp);
    fclose(fp);
    return 0;
}
  1. 按格式读写文件
  • 格式化读取函数fscanf
    • 语法fscanf(fp,"格式控制字符串",变量地址列表);,其中fp是文件指针。它从文件中按照指定的格式读取数据并存储到对应的变量中。如,文件data.txt中存储了两个整数10 20,可以用以下代码读取:
#include <stdio.h>
int main()
{
    FILE *fp;
    int num1, num2;
    fp = fopen("data.txt","r");
    if(fp == NULL)
    {
        perror("打开文件失败");
        return 1;
    }
    fscanf(fp,"%d %d",&num1,&num2);
    printf("读取的两个数为:%d %d\n",num1,num2);
    fclose(fp);
    return 0;
}
  • 格式化写入函数fprintf
    • 语法fprintf(fp,"格式控制字符串",变量列表);,其中fp是文件指针。它将按照指定的格式把变量的值写入文件。如,将两个整数写入文件:
#include <stdio.h>
int main()
{
    FILE *fp;
    int num1 = 30, num2 = 40;
    fp = fopen("newdata.txt","w");
    if(fp == NULL)
    {
        perror("打开文件失败");
        return 1;
    }
    fprintf(fp,"%d %d",num1,num2);
    fclose(fp);
    return 0;
}
  1. 按数据块读写文件
  • 数据块读取函数fread
    • 语法size_t fread(void *ptr, size_t size, size_t count, FILE *fp);。其中ptr是指向存储读取数据的内存缓冲区的指针;size是每个数据块的大小(单位为字节);count是要读取的数据块数量;fp是文件指针。如,读取一个结构体数组的数据到内存中:
#include <stdio.h>
struct Student
{
    char name[20];
    int age;
};
int main()
{
    FILE *fp;
    struct Student students[3];
    fp = fopen("students.bin","rb");
    if(fp == NULL)
    {
        perror("打开文件失败");
        return 1;
    }
    fread(students, sizeof(struct Student),3,fp);
    fclose(fp);
    // 可以在这里对读取的学生数据进行处理
    return 0;
}
  • 数据块写入函数fwrite
    • 语法size_t fwrite(void *ptr, size_t size, size_t count, FILE *fp);。其中ptr是指向要写入文件的数据的内存缓冲区的指针;size是每个数据块的大小(单位为字节);count是要写入的数据块数量;fp是文件指针。如,将一个结构体数组的数据写入二进制文件:
#include <stdio.h>
struct Student
{
    char name[20];
    int age;
};
int main()
{
    FILE *fp;
    struct Student students[3] = {{"张三",20},{"李四",21},{"王五",22}};
    fp = fopen("students.bin","wb");
    if(fp == NULL)
    {
        perror("打开文件失败");
        return 1;
    }
    fwrite(students, sizeof(struct Student),3,fp);
    fclose(fp);
    return 0;
}

《C语言程序设计》第14章

  1. 动画的基本原理
  • 动画是通过快速连续显示多帧图像,利用人眼的视觉暂留现象,产生动态效果的技术。
  • 在C语言中,动画的实现通常依赖于定时器来控制帧率,以及使用图形库来绘制和更新图像。
  1. 迷宫游戏
  • 迷宫游戏的设计包括迷宫的生成、玩家的移动逻辑和游戏界面的实现。
  • 迷宫可以通过二维数组来设计,数组中的每个元素代表迷宫的一个单元格,可以是墙壁、路径、起点或终点。
  • 玩家的移动需要处理用户输入,并更新玩家在迷宫中的位置,同时检查是否碰到墙壁。
  • 游戏的逻辑还包括检查玩家是否到达出口,以及游戏的开始和结束条件。
  1. Flappy bird游戏
  • Flappy bird是一个简单的2D游戏,玩家通过点击来控制小鸟跳跃,以避开障碍物。
  • 游戏的核心机制包括小鸟的重力模拟、跳跃逻辑和障碍物的生成与移动。
  • 游戏的实现需要图形库来绘制游戏元素,以及处理用户输入(如点击事件)。
  • 游戏难度可以通过调整障碍物的间距、高度和移动速度来实现。

基于AI的学习

image

参考资料

posted @ 2024-12-27 11:40  20241329刘沛妤  阅读(26)  评论(0)    收藏  举报