C語言練習(xí)


例11.6 有學(xué)生成績數(shù)據(jù)文件score.dat文件,其格式為:
李小明 70
趙偉 65
劉春麗 90.5
……
請計算出平均分,并將結(jié)果寫入到最后一行。形如:
平均分 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 將給定的學(xué)生數(shù)據(jù)保存到“學(xué)生.dat”二進(jìn)制文件中,然后將這些數(shù)據(jù)讀出并顯示在屏幕上。
#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:\\學(xué)生.dat","wb"))==NULL)
{
printf("學(xué)生.dat文件不能創(chuàng)建。\n");
return 0;
}
for(i=0;i<n;i++)
if(fwrite(&s[i],sizeof(struct STUDENT),1,f)!=1)
{
printf("在寫入第%d名學(xué)生數(shù)據(jù)時發(fā)生錯誤,文件建立不完整。\n",i+1);
return i;
}
fclose(f);
return i;
}
int LoadAndDisplay()
{ struct STUDENT s;
int n=0;
FILE *f;
if((f=fopen("d:\\學(xué)生.dat","rb"))==NULL)
{
printf("學(xué)生.dat文件不能使用。\n");
return 0;
}
printf("學(xué)號\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名學(xué)生的信息。\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));
}

