程序通过定义学生结构体变量, 存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。 请在程序

admin2017-09-23  24

问题 程序通过定义学生结构体变量,
存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。
    请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
    注意:部分源程序在文件BLANK1.C中。
    不得增行或删行,也不得更改程序的结构!
    试题程序:
#include  < stdio.h >
#define N 5
typedef struct student {
  long sno;
      char name [ 10 ] ;
  float score [ 3 ] ;
} STU;
void fun (char * filename, STU n)
{ FILE * fp;
    fp  = fopen (【1】,  "rb + ");
  fseek (【2】, 一 (long) sizeof
(STU) ,  SEEK_END) ;
/*********found*********/
fwrite (&n, sizeof (STU) , 1,  【3】) ;
fclose (fp) ;
}
main ()
{ STU t[N] = { {10001,"MaChao",91, 92, 77 },  {10002," CaoKai",75, 60, 88 },
            {10003, " LiSi",  85,70, 78}, {10004,"FangFang", 90,82, 87},
            {10005, " ZhangSan ",95, 80, 88} };
STU n = {10006, "ZhaoSi",  55, 70,
int i,j;   FILE * fp;
fp = fopen("student.dat","wb");
fwrite (t, sizeof (STU) , N, fp) ;
fclose ( fp) ;
fp = fopen ("student.dat", "rb");
fread (ss, sizeof (STU) , N, fp) ;
fclose ( fp);
printf ("\nThe original data  :\n\n") ;
{ printf ("\nNo: %ld Name: % 一8s
scores:  ",ss[j ] .sno,  ss[j] .name) ;
printf ("% 6.2f ",  ss[j] .score) ;
   printf "\n") ;
}
fun ("student.dat", n) ;
printf ( " \ nThe  data  after modifing:\n\n");
fp = fopen ("student.dat", "rb");
fread (ss, sizeof (STU) , N, fp);
fclose ( fp) ;
{ printf("\nNo: % ld Name: % 一8s
Scores: ",ss[j ] .sno, ss[ j ] .name) ;
printf ("% 6.2f ",  ss[ j ] .score) ;
  printf ("\n") ;
  }
}

选项

答案(1)filename (2)fp (3)fp

解析 填空1:本空是对文本文件的打开,filename所指的文件中的最后数据要进行重写,因此首先是要打开,因而本空填写filename。
    填空2:fseek功能是重定位流上的文件指针。
    用法:intfseek( FILE *stream, long offset, int fromwhere);本空应该填写fp。
    填空3:因为题目中要对所有学生数据均以二进制方式输出到文件中,因此本空填写fp。
    知识点讲解:
    函数名:fseek
    功能:重定位流上的文件指针。
    用法:int fseek(FILE *stream,long offset,intfromwhere)。
    描述:函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准(从文件的哪里开始偏移)、偏移offset个字节的位置。正数表示正向偏移,负数表示负向偏移。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
    返回值:成功,返回0;否则返回非0值。
转载请注明原文地址:https://kaotiyun.com/show/3zxp777K
0

最新回复(0)