input
输入数据有1组,每组有n个学生信息。
output
将n个学生的信息存入student.dat文件,文件为二进制文件。
本次实验题目不需要提交在线OJ,将程序代码截图、运行截图和写入文件内容的截图上传即可。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct student
{
int id;
char name[50];
char sex;
float a[5];
struct student*next;
}Node;
Node*Create(Node*head,int n);
Node*Sort(Node*head);
int main()
{
int i,n;
FILE*fp;
Node*head,*p;
head=(Node*)malloc(sizeof(Node));
scanf("%d",&n);
head=Create(head,n);
head=Sort(head);
if((fp=fopen("d:\\student.dat","wb+"))==NULL)
{
printf("Fail...\n");
exit(0);
}
p=head->next;
while(p!=NULL)
{
fwrite(p,sizeof(Node),1,fp);
p=p->next;
}
rewind(fp);
for(i=0;i<n;i++)
{
p=(Node*)malloc(sizeof(Node));
fread(p,sizeof(Node),1,fp);
printf("%d %s %c %.2f %.2f %.2f %.2f %.2f\n",p->id,p->name,p->sex,p->a[0],p->a[1],p->a[2],p->a[3],p->a[4]);
}
fclose(fp);
return 0;
}
Node*Create(Node*head,int n)
{
Node*p,*tp;
int i;
head->next=NULL;
tp=head;
for(i=0;i<n;i++)
{
p=(Node*)malloc(sizeof(Node));
scanf("%d",&p->id);
getchar();
gets(p->name);
scanf("%c",&p->sex);
scanf("%f%f%f",&p->a[0],&p->a[1],&p->a[2]);
p->a[3]=(p->a[0]+p->a[1]+p->a[2])/3;
p->a[4]=p->a[0]+p->a[1]+p->a[2];
p->next=tp->next;
tp->next=p;
tp=p;
}
return head;
}
Node*Sort(Node*head)
{
Node*p,*q;
for(p=head->next;p->next;p=p->next)
for(q=p->next;q;q=q->next)
if(q->a[4]>p->a[4])
{
Node*p_next=p->next;
Node*q_next=q->next;
Node t=*p;
*p=*q;
*q=t;
p->next=p_next;
q->next=q_next;
}
return head;
}
以二进制方式写入文件,产生的就是二进制文件。二进制文件可以拖放到记事本中打开,显示为乱码即正常。