




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、综合实训综合实训实训目标掌握面向过程的编程思想以及程序设计过程;掌握实训报告的编写。实训准备实训准备10.1 程序设计步骤 进行程序设计时一般遵循以下步骤:u需求分析 在这个环节,根据用户的具体要求进行以下工作:v 用户需求分析。v 数据及处理分析。v 可行性分析。v 运行环境分析。 对初学者而言,关键处理好需求分析和数据及处理分析这两个方面的工作。u系统设计 分为总体设计和详细设计。u系统实现 选择适当的程序设计语言,把详细设计的结果描述出来,即形成源程序,并上机运行调试源程序,修改发现的错误,直到得出正确的结果。u建立文档资料 整理分析程序结果,建立相应的文档资料,以便日后对程序进行维护或
2、修改。10.2 程序设计应用实例 开发一个学生成绩管理系统,用于对班级的学生成绩进行处理。班级有n个学生,每个学生的信息包括学号、姓名、性别和3门课成绩。系统功能要求为:l 录入学生数据;l 查询学生数据;l 更新学生数据;l 统计学生数据;l 保存学生数据。u系统分析u系统设计v 总体设计v 详细设计l 主控程序设计l 成绩输入模块 输入模块主要完成将数据输入到单链表中的工作。在成绩管理系统中,可以从键盘逐个输入学生记录,也可以从以二进制形式存储的数据中读入。学生记录由学生的基本信息和成绩信息构成。l 成绩查询模块 查询模块按学号或者姓名查找满足条件的学生记录。用户可以按照学生的学号或者姓名
3、进行查找,若找到相应记录则返回指向该学生记录的指针;否则,返回一个null的空指针,并打印“没找到该学生”的提示信息。l 成绩更新模块 此模块完成对学生记录的管理维护,主要是对学生记录的修改、删除、排序操作。 修改记录模块 删除记录模块 排序模块 统计模块 数据结构设计学生成绩信息结构struct studentchar num10; /学号char name20; /姓名char sex4; /性别int cgrade; /c语言成绩int mgrade; /数学成绩int egrade; /英语成绩int total; /总分int ave; /平均分char neartime10; /最
4、近更新时间 ;结构体student将用于存储学生基本信息,作为单链表的数据域。单链表node结构typedef struct node struct student data; struct node *next;node,*link;u系统实现l printstart() 函数原型:void printstart() printstart()函数用于在以表格形式显示学生记录时,打印出表头信息。l printc() 函数原型:void printc() printc()函数用于显示以表格形式打印学生记录时,打印输出单链表学生信息。l locate() 函数原型:node*locate(link
5、 l,char findmess,char nameornum) locate函数用于定位链表中符合要求的结点,并返回该指针。l add()函数原型:void add(link l)add函数用于在单链表l中增加学生记录结点。l qur()函数原型:void qur(link l)qur()函数用于在单链表l中按学号或者姓名查找满足条件的学生,并显示出来。l del()函数原型:void del(link l)del()函数用于先在单链表l中找到满足条件的学生记录结点,然后删除该结点。l modify()函数原型:void modify(link l)modify()函数用于在单链表l中修改学
6、生记录。l count()函数原型:void count(link l)count()函数用于统计单链表l中所有的学生成绩总分、平均最高分及各单科成绩最高的学生。l sort()函数原型:void sort(link l)sort()函数用于单链表l中完成利用插入排序算法实现单链表的总分字段的降序排序。l save()函数原型:void save(link l)save()函数用于将单链表l中的数据写入磁盘中的数据文件。l disp()函数原型:void disp(link l)disp()用于显示资料。l printe()函数原型:void printe(node *p)printe() 用
7、于输出学生信息。l nofind()函数原型:void nofind()nofind() 用于提示没有找到记录。l wrong()函数原型:void wrong()wrong() 用于提示输入错误。l main()整个成绩管理系统控制部分。 拓展提升拓展提升10.3 链表应用u链表是c语言提供的可动态进行存储分配的数据结构。u它与数组不同:数组只能定义固定长度,一旦定义就不能在运行时再改变数组的维数和大小。而如果需要在程序运行期间动态改变大小,则定义结构体数组不能满足要求;而链表却可以根据需要开辟内存,从而达到该目的。u链表由若干节点构成,简单链表(又称为单向链表)如图l0-8所示。head2
8、000图10-8 单向链表的结构示意图 2000a 1860 1860b 2046 2046c 1026 1108n nullu ma1loc函数v 函数原型: void * malloc(unsigned int size)v 函数功能: 在内存的动态存储区域中分配sizeb的连续空间。如果申请成功,函数将返回所分配空间的起始地址,否则函数返回空指针(null)。v 函数说明: 由于该函数定义为void类型,一般在使用时用强制类型转换将其转换为所需类型。u 如,有以下定义: struct exam char name20; float score3; *p; 可以使用malloc函数申请一段
9、内存用以存放一个上述结构体类型的数据,并使p指向该变量的起始地址: p=( struct exam *)malloc(sizeof(struct exam); sizeof(struct exam)用来计算定义的结构体类型总共占据的字节数。使用函数malloc(sizeof(struct exam)来申请分配struct exam结构体类型长度的一段连续空间,然后将其强制转换为struct exam类型的指针,并将它赋给同类型的指针变量p。u calloc函数v 函数原型: void * calloc(unsigned int n, unsigned int size)v 函数功能: 在内存的
10、动态存储区域中分配n个长度为sizeb的连续空间。如果申请成功,函数将返回所分配空间的起始地址,否则函数返回空指针(null)。v 函数说明: 该函数一般用来为一维数组分配内存空间。在使用时通常也使用强制类型转换将其转换为所需类型。u 如:对于上例中定义的结构体类型,可声明一个同类型的指针变量,并使其指向用calloc函数申请的长度为12的一维数组的内存空间的起始地址,写法如下:struct exam *b;b=( struct exam *)calloc(12,sizeof(struct exam); u free函数v 函数原型: void free(void * p)v 函数功能: 释放
11、指针变量p所指向的内存区域,此函数无返回值。u 如:要释放上例中指针变量b指向的内存区域,可写成: free(b); 10.4.1 单向动态链表的建立u创建链表的过程就是逐个开辟空间创建节点,而后输入节点数据并建立节点之间的链接关系的过程。u使用有关动态链表操作的函数可以创建一个动态链表。10.4 单向动态链表做中学做中学10-1 10-1 建立一个包含有若干个考生信息的单向动态链表。建立一个包含有若干个考生信息的单向动态链表。 单向动态链表的建立生成新节点,使p1、p2指向该节点读入p2所指向的节点的数据head=null,n=0n=1?n=n+1真 假head=p2p1-next=p2p1
12、=p2 (p1移到表的尾节点上)再生成一个新节点,并使p2指向该节点读入p2所指向的节点的数据p1-next=null当读入的数据p2-number不为010.4.2 单向动态链表的输出u 设一个指针指向单向链表的第一个节点(head),并输出该节点的数据。u 将指针后移到下一个节点,然后输出该节点的数据。u 反复执行步骤2,直至输出到尾节点。做中学做中学10-2 10-2 输出上例中建立的链表,可以设计一个函数输出上例中建立的链表,可以设计一个函数 outchainoutchain实现该功能,其算法如下图所示。实现该功能,其算法如下图所示。10.4.3 单向动态链表中的节点插入u插入步骤 在
13、一个单向动态链表中插入节点,首先要找到插入的位置。 如果要插入的位置在表头,那么就将待插入的节点连接在第一个节点的前面,并使头指针(head)指向刚插入的节点; 如果要插入的位置在表尾,那么就设置表尾节点的指针域,使其指向待插入的节点,并将刚插入的节点的指针域置空; 如果要插入的位置在中间某个位置,那么就需要断开该位置两个节点之间的连接,并将待插入的节点连接到两个节点中间。做中学做中学10-3 10-3 将一个考生的节点按照考号从小到大的顺序插入到将一个考生的节点按照考号从小到大的顺序插入到一个空链表(一个空链表(head=nullhead=null)中。)中。设计实现的算法如右图设计实现的算法如右图10.4.4 单向动态链表中的节点删除u删除步骤 在一个单向链表中删除一个节点,也需要首先找到待删除的节点。 如果待删除的节点在表头,那么使头指针指向第二个节点; 如果待删除的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版食品销售合同签订与食品安全监管流程图
- 2025年铁路车辆运输合同标准模板
- 2025版三亚地下综合管廊非开挖顶管监理合同
- 诺如病毒知识培训的意义
- 2025年度房贷合同样本及注意事项
- 2025年度电子商务合作保密协议范本(含数据安全)
- 说课稿课件制作要点
- 语音机器人知识培训课程课件
- 2025深圳市商品房预售合同范本
- 语言活动防疫知识培训课件
- 2025年机关事务管理局招聘考试大纲
- 主城区积水易涝点排水防涝管网更新改造工程可行性分析报告(参考模板)
- 早期现代舞课件
- 碳固持效应研究-洞察及研究
- 口腔医保政策解读
- 2024浙江艺术职业学院单招《数学》模拟题库附答案详解(精练)
- 油菜病虫害防治课件
- 小学一年级体育上册教案表格式
- 基于主题语境的高中英语以读促写教学设计研究
- 2025年海南省高考物理试卷(含答案解析)
- GB/T 45817-2025消费品质量分级陶瓷砖
评论
0/150
提交评论