第11章 文件
1: /*c语言数据文件有几种存储形式?每种存储形式个有什么特点?*/
答:在C语言使用的文件系统中,数据文件的数据存储形式有两种:一种以字符形式存放,这种文件称为字符文件
,也称为文本文件或者是正文文件;另外一种是以二进制代码形式存放,这种文件称为二进制文件。
一般的说,二进制文件节省存储空间,并且在输入时不需要把字符代码先转化成二进制代码形式再送入内存,
在输出时也不需要把数据由二进制代码转化成字符代码再输出,因而输入输出速度快。用户程序在实用中,从
节省时间和空间的要求考虑,一般选用二进制文件。但是,如果用户准备的数据是作为文档使用阅读时,则一
般使用字符文件,他们可以方便,快捷的通过显示器或打印机直接输出。
2: /*打开文件,关闭文件的含义是什么?为什么要打开关闭文件?*/
答: 打开文件的含义:要把文件使用方式写入FILE结构体变量中;返回一个FILE结构体指针,指向该文件的FILE结构
体变量,通过该文件指针可以对文件进行操作。
关闭文件的含义:文件指针不再指向原来指向的文件。
为什么要打开文件:(1)要确定文件的使用方式;(2)要得到一个指向文件的指针;(3)还需检测文件是否存在,
磁盘是否出故障等。
为什么要关闭文件:(1)防止文件被误用;(2)具体系统中同时打开的文件的数目是有限的。
3: /*C语言标准的I/O接口操作提供了几种文件存取方式?每种方式各有什么特点?*/
答: 标准I/O提供了4种文件存取方法:
(1):读写一个字符。
(2):读写一个字符串,将多个字符组成的字符串写入文件或从文件中读出。
(3):格式化读写,根据格式控制指定的数据格式对数据进行转换存取。
(4):成块读写,也称做按记录读写。C语言的文件虽然是按字节流存放,但可以按记录存取多个字节的数据。
4:/*什么是文件型指针?通过文件指针访问文件有什么好处?*/
答: 系统定义FILE结构体类型,建立文件相当于定义了一个FILE结构体变量,该结构体变量存放文件的有关信息。打开
文件返回一个FILE结构体指针,指向该文件的FILE结构体变量。所以,文件型指针就是指向文件的FILE结构体变量的
指针。
通过文件指针访问文件,也即用FILE结构体变量成员,比较方便。
5: (1) [1]: fopen(fname,"w")
[2]: ch
[3]: fclose(fp)
(2) [1]: "r+"
[2]: str[i]-32
[3]: "r"
6、
#include<stdio.h>
main()
{ FILE *p;
char ch;
if((p=fopen(file.c,"w"))==NULL)
{ printf("cannot open file.\n");
exit(1);
}
ch=getch();
while(ch!='#')
{ if(ch>=65&&ch<=90)ch+=32;fputc(ch,p);putchar(ch);ch=getchar();}
fclose(p);
}
7、
#include<stdio.h>
void main()
{ FILE *fp;
int i,j,n,k;
char x[160],ch,t;
if((fp=fopen("file1","r"))==NULL)
{ printf("Can't open file1\n");
exit(1);
}
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{ x[i]=ch;
}
fclose(fp);
if((fp=fopen("file2","r"))==NULL)
{ printf("Can't open file2\n");
exit(1);
}
while((ch=fgetc(fp)!=EOF))
{ x[i]=ch;
i++;
}
n=i;
for(i=0;i<n-1;i++)
{ k=i;
for(j=i+1;j<n;j++)
if(x[i]>x[j]) k=j;
if(k!=i)
{ t=x[i];x[i]=x[j];x[j]=t;}
}
if((fp=fopen("file3","w"))==NULL)
{ printf("Can't open file3\n");
exit(1);
}
for(i=0;i<n;i++)
fputc(x[i],fp);
fclose(fp);
}
8、
9、
#include<stdio.h>
main()
{ FILE *fp;
char str;
if((fp=fopen("text.txt","w"))==NULL)
{ printf("Can't open this file.\n");
exit(1);
}
printf("\nInput char: ");
while((str=fgetc(stdin))!='#')
fputc(str,fp);
fclose(fp);
fp=fopen("text.txt","r");
while((str=fgetc(fp))!=EOF)
{ if(str>=97&&str<=122)
str-=32;
fputc(str,stdout);
}
fclose(fp);
}
10、
#include<stdio.h>
struct student
{ char sid[15];
char name[15];
int score[3];
float ave;
}stu[100];
void main()
{ int i,j,n,sum=0,all[3]={0};
FILE *fp;
printf("How many student you want to input?: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{ printf("Input the message of %d student\n",i+1);
printf("\tsid:\t");scanf("%s",stu[i].sid);
printf("\tname:\t");scanf("%s",stu[i].name);
sum=0;
for(j=0;j<3;j++)
{ printf("%d score:\t",j+1);
scanf("%d",&stu[i].score[j]);
sum=sum+stu[i].score[j];/*各个同学的总分*/
all[j]+=stu[i].score[j];/*该班各门课程的总分*/
}
stu[i].ave=sum/3.0;
}
if((fp=fopen("stud1","wb"))==NULL)/*文件以二进制形式打开*/
{ printf("Can't open stud file\n");
exit(1);
}
for(i=0;i<n;i++)
{ if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)/*该班各门课程总分还没有输入文件*/
printf("file write error.\n");
fclose(fp);
}
}
11、
#include<stdio.h>
struct student
{ char sid[15];
char name[15];
int score[3];
float ave;
}stu1[100],change;
main()
{ FILE *fp;
int i,j,n,k;
if((fp=fopen("stud1","rb"))==NULL)
{ printf("Can't open file\n");
exit(1);
}
for(i=0;fread(&stu1[i],sizeof(struct student),1,fp)!=1;i++)
fclose(fp);
n=i;
for(i=0;i<n-1;i++)
{ k=i;
for(j=i+1;j<n;j++)
if(stu1[i].ave<stu1[j].ave)k=j;
if(k!=i)
{ change=stu1[i];stu1[i]=stu1[j];stu1[j]=change;}
}
fp=fopen("stu2","wb");
for(i=0;i<n;i++)
fwrite(&stu1[i],sizeof(struct student),1,fp);
fclose(fp);
}
第12章 C语言综合应用程序示例
暂无