版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、综合实训综合实训实训目标掌握面向过程的编程思想以及程序设计过程;掌握实训报告的编写。实训准备实训准备10.1 程序设计步骤 进行程序设计时一般遵循以下步骤:需求分析 在这个环节,根据用户的具体要求进行以下工作:用户需求分析。数据及处理分析。可行性分析。运行环境分析。 对初学者而言,关键处理好需求分析和数据及处理分析这两个方面的工作。系统设计 分为总体设计和详细设计。u系统实现u 选择适当的程序设计语言,把详细设计的结果描述出来,即形成源程序,并上机运行调试源程序,修改发现的错误,直到得出正确的结果。u建立文档资料u 整理分析程序结果,建立相应的文档资料,以便日后对程序进行维护或修改。10.2
2、程序设计应用实例 开发一个学生成绩管理系统,用于对班级的学生成绩进行处理。班级有N个学生,每个学生的信息包括学号、姓名、性别和3门课成绩。系统功能要求为:录入学生数据;查询学生数据;更新学生数据;统计学生数据;保存学生数据。系统分析系统设计总体设计详细设计主控程序设计成绩输入模块 输入模块主要完成将数据输入到单链表中的工作。在成绩管理系统中,可以从键盘逐个输入学生记录,也可以从以二进制形式存储的数据中读入。学生记录由学生的基本信息和成绩信息构成。成绩查询模块 查询模块按学号或者姓名查找满足条件的学生记录。用户可以按照学生的学号或者姓名进行查找,若找到相应记录则返回指向该学生记录的指针;否则,返
3、回一个NULL的空指针,并打印“没找到该学生的提示信息。成绩更新模块 此模块完成对学生记录的管理维护,主要是对学生记录的修改、删除、排序操作。修改记录模块删除记录模块排序模块统计模块数据结构设计学生成绩信息结构struct studentchar num10; /学号char name20; /姓名char sex4; /性别int cgrade; /C语言成绩int mgrade; /数学成绩int egrade; /英语成绩int total; /总分int ave; /平均分char neartime10; /最近更新时间 ;结构体student将用于存储学生基本信息,作为单链表的数据域
4、。单链表node结构typedef struct node struct student data; struct node *next;Node,*Link;u系统实现u printstart()u 函数原型:void printstart()u printstart()函数用于在以表格形式显示学生记录时,打印出表头信息。u printc()u 函数原型:void printc()u printc()函数用于显示以表格形式打印学生记录时,打印输出单链表学生信息。u Locate()u 函数原型:Node*Locate(Link l,char findmess,char nameornum)u
5、 Locate函数用于定位链表中符合要求的结点,并返回该指针。l Add()l 函数原型:void Add(Link l)l Add函数用于在单链表l中增加学生记录结点。l Qur()l 函数原型:void Qur(Link l)l Qur()函数用于在单链表l中按学号或者姓名查找满足条件的学生,并显示出来。l Del()l 函数原型:void Del(Link l)l Del()函数用于先在单链表l中找到满足条件的学生记录结点,然后删除该结点。l Modify()l 函数原型:void Modify(Link l)l Modify()函数用于在单链表l中修改学生记录。l Count()l 函
6、数原型:void Count(Link l)l Count()函数用于统计单链表l中所有的学生成绩总分、平均最高分及各单科成绩最高的学生。l Sort()l 函数原型:void Sort(Link l)l Sort()函数用于单链表l中完成利用插入排序算法实现单链表的总分字段的降序排序。l Save()l 函数原型:void Save(Link l)l Save()函数用于将单链表l中的数据写入磁盘中的数据文件。l Disp()l 函数原型:void Disp(Link l)l Disp()用于显示资料。l printe()l 函数原型:void printe(Node *p)l printe
7、() 用于输出学生信息。l Nofind()l 函数原型:void Nofind()l Nofind() 用于提示没有找到记录。l Wrong()l 函数原型:void Wrong()l Wrong() 用于提示输入错误。l main()l 整个成绩管理系统控制部分。 拓展提升拓展提升10.3 链表应用u链表是C语言提供的可动态进行存储分配的数据结构。u它与数组不同:数组只能定义固定长度,一旦定义就不能在运行时再改变数组的维数和大小。而如果需要在程序运行期间动态改变大小,则定义结构体数组不能满足要求;而链表却可以根据需要开辟内存,从而达到该目的。u链表由若干节点构成,简单链表(又称为单向链表)
8、如图l0-8所示。head 2000 1860 2046 1108 2000A1860B2046C1026 NNULL图10-8 单向链表的结构示意图u ma1loc函数u函数原型:u void * malloc(unsigned int size)u函数功能:u 在内存的动态存储区域中分配sizeB的连续空间。如果申请成功,函数将返回所分配空间的起始地址,否则函数返回空指针(NULL)。u函数说明:u 由于该函数定义为void类型,一般在使用时用强制类型转换将其转换为所需类型。u 如,有以下定义:u struct examu char name20;u float score3;u *p;
9、u 可以使用malloc函数申请一段内存用以存放一个上述结构体类型的数据,并使p指向该变量的起始地址:u p=( struct exam *)malloc(sizeof(struct exam);u sizeof(struct exam)用来计算定义的结构体类型总共占据的字节数。使用函数malloc(sizeof(struct exam)来申请分配struct exam结构体类型长度的一段连续空间,然后将其强制转换为struct exam类型的指针,并将它赋给同类型的指针变量p。u calloc函数u函数原型:u void * calloc(unsigned int n, unsigned i
10、nt size)u函数功能:u 在内存的动态存储区域中分配n个长度为sizeB的连续空间。如果申请成功,函数将返回所分配空间的起始地址,否则函数返回空指针(NULL)。u函数说明:u 该函数一般用来为一维数组分配内存空间。在使用时通常也使用强制类型转换将其转换为所需类型。u 如:对于上例中定义的结构体类型,可声明一个同类型的指针变量,并使其指向用calloc函数申请的长度为12的一维数组的内存空间的起始地址,写法如下:u struct exam *b;u b=( struct exam *)calloc(12,sizeof(struct exam);u u free函数u函数原型:u void
11、 free(void * p)u函数功能:u 释放指针变量p所指向的内存区域,此函数无返回值。u 如:要释放上例中指针变量b指向的内存区域,可写成:u free(b); 10.4.1 单向动态链表的建立u创建链表的过程就是逐个开辟空间创建节点,而后输入节点数据并建立节点之间的链接关系的过程。u使用有关动态链表操作的函数可以创建一个动态链表。10.4 单向动态链表做中学做中学10-1 10-1 建立一个包含有若干个考生信息的单向动态链表。建立一个包含有若干个考生信息的单向动态链表。 单向动态链表的建立生成新节点,使p1、p2指向该节点读入p2所指向的节点的数据head=NULL,n=0n=1?n
12、=n+1真 假head=p2p1-next=p2p1=p2 (p1移到表的尾节点上)再生成一个新节点,并使p2指向该节点读入p2所指向的节点的数据p1-next=NULL当读入的数据p2-number不为010.4.2 单向动态链表的输出u 设一个指针指向单向链表的第一个节点(head),并输出该节点的数据。u 将指针后移到下一个节点,然后输出该节点的数据。u 反复执行步骤2,直至输出到尾节点。做中学做中学10-2 10-2 输出上例中建立的链表,可以设计一个函数输出上例中建立的链表,可以设计一个函数 outchain outchain实现该功能,其算法如下图所示。实现该功能,其算法如下图所示
13、。10.4.3 单向动态链表中的节点插入u插入步骤u 在一个单向动态链表中插入节点,首先要找到插入的位置。 u 如果要插入的位置在表头,那么就将待插入的节点连接在第一个节点的前面,并使头指针(head)指向刚插入的节点;u 如果要插入的位置在表尾,那么就设置表尾节点的指针域,使其指向待插入的节点,并将刚插入的节点的指针域置空;u 如果要插入的位置在中间某个位置,那么就需要断开该位置两个节点之间的连接,并将待插入的节点连接到两个节点中间。做中学做中学10-3 10-3 将一个考生的节点按照考号从小到大的顺序插入到将一个考生的节点按照考号从小到大的顺序插入到一个空链表一个空链表head=NULLhead=NULL中。中。设计实现的算法如右图设计实现的算法如右图10.4.4 单向动态链表中的节点删除u删除步骤u 在一个单向链表中删除一个节点,也需要首先找到待删除的节点。u 如果待删除的节点在表头,那么使头指针指向第二个节点; u 如果待删除的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 台州市立医院招聘卫技人员考试真题2025
- 襄阳市襄城区专项教师招聘笔试真题及答案
- 2025年湖南理工大学招聘考试试卷真题
- 2026年小学六年级语文第二学期期末考试卷及答案(六)
- 2026年防范非法集资知识竞赛试卷及答案(共十五套)
- 度洛西汀文拉法辛在疼痛伴抑郁共病治疗中的应用
- 2026年餐饮服务合同签订指南二篇
- 幼儿园学生保险自查自纠报告
- 舒适性需求提升带动三腔空气悬架应用增长
- 译林版英语四年级下册Unit 7 素养练习
- 大货车驾驶员培训
- 新质生产力解读课件
- 2023年陕西西安市轨道交通集团有限公司招聘笔试参考题库含答案解析
- 功能色母粒企业标准
- 高中记叙文写作指导名师优质课获奖市赛课一等奖课件
- 药食同源健康养生演示文稿
- 弯沉试验概述
- 大学四级英语试卷
- CA1340自动车床杠杆机械制造课程设计
- 2018杭州西湖区小升初新生素质测试卷-英语
- GB/T 12467.4-1998焊接质量要求金属材料的熔化焊第4部分:基本质量要求
评论
0/150
提交评论