2023年C语言实验报告九

上传人:豆*** 文档编号:166046855 上传时间:2022-10-31 格式:DOC 页数:12 大小:60.50KB
收藏 版权申诉 举报 下载
2023年C语言实验报告九_第1页
第1页 / 共12页
2023年C语言实验报告九_第2页
第2页 / 共12页
2023年C语言实验报告九_第3页
第3页 / 共12页
资源描述:

《2023年C语言实验报告九》由会员分享,可在线阅读,更多相关《2023年C语言实验报告九(12页珍藏版)》请在装配图网上搜索。

1、 数学与软件科学学院 实验报告 学期:_2023_至_2023_ 第1 学期 2023年12月09日 课程名称: 程序设计基础教程-C语言_ 专业:_数学与应用数学_2023_级_1班实验编号: 09 实验项目: 结构体和共用_指导教师_ _ 姓名: 学号: 实验成绩: 一、实验目的及规定(1) 掌握C语言环境下结构体和共用体类型变量的定义和使用方法;(2) 掌握结构体类型数组的概念和使用;(3) 掌握指向结构体变量的指针变量、特别是链表概念;二、实验内容1. 一方面熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分派原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量

2、的输入、输出方法。(参见教材例10-110-5)2.基于结构体数组的应用实验。(1) 有n个学生,每个学生的数据涉及学好(num)、姓名(name20)、性别(sex)、年龄(age),以及三门课程的成绩(score3)。规定:在main()函数中输入这些学生的这些数据,然后设计一个函数count()来计算每个学生的总分和平均分,最后,打印出所有数据信息(包含本来输入的学生原始数据信息和求解出来的新信息)。(2) 对第(1)题实验,求出其中成绩最佳的人和成绩最差的人,并显示出来。(假定成绩最佳和最差的人都只有一个)(3)* 假如假定成绩最佳和最差的人的个数不一定唯一,程序应当如何修改才干完毕求

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_

4、node()插入员工1006和1032的数据信息。规定新插入的员工后,员工仍然按职工号顺序排列。(3) 在(2)的基础上,新增一个函数delete_node(),可以用来将指定员工的数据从链表中删除。(4) 在(3)的基础上,增长回收所删除结点所占内存空间的功能。(5)* 如何查看和测试链表中结点的内存空间地址?能否由此分析(1)、(2)、(3)中链表结点的逻辑结构?三、实验准备:(1) 复习有关结构体方面的所有知识,特别是10-3-4节所学的动态存储分派技术;(2) 编写所选实验题目的程序代码和流程图;(3) 检查源程序并给出其也许的运营结果说明。四、实验环节:(1) 上机验证所选题目的程序

5、设计结果,并做相应测试和分析;(2) 进行实验分析;(3) 总结结构体程序设计和实现的基本方法及其经验,特别是链表技术;(4) 编写实验报告。五、实验结果分析与评价 (1) 根据测试目的写出测试报告;(2) 测试结果分析说明;(3) 测试程序代码清单。1. 一方面熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分派原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量的输入、输出方法。(参见教材例10-110-5)答:(1)结构体声明方法:(先定义结构体类型,再声明结构体变量)struct 结构体数据类型名 类型标记符 成员变量名;类型标记符 成员变量名; . . . .

6、 . . 变量名表列; (2) 结构体类型变量的内存分派原则:其存储空间大小随着成员变量所占存储空间大小而变化。其存储空间是连续分派的一段存储区域,大小为成员变量所占存储空间之总和。(3)初始化:初始化列表中值的个数少于结构体成员变量个数时,余下的成员变量自动初始化为0 或NULL。反之,将出现编译型错误:(4)引用结构体变量:既可以访问结构体中的成员变量,也可以将结构体变量作整体引用。(5)结构体变量的输入、输出方法:运用scanf()和printf()函数完毕运用gets()和puts()函数完毕例题分析:例10-1 测试结构体数据类型student所占的存储空间长度程序如下:#inclu

7、de struct student /*定义一个结构体*/ int nStno; char cName20; char cSex; int nAge; float fScore; char cAddr30;struStud;int main(void) /*主函数,重要测试各个结构体的内存大小*/ int nSizeStud; printf(size of struStud are %d and %d.n,sizeof(struct student),sizeof(struStud); nSizeStud=sizeof(struStud.nStno)+sizeof(struStud.cName

8、)+sizeof(struStud.cSex); nSizeStud+=sizeof(struStud.nAge)+sizeof(struStud.fScore)+sizeof(struStud.cAddr); printf(total size is %dn,nSizeStud); return 0;运营结果如下:结果分析:此例题重要是要我们掌握,结构体的所占的空间长度是怎么样的。Int 占两个字节,char占一个字节,数组占30个,一共就有59个字节。空间长度就是59.结构体存储空间以所有成员变量所需存储空间大小为分派依据。sizeof()内可以是结构体数据类型标记符,也可以是结构体变量。

9、结果和计算各成员变量内存空间大小之和一致。注意: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(enter nStno,nAge,fScore:);

10、scanf(%d%d%f,&(struStud.nStno),&struStud.nAge,&struStud.fScore);printf(nStno=%d,nAge=%d,fScore=%1fn,struStud.nStno,struStud.nAge,struStud.fScore); return 0;运营结果:Enter nStNo.nAge,fscore:1,20,95.5nStNo = 1,nAge = 20,fScore = 95.5结果分析:对结构体成员变量的访问用圆点操作符“”,它被称为成员操作符,圆点运算优先级最高且是自左向右的结合,其具体格式如下:结构体变量名.成员变量

11、名,它表达要访问结构体变量下的成员变量名域;由于取地址操作符优先级低于圆点操作符,对成员变量地址的引用可以不加括号。然后还要注旨在结构体定义完毕后要记住加分号。2.基于结构体数组的应用实验。(1) 有n个学生,每个学生的数据涉及学号(num)、姓名(name20)、性别(sex)、年龄(age),以及三门课程的成绩(score3)。规定:在main()函数中输入这些学生的这些数据,然后设计一个函数count()来计算每个学生的总分和平均分,最后,打印出所有数据信息(包含本来输入的学生原始数据信息和求解出来的新信息)。程序如下:#include#include#define STUD_NUM 2

12、 /*宏定义*/struct stud_info /*定义一个结构体*/ int num; char name20; char sex; int age; int score3; ;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(struc

13、t stud_info *studPtr,const int no)/*分别定义*/ int j,h; char cTemp10; printf(The no %ds info is:n,no); printf(num=);gets(cTemp);studPtr-num=atoi(cTemp); for(h=0;hnameh=0; printf(name=);gets(studPtr-name); printf(sex=);studPtr-sex=getchar();getchar(); printf(age=); scanf(%d,&(studPtr-age); getchar(); pri

14、ntf(n score=); for(j=0;jscorej); getchar();void stud_input(struct stud_info *stud_arr,const int num) int i; struct stud_info *studPtr=stud_arr; printf(Please input studentsinfo.n); printf(num name sex age score)n); for(i=0;inum;studPtr+,i+) stud_gets(studPtr,i+1); return;void stud_output(const struc

15、t stud_info *stud_arr,const int num) int i; struct stud_info *studPtr; studPtr=stud_arr; printf(Information of the students are:n); printf(nnum name sex age score:n); for(i=0;inum,studPtr-name,studPtr-sex,studPtr-age, studPtr-score0,studPtr-score1,studPtr-score2); return; void count(const struct stu

16、d_info *stud_arr,const int num) int i,snum,ave,max; char *pt; struct stud_info *studPtr=stud_arr; for(i=0;iscore0+studPtr-score1+studPtr-score2; ave=snum/3; if(i=0)max=snum;pt=studPtr-name; else if(maxname; printf(nnthe %ds score is %dn ave is %d,num,snum,ave); printf(nnnthe best is ); for(i=0;i20;i

17、+) if(pti!=0) printf(%c,pti); return;int main(void) struct stud_info studArrSTUD_NUM; clrscr(); stud_input(studArr,STUD_NUM); stud_output(studArr,STUD_NUM); count(studArr,STUD_NUM); return 0;运营结果如下:分析:程序提成六个模块,分别是结构体,struct stud_info,void stud_gets ,void stud_input,void stud_output,void count,main(v

18、oid)这六个模块,程序一方面声明了一个宏体(学生个数),然后进行了结构体的定义(学生信息结构),然后是构造获得学生信息的程序(输入三个学生信息),然后是输出程序(输出三个学生的信息),最后是主控制模块。此程序规定很高。一方面是要熟悉结构的的基本结构另一方面要有清楚的思绪,用模块的思想来完毕题目。你还考了一维结构体数组名或指针引用,一维数组元素的地址引用,尚有一维结构体数组的成员变量的地址引用。实验心得:1、 对结构体数据类型,要注意以下问题:(1)成员变量名必须唯一(2)除声明初始化外,不能对结构体变量作整体输入输出和常量整体赋值(3)结构体数据类型可以嵌套定义(4)成员变量有独立的存储空间

19、2、对共用体数据类型,要注意以下问题:(1)存储空间以存储空间最大的成员变量为准(2)任何时刻只有一个成员变量有效(3)共用体及其成员变量共享同一段存储空间,其地址相同但意义不同。3、枚举类型要注意如下问题:(1)其本质是用符号名代表整数值。一个符号名相应一个整数或反之(2)枚举符号常量名不能直接输入输出,只能用专门的程序段完毕(3)枚举常量相应的整数值拟定后,其后面的符号常量相应的整数值将顺次加14、对数据类型取新名要注意以下问题:(1)熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分派原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量的输入、输出方法。(2)共用体结构类型也要先定义在声明再引用注: 实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!