作业信息
作业归属课程:2024-2025-1-计算机基础与程序设计
作业要求:2024-2025-1计算机基础与程序设计第十四周作业
作业目标:《C语言程序设计》第13-14章
作业正文:2024-2025-1 20241329 《计算机基础与程序设计》第十四周学习总结
教材学习内容总结
《C语言程序设计》第13章
- 二进制文件和文本文件
-
概念
- 文本文件:文本文件是一种字符流文件,它的内容是由字符组成的。在文本文件中,每个字符以ASCII码或其他字符编码的形式存储。例如,数字字符'1'在文本文件中存储的是其ASCII码值(十进制为49)。文本文件便于人类阅读和编辑,通常可以用文本编辑器直接打开查看内容。
- 二进制文件:二进制文件是按照数据在内存中的存储形式原样存储的文件。它可以存储各种类型的数据,如整数、浮点数、结构体等,以二进制形式存储的数据更加紧凑,占用空间可能更小,但对于人类来说通常是不可读的,需要特定的程序来解析其内容。
-
存储方式对比
- 对于整数1234,在文本文件中,它会被存储为字符'1'、'2'、'3'、'4'对应的ASCII码值,占用4个字节(假设ASCII编码);而在二进制文件中,如果是32位整数,它会按照整数的二进制表示存储,占用4个字节,存储的是二进制数据00000100 11010010 00000011 00000001(假设采用小端序存储)。
- 文件的打开和关闭
-
文件打开函数
fopen
- 语法:
FILE *fp; fp = fopen("文件名","文件打开方式");
。如,FILE *fp; fp = fopen("test.txt","r");
以只读方式打开名为test.txt
的文件。 - 文件打开方式:
r
(只读):用于打开文本文件进行读取操作。如果文件不存在,打开操作会失败。w
(只写):用于打开文本文件进行写入操作。如果文件不存在,则创建一个新文件;如果文件存在,则清空文件内容。a
(追加):用于打开文本文件进行追加写入操作。如果文件不存在,则创建一个新文件;如果文件存在,则在文件末尾添加内容。rb
、wb
、ab
:分别用于二进制文件的只读、只写、追加操作。r +
、w +
、a +
:用于读写操作,r +
打开文件用于读写,文件必须存在;w +
创建新文件用于读写或清空现有文件用于读写;a +
打开文件用于读写,在文件末尾追加写入。对应的二进制文件读写方式为rb +
、wb +
、ab +
。
- 该函数返回一个指向
FILE
结构的指针,打开文件失败则返回NULL
。
- 语法:
-
文件关闭函数
fclose
- 语法:
fclose(fp);
,其中fp
是文件指针。例如,如果已经打开了一个文件指针fp
,使用fclose(fp);
来关闭文件。关闭文件非常重要,它可以释放文件资源,避免数据丢失等问题。如果不关闭文件,可能会导致缓冲区数据未写入文件,并且会占用系统资源。
- 语法:
- 按字符读写文件
- 字符读取函数
fgetc
- 语法:
int c; c = fgetc(fp);
,其中fp
是文件指针。它从指定的文件中读取一个字符,并返回读取到的字符的ASCII码值。如果遇到文件末尾,返回EOF
(EOF
是一个在<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;
}
- 按格式读写文件
- 格式化读取函数
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;
}
- 按数据块读写文件
- 数据块读取函数
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章
- 动画的基本原理:
- 动画是通过快速连续显示多帧图像,利用人眼的视觉暂留现象,产生动态效果的技术。
- 在C语言中,动画的实现通常依赖于定时器来控制帧率,以及使用图形库来绘制和更新图像。
- 迷宫游戏:
- 迷宫游戏的设计包括迷宫的生成、玩家的移动逻辑和游戏界面的实现。
- 迷宫可以通过二维数组来设计,数组中的每个元素代表迷宫的一个单元格,可以是墙壁、路径、起点或终点。
- 玩家的移动需要处理用户输入,并更新玩家在迷宫中的位置,同时检查是否碰到墙壁。
- 游戏的逻辑还包括检查玩家是否到达出口,以及游戏的开始和结束条件。
- Flappy bird游戏:
- Flappy bird是一个简单的2D游戏,玩家通过点击来控制小鸟跳跃,以避开障碍物。
- 游戏的核心机制包括小鸟的重力模拟、跳跃逻辑和障碍物的生成与移动。
- 游戏的实现需要图形库来绘制游戏元素,以及处理用户输入(如点击事件)。
- 游戏难度可以通过调整障碍物的间距、高度和移动速度来实现。