《C语言》课内实验报告8
更新时间:2023-12-16 18:56:01 阅读量: 教育文库 文档下载
- 《C语言》中图分类号是推荐度:
- 相关推荐
《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语言》实验报告 int num; char name[20]; int score[3]; char flag; }a[6]; 从键盘输入6个学生的数据,其中flag的值应为‘\\n’。然后将这6个学生的数据分别写入名为stud1.txt的文本文件和名为stud2.dat的二进制文件中。编写源程序,给出注释及运行结果。 #include int num; /*结构体中包含整型变量num*/ char name[20] ; /*结构体中包含长度为20字符串型变量name*/ int score[3]; /*结构体中包含长度为3的整型数组score[3]*/ char flag; /*结构体中包含字符型变量flag*/ }a[6]; /*在结构体中定义长度为6的student变量a*/ void main() /*空类型的无参主函数*/ { void input(struct student *p); /*声明空类型函数input函数包含一个指向结构体的指针变量p*/ void print(struct student *p,int n); /*声明空类型函数print函数包含一个指向结构体的指针变量p和整型变量n*/ FILE *fp ; /*定义一个指向文件的指针变量fp*/ int n=6; /*定义整型变量n并赋初值6*/ input(a); /*调用函数input其实参为a*/ print(a,n); /*调用函数print其实参为a和n*/ fp=fopen(\ /*打开名字为stud1.txt的文件,打开方式为只写,并将fopen带回的 - 5 - 《C语言》实验报告 指针赋给fp*/ fwrite(a,sizeof(struct student),6,fp); /*从a所指向的内存中,读入6个大小为student大小的数据块写入到fp所指向的文件中*/ fclose(fp); /*关闭文件*/ fp=fopen(\ /*打开名为stud2.dat的文件,打开方式为二进制只写,并将fopen带回的指针赋给fp*/ fwrite(a,sizeof(struct student ),6,fp); /*从a所指向的内存中,读入6个大小为student大小的数据块写入到fp所指向的文件中*/ fclose(fp); /*关闭文件*/ } void input(struct student *p) /*定义空类型的函数input其形参为一个指向结构体的指针变量p*/ { int i; /*定义整型变量i*/ for(i =0;i<6;i++) /*i从0到5进行循环*/ { printf(\请输入 第%d名同学 数字,姓名,三门成绩:\\n\+ 1 ) ; /*标准输出函数,屏幕上输出\请输入 第%d名同学 数字,姓名,三门成绩:\其中\以整型输出最后换行 */ scanf(\ /*标准输入函数,从从键盘以整形和字符串输入2个数分别存到p[i].num和p[i].name中*/ scanf(\ /*标准输入函数,以整型从键盘输入三个数存到p[i].score[0]和p[i].score[1]和p[i].score[2]中*/ p[i].flag=getchar(); /*把数的一个字符赋给p[i].flag*/ } } void print(struct student *p,int n) /*定义空类型函数print函数包含一个指向结构体的指针变量p和整型变量n*/ { int i; /*定义整型变量i*/ - 6 - 《C语言》实验报告 printf(\数字 姓名 课程1 课程2 课程3 \\n\ /*标准输出函数,输出\数字 姓名 课程1 课程2 课程3 \并换行*/ for(i=0;i printf(\ /*标准输出函数,以整型占8列宽度靠左侧从屏幕上输出p[i].score[0],p[i].score[1],p[i].score[2]*/ } } 四、实验结果: 1、输出结果: 2、输出结果: - 7 - 《C语言》实验报告 五、实验体会或遇到问题: 1、还需要继续看书,多看,多做。 2、虽然做课内实验很麻烦,但能收获很多,使知识得到运用。 3、当真正自己去敲代码时才能发现许多细节上的问题。 4、对于文件存储,读取,及其所在位置理解掌握不够。 5、还需努力。 - 8 - 《C语言》实验报告 - 9 -
正在阅读:
《C语言》课内实验报告812-16
高校健美操教学改革与创新途径的思考04-21
不要抱怨作文700字07-08
保健品-健露产品策划案01-28
使用视窗系统 XP组策略修改系统设置06-04
2015年荆门市事业单位招聘考试报名时间05-19
牛津版(广州)7A-9B句子及作文06-23
2009年水环境监测科工作总结11-23
郑国渠对的历史意义 - 图文03-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 语言
- 实验
- 报告