20241313刘鸣宇《计算机基础与程序设计》第14周学习总结

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

作业信息

这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)
这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)
这个作业的目标 <写上具体方面>
作业正文 ... 本博客链接

教材学习内容总结

《C语言程序设计》第13章-文件操作

  1. 文件的基本概念
    文件的定义:文件是存储在外部介质(如硬盘、光盘等)上的数据集合。在 C 语言中,文件可视为一个字节流或字符序列。
    文件的分类
    文本文件:以字符的 ASCII 码形式存储数据,每个字符对应一个字节。例如,整数 123 在文本文件中存储为 '1'、'2'、'3' 三个字符的 ASCII 码值,占用三个字节。
    二进制文件:数据按其在内存中的存储形式原样存放在文件中。同样是整数 123,在二进制文件中以其二进制形式(假设为 4 字节存储系统,00000000 00000000 00000000 01111011)存储,仅占用 4 字节。
  2. 文件指针
    定义:FILE 是 C 语言标准库定义的结构体类型,用于存放文件的相关信息,如文件当前读写位置、缓冲区状态等。文件指针是指向 FILE 类型结构体的指针变量,用于对文件进行各种操作。
    声明方式:FILE *fp; ,这里 fp 就是一个文件指针。
  3. 文件的打开与关闭
    文件打开函数 fopen()
    函数原型:FILE *fopen(const char *filename, const char *mode);
    参数说明:filename 是要打开文件的文件名(包含路径,若不写路径则默认在当前工作目录);mode 是文件打开方式,如 "r"(只读)、"w"(只写,若文件存在则清空,不存在则创建)、"a"(追加,在文件末尾添加内容,不存在则创建)、"rb"(以二进制方式只读)、"wb"(以二进制方式只写)等。
    返回值:成功打开文件返回文件指针,否则返回 NULL。例如:
    c
    FILE *fp = fopen("test.txt", "r");
    if (fp == NULL) {
    perror("Failed to open file");
    return 1;
    }
    文件关闭函数 fclose()
    函数原型:int fclose(FILE *stream);
    参数说明:stream 是要关闭的文件指针。
    返回值:成功关闭返回 0,否则返回 EOF(通常为 -1)。关闭文件可释放系统资源,确保数据完整写入。例如:fclose(fp);
  4. 文件的读写操作
    字符读写函数
    fgetc():从指定文件读取一个字符。int fgetc(FILE *stream);,返回读取的字符(以 int 类型表示,便于处理文件结束标志 EOF),若到达文件末尾或出错返回 EOF。例如:
    c
    int ch;
    while ((ch = fgetc(fp))!= EOF) {
    putchar(ch);
    }
    fputc():向指定文件写入一个字符。int fputc(int c, FILE *stream);,成功写入返回写入的字符,失败返回 EOF。例如:fputc('A', fp);
    字符串读写函数
    fgets():从指定文件读取一行字符串。char *fgets(char *str, int num, FILE *stream);,str 为存放读取字符串的数组,num 是要读取的最大字符数(包括字符串结束符 '\0')。成功读取返回 str,到达文件末尾或出错返回 NULL。例如:
    c
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), fp)!= NULL) {
    printf("%s", buffer);
    }
    fputs():向指定文件写入一个字符串(不包括字符串结束符 '\0')。int fputs(const char *str, FILE *stream);,成功写入返回非负整数,失败返回 EOF。例如:fputs("Hello, World!", fp);
    格式化读写函数
    fscanf():从指定文件按指定格式读取数据。int fscanf(FILE *stream, const char *format,...);,与 scanf() 类似,只是数据来源是文件。例如:
    c
    int num;
    fscanf(fp, "%d", &num);
    fprintf():向指定文件按指定格式写入数据。int fprintf(FILE *stream, const char *format,...);,与 printf() 类似,只是输出目标是文件。例如:fprintf(fp, "The number is %d", num);
    数据块读写函数
    fread():从指定文件读取数据块。size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);,ptr 为存放读取数据的内存地址,size 是每个数据项的大小(字节数),nmemb 是数据项的个数。返回成功读取的数据项个数。常用于读取二进制文件,例如读取一个结构体数组:
    c
    struct Student {
    char name[50];
    int age;
    };
    struct Student students[10];
    size_t count = fread(students, sizeof(struct Student), 10, fp);
    fwrite():向指定文件写入数据块。size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);,参数含义与 fread() 类似,返回成功写入的数据项个数。例如写入一个结构体数组:
    c
    struct Student student = {"John", 20};
    fwrite(&student, sizeof(struct Student), 1, fp);
  5. 文件的定位操作
    fseek():用于移动文件指针到指定位置。int fseek(FILE *stream, long offset, int whence);
    参数说明:offset 是偏移量,可正可负;whence 是起始位置,取值 SEEK_SET(文件开头)、SEEK_CUR(当前位置)、SEEK_END(文件末尾)。例如,将文件指针从文件开头向后移动 10 个字节:fseek(fp, 10, SEEK_SET);
    ftell():获取文件指针当前位置。long ftell(FILE *stream);,返回文件指针相对于文件开头的字节偏移量,出错返回 -1L。例如:long pos = ftell(fp);
    rewind():将文件指针重新定位到文件开头。void rewind(FILE *stream);,相当于 fseek(fp, 0, SEEK_SET);
  6. 文件操作的错误处理
    ferror():用于检测文件操作过程中是否发生错误。int ferror(FILE *stream);,若发生错误返回非零值,否则返回 0。例如,在每次文件操作后可通过检查 ferror(fp) 判断是否出错。
    clearerr():清除文件错误标志。void clearerr(FILE stream);,当文件操作出错后,可调用此函数清除错误标志,以便后续操作能正常进行。
    第14章-简单的游戏设计
    一、游戏设计基础思路
    确定游戏目标与规则
    明确玩家在游戏中要达成的任务,如在猜数字游戏中,目标是猜出程序预设的数字。规则可能包括猜测次数限制、提示方式(如猜大了或猜小了)等。在井字棋游戏里,目标是率先让自己的棋子在横、竖或斜向连成一线,规则涉及轮流落子、棋盘边界限制等。
    这些目标和规则是游戏设计的核心,决定了游戏的玩法和趣味性。
    规划游戏流程
    通常游戏开始时要进行初始化,如初始化游戏数据、设置初始场景等。以贪吃蛇游戏为例,要初始化蛇的位置、长度、食物位置等。
    接着进入游戏主循环,在循环中不断获取玩家输入、更新游戏状态、检测游戏结束条件。例如在俄罗斯方块游戏中,主循环里要处理方块的下落、玩家的旋转与移动操作,同时检测方块是否触底或填满一行等结束条件。
    游戏结束后,可能需要显示游戏结果,如得分、是否胜利等信息。
    二、游戏设计常用技术
    随机数生成
    C 语言通过<stdlib.h>库中的rand()函数生成随机数。rand()函数返回一个介于 0(包括)和RAND_MAX(通常是一个较大的整数,如 32767)之间的伪随机整数。
    例如在猜数字游戏中,可用rand() % 100生成 0 到 99 之间的随机数作为要猜测的数字。为使每次运行程序生成不同的随机序列,常使用srand()函数设置随机数种子,如srand(time(NULL)),利用系统时间作为种子,保证每次运行时种子不同。
    输入处理
    使用getchar()函数获取单个字符输入,常用于简单的选择操作,如在游戏菜单中选择选项。例如在一个简单的冒险游戏菜单中,玩家输入 'y' 或 'n' 来决定是否继续前进。
    scanf()函数可用于获取格式化输入,如在猜数字游戏中获取玩家猜测的整数。但使用scanf()时要注意输入格式匹配问题,避免输入错误导致程序异常。
    对于更复杂的游戏,可能需要处理键盘的特殊按键,如方向键。在 Windows 系统下可通过conio.h库中的_getch()函数结合特殊按键编码来实现,如按下方向右键对应的编码值获取玩家的移动方向操作。
    输出显示
    printf()函数是最基本的输出函数,用于在控制台输出文本信息,如游戏提示、结果等。例如在猜数字游戏中输出 “猜大了,请重新猜测!” 等提示。
    对于一些简单图形显示需求,可通过重复输出字符来模拟,如用
    字符组成一个简单的边界框来表示游戏区域。例如在井字棋游戏中,通过输出空格和棋子符号(如X和O)来绘制棋盘。

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

期末知识点的复习

基于AI的学习

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

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

相关文章

学习笔记:旋转treap

前言 更好的阅读体验。 无旋 treap。 默认读者会 BST 的基本操作、堆和旋转。 本文旋转部分和上面那篇文章的相同。 代码中是小根堆。 思想 treap 既是一棵二叉查找树(tree),也是一个二叉堆(heap)。 但是如果这两个数据结构用同一个权值维护,那么这两种数据结构是矛盾的。…

最早发明的自平衡二叉树:AVL

前言 更好的阅读体验 默认读者会基本的 BST 操作。 节点定义 平衡因子:BF(BalanceFactor),左子树高 \(-\) 右子树高。 平衡树是让树的形态尽可能像完全二叉树,而不是链。 在 AVL 中,我们认为 \(\left|\text{BF}\right|\le 1\),也就是 BF 为 \(0,1,-1\) 时的子树是平衡的,…

[COCI2015-2016#2] DRZAVA

思路 先把赛时想法搬一部分过来转化题意, 对于 \(n\) 个带权 \(k\) 的点, 任意两点 \(i, j\) 之间有双向连边, 其边权为 \(w_{i, j} = d_{i, j}\) , 求一最小阈值 \(C\) , 满足对于所有 \(w \leq C\) 的边连接后, 存在一个连通块 \(G\), 使得 \[\sum_{i = 1}^{\lvert G \rvert}…

The End

一、学期回顾 1.1 回顾你对于软件工程课程的想象 根据你对课程目标和期待,回顾目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么? 达成的目标与期待理论与实践结合: 课程的最大目标之一是将软件工程的理论知识应用到实践中。在这一点上…

关于本站

我是 fush,一个很菜的 oier。 这里,我只想分享一些自己在学习记录。 由于本人较菜,有哪里写的不严谨的地方欢迎指出。 除了下面几个账号(本人的),如果要转载请写明出处,谢谢。 洛谷

从 Leafy-Tree 到 WBLT

更好的阅读体验。 UPD:2024/12/04 添加序列操作 UPD:2024/12/10 添加可持久化 前言 前面说过 FHQ-treap 的缺点在于常数。 这次篇文章要讲解 WBLT,码量与 FHQ-treap 差的不多,结构与线段树类似。 也可以分裂合并(不推荐),可持久化,但常数远小于 FHQ-treap。 美中不足的…

快消零售业的创新之路:智能AI助力员工培训SOP高效构建

在快速消费品零售行业,员工培训是提升服务质量、增强竞争力的重要手段。然而,传统员工培训方式往往存在培训周期长、效果难以评估等问题,难以满足快消零售行业对于高效、精准培训的需求。随着人工智能技术的不断发展,智能AI在员工培训中的应用逐渐受到重视,特别是在构建员…

django rest framework 视图类关系图

纸上得来终觉浅,绝知此事要躬行

挖掘内部知识库在员工培训与发展中的巨大潜力

在当今快速变化的商业环境中,企业的核心竞争力越来越依赖于其员工的技能水平和持续学习能力。员工培训与发展不再是简单的技能传授,而是需要构建一个能够激发潜能、促进知识共享与创新的智慧学习生态。内部知识库,作为这一生态的核心组成部分,其潜力在员工培训与发展中日益…

数学专题 2024.12

数学专题 2024.12 Luogu 3175 按位或 刚开始你有一个数字 \(0\),每一秒钟你会随机选择一个 \([0,2^n-1]\) 的数字,与你手上的数字进行或(C++,C 的 |,pascal 的 or)操作。选择数字 \(i\) 的概率是 \(p_i\)。保证 \(0\leq p_i \leq 1\),\(\sum p_i=1\) 。问期望多少秒后,你…

AGENT AI-surveying the horizons of multimodal interaction

(转自https://www.cnblogs.com/hifrank/p/18416222) 标题:AGENT AI: surveying the horizons of multimodal interaction作者:Zane Durante, Qiuyuan Huang, Naoki Wake, Ran Gong, Jae Sung Park, Bidipta Sarkar, Rohan Taori, Yusuke Noda, Demetri Terzopoulos, Yejin …

一些数学证明

货舱选址问题 结论:发现对于一些数轴上的点,想要让其和某一点的距离之和最小,要取中位数(偶数/奇数都可以取n/2计算)