第十一章习题答案 11洗择颗 1A2 3.B4.C 2.2编程题 1.请编写车工实现文件拷贝。即将源文件拷贝到目的文件,两个文件名均由命令行给出。源 文件名在前。 2设文件merd过中存放了一组整数。请编程统计并输H文件中正整数。 这两个题没有答案不用作了 3将1~50之间的素数存入一个磁盘文件 #include int prime(int x) fint f=2. while(x%f!=0) if(x==f)return 1; else return 0; main (FILE *fp: int i; if((fp=fopen("a.dat","wb"))==NULL) {printf("建立文件错误!\n"):exit(O): for(i=1:i(=50:i++) if(prime(i))fwrite(&i,sizeof(int),1,fp) 4.一个数据文件中含有学生的姓名、学号及3科考试成绩,读取这些数据并找出各科的最 高分。 #include struct stu (char name[25] char no[4]; int s1: int s2. ints3:】 struct score (char name[25] char no[4]: int sg:): void g(struct stu *p,struct score *a.int x) (int i; for(i-0:i<25;i+) (*q).name [i]=(*p).name[i]: for(i=0:i<4:i++) (*q.no[i]=(p).no[i]:
第十一章习题答案 1.1 选择题 1. A 2. A 3. B 4.C 2.2 编程题 1.请编写车工实现文件拷贝。即将源文件拷贝到目的文件,两个文件名均由命令行给出。源 文件名在前。 2.设文件 number.dat 中存放了一组整数。请编程统计并输出文件中正整数。 这两个题没有答案不用作了。 3.将 1~50 之间的素数存入一个磁盘文件。 #include int prime(int x) {int f=2; while(x%f!=0) f++; if(x==f) return 1; else return 0; } main() {FILE *fp; int i; if((fp=fopen("a.dat","wb"))==NULL) {printf("建立文件错误!\n"); exit(0);} for(i=1;i struct stu {char name[25]; char no[4]; int s1; int s2; int s3;}; struct score {char name[25]; char no[4]; int sg;}; void g(struct stu *p,struct score *q,int x) {int i; for(i=0;i<25;i++) (*q).name[i]=(*p).name[i]; for(i=0;i<4;i++) (*q).no[i]=(*p).no[i];
(*0),sg=x void output(struct stu *p) FILE *sp: struct score s[31: int max1.max2.max3: if((sp=fopen("sc e.dat”,"rb")=NWLL) printf("数据文件错误:n"):exit(O): fread(p,sizeof(struct stu),1.sp): max1=(*p).s1:max2=(*p).s2:max3=(p).s3: )e(m) if (max2<(*p).s2)[max2=(p).s2:g(p,&s[],max2): if(max3<(*p).s3)){max3=(*p).s3:g(p,&s[2],max3):} fread(p.sizeof(struct stu).1.sp): printf(英语成绩最高的学生:n): printf("姓名:%sln”,s[o].name): printf(“学号:%sln",s[o].no); printf(“成绩:dn",s[o].sg): printf(离散数学成锁最高的学生:n”): printf(姓名: .name). printf(“学号:%sn",s[1].no) printf(“成绩:d八n”,s[1].sg): printf(C程序设计成绩最高的学生:\n"): printf(姓名:%sn”,s[2].name): printf(成绩:d小n",s[2].sg): fclose(sp): main( {struct stu a[100]:/体学生的数量/ output(a)
(*q).sg=x; } void output(struct stu *p) {FILE *sp; struct score s[3]; int max1,max2,max3; if((sp=fopen("score.dat","rb"))==NULL) {printf("数据文件错误!\n"); exit(0);} fread(p,sizeof(struct stu),1,sp); max1=(*p).s1; max2=(*p).s2; max3=(*p).s3; while(!feof(sp)) {if (max1<(*p).s1) {max1=(*p).s1; g(p,&s[0],max1);} if (max2<(*p).s2) {max2=(*p).s2; g(p,&s[1],max2);} if (max3<(*p).s3) {max3=(*p).s3; g(p,&s[2],max3);} fread(p,sizeof(struct stu),1,sp); } printf("英语成绩最高的学生:\n"); printf("姓名:%s\n",s[0].name); printf("学号:%s\n",s[0].no); printf("成绩:%d\n",s[0].sg); printf("离散数学成绩最高的学生:\n"); printf("姓名:%s\n",s[1].name); printf("学号:%s\n",s[1].no); printf("成绩:%d\n",s[1].sg); printf("C 程序设计成绩最高的学生:\n"); printf("姓名:%s\n",s[2].name); printf("学号:%s\n",s[2].no); printf("成绩:%d\n",s[2].sg); fclose(sp); } main() {struct stu a[100]; /* 学生的数量 */ output(a); }