首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
程序通过定义学生结构体变量, 存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。 请在程序
程序通过定义学生结构体变量, 存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。 请在程序
admin
2017-09-23
47
问题
程序通过定义学生结构体变量,
存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数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
本试题收录于:
二级C语言题库NCRE全国计算机二级分类
0
二级C语言
NCRE全国计算机二级
相关试题推荐
有以下程序,其中%u表示按无符号整数输出()。main(){unsignedintx=0xFFFF;/*x的初值为十六进制数*/printf("%u\n",x);}程序运行后的输出结果是()。
有以下程序:#include<stdio.h>#defineN8voidfun(int*x,inti){*x=*(x+i)+1;}main(){inta[N]={1,2,3,4,5,6,7,8},i
下列数组定义中错误的是()。
下列关于函数的叙述中正确的是()。
下列选项中,不属于数据库管理的是()。
在下列选项中,没有构成死循环的程序段是()。
以下选项中非法的字符常量是()。
设变量均已正确定义,若要通过scanf("%d%c%d%c”,&a1,&e1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。下列所示的输入形式中正确的是(注:口代表空格字符)()。
以下程序统计从终端输入的字符中大写字母的个数。用#号作为输入结束标志,请填空。#include<stdio.h>#include<ctype.h>main(){intnum[26],i;charc;for(i=0;i<26
下面程序的输m结果是()。typedefunion{doublex[3];inty[4];charz[10];}M;Mt;main(){Printf("%d\n",sizeof
随机试题
试述教育实验研究历史发展的两条线索。
女性,50岁,“胃溃疡”病史5年,近期经常呕吐隔夜宿食,进一步的处理是
A.肝硬化B.肝静脉阻塞综合征C.门静脉海绵窦样变性D.肝癌伴门静脉癌栓E.肾上腺肿瘤压迫肝静脉女性,37岁,患红细胞增多症,突然出现大量腹水,肝脾肿大,胸腹壁、腰背部静脉曲张明显,血流方向向上。经胃肠钡剂检查证实为食管胃底静脉曲张。应考虑
CT检查前患者的准备工作不包括
A.国家药品监督管理局B.国家医疗保障局C.商务部D.工业和信息化部承担食品、医药工业等的行业管理工作的部门是
如图3-151所示简支梁在两种受力状态下,跨中Ⅰ、Ⅱ点的剪力关系为:[2009年第2题]
2017年5月,贾某以一套房屋作为投资,与几位朋友设立一家普通合伙企业,从事软件开发。2018年6月,贾某举家移民海外,故打算自合伙企业中退出。对此,下列选项中说法正确的是()。
抗日战争引向胜利的中心一环是()
Nowadaysdrinkingpurewaterhasbecomeafashionwithmanypeople.Pleasewriteanessaycommentingon:1)thereasonfori
sickanimals本题询问该项目的工作内容。录音中的helpthevet是题目中的原词复现,故空格处填入sickanimals。
最新回复
(
0
)