当前位置: 首页 > 文章教程  > 考试与认证 > 计算机等级考试

全国计算机等级考试二级C语言12.4文件的定位

8/22/2020 10:24:52 PM 人评论

全国计算机等级考试二级C语言12.4文件的定位

12.4 文件的定位

“文件位置指针”和“文件指针”是两个完全不同的概念。文件指针是在程序中定义的FILE类型的变量,通过fopen()函数,把文件指针和某个文件建立联系。C语言程序通过文件指针实现对文件的各种操作。文件位置指针只是一个形象化的概念,下面将用文件位置指针来表示当前读或写的数据在文件中的位置。当打开文件时,可以认为文件位置指针总是指向文件的开头,即第一个数据之前。当文件位置指针指向文件末尾时,表示文件结束。

考点7 fseek()函数和随机读写

真考链接

考点7 偏难,属于重点理解内容,在操作题中以填空题的形式出现,考核概率为5%。

如果控制好文件的位置指针,就可以对流式文件进行顺序读写和随机读写。fseek()函数的功能就是移动文件位置指针到指定的位置,其一般的调用形式为:

fseek(文件类型指针,位移量,起始点)

其中起始点的标识符和对应数字见表12.1。

表12.1 位移量的表示方法及含义

“位移量”指以“起始点”为基点,向前移动的字节数。C语言要求位移量是long型数据,并规定在数字的末尾加一个字母L。

常见问题

“文件位置指针”和“文件指针”这两个概念有何区别?

文件指针是在程序中定义的FILE类型的变量,通过fopen()函数,把文件指针和某个文件建立联系。文件位置指针只是一个形象化的概念,用文件位置指针来表示当前读或写的数据在文件中的位置。当打开文件时,可以认为文件位置指针总是指向文件的开头。当文件位置指针指向文件末尾时,表示文件结束。

真题精选

程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student. dat文件中。函数fun()的功能是:从文件中找出指定学号的学生数据,读入此学生数据,对该学生的分数进行修改,使每门课的分数加3分,修改后重写文件中学生的数据,即用该学生的新数据覆盖源数据,其他学生数据指定不变;若找不到,则不做任何操作。

请在标号处填入正确的内容,使程序得出正确的结果。

注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdio.h>

#define N 5

typedef struct student {

long sno;

char name[10];

float score[3];

}STU;

void fun(char *filename,long sno)

{ FILE *fp;

STU n;int i;

fp = fopen(filename,"rb+");

while(!feof(【1】))

{ fread(&n,sizeof(STU),1,fp);

if(n.sno【2】sno)break;

if(!feof(fp))

{ for(i=0;i<3;i++)n.score[i] += 3;

fseek(【3】,-(long)sizeof(STU), SEEK CUR);

fwrite(&n,sizeof(STU),1,fp);

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}},ss[N];

int i,j;FILE *fp;

fp = fopen("student.dat","wb");

fwrite(t,sizeof(STU),N,fp);

fclose(fp);

printf("\nThe original data:\n");

fp = fopen("student.dat","rb");

fread(ss,sizeof(STU),N,fp);

fclose(fp);

for(j=0;j<N;j++)

{ printf(" \nNo:% ld Name:% 8sScores:",ss[j].sno,ss[j].name);

for(i=0;i<3;i++)printf("% 6. 2f ",ss[j].score[i]);

printf("\n");

fun("student.dat",10003);

fp = fopen("student.dat","rb");

fread(ss,sizeof(STU),N,fp);fclose (fp);

printf("\nThe data after modifing:\n");

for(j=0;j<N;j++)

{ printf(" \nNo:% ld Name:%

8sScores:",ss[j].sno,ss[j].name);

for(i=0;i<3;i++)printf("% 6. 2f ",ss[j].score[i]);

printf("\n");

【答案】【1】fp 【2】 == 【3】 fp

【解析】本题考查:文件结束检测函数feof;if语句条件表达式;fseek函数

标号【1】:while循环语句的循环条件是判断文件是否结束,配合feof函数来完成,其一般形式为:feof(文件指针)。

标号【2】:根据题目要求确定if语句条件表达式的内容,满足条件后跳出循环。

标号【3】:文件定位函数fseek,调用形式为fseek(文件指针,位移量,起始点),此处文件指针是fp。

相关教程

共有条评论 网友评论

验证码: 看不清楚?