数学与软件科学学院实验报告
专业
专业:信息与计算科学指导教师:冯山
2014060634
课程名称:C语言程序设计 实验编号:实验九 姓名:杨帆学号:
2015年6月16日
2014 级6班
实验得分
一、实验目的及要求
掌握C语言环境下结构体和共用体类型变量的定义和使用方法;
掌握结构体类型数组的概念和使用;
掌握指向结构体变量的指针变量、尤其是链表概念;
二、实验内容
1.首先熟悉结构体类型变量的基本声明方法、 结构体类型变量的内存分配原 则、初始化和引用结构体变量及其成员变量的基本方法; 然后掌握结构体变量的 输入、输出方法。(参见教材例10-1~10-5)
2■基于结构体数组的应用实验。
有n个学生,每个学生的数据包括学好(num卜姓名(name[20])、性别(sex)
年龄(age),以及三门课程的成绩(score[3]。要求:在main()函数中输入这些学生 的这些数据,然后设计一个函数count(来计算每个学生的总分和平均分,最后, 打印出所有数据信息(包含原来输入的学生原始数据信息和求解出来的新信息)。
对第⑴题实验,求出其中成绩最好的人和成绩最差的人,并显示出来。(假 定成绩最好和最差的人都只有一个)
*如果假定成绩最好和最差的人的个数不一定唯一,程序应该如何修改才 能完成求出所有最好和最差者,以及输出它们来。
3.*链表实验。
建立一个链表,每个结点包含:职工号、工资。用 malloc()函数开辟新结 点,用free()函数回收不用的结点空间。要求从键盘输入 5个员工的数据信息(用 create_list()),然后,用函数 output_list()<它们一一打印出来,用free_list()将链 表中的结点空间回收。假设职工编号为 1001,1005,1008,1010,1101
注意:malloc(和free()为系统函数。create_list(), output_list(), free_list() 为用户自定义函数。
在(1)的基础上,新增一个函数inset_node(插入员工1006和1032的数据信 息。要求新插入的员工后,员工仍然按职工号顺序排列。
在⑵的基础上,新增一个函数delete_node()可以用来将指定员工的数 据从链表中删除
在⑶的基础上,增加回收所删除结点所占内存空间的功能。
*如何查看和测试链表中结点的内存空间地址?能否由此分析(1)、2)、3)
中链表结点的逻辑结构?
三、实验步骤
⑴上机验证所选题目的程序设计结果,并做相应测试和分析;
进行实验分析;
总结结构体程序设计和实现的基本方法及其经验,尤其是链表技术;
编写实验报告
四、实验结果及分析
1、结构体类型变量的初始化 形式一:
struct结构体名
{
类型标识符成员名;
类型标识符成员名;
};
struct 结构体名结构体变量={初始数据}; 形式二:
struct结构体名
{
类型标识符成员名;
类型标识符成员名;
}结构体变量={初始数据};
形式三:
struct
{
类型标识符成员名;
类型标识符成员名;
}结构体变量={初始数据};
1.教材例10-1的源程序:
#inclijde
struct student
(
int nStNo;
char cName[20l;
char cSex;
lrit nflge;
float fScorei
char cfiddr[30l;
} struStud;
int naiFi(void)
(
int nSizeStud;
printf["size of struStud are 加I and KdAn'^sizeof(struct student),sizeof( nSizeStud=sizeof [striiStud-nStNo)+sizeof(struStiid,cNapie)+sizeof(struStii(LcS nSizeStud+=sizeofEstruStud.nAge)+sizeof(struStud,fScore)+sizeof(struStucLc printf[HTotal size is K^n^nSizeStud);
return 0;
输出结果:
size of struStud are 59 and 59. Tot日1 size is 59
结果分析:第一个输出语 句表明sizeof()弧括号内 既可以是结构体数据类 型标识符 structstudent;也可以是结构体变量strustud;其测试输出结果和计算各成员变量所占内存空间
大小之和是一致的。
流程图如下:prin tf("size of struStud are %dand %d.\n",sizeof(stru