《C语言》课内实验报告8

2020-02-21 16:06

《C语言》实验报告

一、实验题目:

文件的应用

二、实验目的:

1.进一步掌握与文件有关的概念。

2.熟悉对文件进行各种操作的函数的使用方法。

三、实验内容:

1.有n个学生,每个学生数据包括学号、姓名、性别、3门成绩、总成绩、平均成绩。从键盘输入n和n个学生的数据(总成绩和平均成绩可通过3门成绩算出),输入的n个学生的数据放入结构体数组a中。然后将学生数n和这n个学生的数据存储到名为stud.dat的二进制文件中。之后读入文件中的数据放到变量n1和结构体数组b中,输出数组b中的学生数据。编写源程序,给出注释及运行结果。

#include

/*包含头文件*/ struct student

/*声明一个结构体student*/ {

int num;

/*结构体中包含整型变量num*/ char name[16];

/*结构体中包含长度为16字符串型变量name*/ char sex;

/*结构体中包含字符型变量sex*/ int s[3];

/*结构体中包含长度为3的整型数组s*/ int total;

/*结构体中包含整型变量total*/ double aver;

/*结构体中包含浮点型的变量aver*/ };

void main ()

/*空类型的无参主函数*/ {

void input ( struct student *p , int *pn ) ;

- 1 -

《C语言》实验报告

/*声明空类型函数input函数包含一个指向结构体的指针变量p和一个指向整型变量的指针变量pn*/

void savef (struct student a[] , int n);

/*声明空类型函数savef函数包含一个结构体变量a[]和整型变量n*/ void readf (struct student b[] ,int *pn);

/*声明空类型函数readf函数包含一个结构体变量b[]和一个指向整型变量的指针变量pn*/

void print( struct student *p , int n );

/*声明空类型函数print函数包含一个指向结构体的指针变量p和整型变量n*/

struct student a[100],b[100];

/*定义student类型的长度为100数组变量a和b*/ int n,n1;

/*定义整型变量n和n1*/ input ( a , &n );

/*调用函数input其实参为a和n的地址*/ savef (a,n);

/*调用函数savef其实参为a和n*/ readf (b,&n1);

/*调用函数readf其实参为b和n1的地址*/ print (a,n1);

/*调用函数print其实参为a和n1*/ }

void input ( struct student *p,int *pn)

/*定义空类型的函数input其形参为一个指向结构体的指针变量p和一个指向整型变量的指针变量pn*/

{

int i;

/*定义整型变量i*/ char c;

/*定义字符型变量c*/

printf ( \

/*标准输出函数,屏幕上输出\ scanf ( \

/*标准输入函数,从键盘以整型输入一个数存到pn中*/ for( i = 0 ;i < *pn ;i++ )

/*当 i = 0 且i < *pn 时i自加一*/ {

printf (\ /*标准输出函数,屏幕上输出\其中\以整型输出最后换行 */

scanf (\

/*标准输入函数,从从键盘以整形和字符串输入2个数分别存到p[i].num和p[i].name中*/

- 2 -

《C语言》实验报告

while(c=getchar( ),c!='f'&&c!='m');

/*从键盘输入一个数存到c当c不等于f且c不等于m*/ p[i].sex=c;

/*把c赋值给p[i].sex*/

scanf (\

/*标准输入函数,以整型从键盘输入三个数存到p[i].s[0]和p[i].s[1]和p[i].s[2]中*/

p[i].total=p[i].s[0]+p[i].s[1]+p[i].s[2];

/*把p[i].s[0] + p[i].s[1] + p[i].s[2]赋值给p[i].total*/ p[i].aver=p[i].total/3.0;

/*把p[i].total / 3.0赋值给p[i].aver*/ } }

void savef(struct student a[],int n)

/*定义函数savef函数包含一个结构体变量a[]和整型变量n*/ {

FILE *fp;

/*定义一个指向文件的指针变量fp*/ int i;

/*定义整型变量i*/

fp = fopen(\

/*打开名字为stud.dat的文件,打开方式二进制读写*/ fwrite (&n,2,1,fp);

/*从n所指向的内存中,读入1个大小为2个字节的数据块写入到fp指向的文件*/

for (i=0;i

/* 当i=0且i

fwrite (&a[i],sizeof(struct student),1,fp);

/*从a[i]所指向的内存中,读入一个大小为student大小的数据块写入到fp指向的文件*/

fflush(fp);

/*将文件缓存中的数据刷到磁盘*/ }

fclose(fp); /*关闭文件*/ }

void readf(struct student b[] int*pn1)

/*定义空类型的函数readf函数包含一个结构体变量b[]和一个指向整型变量的指针变量pn*/

{

FILE *fp;

/*定义一个指向文件的指针变量fp*/ int i;

- 3 -

《C语言》实验报告

/*定义整型变量i*/

fp=fopen (\

/*打开名字为stud.dat的文件,打开方式二进制读*/ fread(pn1, 2,1,fp);

/*从fp所指向的文件读入1个2个字节的数据,存到数组pn1中*/ for (i =0;i<*pn1;i++ )

/* 当i =0且i<*pn1时i自加一 */ fread(&b[i],sizeof(struct student),1,fp);

/*从fp所指向的文件中读入1个大小为student大小的数据,存到b[i]中*/

fclose (fp); /*关闭文件*/ }

void print(struct student*p,int n)

/*定义空类型函数print函数包含一个指向结构体的指针变量p和整型变量n*/

{ int i;

/*定义整型变量i*/

printf(\标准输出函数No. name sex score1 score2 score3 total average\\n\

/*输出\ SEX SUBJECT1 SUBJECT2 SUBJECT3 TOTAL AVERAGE\并换行*/

for(i=0;i

/*当 i=0且i

printf(\

/*标准输出函数,以整型占4列宽度靠右侧从屏幕上输出p[i].num,以字符串型型占16列宽度靠右侧从屏幕上输出p[i].name,以字符型型占2列宽度靠左侧从屏幕上输出p[i].sex*/

printf(\

/*标准输出函数,以整型占8列宽度靠左侧从屏幕上输出p[i].s[0],p[i].s[1],p[i].s[2]*/

printf(\

/*标准输出函数,以整型占8列宽度靠左侧从屏幕上输出p[i].total,以浮点型占10列宽度保留2位小数靠左侧从屏幕上输出p[i].aver最后换行*/

} }

2.有6个学生,每个学生数据包括学号、姓名、3门课程的成绩和换行标志。可定义一个结构体数组存放这6个学生的数据: struct student {

- 4 -


《C语言》课内实验报告8.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:建立区域灭火救援协作机制的实践与思考(定稿)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: