内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第35练,内容是9.4 文件的定位函数和结尾标志 + 9.5 文件应用实例。
《编程语言基础——C语言》(第5版)一课一练 第35练
9.4 文件的定位函数和结尾标志 + 9.5 文件应用实例
一、单选题
1. rewind(fp)函数的功能是( )
A. 将文件位置指针重新定位到文件的开头
B. 重新打开文件fp
C. 将文件指针移动到文件末尾
D. 清除文件的所有内容
【答案】A
【解析】rewind(fp)将文件内部的位置指针重置到文件开头,同时清除文件结束标志和错误标志。相当于fseek(fp, 0L, SEEK_SET)。常用于写完文件后需要从头读取的场景。
2. fseek(fp, 10L, SEEK_SET); 执行后,下一次读写操作将从什么位置开始( )
A. 文件末尾往前10个字节处
B. 文件开头往后10个字节处
C. 当前位置往后10个字节处
D. 距文件末尾10个字节处
【答案】B
【解析】fseek的三个基准位置:SEEK_SET=文件开头(0),SEEK_CUR=当前位置(1),SEEK_END=文件末尾(2)。fseek(fp, 10L, SEEK_SET)表示从文件开头偏移10字节,即定位到第10个字节处。
3. ftell(fp)函数返回的是( )
A. 文件的总字节数
B. 文件当前行的行号
C. 文件位置指针相对于文件开头的偏移量
D. 文件剩余可读的字节数
【答案】C
【解析】ftell(fp)返回当前文件位置指针相对于文件开头的字节偏移量,类型为long。常用于获取当前读写位置,配合fseek可以实现位置保存和恢复。获取文件大小可结合fseek和ftell。
4. 关于feof函数,以下描述正确的是( )
A. feof(fp)在读取文件最后一个字符后立即返回真
B. feof(fp)返回真表示文件打开成功
C. feof(fp)需要在fopen之前调用
D. feof(fp)在尝试读取超过文件末尾的数据后才返回真
【答案】D
【解析】feof(fp)用于检测是否已到达文件末尾。注意:它不是在读完最后一个字符后立即返回真,而是在尝试读取超过末尾时(即读操作失败后)才返回真。因此文件读取循环通常用fgetc返回值判断EOF而非feof。
5. 以下代码能获取文件大小(字节数)的是( )
A. fseek(fp, 0L, SEEK_END); long size = ftell(fp);
B. long size = sizeof(fp);
C. long size = ftell(fp);
D. long size = feof(fp);
【答案】A
【解析】获取文件大小的常用方法:先用fseek(fp, 0L, SEEK_END)将位置指针移到文件末尾,然后ftell(fp)返回末尾的偏移量即文件总大小。之后可用rewind(fp)复位。这是C语言中计算文件长度的标准技巧。
6. 要统计一个文本文件中某个字符出现的次数,以下步骤顺序正确的是:①打开文件 ②遍历文件读取每个字符 ③比较并计数 ④关闭文件 ⑤检查文件是否成功打开( )
A. ①→②→③→④→⑤
B. ⑤→①→②→③→④
C. ①→⑤→②→③→④
D. ⑤→①→④→②→③
【答案】B
【解析】文件操作的正确流程:先检查文件是否成功打开(①后立即判断返回值⑤),确认打开成功后才进行读取操作。然后遍历文件逐字符读取并比较计数(②③),最后关闭文件释放资源(④)。
7. 文件位置指针当前在第5字节处,执行 fseek(fp, -3L, SEEK_CUR); 后,位置指针在( )
A. 文件开头
B. 第8字节处
C. 第2字节处
D. 文件末尾
【答案】C
【解析】SEEK_CUR表示从当前位置开始偏移。-3L表示向前(文件开头方向)移动3字节。当前位置=5,向前3字节→5-3=2,位置指针定位到第2字节处。负偏移可将指针向文件头方向移动。
二、程序运行结果题
8. 以下程序的运行结果是【··】。(假设文件"data.txt"中内容是"ABCDEFGHI")
#include <stdio.h>
main()
{
FILE *fp;
char ch;
fp = fopen("data.txt", "r");
if (fp != NULL)
{
fseek(fp, 3L, SEEK_SET);
ch = fgetc(fp);
fseek(fp, 6L, SEEK_SET);
ch = fgetc(fp);
printf("%c", ch);
fclose(fp);
}
}
【答案】G
【解析】文件内容"ABCDEFGHI",索引从0开始:A(0),B(1),C(2),D(3),E(4),F(5),G(6),H(7),I(8)。fseek定位到第3字节读取D,再定位到第6字节读取G并覆盖ch。最终输出G。fseek可反复定位,后一次会覆盖前一次读取的值。
三、程序填空题
9. 以下程序的功能是:在文件末尾追加一行新内容。请填空。
#include <stdio.h>
main()
{
FILE *fp;
fp = fopen("log.txt", 【1】);
if (fp != NULL)
{
fprintf(fp, "New entry added.
");
fclose(fp);
printf("追加成功!
");
}
else
printf("文件打开失败!
");
}
【答案】【1】"a"
【解析】要在文件末尾追加内容而不覆盖原有内容,应用"a"(append追加)模式打开文件。"w"模式会清空原内容,"r"模式不能写入。追加模式打开后,文件位置指针自动指向末尾,写入内容追加在原内容之后。
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是先向文件写入数据,再从文件中读回并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 main()
L3 {
L4 FILE *fp;
L5 int x;
L6 fp = fopen("test.txt", "w+");
L7 fprintf(fp, "%d", 12345);
L8 fscanf(fp, "%d", &x);
L9 printf("读取的值:%d
", x);
L10 fclose(fp);
L11 }
【答案】【1】L7-L8之间需要添加 rewind(fp);(fprintf写入后位置指针在文件末尾,fscanf从末尾读不到数据,应先将位置指针重置到文件开头)
【解析】fprintf写入"12345"后,文件位置指针指向末尾。紧接着fscanf从当前位置(末尾)读取,什么都读不到,x不会得到值。应在fprintf和fscanf之间添加rewind(fp)将位置指针移回开头,fscanf才能正确读取到"12345"。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第35练,内容是9.4 文件的定位函数和结尾标志 + 9.5 文件应用实例。
《编程语言基础——C语言》(第5版)一课一练 第35练
9.4 文件的定位函数和结尾标志 + 9.5 文件应用实例
一、单选题
1. rewind(fp)函数的功能是( )
A. 将文件位置指针重新定位到文件的开头
B. 重新打开文件fp
C. 将文件指针移动到文件末尾
D. 清除文件的所有内容
2. fseek(fp, 10L, SEEK_SET); 执行后,下一次读写操作将从什么位置开始( )
A. 文件末尾往前10个字节处
B. 文件开头往后10个字节处
C. 当前位置往后10个字节处
D. 距文件末尾10个字节处
3. ftell(fp)函数返回的是( )
A. 文件的总字节数
B. 文件当前行的行号
C. 文件位置指针相对于文件开头的偏移量
D. 文件剩余可读的字节数
4. 关于feof函数,以下描述正确的是( )
A. feof(fp)在读取文件最后一个字符后立即返回真
B. feof(fp)返回真表示文件打开成功
C. feof(fp)需要在fopen之前调用
D. feof(fp)在尝试读取超过文件末尾的数据后才返回真
5. 以下代码能获取文件大小(字节数)的是( )
A. fseek(fp, 0L, SEEK_END); long size = ftell(fp);
B. long size = sizeof(fp);
C. long size = ftell(fp);
D. long size = feof(fp);
6. 要统计一个文本文件中某个字符出现的次数,以下步骤顺序正确的是:①打开文件 ②遍历文件读取每个字符 ③比较并计数 ④关闭文件 ⑤检查文件是否成功打开( )
A. ①→②→③→④→⑤
B. ⑤→①→②→③→④
C. ①→⑤→②→③→④
D. ⑤→①→④→②→③
7. 文件位置指针当前在第5字节处,执行 fseek(fp, -3L, SEEK_CUR); 后,位置指针在( )
A. 文件开头
B. 第8字节处
C. 第2字节处
D. 文件末尾
二、程序运行结果题
8. 以下程序的运行结果是【··】。(假设文件"data.txt"中内容是"ABCDEFGHI")
#include <stdio.h>
main()
{
FILE *fp;
char ch;
fp = fopen("data.txt", "r");
if (fp != NULL)
{
fseek(fp, 3L, SEEK_SET);
ch = fgetc(fp);
fseek(fp, 6L, SEEK_SET);
ch = fgetc(fp);
printf("%c", ch);
fclose(fp);
}
}
三、程序填空题
9. 以下程序的功能是:在文件末尾追加一行新内容。请填空。
#include <stdio.h>
main()
{
FILE *fp;
fp = fopen("log.txt", 【1】);
if (fp != NULL)
{
fprintf(fp, "New entry added.
");
fclose(fp);
printf("追加成功!
");
}
else
printf("文件打开失败!
");
}
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是先向文件写入数据,再从文件中读回并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 main()
L3 {
L4 FILE *fp;
L5 int x;
L6 fp = fopen("test.txt", "w+");
L7 fprintf(fp, "%d", 12345);
L8 fscanf(fp, "%d", &x);
L9 printf("读取的值:%d
", x);
L10 fclose(fp);
L11 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$