C语言实验报告九

2018-12-20 10:11

数学与软件科学学院 实验报告 学期:_2013_至_2014_ 第1 学期 2013_年12_月09_日

课程名称: 程序设计基础教程-C语言_ 专业:_数学与应用数学_2012_级_1班 实验编号: 09 实验项目: 结构体和共用__ 指导教师__ ____ 姓名: 学号: 实验成绩:

一、实验目的及要求

(1) 掌握C语言环境下结构体和共用体类型变量的定义和使用方法; (2) 掌握结构体类型数组的概念和使用;

(3) 掌握指向结构体变量的指针变量、尤其是链表概念;

二、实验内容

1. 首先熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分配原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量的输入、输出方法。(参见教材例10-1~10-5)

2.基于结构体数组的应用实验。

(1) 有n个学生,每个学生的数据包括学好(num)、姓名(name[20])、性别(sex)、年龄(age),以及三门课程的成绩(score[3])。要求:在main()函数中输入这些学生的这些数据,然后设计一个函数count()来计算每个学生的总分和平均分,最后,打印出所有数据信息(包含原来输入的学生原始数据信息和求解出来的新信息)。

(2) 对第(1)题实验,求出其中成绩最好的人和成绩最差的人,并显示出来。(假定成绩最好和最差的人都只有一个)

(3)* 如果假定成绩最好和最差的人的个数不一定唯一,程序应该如何修改才能完成求出所有最好和最差者,以及输出它们来。

3.*链表实验。

(1) 建立一个链表,每个结点包含:职工号、工资。用malloc()函数开辟新结点,用free()函数回收不用的结点空间。要求从键盘输入5个员工的数据信息(用create_list()),然后,用函数output_list()将它们一一打印出来,用free_list()将链表中的结点空间回收。假设职工编号为1001,1005,1008,1010,1101。

注:malloc()和free()为系统函数。create_list(),output_list(),free_list()为用户自定义函数。

(2) 在(1)的基础上,新增一个函数inset_node()插入员工1006和1032的数据信息。要求新插入的员工后,员工仍然按职工号顺序排列。

(3) 在(2)的基础上,新增一个函数delete_node(),可以用来将指定员工的数据从链表中删除。

(4) 在(3)的基础上,增加回收所删除结点所占内存空间的功能。

(5)* 如何查看和测试链表中结点的内存空间地址?能否由此分析(1)、(2)、(3)中链表结点的逻辑结构?

三、实验准备:

(1) 复习有关结构体方面的所有知识,尤其是10-3-4节所学的动态存储分配技术;

(2) 编写所选实验题目的程序代码和流程图; (3) 检查源程序并给出其可能的运行结果说明。

四、实验步骤:

(1) 上机验证所选题目的程序设计结果,并做相应测试和分析; (2) 进行实验分析;

(3) 总结结构体程序设计和实现的基本方法及其经验,尤其是链表技术; (4) 编写实验报告。

五、实验结果分析与评价

(1) 根据测试目标写出测试报告; (2) 测试结果分析说明; (3) 测试程序代码清单。

1. 首先熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分配原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量的输入、输出方法。(参见教材例10-1~10-5)

答:(1)结构体声明方法:(先定义结构体类型,再声明结构体变量)

struct 结构体数据类型名 {

类型标识符 成员变量名;

类型标识符 成员变量名;

. . . . . .

}变量名表列;

(2) 结构体类型变量的内存分配原则:其存储空间大小随着成员变量所占存

储空间大小而变化。其存储空间是连续分配的一段存储区域,大小为成员变量所占存储空间之总和。

(3)初始化:初始化列表中值的个数少于结构体成员变量个数时,余下的成

员变量自动初始化为0 或NULL。反之,将出现编译型错误:

(4)引用结构体变量:既可以访问结构体中的成员变量,也可以将结构体变

量作整体引用。

(5)结构体变量的输入、输出方法:

利用scanf()和printf()函数完成 利用gets()和puts()函数完成

例题分析:

例10-1 测试结构体数据类型student所占的存储空间长度 程序如下: #include

struct student /*定义一个结构体*/ {

int nStno; char cName[20]; char cSex; int nAge; float fScore; char cAddr[30]; }struStud;

int main(void) /*主函数,主要测试各个结构体的内存大小*/ {

int nSizeStud;

printf(\ nSizeStud=sizeof(struStud.nStno)+sizeof(struStud.cName)+sizeof(struStud.cSex);

nSizeStud+=sizeof(struStud.nAge)+sizeof(struStud.fScore)+sizeof(struStud.cAddr); printf(\ return 0; }

运行结果如下:

结果分析:

此例题主要是要我们掌握,结构体的所占的空间长度是怎么样的。Int 占两个字节,char占一个字节,数组占30个,一共就有59个字节。空间长度就是59.结构体存储空间以所有成员变量所需存储空间大小为分配依据。

sizeof()内可以是结构体数据类型标识符,也可以是结构体变量。结果和计算各成员变量内存空间大小之和一致。注意:sizeof()中,用结构体数据类型名测试大小必须以数据类型标识符形式表述。否则,编译器将报告“Undefined symbol”结构体数据类型名“in function…”错误。

例10-3 输入并输出学生成绩记录 #include

struct score_type /*定义一个结构体*/ {

int nStno; int nAge; float fScore; };

int main(void) /*主函数*/ {

struct score_type struStud; /*声明一个结构体*/ printf(\

scanf(\printf(\\\ struStud.fScore); return 0; }

运行结果:

Enter nStNo.nAge,fscore:1,20,95.5 nStNo = 1,nAge = 20,fScore = 95.5

结果分析:

对结构体成员变量的访问用圆点操作符“·”,它被称为成员操作符,圆点运算优先级最高且是自左向右的结合,其具体格式如下:结构体变量名.成员变量名,它表示要访问结构体变量下的成员变量名域;由于取地址操作符优先级低于圆点操作符,对成员变量地址的引用可以不加括号。然后还要注意在结构体定义完成后要记住加分号。

2.基于结构体数组的应用实验。

(1) 有n个学生,每个学生的数据包括学号(num)、姓名(name[20])、性别(sex)、年龄(age),以及三门课程的成绩(score[3])。要求:在main()函数中输入这些学生的这些数据,然后设计一个函数count()来计算每个学生的总分和平均分,最后,打印出所有数据信息(包含原来输入的学生原始数据信息和求解出来的新信息)。 程序如下: #include

#include

#define STUD_NUM 2 /*宏定义*/

struct stud_info /*定义一个结构体*/ {

int num; char name[20]; char sex; int age; int score[3]; } ;

void stud_gets(struct stud_info *studPtr,const int no);

/*声明外部函数*/

void stud_input(struct stud_info *stud_arr,const int num); void stud_output(const struct stud_info *stud_arr,const int num); void stud_gets(struct stud_info *studPtr,const int no)/*分别定义*/ {


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

下一篇:娄底市城市总体规划文本

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

马上注册会员

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