C语言练习


例11.6 有学生成绩数据文件score.dat文件,其格式为:
李小明 70
赵伟 65
刘春丽 90.5
……
请计算出平均分,并将结果写入到最后一行。形如:
平均分 86.3
#include <stdio.h>
main()
{ FILE *fp;
char name[20];
float score,sum=0;
int n=0;
fp=fopen("score.dat","r+");
while(fscanf(fp,"%s%f",name,&score)==2)
{ sum+=score;
n++;
}
fprintf(fp,"平均分\t%5.1f\n",sum/n);
fclose(fp);
}

例11.7 将给定的学生数据保存到“学生.dat”二进制文件中,然后将这些数据读出并显示在屏幕上。
#include <stdio.h>
struct STUDENT
{ int ID;
char name[10];
int age;
char addr[15];
};
int SaveToFile(struct STUDENT s[],int n)
{ int i;
FILE *f;
if((f=fopen("d:\\学生.dat","wb"))==NULL)
{
printf("学生.dat文件不能创建。\n");
return 0;
}
for(i=0;i<n;i++)
if(fwrite(&s[i],sizeof(struct STUDENT),1,f)!=1)
{
printf("在写入第%d名学生数据时发生错误,文件建立不完整。\n",i+1);
return i;
}
fclose(f);
return i;
}
int LoadAndDisplay()
{ struct STUDENT s;
int n=0;
FILE *f;
if((f=fopen("d:\\学生.dat","rb"))==NULL)
{
printf("学生.dat文件不能使用。\n");
return 0;
}
printf("学号\t姓名\t年龄\t地址\n");
while(fread(&s,sizeof(struct STUDENT),1,f)==1)
{
printf("%d\t%s\t%d\t%s\n",s.ID,s.name,s.age,s.addr);
n++;
}
fclose(f);
return n;
}
main()
{
struct STUDENT students[]=
{{1001,"李明",18,"北京"},
{1002,"王丽",19,"上海"},
{1003,"赵新欣",18,"天津"},
{1004,"陈浩然",20,"沈阳"}};
int stu_cnt=4,save_n,disp_n;
save_n=SaveToFile(students,stu_cnt);
if(save_n>0)
{
disp_n=LoadAndDisplay();
if(disp_n>0)
printf("\n共读入并显示了%d名学生的信息。\n",disp_n);
}
}

指针示例
#include <stdio.h>
main()
{
int a[]={10,20,30,40,50};
int *p,x;
p=&a[0];
printf("\n\n%d ",*p);
printf("%d ",*p++);
printf("%d ",(*p)++);
printf("%d ",*(p++));
printf("%d ",++*p);
printf("%d ",++(*p));
printf("%d ",*++p);
printf("%d ",*(++p));
}

