第47练 单元10 随机读写与二进制读写《C语言程序设计》(高教版第2版)一课一练

| 2份
| 8页
| 49人阅读
| 0人下载

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(高教版第2版)一课一练的单元10的第47练,内容涵盖单元10“学生信息管理系统”的数据保存10.2.3 随机读写(fseek/rewind/ftell)与二进制读写(fread/fwrite)。 《C语言程序设计》(高教版第2版)一课一练 第47练 单元10 “学生信息管理系统”的数据保存 10.2.3 随机读写(fseek/rewind/ftell)与二进制读写(fread/fwrite) 1、 单项选择题(本题共5小题) 1、下列关于 fseek 函数起始点宏定义的描述,正确的是( ) A. SEEK_SET 代表文件当前位置,对应数字 1 B. SEEK_CUR 代表文件开始位置,对应数字 0 C. SEEK_END 代表文件末尾位置,对应数字 2 D. SEEK_SET 代表文件末尾位置,对应数字 2 【答案】C 【解析】C 语言预定义了三个文件起始点宏:SEEK_SET 对应数字 0(文件开始)、SEEK_CUR 对应数字 1(当前位置)、SEEK_END 对应数字 2(文件末尾),只有 C 选项描述正确。 2、调用 ftell (fp) 函数成功执行后,返回值的含义是( ) A. 当前位置相对于文件末尾的字节偏移量 B. 当前位置相对于文件开头的字节偏移量 C. 文件的总字节数 D. 0 表示成功,-1 表示失败 【答案】B 【解析】ftell 函数的功能是获取文件指针当前位置,返回值为相对于文件开头的字节偏移量;文件总字节数可通过定位到末尾后调用 ftell 获取,但不是 ftell 的直接返回含义;D 选项是 fclose 等函数的返回规则。 3、下列函数中,能无条件将文件指针移到文件开头位置的是( ) A. fseek B. ftell C. rewind D. fread 【答案】C 【解析】rewind 函数的核心功能是将文件指针重置到文件开头,无需额外参数;fseek 需要指定起始点和偏移量才能定位到开头,ftell 用于获取位置,fread 用于读取数据。 4、使用 fseek 函数时,偏移量的类型必须是( ) A. int B. long C. float D. char 【答案】B 【解析】fseek 的偏移量要求为长整型(long),避免因文件过大导致偏移量溢出,通常在数字末尾加 “L” 表示长整型,如 20L。 5、已知二进制文件中存储了多个 struct Student 类型的数据,要读取第 5 个学生的信息,正确的 fseek 定位语句是( ) A. fseek (fp, 4sizeof(struct Student), SEEK_SET); B. fseek(fp, 5sizeof (struct Student), SEEK_SET); C. fseek (fp, sizeof (struct Student), SEEK_CUR); D. fseek (fp, -5*sizeof (struct Student), SEEK_END); 【答案】A 【解析】第 5 个学生前面有 4 个学生,每个学生占 sizeof (struct Student) 字节,因此从文件开头(SEEK_SET)偏移 4 倍结构体大小即可定位到第 5 个学生的起始位置;B 选项偏移量错误,会定位到第 6 个学生;C、D 选项的起始点和偏移量不符合需求。 2、 判断题(本题共4题) 1、fseek 函数的偏移量可以使用 int 类型,无需强制转换为 long 类型。( ) 【答案】× 【解析】fseek 的偏移量必须是长整型(long),若使用 int 类型,当文件过大时会出现偏移量溢出,导致定位错误,通常需要在数字末尾加 “L” 表示长整型。 2、ftell 函数执行失败时,返回值为 EOF(即 - 1)。( ) 【答案】√ 【解析】ftell 函数成功返回当前位置的偏移量,失败时返回 EOF(值为 - 1),可通过该返回值判断是否获取位置成功。 3、rewind 函数的功能是将文件指针移动到文件末尾位置。( ) 【答案】× 【解析】rewind 函数的功能是无条件将文件指针重置到文件开头位置,而非文件末尾;定位到末尾需使用 fseek (fp, 0L, SEEK_END)。 4、随机读写文件的核心是通过 fseek 函数定位文件指针,再进行读写操作。( ) 【答案】√ 【解析】随机读写打破了顺序读写的限制,必须先通过 fseek 定位到指定位置,再调用 fread 或 fwrite 完成数据读写,这是随机读写的基本流程。 3、 程序填空题(本题共1题) 1、题目描述:以下程序用于修改二进制文件file1.dat中第 3 个学生的年龄信息,需补充缺失代码实现完整功能; #include <stdio.h> #include <stdlib.h> struct Student { int num; char name[20]; int age; }; int main() { FILE *fp; struct Student stu; // (1) 以二进制读写方式打开文件file1.dat fp = fopen("file1.dat", ____); if (fp == NULL) { printf("文件打开失败! "); exit(0); } // (2) 定位到第3个学生的起始位置(前面有2个学生) fseek(fp, ____, SEEK_SET); // (3) 读取该学生的信息到stu变量中 fread(&stu, ____, 1, fp); // 修改学生年龄为18岁 stu.age = 18; // (4) 将文件指针重新定位到第3个学生的起始位置(因fread后指针已移动) ____; // 将修改后的信息写回文件 fwrite(&stu, sizeof(struct Student), 1, fp); // (5) 关闭文件 fclose(fp); printf("学生年龄修改成功! "); return 0; } 【答案】 (1)"rb+" (2)2*sizeof(struct Student) (3)sizeof(struct Student) (4)fseek(fp, 2*sizeof (struct Student), SEEK_SET) 【解析】 (1)"rb+" 是二进制读写方式,既支持读取文件内容,也支持写入修改,且文件不存在时打开失败,符合修改已有文件的需求。 (2)第 3 个学生前面有 2 个学生,每个学生占 sizeof (struct Student) 字节,因此偏移量为 2 倍结构体大小,从文件开头定位到目标位置。 (3)fread 的第二个参数是单个数据项的大小,这里传入结构体大小,确保读取完整的学生信息到 stu 变量中。 (4)执行 fread 后,文件指针会自动移动到下一个数据位置,因此需要重新调用 fseek 定位到原位置,才能将修改后的信息覆盖写入原位置。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(高教版第2版)一课一练的单元10的第47练,内容涵盖单元10“学生信息管理系统”的数据保存10.2.3 随机读写(fseek/rewind/ftell)与二进制读写(fread/fwrite)。 《C语言程序设计》(高教版第2版)一课一练 第47练 单元10 “学生信息管理系统”的数据保存 10.2.3 随机读写(fseek/rewind/ftell)与二进制读写(fread/fwrite) 1、 单项选择题(本题共5小题) 1、下列关于 fseek 函数起始点宏定义的描述,正确的是( ) A. SEEK_SET 代表文件当前位置,对应数字 1 B. SEEK_CUR 代表文件开始位置,对应数字 0 C. SEEK_END 代表文件末尾位置,对应数字 2 D. SEEK_SET 代表文件末尾位置,对应数字 2 2、调用 ftell (fp) 函数成功执行后,返回值的含义是( ) A. 当前位置相对于文件末尾的字节偏移量 B. 当前位置相对于文件开头的字节偏移量 C. 文件的总字节数 D. 0 表示成功,-1 表示失败 3、下列函数中,能无条件将文件指针移到文件开头位置的是( ) A. fseek B. ftell C. rewind D. fread 4、使用 fseek 函数时,偏移量的类型必须是( ) A. int B. long C. float D. char 5、已知二进制文件中存储了多个 struct Student 类型的数据,要读取第 5 个学生的信息,正确的 fseek 定位语句是( ) A. fseek (fp, 4sizeof(struct Student), SEEK_SET); B. fseek(fp, 5sizeof (struct Student), SEEK_SET); C. fseek (fp, sizeof (struct Student), SEEK_CUR); D. fseek (fp, -5*sizeof (struct Student), SEEK_END); 2、 判断题(本题共4题) 1、fseek 函数的偏移量可以使用 int 类型,无需强制转换为 long 类型。( ) 2、ftell 函数执行失败时,返回值为 EOF(即 - 1)。( ) 3、rewind 函数的功能是将文件指针移动到文件末尾位置。( ) 4、随机读写文件的核心是通过 fseek 函数定位文件指针,再进行读写操作。( ) 3、 程序填空题(本题共1题) 1、题目描述:以下程序用于修改二进制文件file1.dat中第 3 个学生的年龄信息,需补充缺失代码实现完整功能; #include <stdio.h> #include <stdlib.h> struct Student { int num; char name[20]; int age; }; int main() { FILE *fp; struct Student stu; // (1) 以二进制读写方式打开文件file1.dat fp = fopen("file1.dat", ____); if (fp == NULL) { printf("文件打开失败! "); exit(0); } // (2) 定位到第3个学生的起始位置(前面有2个学生) fseek(fp, ____, SEEK_SET); // (3) 读取该学生的信息到stu变量中 fread(&stu, ____, 1, fp); // 修改学生年龄为18岁 stu.age = 18; // (4) 将文件指针重新定位到第3个学生的起始位置(因fread后指针已移动) ____; // 将修改后的信息写回文件 fwrite(&stu, sizeof(struct Student), 1, fp); // (5) 关闭文件 fclose(fp); printf("学生年龄修改成功! "); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第47练 单元10 随机读写与二进制读写《C语言程序设计》(高教版第2版)一课一练-第1页
1

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。