c语言课后答案 5.docx
- 文档编号:12148527
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:16
- 大小:18.04KB
c语言课后答案 5.docx
《c语言课后答案 5.docx》由会员分享,可在线阅读,更多相关《c语言课后答案 5.docx(16页珍藏版)》请在冰豆网上搜索。
c语言课后答案5
第10章文件
习题
一、单选题。
(在以下每一题的四个选项中,请选择一个正确的答案。
)
【题10.1】B
【题10.2】B
【题10.3】A
【题10.4】C
【题10.5】B
【题10.6】A
【题10.7】B
【题10.8】C
【题10.9】C
【题10.10】A
二、判断题。
(判断下列各叙述的正确性,分别在()内标记√或×。
)
【题10.11】×
【题10.12】×
【题10.13】×
【题10.14】√
【题10.15】√
【题10.16】√
【题10.17】√
【题10.18】√
【题10.19】√
【题10.20】×
三、填空题。
(请在下面各叙述的空白处填入合适的内容。
)
【题10.21】键盘
【题10.22】0
【题10.23】使位置指针重新返回文件的开头
【题10.24】从文件fp中读取长度不超过n-1的字符串存入指针str指向的内存
【题10.25】从键盘中读取字符
【题10.26】标准输入/输出
【题10.27】文件出错
【题10.28】将位置指针从当前位置向前移动100个字节
【题10.29】打开
【题10.30】取文件指针的当前位置
四、程序填空题。
(请在下面程序空白处填入合适的语句。
)
【题10.31】!
feof(fp)
【题10.32】"bi.dat","w"
【题10.33】"wb";&j;fp
五、编程题。
(对下面的问题编写程序并上机验证。
)
【题10.34】在文本文件file1.txt中有若干个句子,现在要求把它们按每行一个句子的格式输出到文本文件file2.txt中。
#include
#include
#include
main()
{
FILE*fp1,*fp2;
charch;
if((fp1=fopen("file1.txt","r"))==NULL)
{
printf("\nCannotopenfile!
\n");
getch();
exit
(1);
}
if((fp2=fopen("file2.txt","w"))==NULL)
{
printf("\nCannotopenfile!
\n");
getch();
exit
(1);
}
while((ch=fgetc(fp1))!
=EOF)
{
fputc(ch,fp2);
if(ch=='.')fputc('\n',fp2);
}
fclose(fp1);
fclose(fp2);
}
【题10.35】统计文本文件file.txt中所包含的字母、数字和空白字符的个数。
#include
#include
#include
main()
{
FILE*fp;
charch;
intx1=0,x2=0,x3=0;
if((fp=fopen("file.txt","r"))==NULL)
{
printf("\nCannotopenfile!
\n");
getch();
exit
(1);
}
while((ch=fgetc(fp))!
=EOF)
{
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))x1++;
if(ch>='1'&&ch<='9')x2++;
if(ch==''||ch=='\t'||ch=='\n')x3++;
}
fclose(fp);
printf("File.txtcontains%dletters,%dnumbersand%dblanks!
\n",x1,x2,x3);
}
【题10.36】将磁盘文件f1.txt和f2.txt中的字符按从小到大的顺序输出到磁盘文件f3.txt中。
#include
#include
#include
main()
{
FILE*fp;
charch[200],c;
inti=0,j,n;
if((fp=fopen("f1.txt","r"))==NULL)
{
printf("\nCannotopenfile!
\n");
getch();
exit
(1);
}
while((c=fgetc(fp))!
=EOF)
ch[i++]=c;
fclose(fp);
if((fp=fopen("f2.txt","r"))==NULL)
{
printf("\nCannotopenfile!
\n");
getch();
exit
(1);
}
while((c=fgetc(fp))!
=EOF)
ch[i++]=c;
fclose(fp);
n=i;
for(i=1;i for(j=0;j if(ch[j]>ch[j+1]) { c=ch[j]; ch[j]=ch[j+1]; ch[j+1]=c; } if((fp=fopen("f3.txt","w"))==NULL) { printf("\nCannotopenfile! \n"); getch(); exit (1); } for(i=0;i fputc(ch[i],fp); fclose(fp); } 【题10.37】统计磁盘文件file.txt中的单词个数。 分析: 如果在一个“空白字符”(包括空格、换行和制表符)或标点符号(常用的有英文句号、逗号、问号和感叹号)后出现一个非空白字符,就说明出现了一个单词。 设两个变量count和white,count用来记录单词的个数,初值为0;white值为0,代表当前位置上是非空白字符,即使下一个读入的是非空白字符,也只能说明它属于同一个单词内的字符;white值为非0,代表当前位置上是空白字符或标点符号,如果下一个字符为非空白字符就表示“新单词开始”。 white的初值置为1,以便能正确统计第1个单词(认为第1个非空白字符在空白字符或标点符号之后),循环读入字符,若读入的不是空白字符或标点符号,而white为非0值,就使count加1,white置为0。 #include #include #include main() { FILE*fp; charch; intwhite=1,count=0; if((fp=fopen("file.txt","r"))==NULL) { printf("\nCannotopenfile! \n"); getch(); exit (1); } while((ch=fgetc(fp))! =EOF) switch(ch) { case'': case'\t': case'\n': case'.': case',': case'? ': case'! ': white++;break; default: if(white) { white=0; count++; } } fclose(fp); printf("File.txtcontains%dwords! \n",count); } 【题10.38】有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。 #include"stdio.h" main() {FILE*fp; inti,j,n,ni; charc[160],t,ch; if((fp=fopen("A","r"))==NULL) {printf("fileAcannotbeopened\n"); exit(0);} printf("\nAcontentsare: \n"); for(i=0;(ch=fgetc(fp))! =EOF;i++) {c[i]=ch; putchar(c[i]); } fclose(fp); ni=i; if((fp=fopen("B","r"))==NULL) {printf("fileBcannotbeopened\n"); exit(0);} printf("\nBcontentsare: \n"); for(i=0;_____________;i++) {c[i]=ch; putchar(c[i]); } fclose(fp); n=i; for(i=0;i for(j=i+1;j if(c[i]>c[j]) {t=c[i];c[i]=c[j];c[j]=t;} printf("\nCfileis: \n"); fp=fopen("C","w"); for(i=0;i {putc(_________,fp); putchar(c[i]); } fclose(fp); } 【题10.39】编写程序,将一个文本文件的内容连接到另一个文本文件的末尾。 #include"stdio.h" #include"stdlib.h" voidmain(intargc,char*argv[]) {FILE*fp1,*fp2; chars[80]; if((fp1=fopen(argv[1],"a"))==NULL) abort(); if((fp2=fopen(argv[2],"r"))==NULL) abort(); while((fgets(s,80,fp2))! =NULL) fputs(s,fp1); fputc(0x1a,fp1); printf("ok! "); fclose(fp1); fclose(fp2); } 【题10.40】设计disp程序,此程序的用法如下: disp 文件1,文件2,…,文件n 它将依次显示上述所有文件的内容,相邻文件之间空两行。 #include"stdio.h" #include"stdlib.h" voidmain(intargc,char*argv[]) {FILE*fp; inti; charch; for(i=1;i {if((fp=fopen(argv[i],"r"))==NULL) abort(); while((ch=fgetc(fp))! =EOF) fputc(ch,stdout); fclose(fp); printf("\n"); } } 【题10.41】编写程序,将磁盘中当前目录下名为“file1.txt”的文本文件复制在同一目录下,文件名改为“file2.txt”。 #include"stdio.h" #include"stdlib.h" voidmain(intargc,char*argv[]) {FILE*in,*out; charch; if(argc<3) abort(); if((in=fopen("file1.txt","r"))==NULL) {printf("Noopenthisfile! "); abort(); } if((out=fopen("file2.txt","w"))==NULL) {printf("Noopenthisfile! "); abort(); } while((ch=fgetc(in))! =EOF) fputc(ch,out); fputc(0x1a,out); puts("Onefilecopied! "); fclose(in); fclose(out); } 【题10.42】将10名职工的数据从键盘输入,然后送到磁盘文件worker.rec中保存。 设职工数据包括职工号、姓名、工资。 再从磁盘读入这些数据,并依次显示在屏幕上(要求用fread()函数和fwrite()函数),试编写程序。 #include"stdio.h" #include"stdlib.h" #defineN10 voidmain() {structworkrd {charid[5]; charname[10]; intsalary; }; structworkrds[N]; inti; FILE*fp; for(i=0;i {printf("Inputrecord: "); scanf("%s%s%d",s[i].id,s[i].name,&s[i].salary); printf("\n"); } if((fp=fopen("worker.dat","wb"))==NULL) {printf("Filenotopen."); abort(); } for(i=0;i fwrite(&s[i],sizeof(structworkrd),1,fp); fclose(fp); if((fp=fopen("worker.rec","rb"))==NULL) {printf("Filenotopen."); abort(); } for(i=0;i {fread(&s[i],sizeof(structworkrd),1,fp); printf("%s%s%d\n",s[i].id,s[i].name,s[i].salary); } fclose(fp); } 【题10.43】设职工数据文件(worker.rec)中有10条记录,编写程序要求在屏幕上输出职工号为偶数的职工的记录。 #include"stdio.h" #include"stdlib.h" #defineN10 voidmain() {structworkrd {charid[5]; charname[10]; intsalary; }; structworkrds[N]; inti; FILE*fp; if((fp=fopen("worker.rec","rb"))==NULL) {printf("Filenotopen."); abort(); } for(i=0;i {fseek(fp,i*sizeof(structworkrd),0); fread(&s[i],sizeof(structworkrd),1,fp); printf("%s%s%d\n",s[i].id,s[i].name,s[i].salary); } fclose(fp); } 【题10.44】编写程序,打开一个文本文件,按逆序显示其文本文件内容。 #include"stdio.h" #include"string.h" #include"stdlib.h" #defineN800 voidmain() {FILE*fp; inti,len; charch,c[N]; if((fp=fopen("f1.dat","r"))==NULL) {printf("filenotopened! \n"); abort(); } for(i=0;((ch=fgetc(fp))! =EOF&&i c[i]=ch; c[i]='\0'; fclose(fp); len=strlen(c); for(i=0;i {ch=c[i]; c[i]=c[len-i-1]; c[len-i-1]=ch; } if((fp=fopen("tt.txt","w"))==NULL) {printf("filenotopened! \n"); abort(); } for(i=0;i {fputc(c[i],fp); printf("%c",c[i]); } fputc(0x1a,fp); fclose(fp); } 【题10.45】设文件student.dat中存放着学生的基本情况,这些情况由以下结构体描述: structstudent {longintnum;//学号 charname[10];//姓名 intage;//性别 charspeciality[20];//专业 }; 请编写程序,输出学号在97010~97020之间的学生学号、姓名、年龄和性别。 #include"stdio.h" structstudent {longintnum; charname[10]; intage; charsex; charspeciality[20]; }; FILE*fp; voidmain() {structstudentstd; fp=fopen("student.dat","rb"); if(fp==NULL) printf("filenotfound\n"); else {while(! feof(fp)) {fread(&std,sizeof(structstudent),1,fp); if(std.num>=97010&&std.num<=97020) printf("%ld%s%d%c\n",std.num,std.name,std.age,std.sex); } fclose(fp); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言课后答案 语言 课后 答案