3.编一个程序,将磁盘中的当前目录下名为"ccw1.txt" 的文本文件复制在同一目录下,文件名改为"ccw2.txt"。
【解】程序需要两个文件指针变量,一个对应读文件,另一个对应写文件。并分别用读和写方式打开两个文件。接着是以读文件状态作为循环控制条件,在读文件还未结束下循环,反复读人字符,并将读人字符复写到写文件中。程序如下:
# include
# include
FILE * rp, * wp;
void main()
{ int c;
if((rp= fopen("ccw1.txt","r"))== NULL) {
printf("Can’t open file %s.\n","ccwl.txt"); exit(0);
}
if((wp= fopen("ccw2.txt","w"))== NULL) {
printf("Can’t open file %s.\n","ccw2.txt"); exit(0);
}
while((c= fgetc(rp))!= EOF)
fputc( c,wp);
fclose(wp);
fclose(rp);
}
4.编程序,对名为"CCW.TXT"的磁盘文件中"@"之前的所有字符加密,加密方法是每个字节的内容减10。
【解】程序从文件读出字符,在字符"@"未出现之前,将读出字符作加密处理后回写。加密循环受文件结束或当前字符是"@"字符控制。程序如下:
# include
# include
# define DALTA 10
FILE * rp;
void main()
{ int c;
if(( rp = fopen("ccw.txt","r+")) ==NULL ) {
printf("Can’t open file %s.\n","ccw.txt"); exit(0);
}
while(( c= fgetc(rp))!= EOF) {
if( c ==’@’) break;
c+= DALTA;
fseek( rp,-1L,1 );
fputc( c, rp);
fseek( rp,OL,l);
}
fclose(rp);
}
5.编程序,对上一题中名为"CCW.TXT"的磁盘文件中"@"之前的所有字符解密并显示。
【解】要编写的程序完成与上一程序功能相反的工作,将上述程序中的DALTA定义成一10即可。完整程序略。
6.输入100个学生的信息(含学号、姓名、年龄、七门课程成绩、总分),其中学生的总分由程序计算产生。先将学生信息存入磁盘二进制数据文件student.dat中。然后再读取该文件,寻找总分最高的学生并输出该生的所有信息。
【解】程序要定义一个结构,逐一输入学生信息,并完成学生的总分计算,将学生信息存到该结构中,然后将该结构信息存入文件。设学生信息的输入以学生的学号为负数结束。然后,程序再用循环从这文件读入学生信息,将其中总分更高的学生信息存入另一结构中。循环结束后,结构中存储的就是总分最高学生的信息。最后,显示这总分最高的学生信息。程序如下:
# include
# include
# include
struct stu {
long no;
char name[20];
int age;
int score[7];
int total;
} student, maxs;
FILE *fp;
void main()
{ char buf[120];int total,i,t;long lt;
if((fp= fopen("student.dat","wb"))== NULL) {
printf("Can’t open file %s.\n","student.dat" );exit(0);
}
printf("输入学生的学号、姓名、年龄、七门课程成绩(学号小于0结束) \n");
while(1) {
scanf("%ld", <); student.no = lt;
if(student.no< 0) break;
scanf("%s", buf); strncpy( student.name, buf,19);
scanf("%d", &t); student.age = t;
for( total = 0, i = 0; i < 7;i++) {
scanf("%d", &t); student.score[i]= t;
total+= t;
}
student.total= total;
fwrite(char *) & student,sizeof student, 1, fp);
}
fclose(fp);
if((fp = fopen("student.dat","rb"))== NULL) {
printf("Can’t open file %s.\n","student.dat");exit(0);
}
maxs.total=-100;
While( !feof(fp)) {
fread((char *) & student,sizeof student,l,fp);
if( student.total> maxs.total) maxs=student;
}
fclose(fp);
printf("总分最高的学生信息:\n");
printf("学号:%ld", maxs.no);
printf(" \t姓名:%s",maxs,name);
printf("\t年龄::%d\n成绩:", maxs.age)
for( i=0; i< 7; i++)
printf("m",maxs.score[i]);
printf("\nTOTAL = %d\n", maxs. total);
}
责任编辑:小草