




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章 输入、输出及文件管理一、选择题1以下叙述中错误的是_。 A)C语言中对二进制文件的访问速度比文本文件快 B)C语言中,随机文件以二进制代码形式存储数据 C)语句 FILE fp; 定义了一个名为fp的文件指针 D)C语言中的文本文件以ASCII码形式存储数据答案:C2有以下程序 main() FILE *fp; int i, k, n; fp=fopen(data.dat, w+); for(i=1; i6; i+) fprintf(fp,%d ,i); if(i%3=0) fprintf(fp,n); rewind(fp); fscanf(fp, %d%d, &k, &n); printf(%d %dn, k, n); fclose(fp); 程序运行后的输出结果是_。 A)0 0 B)123 45 C)1 4 D)1 2答案:D3以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是_。A)feof(fp) B)ftell(fp) C)fgetc(fp) D)rewind(fp)答案:D4有以下程序 void WriteStr(char *fn,char *str) FILE *fp; fp=fopen(fn,w);fputs(str,fp);fclose(fp); main() WriteStr(t1.dat,start); WriteStr(t1.dat,end); 程序运行后,文件t1.dat中的内容是_。A)start B)end C)startend D)endrt答案:B5. 标准函数 fgets(s, n, f) 的功能是A) 从文件f中读取长度为n的字符串存入指针s所指的内存B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存C) 从文件f中读取n个字符串存入指针s所指的内存D) 从文件f中读取长度为n-1的字符串存入指针s所指的内存答案:B6. 若fp是指向某文件的指针,且已读到该文件的末尾,则C语言函数feof(fp)的返回值是A) EOF B) -1 C) 非零值 D) NULL答案:D7. 若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是A) fopen(A:userabc.txt,r) B) fopen(A:userabc.txt,r+)C) fopen(A:userabc.txt,rb) D) fopen(A:userabc.txt,w)答案:B8. 程序中头文件typel.h 的内容是:#define N 5#define M1 N*3程序如下:#include #define type1.h#define M2 N*2void main()int i;i=M1+M2; printf(%dn,i);程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 30答案:C9. 有以下程序#include void main() FILE *fp; int i=20,j=30,k,n;fp=fopen(d1.dat,w);fprintf(fp,%dn,i);fprintf(fp,%dn,j);fclose(fp);fp=fopen(d1.dat,r);fscanf(fp,%d%d,&k,&n);printf(%d %dn,k,n);fclose(fp);程序运行后的输出结果是A) 20 30 B) 20 50 C) 30 50 D) 30 20答案:A10. 以下叙述中错误的是A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以B) 在程序结束时,应当用fclose函数关闭已打开的文件C) 在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据D) 不可以用FILE定义指向二进制文件的文件指针答案:D11. 以下叙述中不正确的是A)语言中的文本文件以ASC码形式存储数据B)语言中对二进制文件的访问速度比文本文件快C)语言中,随机读写方式不适用于文本文件D)语言中,顺序读写方式不适用于二进制文件答案:D12. 有以下程序#include void main( ) FILE *fp; int i,k=0,n=0;fp=fopen(d1.dat,w);for(i=1;i4;i+) fprintf(fp,%d,i);fclose(fp);fp=fopen(d1.dat,r);fscanf(fp,%d%d,&k,&n); printf(%d %dn,k,n);fclose(fp);执行后输出结果是A) 1 2 B) 123 0 C) 1 23 D) 0 0答案:B13. 有如下程序#include void main( )FILE *fp1;fp1=fopen(f1.txt,w);fprintf(fp1,abc);fclose(fp1);若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为 A)goodabc B)abcd C)abc D)abcgood答案:C14. fopen( )函数的mode取值”w+”和”a+”时都可以写入数据,它们之间的差别是 。A”w+”可在中间插入数据,而”a+”只能在末尾追加数据 B”w+”和”a+”只能在末尾追加数据 C在文件存在时,”w+”清除原文件数据,而”a+”保留原文件数据 D”w+”不能在中间插入数据,而”a+”只能在末尾追加数据答案:C15. 若定义:int a5;,fp是指向某一已经正确打开了的文件的指针,下面的函数调用形式中不正确的是( )。(A)fread (a0,sizeof (int ),5,fp);(B)fread (&a0,5 * sizeof (int ),1,fp);(C)fread (a,sizeof (int ),5,fp);(D)fread (a, 5 * sizeof (int ),1,fp);答案:(A)16. 以下程序的功能是 。#include void main ( )FILE *fp;char str = HELLO;fp=fopen(PRN, w);fputs (str,fp);fclose (fp);A在屏幕上显示”HELLO” B把”HELLO”存入PRN文件中 C在打印机上打印出”HELLO” D以上都不对答案:C二、填空题1C语言把文件看作是一个字符(字节)的序列。根据数据的组织形式,可以分为_【_1_】_文件和二进制文件;按文件的读写方式,可以分为顺序文件和_【_2_】_。答案:【1】ASCII;【2】随机文件2ASCII文件又称为_【_1_】_文件,它的每一个字节存放一个ASCII码,代表一个_【_2_】 。答案:【1】文本;【2】字符3二进制文件是把数据按其在内存中的_【_1_】_形式原样输出到磁盘上存放。答案:【1】存储4ASCII文件便于对_【_1_】_进行处理,但一般占存储空间较多,而且要花费转换时间(二进制形式与ASCII码间的转换)。答案:【1】字符5二进制文件存储_【_1_】_可节省外存空间和转换时间,但不便于处理_【_2_】_。答案:【1】数值;【2】字符6C语言中文件并不是由_【_1_】_组成的,对文件的存取是以字符(字节)为单位的。答案:【1】记录7C语言中通过设置指向FILE类型结构体的_【_1_】_变量,来实现对文件的访问。答案:【1】指针8对文件读写之前应该_【_1_】_该文件,在使用结束之后应_【_2_】_该文件。答案:【1】打开;【2】关闭9在打开一个文件时,告诉编译系统三个信息:需要访问的_【_1_】_、使用文件的_【_2_】_、指向被打开文件的指针变量。答案:【1】文件名;【2】方式10_【_1_】_和_【_2_】_函数一般用于二进制文件的输入输出,因为它们是按数据块的长度来处理输入输出的。答案:【1】fread;【2】fwrite11文件中有一个位置指针,指向当前的_【_1_】_位置。每次读写完一个字符后,该位置指针自动移动指向下一个字符位置。答案:【1】读写12_【_1_】_函数的作用是使位置指针重新返回文件的开头。答案:【1】rewind13_【_1_】_函数可以改变文件的位置指针,实现随机读写。答案:【1】fseek14_【_1_】_函数的作用是返回文件位置指针的当前值。答案:【1】ftell15若文件位置指针已指到文件末尾,则函数feof的值为_【_1_】_。答案:【1】真(非0)16. 以下C语言程序将磁盘中的一个文件复制到另一个文件中,两个文件名在命令行中给出。#include void main(int argc; char *argv ) FILE *f1,*f2; char ch;if(argc 【1】 ) printf(Parameters missing!n); return; if(f1=fopen(argv1,r) = NULL)|(f2=fopen(argv2,w) = NULL) printf(Can not open file!n); return;while( 【2】 )fputc(fgetc(f1),f2);fclose(f1); fclose(f2); 答案:【1】3; 【2】! feof(f1)或feof(f1)=017. 以下程序由终端输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志.请填空.#include void main() FILE * fp;char ch,fname10;printf(lnput the name of filen);gets(fname);if(fp= 【1】 )=NULL) printf(Cannot openn); return;printf(Enter datan);while(ch=getchar()!=#) fputc( 【2】 ,fp);fclose(fp); 答案:【1】fopen(fname,w); 【2】ch;18. 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件文件中形成文本文件,并将字符的个数写到文件尾部,请填空。#include void main() FILE *fp;char ch,fname32; int count=0;printf(Input the filename :); scanf(%s,fname);if(fp=fopen( 【1】 ,w+)=NULL) printf(Cant open file:%s n,fname); return;printf(Enter data:n);while(ch=getchar()!=#) fputc(ch,fp); count+;fprintf( 【2】 ,n%dn, count);fclose(fp);答案:【1】fname; 【2】fp;19.下面程序把从终端读入的文本(用#作为文本结束标志)复制到一个名为text.dat的新文件中。请补全所缺语句。#include FILE *fp;Void main( )char ch;if(fp=fopen( 【1】 )=NULL)exit(0);while(ch=getchar()!=#)fputc(ch,fp); 【2】 ;答案:【1】text.dat, w 【2】fclose20. 以下程序用来统计文件中字符个数。请填空。#include void main() FILE *fp; long num=0L;if(fp=fopen(fname.dat,r)=NULL) printf(Open errorn); return;while( 【1】 ) fgetc(fp); num+;printf(num=%Ldn,num-1);fclose(fp);答案:【1】!feof(fp)三、编程题1. 产生20个随机字母,或为大写或为小写,显示之,分别存入文件S2、S3中,再打开,分别显示之。答 要点:(1)定义两文件指针,按”w”方式打开两个文件。(2)大写字母ASCII码:6590,小写97122。循环20次,每次产生一个65122之间的随机数,如在6590范围内的写入文件s2,在97122范围内的写入文件s3,否则重新产生这次用的随机数,直到是大写或小写字母。关闭文件。(3)用”r”方式打开两个文件,读字符显示。关闭文件。#include #include #include void main( ) int i;char ch;FILE *fp1, *fp2;if (fp1=fopen (s2, w) = NULL) printf (open error!);return;if (fp2=fopen (s3,w) = NULL)printf (open error!);return;srand(time(NULL);/初始化随机数种子for (i=1;i=20;i+)while (1) ch = rand()%58 + 65;printf (%c,ch);if(ch=97)fputc (ch,fp2);break;printf (n);fclose (fp1);fclose (fp2);fp1=fopen (s2, r);fp2=fopen (s3,r);while (ch=fgetc (fp1)!=EOF) putchar (ch);printf (n);while (ch=fgetc (fp2)!=EOF) putchar (ch);printf (n);fclose (fp1);fclose (fp2);运行示例:IpKbZDRozUFEgjDkGDPh (有3次非字母,重新产生) IKZDRUFEDGDP pbozgjkh2.按照下列要求编写程序从file_st文件中读入一个含10个字符的字符串。解:#include #define SIZE 10void main( ) FILE *fp;char c10,i;if(fp=fopen(file_st, r)=NULL) /*打开文件*/ printf(cannot open this filen);return;else printf(nContext of file_string is:);for(i=0;iSIZE&!feof(fp);i+) /*文件未结束并且未读够10个字符*/ci=fgetc(fp);ci=0; /*读入的字符串加字符串结束标志*/puts(c); /*输出读入的字符串*/fclose(fp); /*关闭文件*/若关闭文件中的内容是:Iloveyoutoo则程序的执行结果是:Context of file_string is:Iloveyouto3.编写程序,首先输入一个字符,然后将文件A的内容复制到文件B,复制时要将文件A中与输入字符相等的字符删除。解:# include void main( )FILE *fp1,* fp2;char c,d,name110,name210;printf(Please enter source file name:);scanf(%s,name1);printf(Please enter destination file name:);scanf(%s,name2);if(fp1=fopen(name1, r)=NULL) /*源数据文件打开失败*/ printf(Cannot open %sn,name1);return;else if(fp2=fopen(name2, w)=NULL) /*目标数据文件打开失败*/ printf(Cannot open %sn,name2);return;else printf(Please enter char you want to delete:);d=getchar( ); /*跳过一个字符*/scanf(%c,&d);while(c=fgetc(fp1)!=EOF) /*从源文件中每读一个字符写到目标数据文件中*/if(c!=d)fputc(c,fp2);fclose(fp1);fclose(fp2);printf(File copied!n);4.有一文本文件,以n字符作为分行的标志,请编写程序指出其中第几行是最长的行,此行有多少个字符。解析:先使用“r”方式打开文件,然后从头开始,逐字符地读取文件。在碰到第一个“n”之前,累加第一行的字符数,将其存入一个临时变量中(同时将行号也存放起来),然后跳过“n”,重新开始,累加第二行的字符数,直到遇见第二个“n”,此时将第二行的字符数与临时记录中第一行的字符数相比较,若大于它,则更新记录。如此周而复始地操作,直到文件结束。此时记录中保存的便是最长行的长度和行号。#include void main ( ) char name 20,c;int length=0,maxlength=0,line=0,maxline=0;FILE *fp;printf (input filename:);scanf (%s,name);if (fp=fopen (name, r)=NULL)printf (file open error!n);return;while (c=fgetc (fp)!=EOF)if (c=n) /若某一行结束line +; /行号累加器的值增加1if (lengthmaxlength) /若当前行比记录中的最长行还要长maxlength=length;/将记录中的最大长度更改为此行的长度maxline=line;/将记录中的最长行更改为此行的行号length=0;/累加器清零,准备好累加下一行的字符数elselength +;/ 尚未遇见n,继续本行的字符数累加printf (the %dst line is longest.nIt have %d characters.n,maxline,maxlength);fclose (fp);return;5.编写一个程序,由键盘输入一个文件名,然后把从键盘输入的字符依次存放到该文件中,用!作为结束输入的标志。解:使用getchar()函数获取用户输入的字符,然后用fputc( )函数写入到文件中。程序如下:#include #include void main( )FILE *fp;char ch,fname10;printf (输入一个文件名:);gets(fname);if (fp=fopen(fname, w+)=NULL)printf (不能打开%s文件n,fname);return;printf (输入数据:n);while (ch=getchar( )!= !)fputc(ch,fp);fclose(fp);6.编写一个程序,查找指定的文本文件中某个单词出现的行号及该行的内容。解:通过命令行输入文件名和查找的单词。使用fgets( )函数从文件中读出一行数据,在其中找某个单词,如果找到了,显示它的内容及行号,如此循环直到文件结束。程序如下:#include #include int str_index (char substr ,char str ) /*判断substr 是否为str的子串*/int i,j,k;for (i=0;stri;i+)for (j=i,k=0;strj=substrk;j+,k+)if( !substrk+1)return(i);return (-1);void main (int argc,char *argv )char buff256;FILE *fp;int lcnt;if (argc3)printf (Usage:findword filename wordn);return;if (fp=fopen (argv1, r)=NULL)printf (不能打开%s文件n,argv1);return;lcnt=1;while (fgets(buff,256,fp)!=NULL)if (str_index(argv2,buff)!=-1)printf(%3d: %s,lcnt,buff);lcnt+;fclose (fp);7.编写一个函数,它接收一个文件名字符串,判别该文件是否存在。若存在则返回1,否则返回0。在main()里,由用户输入文件名,调用所编函数,验证其正确性。答:程序编写如下:#include#define TRUE 1#define FALSE 0int isexist(char*str)FILE*fp;if(fp=fopen(str, r)!=NULL)return TRUE;elsereturn FALSE;void main( )cha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年环境电子教育行业研究报告及未来行业发展趋势预测
- 邮政行业职业技能鉴定模拟试题及参考答案详解1套
- 2025年导电塑料行业研究报告及未来行业发展趋势预测
- 企业培训师工艺创新考核试卷及答案
- 铣粉工转正考核试卷及答案
- 松香改性反应工适应性考核试卷及答案
- 2025年参芪扶正注射液行业研究报告及未来行业发展趋势预测
- 计算机外部设备装配调试员基础知识考核试卷及答案
- 昆虫记甲虫课件
- 昆虫绘本课件
- 2024-2025学年广东省广州四中教育集团九年级(上)月考语文试卷
- 储能电池模组PACK和系统集成项目可行性研究报告
- 新学期学校导览模板
- 国家电网公司招聘高校毕业生应聘登记表
- 《丁香结》说课课件(共22张课件)
- Unit4阅读课件沪教牛津版(2024)七年级英语上册
- 2024年小学一年级新生入学开学第一课培训课件
- 2023江苏苏州市昆山高新区招聘社区专职工作者第二批及单笔试历年典型考题及考点剖析附答案带详解
- 2024风力发电机组预应力基础锚栓笼组合件技术规范
- 第二人民医院医药代表来院预约登记表
- 《大青树下的小学》公开课一等奖创新教案
评论
0/150
提交评论