C语言程序设计 – 第 11 章课后习题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("File open error!\n"); exit(0); } while (fgets(s, 20, fp) != NULL) { if ( flag )
printf("%3d:%s", ++i, s); else
printf("%s", s); if ( strlen(s) < 20-1 ) flag = 1; else flag = 0; } fclose(fp); }
C. 初始化文件的位置指针
D. 以上答案均不正确
(解释:的确如此)
二、填空题
1. 以下程序由终端键盘输入一个文件名,然后把终端键盘输入的字符依次存放到该文件中,用#号作为结束输入 的标志,请填空。
# include <stdio.h> # include <stdlib.h> main() {
FILE *fp; char ch, fname[10]; printf("Enter the name of file:\n"); gets(fname); if ((fp= fopen(fname, "w") ) == NULL) {
件的操作都是对这个信息区操作,文件操作完毕后,需要将信息区清除以便释放内存(称“关闭文件”)。)
3. 要打开一个已存在的非空二进制文件“file”用于随机读写,正确的语句是(B)
A. fp = fopen("file", "rb");
B. fp = fopen("file", "rb+");
C. fp = fopen("file", "wb");
此处已经判断过输入的字符 ch 不为#,所以要将这个字符存入 fp 中。) 2. 以下程序用来统计文件中字符的个数,请填空。
# include <stdio.h> # include <stdlib.h> main() {
FILE *fp; long num = 0; if ((fp=fopen("fname.dat", "r" )) == NULL) {
C. 将文件指针从文件末尾向前移动 20 个字节
D. 将文件指针移到距离当前位置 20 个字节处
(解释:第三个参数 2(SEEK_END)表示参考点是文件末尾,-20L 表示需要的偏移量是向前 20 字节。)
13. 函数 ftell(fp)的作用是(B)
A. 移动文件的位置指针
B. 得到文件的当前读写位置
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜 2014 年 6 月 20 日星期五 Made by xkwy.
2/8
fclose(fp);
fp = fopen("d1.dat", "r");
fscanf(fp, "%d%d", &k, &n);
printf("%d %d\n", k, n);
D. fp = fopen("file", "wb+");
(解释:文件已经存在且非空,D 会将文件原有的内容清空。)
4. 当顺利执行了文件关闭操作时,fclose 函数的返回值是(C)
A. -1
B. TRUE
C. 0
D. 1
(解释:文件顺利关闭时返回 0,失败返回 EOF(-1))
5. 标准库函数 fgets(s, n, f)的功能是(B)
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜 2014 年 6 月 20 日星期五 Made by xkwy.
4/8
(解释:①根据下文可知,此处应判断文件是否打开成功;②程序需要打印行号,而若一行大于 19 个字符则
只截取前 19 个字符,因此此处被分割成两行,为了使这两次读入时只在第一次打印行号,需要用到一个标识
6. 对 fp 所指文件,若已读到文件结束,则库函数 feof(fp)的返回值是(C)
A. EOF
B. 0
C. 非零值
D. NULL
(解释:feof()函数用于判断文件是否结束。若是,返回非零值;否则返回。)
7. 若调用 fputc 函数输出字符成功,则其返回值是(D)
A. EOF
B. 1
C. 0
D. 输出的字符
/****found****/
//A possible answer: while (feof(fp) == 0)
while (feof(fp) != 0)
{
ch = fgetc(fp);
if (!feof(fp)) num++;
}
printf("%ld", num);
fclose(fp);
}
(解释:①num 应当初始化为 0;②当未到文件尾时继续循环)
(解释:若调用成功,则返回被输出的字符,否则返回 EOF)
8. 设有 int a[5];,且已知 fp 是指向某个已打开的磁盘文件的文件指针,则下面函数调用语句中不正确的是(C)
A. fread(a, sizeof(int), 5, fp);
B. fread(&a[0], sizeof(int), 1, fp);
2. 下面的程序能求“d:ab.c”文件中的最长行和该行所在的位置。
# include <stdio.h>
main()
{
int lin, i, j = 0, k = 0;
FILE *fp;
fp = fopen("d:ab.c", "r");
/****found****/
//A possible answer: rewind(fp);
A. 从文件 f 中读取长度为 n 的字符串存入指针 s 所指的内存
B. 从文件 f 中读取长度不超过 n-1 的字符串存入指针 s 所指的内存
C. 从文件 f 中读取 n 个字符串存入 s 所指的内存
D. 从文件 f 中读取 n-1 个字符串存入指针 s 所指的内存
(解释:在读出 n-1 个字符之前,如果遇到了换行符或 EOF,则读出结束。)
变量来判断是否是一行的开始,由于 flag 初始化为 1,因此第一次打印需要输出行号;②若本次读入的长度
不足 19 个字符,说明此行并未结束,将标识变量置为 1 使下一次输出时打印一个行号,否则将标识变量置为
0,下一次输出时直接追加到这一行的后面。)
三、改错题 每个/****found****/下面的语句中都有一处错误,请将错误的地方改正。注意:不得增行或删行,也不得更 改程序的结构。
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜 2014 年 6 月 20 日星期五 Made by xkwy.
1/8
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜
一、选择题
1. C 语言可以处理的文件类型是(B)
A. 文本文件和数据文件
B. 文本文件和二进制文件
的文件的指针。)
4. 以下程序显示指定文件,在显示文件内容的同时加上行号。 # include <stdio.h> # include <stdlib.h> # include <string.h>
main() {
char s[20], filename[20]; int flag = 1, i = 0; FILE *fp; printf("Enter filename: "); gets(filename); if ((fp=fopen(filename, "r")) == NULL ) {
printf("Open error!\n"); exit(0);
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜 2014 年 6 月 20 日星期五 Made by xkwy.
3/8
}
do
{
fgetc(fp);
if (feof(fp)) break;
num++;
} while (1);
的形式是(C)
struct st
{
char name[源自文库];
int num;
float s[4];
} student[50];
A. fwrite(student, sizeof(struct student), 50, fp);
B. fwrite(student, 50*sizeof(struct student), 1, fp);
3. 以下程序将从终端读入的 10 个整数以二进制方式写入一个名为“bi.dat”的新文件中,请填空。
# include <stdio.h>
# include <stdlib.h>
FILE *fp;
main() {
int i, j; if ((fp=fopen( "bi.dat" , "wb")) == NULL)
B. 将位置指针指向文件中所要求的特定位置
C. 使位置指针指向文件的末尾
D. 使位置指针自动移到下一个字符的位置
(解释:的确如此)
12. 函数调用语句:fseek(fp, -20L, 2);的含义是(C)
A. 将文件指针移动到距离文件头 20 个字节处
B. 将文件指针从当前位置向后移动 20 个字节
C. fwrite(student, 25*sizeof(struct student), 25, fp);
D. for (i = 0; i < 50; i++) fwrite(&student[i], sizeof(struct student), 1, fp);
(解释:C 中要写入的长度是 25*25 个元素,而 student 只分配 50 个元素的内存空间,这样会出错。)
exit(0); for (i = 0; i < 10; i++) {
scanf("%d", &j); fwrite( &j , sizeof(int), 1, fp ); } fclose(fp); } (解释:①此处显然要填入要打开的文件名;②将一段内存区域写入文件中,内存块的首地址;③需要写入
fclose(fp);
}
A. 20 30
B. 20 50
C. 30 50
D. 30 20
(解释:程序先以写方式打开一个文件,将 i 和 j 写入文件中,然后又以读方式将其中的两个整数读入到 k 和
n 中,最后在屏幕上打印 k 和 n。)
11. 函数 rewind()的作用是(A)
A. 使位置指针重新返回文件的开头
C. fread(a[0], sizeof(int), 5, fp);
D. fread(a, 5*sizeof(int), 1, fp);
(解释:第一个参数应当是一个内存区域的首地址。)
9. 设有以下结构类型,假设结构数组 student 中的元素都已有值,若要将这些元素写到磁盘文件 fp 中,以下错误
printf("num = %ld\n", num);
fclose(fp);
}
(解释:①此程序仅需统计文件的字符数,不涉及写入,宜用读模式;②根据下文的 feof()函数可知此处应当
是将文件的位置指针向后移动一个字符,fgetc()函数的功能是从文件中读入一个字符,并将文件读取指针移
到下一个字符。)
1. 以下程序用变量 num 统计文件 a1 中字符的个数。 # include <stdio.h>
main()
{
FILE *fp;
/****found****/
//A possible answer: long num = 0;
long num;
char ch;
fp = fopen("a1", "r");
C. 数据文件和二进制文件
D. 以上答案都不完全
(解释:文本文件、数据文件、二进制文件等 C 语言都可以处理)
2. 对文件操作的一般步骤是(A)
A. 打开文件→操作文件→关闭文件
B. 操作文件→修改文件→关闭文件
C. 读写文件→打开文件→关闭文件
D. 读文件→写文件→关闭文件
(解释:对于缓冲文件系统,操作文件之前,需要在内存中建立一个“文件信息区”(称“打开文件”),对文
10. 下面程序的运行结果是(A)
# include <stdio.h>
main() {
FILE *fp; int i = 20, j = 30, k, n; fp = fopen("d1.dat", "w"); fprintf(fp, "%d\n", i); fprintf(fp, "%d\n", j);
printf("Open error!\n"); exit(0); } printf("Enter data:\n"); while ((ch=getchar()) != '#') fputc( ch , fp); fclose(fp); } (解释:①此处显然是判断文件是否打开成功,此时已经获得所需文件名,因此需要执行文件打开函数;②
rewind(*fp);
printf("%3d:%s", ++i, s); else
printf("%s", s); if ( strlen(s) < 20-1 ) flag = 1; else flag = 0; } fclose(fp); }
C. 初始化文件的位置指针
D. 以上答案均不正确
(解释:的确如此)
二、填空题
1. 以下程序由终端键盘输入一个文件名,然后把终端键盘输入的字符依次存放到该文件中,用#号作为结束输入 的标志,请填空。
# include <stdio.h> # include <stdlib.h> main() {
FILE *fp; char ch, fname[10]; printf("Enter the name of file:\n"); gets(fname); if ((fp= fopen(fname, "w") ) == NULL) {
件的操作都是对这个信息区操作,文件操作完毕后,需要将信息区清除以便释放内存(称“关闭文件”)。)
3. 要打开一个已存在的非空二进制文件“file”用于随机读写,正确的语句是(B)
A. fp = fopen("file", "rb");
B. fp = fopen("file", "rb+");
C. fp = fopen("file", "wb");
此处已经判断过输入的字符 ch 不为#,所以要将这个字符存入 fp 中。) 2. 以下程序用来统计文件中字符的个数,请填空。
# include <stdio.h> # include <stdlib.h> main() {
FILE *fp; long num = 0; if ((fp=fopen("fname.dat", "r" )) == NULL) {
C. 将文件指针从文件末尾向前移动 20 个字节
D. 将文件指针移到距离当前位置 20 个字节处
(解释:第三个参数 2(SEEK_END)表示参考点是文件末尾,-20L 表示需要的偏移量是向前 20 字节。)
13. 函数 ftell(fp)的作用是(B)
A. 移动文件的位置指针
B. 得到文件的当前读写位置
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜 2014 年 6 月 20 日星期五 Made by xkwy.
2/8
fclose(fp);
fp = fopen("d1.dat", "r");
fscanf(fp, "%d%d", &k, &n);
printf("%d %d\n", k, n);
D. fp = fopen("file", "wb+");
(解释:文件已经存在且非空,D 会将文件原有的内容清空。)
4. 当顺利执行了文件关闭操作时,fclose 函数的返回值是(C)
A. -1
B. TRUE
C. 0
D. 1
(解释:文件顺利关闭时返回 0,失败返回 EOF(-1))
5. 标准库函数 fgets(s, n, f)的功能是(B)
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜 2014 年 6 月 20 日星期五 Made by xkwy.
4/8
(解释:①根据下文可知,此处应判断文件是否打开成功;②程序需要打印行号,而若一行大于 19 个字符则
只截取前 19 个字符,因此此处被分割成两行,为了使这两次读入时只在第一次打印行号,需要用到一个标识
6. 对 fp 所指文件,若已读到文件结束,则库函数 feof(fp)的返回值是(C)
A. EOF
B. 0
C. 非零值
D. NULL
(解释:feof()函数用于判断文件是否结束。若是,返回非零值;否则返回。)
7. 若调用 fputc 函数输出字符成功,则其返回值是(D)
A. EOF
B. 1
C. 0
D. 输出的字符
/****found****/
//A possible answer: while (feof(fp) == 0)
while (feof(fp) != 0)
{
ch = fgetc(fp);
if (!feof(fp)) num++;
}
printf("%ld", num);
fclose(fp);
}
(解释:①num 应当初始化为 0;②当未到文件尾时继续循环)
(解释:若调用成功,则返回被输出的字符,否则返回 EOF)
8. 设有 int a[5];,且已知 fp 是指向某个已打开的磁盘文件的文件指针,则下面函数调用语句中不正确的是(C)
A. fread(a, sizeof(int), 5, fp);
B. fread(&a[0], sizeof(int), 1, fp);
2. 下面的程序能求“d:ab.c”文件中的最长行和该行所在的位置。
# include <stdio.h>
main()
{
int lin, i, j = 0, k = 0;
FILE *fp;
fp = fopen("d:ab.c", "r");
/****found****/
//A possible answer: rewind(fp);
A. 从文件 f 中读取长度为 n 的字符串存入指针 s 所指的内存
B. 从文件 f 中读取长度不超过 n-1 的字符串存入指针 s 所指的内存
C. 从文件 f 中读取 n 个字符串存入 s 所指的内存
D. 从文件 f 中读取 n-1 个字符串存入指针 s 所指的内存
(解释:在读出 n-1 个字符之前,如果遇到了换行符或 EOF,则读出结束。)
变量来判断是否是一行的开始,由于 flag 初始化为 1,因此第一次打印需要输出行号;②若本次读入的长度
不足 19 个字符,说明此行并未结束,将标识变量置为 1 使下一次输出时打印一个行号,否则将标识变量置为
0,下一次输出时直接追加到这一行的后面。)
三、改错题 每个/****found****/下面的语句中都有一处错误,请将错误的地方改正。注意:不得增行或删行,也不得更 改程序的结构。
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜 2014 年 6 月 20 日星期五 Made by xkwy.
1/8
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜
一、选择题
1. C 语言可以处理的文件类型是(B)
A. 文本文件和数据文件
B. 文本文件和二进制文件
的文件的指针。)
4. 以下程序显示指定文件,在显示文件内容的同时加上行号。 # include <stdio.h> # include <stdlib.h> # include <string.h>
main() {
char s[20], filename[20]; int flag = 1, i = 0; FILE *fp; printf("Enter filename: "); gets(filename); if ((fp=fopen(filename, "r")) == NULL ) {
printf("Open error!\n"); exit(0);
C 语言程序设计 – 第十一章课后习题
电子 13-02 班 王双喜 2014 年 6 月 20 日星期五 Made by xkwy.
3/8
}
do
{
fgetc(fp);
if (feof(fp)) break;
num++;
} while (1);
的形式是(C)
struct st
{
char name[源自文库];
int num;
float s[4];
} student[50];
A. fwrite(student, sizeof(struct student), 50, fp);
B. fwrite(student, 50*sizeof(struct student), 1, fp);
3. 以下程序将从终端读入的 10 个整数以二进制方式写入一个名为“bi.dat”的新文件中,请填空。
# include <stdio.h>
# include <stdlib.h>
FILE *fp;
main() {
int i, j; if ((fp=fopen( "bi.dat" , "wb")) == NULL)
B. 将位置指针指向文件中所要求的特定位置
C. 使位置指针指向文件的末尾
D. 使位置指针自动移到下一个字符的位置
(解释:的确如此)
12. 函数调用语句:fseek(fp, -20L, 2);的含义是(C)
A. 将文件指针移动到距离文件头 20 个字节处
B. 将文件指针从当前位置向后移动 20 个字节
C. fwrite(student, 25*sizeof(struct student), 25, fp);
D. for (i = 0; i < 50; i++) fwrite(&student[i], sizeof(struct student), 1, fp);
(解释:C 中要写入的长度是 25*25 个元素,而 student 只分配 50 个元素的内存空间,这样会出错。)
exit(0); for (i = 0; i < 10; i++) {
scanf("%d", &j); fwrite( &j , sizeof(int), 1, fp ); } fclose(fp); } (解释:①此处显然要填入要打开的文件名;②将一段内存区域写入文件中,内存块的首地址;③需要写入
fclose(fp);
}
A. 20 30
B. 20 50
C. 30 50
D. 30 20
(解释:程序先以写方式打开一个文件,将 i 和 j 写入文件中,然后又以读方式将其中的两个整数读入到 k 和
n 中,最后在屏幕上打印 k 和 n。)
11. 函数 rewind()的作用是(A)
A. 使位置指针重新返回文件的开头
C. fread(a[0], sizeof(int), 5, fp);
D. fread(a, 5*sizeof(int), 1, fp);
(解释:第一个参数应当是一个内存区域的首地址。)
9. 设有以下结构类型,假设结构数组 student 中的元素都已有值,若要将这些元素写到磁盘文件 fp 中,以下错误
printf("num = %ld\n", num);
fclose(fp);
}
(解释:①此程序仅需统计文件的字符数,不涉及写入,宜用读模式;②根据下文的 feof()函数可知此处应当
是将文件的位置指针向后移动一个字符,fgetc()函数的功能是从文件中读入一个字符,并将文件读取指针移
到下一个字符。)
1. 以下程序用变量 num 统计文件 a1 中字符的个数。 # include <stdio.h>
main()
{
FILE *fp;
/****found****/
//A possible answer: long num = 0;
long num;
char ch;
fp = fopen("a1", "r");
C. 数据文件和二进制文件
D. 以上答案都不完全
(解释:文本文件、数据文件、二进制文件等 C 语言都可以处理)
2. 对文件操作的一般步骤是(A)
A. 打开文件→操作文件→关闭文件
B. 操作文件→修改文件→关闭文件
C. 读写文件→打开文件→关闭文件
D. 读文件→写文件→关闭文件
(解释:对于缓冲文件系统,操作文件之前,需要在内存中建立一个“文件信息区”(称“打开文件”),对文
10. 下面程序的运行结果是(A)
# include <stdio.h>
main() {
FILE *fp; int i = 20, j = 30, k, n; fp = fopen("d1.dat", "w"); fprintf(fp, "%d\n", i); fprintf(fp, "%d\n", j);
printf("Open error!\n"); exit(0); } printf("Enter data:\n"); while ((ch=getchar()) != '#') fputc( ch , fp); fclose(fp); } (解释:①此处显然是判断文件是否打开成功,此时已经获得所需文件名,因此需要执行文件打开函数;②
rewind(*fp);