高级语言程序设计第八章习题参考答案
作者名:不详 来源:网友提供 06年6月8日
第8章习题参考答案
一、单项选择题
③②③
二、填充题
1、 文件型指针变量 、 stdio.h
2、 rewind()
3、 (!feof(fp))
三、程序分析题
1、 把c: cp1.c中的前1000个字符复制到a:p1.c中,若c: cp1.c不足1000个,则按实际字符数
2、 121314252627
四、程序设计题
1、编一个程序,从键盘输入200个字符,存入名为“f1.t”的磁盘文件中。
#include "stdio.h"
#define N 200
main()
{
FILE *fp;
int i;
if((fp=fopen("f1.t","w"))==NULL)
{
printf("file can not open ");
exit(0);
}
for(i=1;i<=N;i++)
fputc(getchar(),fp);
}
2、从上一题中建立的名为“f1.txt”的磁盘文件中读取120个字符,并显示在屏幕上。
#include "stdio.h"
#define N 120
main()
{
FILE *fp;
int i;
if((fp=fopen("f1.t","r"))==NULL)
{
printf("file can not open ");
exit(0);
}
for(i=1;i<=N;i++)
if(feof(fp))break;
else putchar(fgetc(fp));
printf(" ");
}
3、编一个程序,将磁盘中当前目录下名为“ccw1.txt”的文本文件复制在同一目录下,
文件名为“ccw2.txt”。
#include "stdio.h"
main()
{
FILE *fp1,*fp2;
if((fp1=fopen("ccw1.txt","r"))==NULL)
{
printf("file can not open ");
exit(0);
}
if((fp2=fopen("ccw2.txt","w"))==NULL)
{
printf("file can not open ");
exit(0);
}
while(!feof(fp1))
fputc(fgetc(fp1),fp2);
}
4、编一个程序对名为“CCW.TXT”的磁盘文件中“@”之前的所有字符加密,加密方法是每个字节的内容减去10。
#include "stdio.h"
main()
{
FILE *fp;
char c;
if((fp=fopen("CCW.TXT","r+"))==NULL)
{
printf("file can not open ");
exit(0);
}
while(!feof(fp))
{
c=fgetc(fp);
if(c=='@') break;
else c-=10;
fseek(fp,-1l,SEEK_CUR);
fputc(c,fp);
fseek(fp,0l,SEEK_CUR);
}
}
5、编一个程序对上一题中名为“CCW。TXT”的磁盘文件中“@”字符之前的所有字符解密并显示。
#include "stdio.h"
main()
{
FILE *fp;
char c;
if((fp=fopen("CCW.TXT","r+"))==NULL)
{
printf("file can not open ");
exit(0);
}
while(!feof(fp))
{
c=fgetc(fp);
if(c=='@') break;
else c+=10;
putchar(c);
fseek(fp,-1L,SEEK_CUR);
fputc(c,fp);
fseek(fp,0L,SEEK_CUR);
}
}
6、输入100个学生的信息(含学号、姓名、年龄、7科成绩、总分),统计所有学生的总分,然后存入磁盘二进制数据文件student.dat中。然后再读取该文件,寻找总分最高的学生并输出该生的所有信息。
#include "stdio.h"
#define N 100
typedef struct
{
long number;
char name[8];
int age;
float score[7];
float total;
}STUDENT;
main()
{
STUDENT stu[N],*pmax;
FILE *fp;
int i,j;
for(i=0;i<N;i++) /*输入学生的信息*/
{
scanf("%ld%s%d",&stu[i].number,stu[i].name,&stu[i].age);
for(j=0;j<7;j++)
scanf("%f",&stu[i].score[j]);
}
for(i=0;i<N;i++) /*计算总分*/
{
stu[i].total=0;
for(j=0;j<7;j++)
stu[i].total+=stu[i].score[j];
}
if((fp=fopen("student.dat","wb"))==NULL)
{
printf("file can not open ");
exit(0);
}
fwrite(stu,sizeof(STUDENT),N,fp); /*把学生信息写入文件*/
fclose(fp);
if((fp=fopen("student.dat","rb"))==NULL)
{
printf("file can not open ");
exit(0);
}
fread(stu,sizeof(STUDENT),N,fp); /*把学生信息从文件中读出来*/
fclose(fp);
pmax=stu; /*把最高分指针指向第1个学生*/
for(i=1;i<N;i++)
if(pmax->total<stu[i].total) /*把当前最高分和当前学生比较*/
pmax=&stu[i];
printf("学号:%ld 姓名:%s 年龄:%d ",pmax->number,pmax->name,pmax->age);
printf("各科成绩:");
for(i=0;i<7;i++)
printf("%6.1f",pmax->score[i]);
printf(" 总分:%f ",pmax->total);
}
|
|
|