当前栏目:

高级语言程序设计-实验八 结构体和文件操作

时间:2015-04-29浏览:1093设置

实验八结构体和文件操作(4学时)

目的要求

1)掌握结构体类型变量的定义和使用;

2)掌握结构体类型数组的概念和使用;

3)掌握链表的概念,初步学会对链表进行操作;

4)掌握文件以及缓冲文件系统、文件指针的概念;

5)学会使用文件打开、关闭、读、写等文件操作函数;

6)学会用缓冲文件系统对文件进行简单的操作。

上机内容

一般示例

【例1】上机运行程序,观察运行结果。

#include <stdio.h>

文本框:运行结果为:structst

{ int x;

int *y;

} *p;

int s[]={10,20,30,40};

struct st a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};

void main( )

{

p=a;

printf(“%d\n”,p->x);

printf(“%d\n”,(++p)->x);

printf(“%d\n”,*(++p)->y);

printf(“%d\n”,++(*(++p)->y));

}

【例2】试利用结构体类型编写程序,有5个职工的姓名、基本工资和补贴,计算每个职工实发工资并输出。

#include <stdio.h>

void main( )

{

int i;

/*结构体类型struct worker 的定义,其成员有姓名、基本工资、补贴和实发工资*/

  

  

  

  

struct worker s[5]={{“li”,2000,120},{“ma”,2020,45},

{“lin”,3211,234},{“wang”,4567,900},{“deng”,6467,861}};

for i=0;i<5;i++)

/*计算每个人的实发工资*/

  

  

for(i=0;i<5;i++)

/*printf()语句输出每个人的姓名和实发工资*/

  

  

  

}

【思考】

a.改写程序,利用循环语句从键盘逐个输入数据,给struct worker 类型的数组元素赋值。

b.重新编写程序,增加相应的变量,将所有人的基本工资、补贴和实发工资分别累加起来,并输出。

【例3】下面的程序对data.dat文件写入10条记录。通过此题,请总结文件操作的一般规律。

#include <stdio.h>

void main()

{

FILE *fp;

int i;

float x;

fp = fopen(date.dat,w);

for(i = 1;i <= 10;i ++)

{

scanf(%f,&x);

fprintf(fp,%f\n,x);

}

fclose(fp);

}

编程作业

下面的作业均要求画出程序流程图和写出源程序代码。并在电脑上运行通过。

1.定义一个结构体类型,包含用户的姓名(含6个字符的字符串)和电话号码(含8个字符的字符串)。编写函数getUser用于读入n位用户的数据到结构体数组中;编写函数sortUser用于将数组中的用户按姓名的字母顺序重新排列;编写函数outUser用于输出数据。

部分程序如下,请完善程序。

#include “stdio.h”

#include “string.h”

#define N 5

struct User

{

char name[7],tel[9];

};

/*以下是getUser函数*/

  

  

  

  

  

  

/*以下是sortUser函数*/

  

  

  

  

  

  

  

  

  

  

  

  

  

/*以下是outUser函数*/

  

  

  

  

  

  

void main( )

{

struct User user[N];

getUser(user,N);

sortUser(user,N);

outUser(user,N);

}

2.建立一个链表,每个结点包括的成员为:职工号、工资。用一个creat()函数来建立链表,用list()函数来输出数据。5个职工号为101103105107109。在此基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。然后再写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表。

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

3.用记事本软件建立一个名为“d1.txt”的文本文件存入磁盘,文件中有18个数。请你编写一个程序,你的程序能从磁盘上读入该文件,并用文件中的前9个数和后9个数分别作为两个3*3矩阵的元素。求这两个矩阵的和,并把结果按每行3个数据写入文本文件“d2.txt”。你可以用DOS命令TYPE显示“d2.txt”文件中的内容。

  

  

  

  

  

  

  

  

  

  

  

  

选做题

1.建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。(习题11.11

2.学生成绩单制作

1)定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩

2)从键盘输入10个学生的以上内容

3)输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩

4)输出三门课程的平均分数最高的学生的学号、姓名及其平均分

5)将10个学生按照平均分数从高到低进行排序,输出结果,格式如下所示:

numbernamemathChineseEnglishaverage

103tom909010095

101alice90807080

3.学生成绩文件管理

1)定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩

2)从键盘输入10个学生的以上内容,存入文件stud.dat,关闭文件

3)打开stud.dat文件,将数据读出,查看是否正确写入,关闭文件。

4)打开文件stud.dat文件,读出数据,将10个学生按照平均分数从高到低进行排序,

5)分别将结果输出到屏幕上和另一文件studsort.dat中。

6)从studsort.dat 文件中读取第246810个学生的数据。


同栏目信息

其它相关信息