第 10 章 文件及其应用

46
第 10 第 第第第第第第 10.1 第第第第第 10.2 第第第第第第第 10.3 第第第第第第 10.4 第第第第 10.5 第第 第第 10

Upload: madra

Post on 17-Mar-2016

107 views

Category:

Documents


3 download

DESCRIPTION

第 10 章 文件及其应用. 10.1 文件的概念 10.2 文件的基本操作 10.3 文件应用实例 10.4 本章小结 10.5 实训 习题 10. 10.1 文件的概念. 10.1.1 文件的概念及文件类型 1. 文件的概念 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第  10  章  文件及其应用

第 10 章 文件及其应用10.1 文件的概念10.2 文件的基本操作10.3 文件应用实例10.4 本章小结10.5 实训习题 10

Page 2: 第  10  章  文件及其应用

10.1 文件的概念10.1.1 文件的概念及文件类型 1. 文件的概念 在前面章节的程序中,数据的输入和输出都是通过键盘和显示器进行。一般来说,键盘和显示器适合处理少量数据和信息的输入和输出,它方便快捷,是常用的输入输出设备。但是如果要进行大量数据的加工处理,键盘和显示器的局限性就很明显了。通常的做法是利用磁盘作为数据的存放中介,程序中先通过键盘或其他输入设备将数据写入磁盘,然后对存放在磁盘中的数据进行加工,加工后的数据仍然存放到磁盘上,其过程如图 10−1 所示。 数据在磁盘上是以文件的形式存放的。文件是计算机中一个很重要的概念,所谓文件是指存储在磁盘等外部介质上的一批数据的集合,这里的一批数据可以是一批实验数据或者一篇文章、一幅图片、甚至一段程序等,利用外部介质的存储特性,数据可以长久地保存并可用介质携带。

下一页 返回

Page 3: 第  10  章  文件及其应用

10.1 文件的概念 2. 文件的类型 从不同角度可以将文件划分成不同的类别。在 C 语言中经常用到的有三种划分: ( 1 )按文件存储的内容,文件可分为源程序文件和数据文件。源程序文件存放的是程序代码,数据文件是程序中的数据集合。本章所介绍的文件操作很大程度上是针对数据文件而言。 ( 2 )按文件中数据的组织方式,文件可分为文本文件和二进制文件。 文本文件(也称为 ASCII 文件)是指文件中的每个字符以其 ASCII 码的形式存储在文件中,文件中的每个字符占 1 B 。例如,整型数据 5 678 在内存中占 2 B ,而如果以文本文件的形式存储则占 4 B 。实型数据 3.141 5 在内存中占 4 B ,而如果以文本文件的形式存储则占 6 B ,其中小数点也占 1B 。所以将文本文件中的数据读入内存处理时,需要将其从文件中数据的存储形式转换为内存中的存储形式。

上一页 下一页 返回

Page 4: 第  10  章  文件及其应用

10.1 文件的概念 二进制文件是指将数据以其在内存中存放的形式存储到文件中。整型数据在内存中占 2B ,如果将整型数据存储到二进制文件中,该数据还占 2 B 。实型数据在内存中占 4 B ,而如果将该数据存储到二进制文件中,该数据还占 4 B ,所以将二进制文件中的数据读入内存处理时,不需要中间转换。由此可见,二进制文件节省存储空间而且存取速度比文本文件的存取速度快。 ( 3 )按文件存取方式,文件可分为顺序文件和随机文件。 顺序文件顾名思义总是从文件的开头顺序读或者写,就是按照文件的字节顺序进行,而随机文件可以指定读或者写的位置,并对该位置上的数据直接进行读或写操作。

上一页 下一页 返回

Page 5: 第  10  章  文件及其应用

10.1 文件的概念10.1.2 文件指针 在对文件进行打开、读写及关闭操作时,需要借助文件指针来完成。 文件指针是指向结构体类型的指针, 该结构体类型由系统定义, 取名为 FILE ,其中存放着文件的名字、文件的状态、文件的大小以及文件的位置等信息。程序中可以用 FILE 类型定义指针变量,以指向文件,定义的一般形式为: FILE * 指针变量; 例如: FILE *fp; fp 是指向 FILE 结构体类型的变量,该变量可以用来存放某个文件的信息,因此称为文件指针。文件的访问必须通过文件指针完成,定义文件指针时必须包含头文件“stdio.h” 。

上一页 下一页 返回

Page 6: 第  10  章  文件及其应用

10.2 文件的基本操作10.2.1 文件的打开与关闭 1. 文件的打开 在对文件进行读写操作之前,必须先打开文件并使文件指针指向文件,即建立文件指针与文件之间的关联,以便后面通过文件指针对文件进行操作。 文件打开操作使用库函数 fopen()完成,该函数的一般使用形式为: 文件指针=fopen(文件名,文件使用方式) ; 例如: FILE *fp; fp=fopen("d: \aa.txt","w"); 【函数说明】 ( 1 )文件名指出要打开文件的路径和文件的名称。 ( 2 )文件使用方式指出文件打开后的使用方式,比如读文件或写文件等操作。 文件使用方式有多种,见表 10−1。

下一页 返回

Page 7: 第  10  章  文件及其应用

10.2 文件的基本操作 如果文件打开成功,那么就可以使用文件指针对文件进行操作,而如果文件打开失败,那么文件指针的值为 NULL 。通常用下面的代码打开并判断文件打开是否成功: FILE *fp; fp=fopen("d:\aa.txt", "w"); if (fp==NULL) { printf("can not open the file.\n"); exit(0); /* 结束程序执行,退出 */ }

上一页 下一页 返回

Page 8: 第  10  章  文件及其应用

10.2 文件的基本操作 2. 文件的关闭 文件的读写操作完成后,必须关闭文件,否则文件中的数据可能会丢失。关闭文件实际上是切断文件指针与文件的联系。 文件关闭操作使用库函数 fclose()完成,它的一般调用形式为: fclose(文件指针) ; 例如: fclose(fp); 关闭 fp 指向的文件。文件正常关闭时,函数 fclose()返回值为 0 ,否则返回值为非 0 值,这时表示有错误发生。

上一页 下一页 返回

Page 9: 第  10  章  文件及其应用

10.2 文件的基本操作10.2.2 文本文件的读写 文本文件的读写操作,必须按文件中字符的先后顺序进行,即只能在操作了第 i 个字符之后,才能操作第 i+1 个字符。在对文件操作时,文件的读写指针由系统自动向后移动。 C 语言提供了多种文本文件的读写函数:字符读写函数、字符串读写函数以 及格式化读写函数等。 1. 字符读写函数 fputc() 和 fgetc() ( 1 )字符写函数 fputc()。函数 fputc()的功能是把一个字符写入指定的文件中,该函数常用的调用形式为: fputc(ch, fp); 其中,ch 为需要写入的字符,可以是字符常量或字符变量。 fp 为文件指针并且所指向的文件必须是以写或读写方式打开。 例如: fputc('a', fp);是把字符 'a'写入 fp 所指向的文件中。

上一页 下一页 返回

Page 10: 第  10  章  文件及其应用

10.2 文件的基本操作 ( 2 )字符读函数 fgetc()。函数 fgetc()的功能是从指定的文件中读取一个字符,该函数常用的调用形式为: ch = fgetc(fp); 从 fp 所指的文件中读取一个字符并存入字符变量 ch 中,读取的文件必须是以读或读写方式打开的。 提示:函数字符读写函数只能读写单个字符,如果要读取或写入整个文件内容,需要循环语句配合。 【例 − 】把从键盘输入的一行字符写入文本文件,再把该文件内容读出显示在屏幕上。 【程序代码】 #include "stdio.h" main()

上一页 下一页 返回

Page 11: 第  10  章  文件及其应用

10.2 文件的基本操作 { FILE *fp; char ch; if ((fp=fopen("str.txt","w+"))==NULL) /* 打开文件 */ { printf("文件不能打开 !"); exit(0); } printf("请输入文本文件的内容: \n"); ch=getchar(); while (ch!='\n') /* 该循环把输入的内容写入文件 */ { fputc(ch, fp); ch=getchar();

上一页 下一页 返回

Page 12: 第  10  章  文件及其应用

10.2 文件的基本操作 } printf("文本文件的内容为: \n"); rewind(fp); /*把文件读写位置定位在文件开头 */ ch=fgetc(fp); /* 从文件中读取第一个字符 */ while (ch!=EOF) /* 该循环读取整个文件内容 */ { putchar(ch); ch=fgetc(fp); } printf("\n"); fclose(fp); /* 关闭文件 */ } 执行程序时,输入“This is a text file.” ,程序运行结果为:

上一页 下一页 返回

Page 13: 第  10  章  文件及其应用

10.2 文件的基本操作 【程序说明】 ( 1 ) EOF 是系统定义的文本文件结束标志,其值为− 1 ,当文件读取遇到 EOF 时,说明文件读取完毕。 ( 2 )本例同时会在磁盘上生成一个名为“str.txt”的文本文件,其内容与屏幕输出的结果一致,该文件可在 Windows 环境下打开查看内容。文件“str.txt”与源程序文件路径相同。 2. 字符串读写函数 fputs() 和 fgets() ( 1 )字符串写函数 fputs()。 fputs()函数的功能是向指定的文件中写入一个字符串,该函数调用的形式为: fputs(字符串,文件指针) ;

上一页 下一页 返回

Page 14: 第  10  章  文件及其应用

10.2 文件的基本操作 例如: fputs("abcd", fp); 把字符串“abcd”写入 fp 所指的文件之中。其中,字符串可以是字符串常量,也可以是字符数组名或指针变量。 ( 2 )字符串读函数 fgets()。 fgets()函数的功能是从指定的文件中读取一个字符串到字符数组中,函数调用的形式为: fgets(字符数组,字符串长度,文件指针 ); 例如: fgets(str,n, fp); 从 fp 所指的文件中读出 n−1 个字符送入字符数组 str 中并在读取的最后一个字符后加上字符串结束标志'\0'。函数 fgets()在读出 n−1 个字符之前,如果遇到了换行符“\n”或 EOF ,则结束当前读操作。

上一页 下一页 返回

Page 15: 第  10  章  文件及其应用

10.2 文件的基本操作 3. 格式化读写函数 fscanf() 和 fprinf() fscanf()和 fprinf()两个函数的作用与 scanf()函数和 printf()函数几乎一样,差别只在于它们对文件进行输入 /输出,而 scanf()和 printf()是对终端设备(如键盘、显示器) 进行输入 /输出。 因此使用 fscanf()和 fprintf()函数时应该带一个文件指针。 ( 1 ) fscanf()函数。函数调用的一般形式为: fscanf(文件指针,格式控制字符串,地址表) ; 其中,格式控制字符串和地址表的规定和使用方法与 scanf()函数相同。 例如: fscanf(fp, "%d%f", &i, &x); 表示从 fp 所指文件中读取一个整数给变量 i,一个浮点数给变量 x。

上一页 下一页 返回

Page 16: 第  10  章  文件及其应用

10.2 文件的基本操作 ( 2 ) fprintf()函数。函数调用的一般形式为: fprintf(文件指针,格式控制字符串,输出表列) ; 其中,格式控制字符串和输出表列的规定和使用方法与 printf()函数相同。 例如: fprintf (fp, "%d%c", i, ch); 表示将整型变量 i和字符变量 ch的值按指定格式输出到 fp指向的文件。 加入 i=8 , ch='a',则输出到磁盘文件上的数据是 8a。 10.2.3 二进制文件的读写 二进制文件存储信息的形式与内存中存储信息的形式是一致的,如果需要在内存与磁盘文件之间频繁交换数据,最好采用二进制文件。

上一页 下一页 返回

Page 17: 第  10  章  文件及其应用

10.2 文件的基本操作 二进制文件一般是同类型数据集合,数据之间无分隔符,每个数据所占字节数是一个固定值,因此二进制文件除了可以顺序存取外,还可运用定位函数方便地进行随机存取。 二进制文件的读写操作可用数据块读写函数 fwrite()和 fread()完成。 运用数据块读写函数可建立整型、实型、结构体类型等各种类型的二进制文件。 数据块写函数调用的一般形式为: fwrite (buffer, size, count, fp); 数据块读函数调用的一般形式为: fread (buffer, size, count, fp); 两个函数的参数说明: ( 1 )buffer 是一个指针,在 fread()函数中,它表示存放输入数据的首地址;在 fwrite()函数中,它表示存放输出数据的首地址。

上一页 下一页 返回

Page 18: 第  10  章  文件及其应用

10.2 文件的基本操作 ( 2 ) size 表示数据块的字节数。 ( 3 )count 表示要读写的数据块个数。 ( 4 ) fp 为文件指针。例如: fwrite (fa, 4, 5, fp); 其作用是将 fa 指向的存储区中 5 个 4 B (即 1 个实型数据)大小的数据项写入 fp 所指向的文件中。 例如: fread (fa, 4, 5, fp); 其作用是从 fp 所指的文件中,读取 5 个 4 B 大小的数据,存入 fa 所指的存储区中。 【例 − 】从键盘输入两个学生信息(包括姓名、编号、年龄及地址) ,存入一个二进制文件中,然后再读出这两个学生的信息显示在屏幕上。

上一页 下一页 返回

Page 19: 第  10  章  文件及其应用

10.2 文件的基本操作 【程序代码】 #include <stdio.h> struct stu /* 定义结构体类型 */ { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; /* 定义结构体数组和结构体指针 */ main() { FILE *fp; char ch; int i; pp=boya;

上一页 下一页 返回

Page 20: 第  10  章  文件及其应用

10.2 文件的基本操作 qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("文件不能打开 !"); exit(0); } printf("\n请输入两个学生信息: \n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; /* 下面语句把2 个学生信息一次性写入文件 */ fwrite(pp,sizeof(struct stu),2,fp);

上一页 下一页 返回

Page 21: 第  10  章  文件及其应用

10.2 文件的基本操作 rewind(fp); /* 下面语句从文件中读取 2 个学生信息 */ fread(qq,sizeof(struct stu),2,fp); /* 以下语句输出 2 个学生信息 */ printf("--------------------------------------\n"); printf("\n\n姓名 \t编号 年龄 地址\n"); for(i=0;i<2;i++,qq++) printf("%s\t%4d%5d%s\n",qq->name,qq->num,qq->age,qq->addr); fclose(fp); } 执行程序,输入 2 名学生的信息后输出结果为:

上一页 下一页 返回

Page 22: 第  10  章  文件及其应用

10.2 文件的基本操作 【程序说明】 ( 1 )本例定义了两个结构数组 boya 和 boyb 用于存放学生的信息,又定义了两个结构指针变量 pp 和 qq,pp 指向数组 boya,qq 指向数组 boyb。指针变量的使用给程序处理提供了方便。 ( 2 )本例在磁盘上生成了二进制文件“stu_list”,与文本文件不同,该文件不能直接在 Windows 下打开查看内容。 【例 − 】文件的随机读写。从键盘输入 10 个整数到二进制文件中,然后修改文件中的第 5 个数为原来的 2 倍,并保存到文件中,输出修改后文件的内容。

上一页 下一页 返回

Page 23: 第  10  章  文件及其应用

10.2 文件的基本操作 【程序代码】 #include "stdio.h" #define N 10 void mywrite(int *p); void myread(int *p); void mymodify(); main() { int i,num[N]; printf("\n请输入 10 个数据 :"); for(i=0;i<N;i++) scanf("%d",&num[i]); mywrite(num);

上一页 下一页 返回

Page 24: 第  10  章  文件及其应用

10.2 文件的基本操作 printf("\n文件中的原始数据为 :\n"); myread(num); mymodify(); printf("\n修改后的文件数据为 :\n"); myread(num); } void mywrite(int *p) /* 将数组中的数据写入文件 */ { FILE *fp;int *q; fp=fopen("list","wb"); for(q=p;q<p+N;q++) fwrite(q,2,1,fp); fclose(fp);

上一页 下一页 返回

Page 25: 第  10  章  文件及其应用

10.2 文件的基本操作 } void myread(int *p) /* 从文件中读取数据 */ { FILE *fp; int *q; fp=fopen("list","rb"); for(q=p;q<p+N;q++) { fread(q,2,1,fp); printf("%3d",*q); } printf("\n\n"); fclose(fp); } void mymodify() /*修改文件中的数据 */ {

上一页 下一页 返回

Page 26: 第  10  章  文件及其应用

10.2 文件的基本操作 FILE *fp; int a=0; fp=fopen("list","rb+"); fseek(fp,4*2,SEEK_SET); /* 定位到第 5 个数的位置 */ fread(&a,2,1,fp); /* 读操作之后指针自动移至第 6 个数的位置 */ printf("\n 第 5 个数是: %d\n",a); a*=2; fseek(fp,−2,SEEK_CUR); /* 重新定位到第 5 个数的位置 */ fwrite(&a,2,1,fp); /* 将数据写入文件 */ fclose(fp); } 程序执行过程为:

上一页 下一页 返回

Page 27: 第  10  章  文件及其应用

10.2 文件的基本操作 【程序说明】 ( 1 )二进制文件可以将文件读写指针直接定位到文件的某个位置,然后进行读写操作,即随机读写。 ( 2 )文件定位函数 fseek()。该函数的功能是把文件定位设置到需要的地方,函数的调用形式为: fseek(文件指针,位移量,起始点) ; 其中,位移量表示移动的字节数,位移量是 long 型数据,可以取正数也可以取负数。位移量为正数时,表示将读写指针从起始点向前移动,位移量为负数时,表示将读写指针从起始点向后移动。 起始点的取值规定有三种:文件首、当前位置和文件尾,具体可用 表 10−2中的符号或数字表示。

上一页 返回

Page 28: 第  10  章  文件及其应用

10.3 文件应用实例 【例 − 】建立一个存放学生电话簿的数据文件并读取其中的数据。 #include "stdio.h" #define SIZE 3 struct list { char name[10]; /*姓名 */ long tel; /*电话*/ }stu[SIZE]; void main() { FILE *fp; char filename[10]; int i; printf("enter a file name:"); /*提供文件名 */

下一页 返回

Page 29: 第  10  章  文件及其应用

10.3 文件应用实例 scanf("%s",filename); if ((fp=fopen(filename,"w"))==NULL) { printf("cannot open this file\n"); return; } for(i=0;i<SIZE;i++) /*把数据写入文件 */ { printf("enter student %d:",i+1); scanf("%s %ld",stu[i].name,&stu[i].tel); fprintf(fp,"%s %ld\n",stu[i].name,stu[i].tel); }

上一页 下一页 返回

Page 30: 第  10  章  文件及其应用

10.3 文件应用实例 fclose(fp); fp=fopen(filename,"r"); for(i=0;i<SIZE;i++) /* 从文件中读取数据并显示 */ { fscanf(fp,"%s %ld",stu[i].name,&stu[i].tel); printf("%10s %10ld\n",stu[i].name,stu[i].tel); } fclose(fp); } 程序执行过程为(以 3 人为例) :

上一页 下一页 返回

Page 31: 第  10  章  文件及其应用

10.3 文件应用实例 【例 − 】有 N 个学生,每个学生有 3 门课的成绩,从键盘输入学生数据(包括学号、姓名、 3 门课成绩) ,计算出平均成绩,并把学生的所有数据存放在磁盘文件 "stud"中。 【程序代码】 #include "stdio.h" #define N 2 struct student { char num[6]; char name[8]; int score[3]; float avr; } stu[N],s[N]; main()

上一页 下一页 返回

Page 32: 第  10  章  文件及其应用

10.3 文件应用实例 { int i,j,sum; FILE *fp; /* 以下用于输入数据并计算平均成绩*/ for(i=0;i<N;i++) { printf("\nplease input No.%d score:\n",i+1); printf("stuNo:"); scanf("%s",stu[i].num); printf("name:"); scanf("%s",stu[i].name); sum=0; for(j=0;j<3;j++) {

上一页 下一页 返回

Page 33: 第  10  章  文件及其应用

10.3 文件应用实例 printf("score%d:",j+1); scanf("%d",&stu[i].score[j]); sum+=stu[i].score[j]; } stu[i].avr=sum/3.0; } fp=fopen("stud","wb"); /* 为写打开二进制文件 */ for(i=0;i<N;i++) fwrite(&stu[i],sizeof(struct student),1,fp); fclose(fp); /* 关闭文件 */ fp=fopen("stud","rb"); /* 为读打开二进制文件 */ for(i=0;i<N;i++) fread(&s[i],sizeof(struct student),1,fp);

上一页 下一页 返回

Page 34: 第  10  章  文件及其应用

10.3 文件应用实例 /* 以下用于输出学生的各项数据 */ printf("-----------------------------------\n"); printf("No.\tName\tScore1\tScore2\tScore3\taverage\n"); for(i=0;i<N;i++) {printf("%s\t%s\t",s[i].num,s[i].name); for(j=0;j<3;j++) printf("%d\t",s[i].score[j]); printf("%.2f\n\n",s[i].avr); } printf("\n"); } 程序执行过程为:

上一页 返回

Page 35: 第  10  章  文件及其应用

10.4 本章小结 通过本章学习,读者应掌握以下内容: ( 1 )文件的用途,文件可以长期存储程序中需要的数据。 ( 2 )文件的概念,文件的分类,各类文件的特点。 ( 3 )文件指针的概念和使用。 ( 4 )文件操作的步骤。文件操作一般是按以下步骤进行的: ① 用 fopen()函数打开文件。文件打开时一定要选择正确的文件读写方式。 ② 对文件进行读 /写操作。 ③ 用 fclose()函数关闭文件。 对已打开文件的操作是通过文件指针进行的,实际上都是由系统提供的标准读 /写函数完成的。 ( 5 )文件读写函数。本章介绍了 fputc()和 fgetc()、 fputs()和 fgets()、 fprintf()和 fscanf()以及 fwrite()和 fread()函数等多种文件读写,应该了解它们的使用及使用场合。 ( 6 )文本文件只能顺序读写,而二进制文件可以顺序读写也可以随机读写。函数 fseek()一般用于随机读写时的读写指针定位。

返回

Page 36: 第  10  章  文件及其应用

10.5 实 训 实 训 1 【实训内容】文本文件的读写。 【实训目的】掌握文本文件的打开、关闭及读写操作。 【实训题目】 ( 1 )下面源程序文件名为 test.c,程序执行后将在屏幕上显示自身的内容。阅读程序并上机调试。 #include "stdio.h" main() { FILE *fp; char ch; if ((fp=fopen("test.c","r"))==NULL)

下一页 返回

Page 37: 第  10  章  文件及其应用

10.5 实 训 { puts("can not open file : dd.c"); exit(0); } while ((ch=getc(fp))!=EOF) putchar(ch); fclose(fp); printf("\n"); } ( 2 )以下程序的功能是将源程序文件 file1.c 的内容输出到屏幕上并复制到文件 file2.c 中。请把程序补充完整,并上机调试。

上一页 下一页 返回

Page 38: 第  10  章  文件及其应用

10.5 实 训 #include "stdio.h" main() { FILE ; /* 定义文件指针 */ fp1=fopen("file1.c","r"); fp2=fopen("file2.c","w"); while (!feof(fp1)) putchar(getc(fp1)); ; /* 文件指针定位到文件开头 */ while(!feof(fp1)) putc( ); /* 文件复制 */ fclose(fp1); fclose(fp2); }

上一页 下一页 返回

Page 39: 第  10  章  文件及其应用

10.5 实 训 实 训 2 【实训内容】文件顺序读写。 【实训目的】掌握格式化读写函数 fscanf()和 fprinf()的使用。 【实训题目】分析下面程序输出结果并上机进行验证。 #include "stdio.h" main() { FILE *fp; int i, k=0, n=0; fp=fopen("d1", "w"); for(i=1;i<4;i++) fprintf(fp, "%d", i); fclose(fp); fp=fopen("d1.txt", "r"); for(i=1;i<=2;i++)

上一页 下一页 返回

Page 40: 第  10  章  文件及其应用

10.5 实 训 { fscanf(fp, "%d%d", &k, &n); printf("%d %d\n", k, n); } fclose(fp); }

上一页 返回

Page 41: 第  10  章  文件及其应用

习 题 10 10−1 下面程序用变量 count 统计文件中字符的个数。请在画线处填入适当内容。 #include "stdio.h" main() { FILE *fp; long count=0; if (( fp=fopen("letter.dat", ))==NULL) { printf("cannot open file\n"); exit(0);

下一页 返回

Page 42: 第  10  章  文件及其应用

习 题 10 } while(!feof(fp)) { ; ; } printf("count=%ld\n", count); fclose(fp); } 10−2 编写程序完成从键盘输入一行字符,将其中的小写字母全部转换为大写字母,然后输出到磁盘文件“test1.txt”中保存。 10−3 设文件 number.dat 中存放了一组整数,请编程统计并输出文件中正整数、零和负整数的个数。

上一页 下一页 返回

Page 43: 第  10  章  文件及其应用

习 题 10 10−4 设有以下结构体类型,并且结构体数组 student 中的元素都已有值,若要将这些元素写到硬盘文件 fp 中,请将以下 fwrite 语句补充完整。 struct st { char name[8]; int num; float s[4]; } student[50]; fwrite(student, , 1 , fp); 10−5 已知学生的数据库包含下列信息:学号( 3 位整数) 、姓名( 8 个字符) 、电话号码( 8 位整数) ,编写程序完成: ( 1 )由键盘输入 N 个学生的数据,将其存入文件“test2.txt”; ( 2 )通过学生姓名查询学生的电话号码。

上一页 返回

Page 44: 第  10  章  文件及其应用

图 10-1

返回

Page 45: 第  10  章  文件及其应用

表 10-1

返回

Page 46: 第  10  章  文件及其应用

表 10-2

返回