内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第34练,内容是9.3 文件的读/写函数。
《编程语言基础——C语言》(第5版)一课一练 第34练
9.3 文件的读/写函数
一、单选题
1. 从文件中读取格式化数据,应使用的函数是( )
A. fscanf
B. fgetc
C. fputs
D. fwrite
2. 要向文件中写入格式化数据 "x=10, y=20",正确的语句是( )
A. printf("x=%d, y=%d", 10, 20);
B. fprintf(fp, "x=%d, y=%d", 10, 20);
C. fscanf(fp, "x=%d, y=%d", 10, 20);
D. fputs("x=%d, y=%d", fp);
3. 以下程序段的功能是:FILE *fp = fopen("a.txt", "r"); char ch = fgetc(fp); 执行后ch中存放的是( )
A. 文件a.txt的全部内容
B. FILE结构体的地址
C. 从a.txt中读取的第一个字符
D. 文件是否打开成功的标志
4. char buf[100]; fgets(buf, 100, fp); 的功能是( )
A. 从fp指向的文件中写入一行字符串到buf
B. 将buf中的字符串写入到fp指向的文件
C. 从fp指向的文件中读取100个字符(不包含结尾处理)
D. 从fp指向的文件中读取一行(最多99个字符),存入buf并在末尾添加'\0'
5. fwrite(&data, sizeof(int), 10, fp); 的含义是( )
A. 将data地址开始的10个int型数据以二进制形式写入文件fp
B. 从文件中读取10个int型数据存入data
C. 将data变量的值写入文件10次
D. 向文件写入10个字节的数据
6. 先用fprintf向文件写入"ABC",再立即用fscanf读取该文件,以下说法正确的是( )
A. fscanf能直接读到"ABC"
B. 需要先用rewind或fseek将文件位置指针移回开头,fscanf才能正确读取
C. fscanf会自动定位到文件开头
D. 对同一文件不能同时使用fprintf和fscanf
7. 用fgetc循环读取文件直到文件末尾,正确的循环条件是( )
A. while (ch = fgetc(fp)) { ... }
B. while (ch = fgetc(fp) != NULL) { ... }
C. while ((ch = fgetc(fp)) != EOF) { ... }
D. while (fgetc(fp) != '\0') { ... }
二、程序运行结果题
8. 以下程序的运行结果是【··】。(假设文件"test.txt"中内容是"Hello World")
#include <stdio.h>
main()
{
FILE *fp;
char ch;
int count = 0;
fp = fopen("test.txt", "r");
if (fp != NULL)
{
while ((ch = fgetc(fp)) != EOF)
if (ch == 'l')
count++;
fclose(fp);
}
printf("%d", count);
}
三、程序填空题
9. 以下程序的功能是:将源文件的内容复制到目标文件(逐字符复制)。请填空。
#include <stdio.h>
main()
{
FILE *fs, *fd;
char ch;
fs = fopen("source.txt", "r");
fd = fopen("dest.txt", "w");
if (fs != NULL && fd != NULL)
{
while ((ch = fgetc(fs)) != EOF)
【1】;
fclose(fs);
fclose(fd);
}
}
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是从文件中读取一个整数和一个浮点数并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 main()
L3 {
L4 FILE *fp;
L5 int a; float b;
L6 fp = fopen("data.txt", "r");
L7 fscanf(fp, "%d%f", a, b);
L8 printf("a=%d, b=%.1f
", a, b);
L9 fclose(fp);
L10 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第34练,内容是9.3 文件的读/写函数。
《编程语言基础——C语言》(第5版)一课一练 第34练
9.3 文件的读/写函数
一、单选题
1. 从文件中读取格式化数据,应使用的函数是( )
A. fscanf
B. fgetc
C. fputs
D. fwrite
【答案】A
【解析】fscanf用于从文件中按格式读取数据,用法与scanf类似,但多了FILE指针参数:fscanf(fp, "%d", &x); fgetc读取单个字符;fputs是写入字符串;fwrite用于二进制写入。
2. 要向文件中写入格式化数据 "x=10, y=20",正确的语句是( )
A. printf("x=%d, y=%d", 10, 20);
B. fprintf(fp, "x=%d, y=%d", 10, 20);
C. fscanf(fp, "x=%d, y=%d", 10, 20);
D. fputs("x=%d, y=%d", fp);
【答案】B
【解析】fprintf用于向文件写入格式化数据,第一个参数是文件指针fp,后续参数与printf相同。A中printf输出到屏幕而非文件;C中fscanf是从文件读取;D中fputs的参数顺序错误,不支持格式化。
3. 以下程序段的功能是:FILE *fp = fopen("a.txt", "r"); char ch = fgetc(fp); 执行后ch中存放的是( )
A. 文件a.txt的全部内容
B. FILE结构体的地址
C. 从a.txt中读取的第一个字符
D. 文件是否打开成功的标志
【答案】C
【解析】fgetc(fp)从fp指向的文件中读取一个字符,返回值是该字符的ASCII码(int类型,但可赋给char)。若已读到文件末尾则返回EOF(通常为-1)。连续调用fgetc可逐字符读取整个文件。
4. char buf[100]; fgets(buf, 100, fp); 的功能是( )
A. 从fp指向的文件中写入一行字符串到buf
B. 将buf中的字符串写入到fp指向的文件
C. 从fp指向的文件中读取100个字符(不包含结尾处理)
D. 从fp指向的文件中读取一行(最多99个字符),存入buf并在末尾添加'\0'
【答案】D
【解析】fgets(buf, n, fp)从文件读取一行字符串:最多读取n-1个字符存入buf,在末尾自动添加'\0',遇到换行符、读到文件末尾时则提前结束。读取的字符串会保留换行符(若有)。
5. fwrite(&data, sizeof(int), 10, fp); 的含义是( )
A. 将data地址开始的10个int型数据以二进制形式写入文件fp
B. 从文件中读取10个int型数据存入data
C. 将data变量的值写入文件10次
D. 向文件写入10个字节的数据
【答案】A
【解析】fwrite(ptr, size, count, fp)的参数含义:ptr=数据首地址,size=每个数据的大小,count=数据个数,fp=文件指针。此调用将10个int型数据(共10*4=40字节)以二进制形式写入文件。
6. 先用fprintf向文件写入"ABC",再立即用fscanf读取该文件,以下说法正确的是( )
A. fscanf能直接读到"ABC"
B. 需要先用rewind或fseek将文件位置指针移回开头,fscanf才能正确读取
C. fscanf会自动定位到文件开头
D. 对同一文件不能同时使用fprintf和fscanf
【答案】B
【解析】文件有一个位置指针,指示当前读写位置。fprintf写入后位置指针指向末尾,此时fscanf从末尾开始读,读不到数据。需要用rewind(fp)将位置指针重置到文件开头,fscanf才能读取到内容。
7. 用fgetc循环读取文件直到文件末尾,正确的循环条件是( )
A. while (ch = fgetc(fp)) { ... }
B. while (ch = fgetc(fp) != NULL) { ... }
C. while ((ch = fgetc(fp)) != EOF) { ... }
D. while (fgetc(fp) != '\0') { ... }
【答案】C
【解析】fgetc读到文件末尾时返回EOF(通常为-1,是一个宏定义)。C中(ch=fgetc(fp))!=EOF先读取字符赋给ch,再判断是否等于EOF。注意括号不能省略,否则赋值优先级低于!=。A无法区分EOF和ASCII码0。
二、程序运行结果题
8. 以下程序的运行结果是【··】。(假设文件"test.txt"中内容是"Hello World")
#include <stdio.h>
main()
{
FILE *fp;
char ch;
int count = 0;
fp = fopen("test.txt", "r");
if (fp != NULL)
{
while ((ch = fgetc(fp)) != EOF)
if (ch == 'l')
count++;
fclose(fp);
}
printf("%d", count);
}
【答案】3
【解析】程序以r模式打开test.txt,用fgetc逐字符读取直到EOF。统计小写字母'l'的出现次数:"Hello World"中含有3个'l'(注意大小写:H不是l,e也不是,l→1,l→2,o不是,空格不是,W不是,o不是,r不是,l→3,d不是)。
三、程序填空题
9. 以下程序的功能是:将源文件的内容复制到目标文件(逐字符复制)。请填空。
#include <stdio.h>
main()
{
FILE *fs, *fd;
char ch;
fs = fopen("source.txt", "r");
fd = fopen("dest.txt", "w");
if (fs != NULL && fd != NULL)
{
while ((ch = fgetc(fs)) != EOF)
【1】;
fclose(fs);
fclose(fd);
}
}
【答案】【1】fputc(ch, fd)
【解析】文件复制的基本流程:逐字符从源文件读取(fgetc),再写入目标文件(fputc)。fputc(ch, fd)将字符ch写入fd指向的文件。循环直到源文件读完(EOF),完成整个文件的复制。
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是从文件中读取一个整数和一个浮点数并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 main()
L3 {
L4 FILE *fp;
L5 int a; float b;
L6 fp = fopen("data.txt", "r");
L7 fscanf(fp, "%d%f", a, b);
L8 printf("a=%d, b=%.1f
", a, b);
L9 fclose(fp);
L10 }
【答案】【1】L7: fscanf(fp, "%d%f", a, b); → 应改为 fscanf(fp, "%d%f", &a, &b);(fscanf同scanf一样,需要传入变量的地址而非变量本身)
【解析】fscanf的参数规则与scanf相同:格式化字符串后的参数必须是对应变量的地址。a和b是值而非地址,需改为&a和&b。不加&会导致fscanf将a和b的值当作地址使用,产生运行时错误。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$